Index: src/sas/plottools/PlotPanel.py
===================================================================
--- src/sas/plottools/PlotPanel.py	(revision 7e0f9b55273843a20a74196a1fed0b9a76b3f411)
+++ src/sas/plottools/PlotPanel.py	(revision 1170492a6ae9898b8c1ee6716645dfea0394f8a5)
@@ -3,4 +3,5 @@
 """
 import logging
+import traceback
 import wx
 # Try a normal import first
@@ -862,5 +863,5 @@
         Implement save image
         """
-        self.toolbar.save(evt)
+        self.toolbar.save_figure(evt)
 
     def onContextMenu(self, event):
@@ -1986,18 +1987,39 @@
     def onPrinterPreview(self, event=None):
         """
+        Matplotlib camvas can no longer print itself.  Thus need to do
+        everything ourselves: need to create a printpreview frame to to
+        see the preview but needs a parent frame object.  Also needs a
+        printout object (just as any printing task).
         """
         try:
-            self.canvas.Printer_Preview(event=event)
-            self.Update()
+            #check if parent is a frame.  If not keep getting the higher
+            #parent till we find a frame
+            _plot = self
+            while not isinstance(_plot, wx.Frame):
+                _plot = _plot.GetParent()
+                assert _plot is not None
+
+            #now create the printpeview object
+            _preview = wx.PrintPreview(PlotPrintout(self,'test'),
+                                       PlotPrintout(self,'test'))
+            #and tie it to a printpreview frame then show it
+            _frame = wx.PreviewFrame(_preview, _plot, "Print Preview", wx.Point(100, 100), wx.Size(600, 650))
+            _frame.Centre(wx.BOTH)
+            _frame.Initialize()
+            _frame.Show(True)
         except:
+            traceback.print_exc()
             pass
 
     def onPrint(self, event=None):
         """
+        Matplotlib canvas can no longer print itself so using wx.Printer.  
+        Need therefore to also define a Printout object.
         """
         try:
-            self.canvas.Printer_Print(event=event)
-            self.Update()
+            _printer = wx.Printer()
+            _printer.Print(self.canvas, PlotPrintout(self,'test'), True)
         except:
+            traceback.print_exc()
             pass
 
@@ -2037,2 +2059,36 @@
             self._drawn += 1
         self.gui_repaint(drawDC=wx.PaintDC(self))
+
+class PlotPrintout(wx.Printout):
+    """
+    Create the wx.Printout object for matplotlib figure from the PlotPanel.
+    Provides the required OnPrintPage and HasPage overrides.  Other methods
+    may be added/overriden in the future.
+    :TODO: this needs LOTS of TLC .. but fixes immediate problem
+    """
+    def __init__(self, figure, title, size=None, dpi=None, **kwargs):
+        """
+        Initialize wx.Printout and get passed figure object
+        """
+        wx.Printout.__init__(self)
+        self.figure = figure
+
+    def OnPrintPage(self, page):
+        """
+        Most rudimentry OnPrintPage overide.  instatiates a dc object, gets
+        its size, gets the size of the figure object, scales it to the dc
+        canvas size keeping the aspect ratio intact, then prints as bitmap
+        """
+        _dc = self.GetDC()
+        (_dcX, _dcY) = _dc.GetSizeTuple()
+        (_bmpX,_bmpY) = self.figure.canvas.GetSize()
+        _scale = min(_dcX/_bmpX, _dcY/_bmpY)
+        _dc.SetUserScale(_scale, _scale)
+        _dc.DrawBitmap(self.figure.canvas.bitmap, 0, 0, False,)
+        return True
+
+    def GetPageInfo(self):
+        """
+        just sets the page to 1 - no flexibility for now
+        """
+        return (1, 1, 1, 1)
Index: src/sas/plottools/toolbar.py
===================================================================
--- src/sas/plottools/toolbar.py	(revision 3477478de6317fb51d4dd0dbaf9ab2a1236faf28)
+++ src/sas/plottools/toolbar.py	(revision 1170492a6ae9898b8c1ee6716645dfea0394f8a5)
@@ -112,5 +112,5 @@
         """
         try:
-            self.canvas.Printer_Preview(event=event)
+            self._parent.onPrint(event=event)
         except:
             logging.error("Plot toolbar could not print")
