diff --git a/IPython/core/display.py b/IPython/core/display.py
index e919ada..f1f9ed6 100644
--- a/IPython/core/display.py
+++ b/IPython/core/display.py
@@ -24,7 +24,6 @@ import struct
 
 from IPython.utils.py3compat import (string_types, cast_bytes_py2, cast_unicode,
                                      unicode_type)
-from IPython.html.widgets import Widget
 
 from .displaypub import publish_display_data
 
@@ -111,15 +110,16 @@ def display(*objs, **kwargs):
 
     from IPython.core.interactiveshell import InteractiveShell
 
-    if isinstance(obj, Widget):
-        obj._repr_widget_(**kwargs)
-    else:
-        if raw:
-            for obj in objs:
-                publish_display_data('display', obj, metadata)
+    if not raw:
+        format = InteractiveShell.instance().display_formatter.format
+
+    for obj in objs:
+        if hasattr(obj, '_repr_widget_'):
+            obj._repr_widget_(**kwargs)
         else:
-            format = InteractiveShell.instance().display_formatter.format
-            for obj in objs:
+            if raw:
+                publish_display_data('display', obj, metadata)
+            else:            
                 format_dict, md_dict = format(obj, include=include, exclude=exclude)
                 if metadata:
                     # kwarg-specified metadata gets precedence
diff --git a/IPython/core/displayhook.py b/IPython/core/displayhook.py
index 0ecfb3b..f228ffe 100644
--- a/IPython/core/displayhook.py
+++ b/IPython/core/displayhook.py
@@ -241,13 +241,16 @@ class DisplayHook(Configurable):
         """
         self.check_for_underscore()
         if result is not None and not self.quiet():
-            self.start_displayhook()
-            self.write_output_prompt()
-            format_dict, md_dict = self.compute_format_data(result)
-            self.write_format_data(format_dict, md_dict)
-            self.update_user_ns(result)
-            self.log_output(format_dict)
-            self.finish_displayhook()
+            if hasattr(result, '_repr_widget_'):
+                result._repr_widget_()
+            else:
+                self.start_displayhook()
+                self.write_output_prompt()
+                format_dict, md_dict = self.compute_format_data(result)
+                self.write_format_data(format_dict, md_dict)
+                self.update_user_ns(result)
+                self.log_output(format_dict)
+                self.finish_displayhook()
 
     def flush(self):
         if not self.do_full_cache: