diff --git a/IPython/frontend/html/notebook/static/js/notebook_main.js b/IPython/frontend/html/notebook/static/js/notebook_main.js
index 760458c..d4e6ea6 100644
--- a/IPython/frontend/html/notebook/static/js/notebook_main.js
+++ b/IPython/frontend/html/notebook/static/js/notebook_main.js
@@ -32,6 +32,7 @@ $(document).ready(function () {
     IPython.pager = new IPython.Pager('div#pager', 'div#pager_splitter');
     IPython.left_panel = new IPython.LeftPanel('div#left_panel', 'div#left_panel_splitter');
     IPython.save_widget = new IPython.SaveWidget('span#save_widget');
+    IPython.print_widget = new IPython.PrintWidget('span#print_widget');
     IPython.notebook = new IPython.Notebook('div#notebook');
     IPython.kernel_status_widget = new IPython.KernelStatusWidget('#kernel_status');
     IPython.kernel_status_widget.status_idle();
diff --git a/IPython/frontend/html/notebook/static/js/printwidget.js b/IPython/frontend/html/notebook/static/js/printwidget.js
new file mode 100644
index 0000000..d9d2baf
--- /dev/null
+++ b/IPython/frontend/html/notebook/static/js/printwidget.js
@@ -0,0 +1,54 @@
+var IPython = (function (IPython) {
+
+    var PrintWidget = function (selector) {
+        this.selector = selector;
+        if (this.selector !== undefined) {
+            this.element = $(selector);
+            this.style();
+            this.bind_events();
+        }
+    };
+
+    PrintWidget.prototype.style = function () {
+        this.element.find('button#print_notebook').button();
+    };
+
+    PrintWidget.prototype.bind_events = function () {
+        var that = this;
+        this.element.find('button#print_notebook').click(function () {
+            that.print_notebook();
+        });
+    };
+
+    PrintWidget.prototype.enable = function () {
+        this.element.find('button#print_notebook').button('enable');
+    };
+
+    PrintWidget.prototype.disable = function () {
+        this.element.find('button#print_notebook').button('disable');
+    };
+
+    PrintWidget.prototype.print_notebook = function () {
+        var w = window.open('', '_blank', 'scrollbars=1,menubar=1');
+        var html = '<html><head>' +
+                   $('head').clone().html() +
+                   '<style type="text/css">' +
+                   '@media print { body { overflow: visible !important; } }' +
+                   '.ui-widget-content { border: 0px; }' +
+                   '</style>' +
+                   '</head><body style="overflow: auto;">' +
+                   $('#notebook').clone().html() +
+                   '</body></html>';
+
+        w.document.open();
+        w.document.write(html);
+        w.document.close();
+
+        return false;
+    };
+
+    IPython.PrintWidget = PrintWidget;
+    
+    return IPython;
+
+}(IPython));
\ No newline at end of file
diff --git a/IPython/frontend/html/notebook/static/js/savewidget.js b/IPython/frontend/html/notebook/static/js/savewidget.js
index 6650edd..7f54d87 100644
--- a/IPython/frontend/html/notebook/static/js/savewidget.js
+++ b/IPython/frontend/html/notebook/static/js/savewidget.js
@@ -90,20 +90,23 @@ var IPython = (function (IPython) {
 
 
     SaveWidget.prototype.status_save = function () {
-        this.element.find('span.ui-button-text').text('Save');
+        this.element.find('button#save_notebook').button('option', 'label', 'Save');
         this.element.find('button#save_notebook').button('enable');
-    };    
+        IPython.print_widget.enable();
+    };
 
 
     SaveWidget.prototype.status_saving = function () {
-        this.element.find('span.ui-button-text').text('Saving');
+        this.element.find('button#save_notebook').button('option', 'label', 'Saving');
         this.element.find('button#save_notebook').button('disable');
-    };    
+        IPython.print_widget.disable();
+    };
 
 
     SaveWidget.prototype.status_loading = function () {
-        this.element.find('span.ui-button-text').text('Loading');
+        this.element.find('button#save_notebook').button('option', 'label', 'Loading');
         this.element.find('button#save_notebook').button('disable');
+        IPython.print_widget.disable();
     };    
 
 
diff --git a/IPython/frontend/html/notebook/templates/notebook.html b/IPython/frontend/html/notebook/templates/notebook.html
index 0bca8ed..3c086d3 100644
--- a/IPython/frontend/html/notebook/templates/notebook.html
+++ b/IPython/frontend/html/notebook/templates/notebook.html
@@ -68,6 +68,10 @@
                         </select>
                     </span>
                     <span class="section_row_buttons">
+                        <span id="print_widget">
+                            <button id="print_notebook">Print/HTML</button>
+                        </span>
+
                         <button id="download_notebook">Export</button>
                     </span>
                 </div>
@@ -212,6 +216,7 @@
 <script src="static/js/savewidget.js" type="text/javascript" charset="utf-8"></script>
 <script src="static/js/pager.js" type="text/javascript" charset="utf-8"></script>
 <script src="static/js/panelsection.js" type="text/javascript" charset="utf-8"></script>
+<script src="static/js/printwidget.js" type="text/javascript" charset="utf-8"></script>
 <script src="static/js/leftpanel.js" type="text/javascript" charset="utf-8"></script>
 <script src="static/js/notebook.js" type="text/javascript" charset="utf-8"></script>
 <script src="static/js/notebook_main.js" type="text/javascript" charset="utf-8"></script>