Index: src/sas/sasgui/guiframe/local_perspectives/plotting/AnnulusSlicer.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/AnnulusSlicer.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/AnnulusSlicer.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -122,5 +122,5 @@
         data = self.base.data2D
         # If we have no data, just return
-        if data is None:
+        if data == None:
             return
 
@@ -132,5 +132,5 @@
         # if the user does not specify the numbers of points to plot
         # the default number will be nbins= 36
-        if nbins is None:
+        if nbins == None:
             self.nbins = 36
         else:
@@ -498,5 +498,5 @@
         # Update locations
         self.outer_circle.update()
-        # if self.is_inside is not None:
+        # if self.is_inside != None:
         out = self._post_data()
         return out
@@ -521,5 +521,5 @@
 
         # If we have no data, just return
-        if data is None:
+        if data == None:
             return
         mask = data.mask
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/Arc.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/Arc.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/Arc.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -71,7 +71,7 @@
         x = []
         y = []
-        if theta1 is not None:
+        if theta1 != None:
             self.theta1 = theta1
-        if theta2 is not None:
+        if theta2 != None:
             self.theta2 = theta2
         while self.theta2 < self.theta1:
@@ -81,5 +81,5 @@
         npts = int((self.theta2 - self.theta1) / (math.pi / 120))
 
-        if r is None:
+        if r == None:
             self.radius = math.sqrt(math.pow(self._mouse_x, 2) + \
                                      math.pow(self._mouse_y, 2))
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/BaseInteractor.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/BaseInteractor.py	(revision 959eb0181ad06828a748f04512f953aad5b31659)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/BaseInteractor.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/Edge.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/Edge.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/Edge.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -63,9 +63,9 @@
         Draw the new roughness on the graph.
         """
-        if r1 is not None:
+        if r1 != None:
             self.r1 = r1
-        if r2 is not None:
+        if r2 != None:
             self.r2 = r2
-        if theta is not None:
+        if theta != None:
             self.theta = theta
         x1 = self.r1 * math.cos(self.theta)
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/Plotter1D.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/Plotter1D.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/Plotter1D.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -14,5 +14,5 @@
 import sys
 import math
-import numpy as np
+import numpy
 import logging
 from sas.sasgui.plottools.PlotPanel import PlotPanel
@@ -24,6 +24,4 @@
 from appearanceDialog import appearanceDialog
 from graphAppearance import graphAppearance
-
-logger = logging.getLogger(__name__)
 
 DEFAULT_QMAX = 0.05
@@ -67,4 +65,5 @@
         # context menu
         self._slicerpop = None
+
         self._available_data = []
         self._symbol_labels = self.get_symbol_label()
@@ -96,7 +95,4 @@
         self.parent.SetFocus()
 
-        # If true, there are 3 qrange bars
-        self.is_corfunc = False
-
 
     def get_symbol_label(self):
@@ -183,10 +179,10 @@
         # So manually recode the size (=x_size) and compare here.
         # Massy code to work around:<
-        if self.parent._mgr is not None:
+        if self.parent._mgr != None:
             max_panel = self.parent._mgr.GetPane(self)
             if max_panel.IsMaximized():
                 self.parent._mgr.RestorePane(max_panel)
                 max_panel.Maximize()
-        if self.x_size is not None:
+        if self.x_size != None:
             if self.x_size == self.GetSize():
                 self.resizing = False
@@ -212,12 +208,10 @@
         On Qmin Qmax vertical line event
         """
-        if event is None:
+        if event == None:
             return
         event.Skip()
         active_ctrl = event.active
-        if active_ctrl is None:
+        if active_ctrl == None:
             return
-        if hasattr(event, 'is_corfunc'):
-            self.is_corfunc = event.is_corfunc
         if event.id in self.plots.keys():
             ctrl = event.ctrl
@@ -228,8 +222,5 @@
             values = [max(x_data.min(), float(ctrl[0].GetValue())),
                       min(x_data.max(), float(ctrl[1].GetValue()))]
-            if len(ctrl) == 3:
-                colors.append('purple')
-                values.append(min(x_data.max(), float(ctrl[2].GetValue())))
-            if self.ly is None:
+            if self.ly == None:
                 self.ly = []
                 for c, v in zip(colors, values):
@@ -241,8 +232,8 @@
                 xval = float(active_ctrl.GetValue())
                 position = self.get_data_xy_vals(xval)
-                if position is not None and not self.is_corfunc:
+                if position != None:
                     wx.PostEvent(self.parent, StatusEvent(status=position))
             except:
-                logger.error(sys.exc_value)
+                logging.error(sys.exc_value)
             if not event.leftdown:
                 # text event
@@ -257,5 +248,5 @@
                         self.canvas.draw()
                 except:
-                    logger.error(sys.exc_value)
+                    logging.error(sys.exc_value)
                 event.Skip()
                 return
@@ -290,5 +281,5 @@
         :Param value: float
         """
-        idx = (np.abs(array - value)).argmin()
+        idx = (numpy.abs(array - value)).argmin()
         return int(idx)  # array.flat[idx]
 
@@ -302,6 +293,4 @@
         ly0x = ly[0].get_xdata()
         ly1x = ly[1].get_xdata()
-        ly2x = None
-        if self.is_corfunc: ly2x = ly[2].get_xdata()
         self.q_ctrl[0].SetBackgroundColour('white')
         self.q_ctrl[1].SetBackgroundColour('white')
@@ -317,14 +306,4 @@
                 self.q_ctrl[0].SetValue(str(pos_x))
                 self.q_ctrl[1].SetBackgroundColour('pink')
-        elif ly2x is not None and ly1x >= ly2x:
-            if self.vl_ind == 1:
-                ly[2].set_xdata(posx)
-                ly[2].set_zorder(nop)
-                self.q_ctrl[2].SetValue(str(pos_x))
-            elif self.vl_ind == 2:
-                ly[1].set_xdata(posx)
-                ly[1].set_zorder(nop)
-                self.q_ctrl[1].SetValue(str(pos_x))
-
 
     def _get_cusor_lines(self, event):
@@ -336,5 +315,5 @@
         if hasattr(event, "action"):
             dclick = event.action == 'dclick'
-            if ax is None or dclick:
+            if ax == None or dclick:
                 # remove the vline
                 self._check_zoom_plot()
@@ -342,18 +321,13 @@
                 self.q_ctrl = None
                 return
-        if self.ly is not None and event.xdata is not None:
+        if self.ly != None and event.xdata != None:
             # Selecting a new line if cursor lines are displayed already
             dqmin = math.fabs(event.xdata - self.ly[0].get_xdata())
             dqmax = math.fabs(event.xdata - self.ly[1].get_xdata())
-            if not self.is_corfunc:
-                is_qmax = dqmin > dqmax
-                if is_qmax:
-                    self.vl_ind = 1
-                else:
-                    self.vl_ind = 0
+            is_qmax = dqmin > dqmax
+            if is_qmax:
+                self.vl_ind = 1
             else:
-                dqmax2 = math.fabs(event.xdata - self.ly[2].get_xdata())
-                closest = min(dqmin, dqmax, dqmax2)
-                self.vl_ind = { dqmin: 0, dqmax: 1, dqmax2: 2 }.get(closest)
+                self.vl_ind = 0
 
     def cusor_line(self, event):
@@ -361,8 +335,8 @@
         Move the cursor line to write Q range
         """
-        if self.q_ctrl is None:
+        if self.q_ctrl == None:
             return
         # release a q range vline
-        if self.ly is not None and not self.leftdown:
+        if self.ly != None and not self.leftdown:
             for ly in self.ly:
                 ly.set_alpha(0.7)
@@ -370,7 +344,7 @@
             return
         ax = event.inaxes
-        if ax is None or not hasattr(event, 'action'):
+        if ax == None or not hasattr(event, 'action'):
             return
-        end_drag = event.action != 'drag' and event.xdata is not None
+        end_drag = event.action != 'drag' and event.xdata != None
         nop = len(self.plots)
         pos_x, _ = float(event.xdata), float(event.ydata)
@@ -411,5 +385,5 @@
             self.q_ctrl[vl_ind].SetValue(str(pos_x))
         except:
-            logger.error(sys.exc_value)
+            logging.error(sys.exc_value)
 
     def set_resizing(self, resizing=False):
@@ -514,5 +488,5 @@
         ax = event.inaxes
         PlotPanel.onLeftDown(self, event)
-        if ax is not None:
+        if ax != None:
             try:
                 pos_x = float(event.xdata)  # / size_x
@@ -553,5 +527,4 @@
             self.subplot.set_xlim((xlo, xhi))
             self.subplot.set_ylim((ylo, yhi))
-        self.graph.selected_plottable = None
 
 
@@ -582,19 +555,19 @@
         self._slicerpop.set_graph(self.graph)
         ids = iter(self._menu_ids)
-
-        # Various plot options
-        wx_id = ids.next()
-        self._slicerpop.Append(wx_id, '&Save Image', 'Save image as PNG')
-        wx.EVT_MENU(self, wx_id, self.onSaveImage)
-        wx_id = ids.next()
-        self._slicerpop.Append(wx_id, '&Print Image', 'Print image ')
-        wx.EVT_MENU(self, wx_id, self.onPrint)
-
-        wx_id = ids.next()
-        self._slicerpop.Append(wx_id, '&Copy to Clipboard',
-                               'Copy to the clipboard')
-        wx.EVT_MENU(self, wx_id, self.OnCopyFigureMenu)
-
-        self._slicerpop.AppendSeparator()
+        if not self.graph.selected_plottable in self.plots:
+            # Various plot options
+            wx_id = ids.next()
+            self._slicerpop.Append(wx_id, '&Save Image', 'Save image as PNG')
+            wx.EVT_MENU(self, wx_id, self.onSaveImage)
+            wx_id = ids.next()
+            self._slicerpop.Append(wx_id, '&Print Image', 'Print image ')
+            wx.EVT_MENU(self, wx_id, self.onPrint)
+
+            wx_id = ids.next()
+            self._slicerpop.Append(wx_id, '&Copy to Clipboard',
+                                   'Copy to the clipboard')
+            wx.EVT_MENU(self, wx_id, self.OnCopyFigureMenu)
+
+            self._slicerpop.AppendSeparator()
 
         for plot in self.plots.values():
@@ -618,6 +591,12 @@
             # add menu of other plugins
             item_list = self.parent.get_current_context_menu(self)
-            if (item_list is not None) and (len(item_list)):
-                for item, wx_id in zip(item_list, [ids.next() for i in range(len(item_list))]):
+            if (not item_list == None) and (not len(item_list) == 0):
+                # Note: reusing menu ids in submenu.  This code works because
+                # IdItems is set up as a lazy iterator returning each id in
+                # sequence, creating new ids as needed so it never runs out.
+                # zip() is set up to stop when any iterator is empty, so it
+                # only asks for the number of ids in item_list.
+                for item, wx_id in zip(item_list, self._menu_ids):
+
                     try:
                         plot_menu.Append(wx_id, item[0], name)
@@ -630,9 +609,8 @@
 
             if self.parent.ClassName.count('wxDialog') == 0:
-                if plot.id != 'fit':
-                    wx_id = ids.next()
-                    plot_menu.Append(wx_id, '&Linear Fit', name)
-                    wx.EVT_MENU(self, wx_id, self.onFitting)
-                    plot_menu.AppendSeparator()
+                wx_id = ids.next()
+                plot_menu.Append(wx_id, '&Linear Fit', name)
+                wx.EVT_MENU(self, wx_id, self.onFitting)
+                plot_menu.AppendSeparator()
 
                 wx_id = ids.next()
@@ -668,43 +646,40 @@
             # Option to hide
             # TODO: implement functionality to hide a plottable (legend click)
-
-        self._slicerpop.AppendSeparator()
-        loc_menu = wx.Menu()
-        for label in self._loc_labels:
+        if not self.graph.selected_plottable in self.plots:
+            self._slicerpop.AppendSeparator()
+            loc_menu = wx.Menu()
+            for label in self._loc_labels:
+                wx_id = ids.next()
+                loc_menu.Append(wx_id, str(label), str(label))
+                wx.EVT_MENU(self, wx_id, self.onChangeLegendLoc)
+
             wx_id = ids.next()
-            loc_menu.Append(wx_id, str(label), str(label))
-            wx.EVT_MENU(self, wx_id, self.onChangeLegendLoc)
-
-        wx_id = ids.next()
-        self._slicerpop.Append(wx_id, '&Modify Graph Appearance',
-                               'Modify graph appearance')
-        wx.EVT_MENU(self, wx_id, self.modifyGraphAppearance)
-        self._slicerpop.AppendSeparator()
-
-
-        if self.position is not None:
+            self._slicerpop.Append(wx_id, '&Modify Graph Appearance',
+                                   'Modify graph appearance')
+            wx.EVT_MENU(self, wx_id, self.modifyGraphAppearance)
+            self._slicerpop.AppendSeparator()
+
+
+            if self.position != None:
+                wx_id = ids.next()
+                self._slicerpop.Append(wx_id, '&Add Text')
+                wx.EVT_MENU(self, wx_id, self._on_addtext)
+                wx_id = ids.next()
+                self._slicerpop.Append(wx_id, '&Remove Text')
+                wx.EVT_MENU(self, wx_id, self._on_removetext)
+                self._slicerpop.AppendSeparator()
             wx_id = ids.next()
-            self._slicerpop.Append(wx_id, '&Add Text')
-            wx.EVT_MENU(self, wx_id, self._on_addtext)
-            wx_id = ids.next()
-            self._slicerpop.Append(wx_id, '&Remove Text')
-            wx.EVT_MENU(self, wx_id, self._on_removetext)
-            self._slicerpop.AppendSeparator()
-        wx_id = ids.next()
-        self._slicerpop.Append(wx_id, '&Change Scale')
-        wx.EVT_MENU(self, wx_id, self._onProperties)
-        self._slicerpop.AppendSeparator()
-        wx_id = ids.next()
-        self._slicerpop.Append(wx_id, '&Set Graph Range')
-        wx.EVT_MENU(self, wx_id, self.onSetRange)
-        wx_id = ids.next()
-        self._slicerpop.Append(wx_id, '&Reset Graph Range')
-        wx.EVT_MENU(self, wx_id, self.onResetGraph)
-
-        if self.parent.ClassName.count('wxDialog') == 0:
+            self._slicerpop.Append(wx_id, '&Change Scale')
+            wx.EVT_MENU(self, wx_id, self._onProperties)
             self._slicerpop.AppendSeparator()
             wx_id = ids.next()
-            self._slicerpop.Append(wx_id, '&Window Title')
-            wx.EVT_MENU(self, wx_id, self.onChangeCaption)
+            self._slicerpop.Append(wx_id, '&Reset Graph Range')
+            wx.EVT_MENU(self, wx_id, self.onResetGraph)
+
+            if self.parent.ClassName.count('wxDialog') == 0:
+                self._slicerpop.AppendSeparator()
+                wx_id = ids.next()
+                self._slicerpop.Append(wx_id, '&Window Title')
+                wx.EVT_MENU(self, wx_id, self.onChangeCaption)
         try:
             pos_evt = event.GetPosition()
@@ -714,24 +689,4 @@
             pos = (pos_x, pos_y + 5)
         self.PopupMenu(self._slicerpop, pos)
-
-    def onSetRange(self, event):
-        # Display dialog
-        # self.subplot.set_xlim((low, high))
-        # self.subplot.set_ylim((low, high))
-        from sas.sasgui.plottools.RangeDialog import RangeDialog
-        d = RangeDialog(self, -1)
-        xlim = self.subplot.get_xlim()
-        ylim = self.subplot.get_ylim()
-        d.SetXRange(xlim)
-        d.SetYRange(ylim)
-        if d.ShowModal() == wx.ID_OK:
-            x_range = d.GetXRange()
-            y_range = d.GetYRange()
-            if x_range is not None and y_range is not None:
-                self.subplot.set_xlim(x_range)
-                self.subplot.set_ylim(y_range)
-                self.subplot.figure.canvas.draw_idle()
-                self.is_zoomed = True
-        d.Destroy()
 
     def onFreeze(self, event):
@@ -760,5 +715,5 @@
             default_name = default_name.split('.')[0]
         default_name += "_out"
-        if self.parent is not None:
+        if self.parent != None:
             self.parent.save_data1d(data, default_name)
 
@@ -778,5 +733,5 @@
             default_name = default_name.split('.')[0]
         # default_name += "_out"
-        if self.parent is not None:
+        if self.parent != None:
             self.parent.show_data1d(data, default_name)
 
@@ -810,5 +765,5 @@
         curr_label = self.appearance_selected_plot.label
 
-        if curr_color is None:
+        if curr_color == None:
             curr_color = self._color_labels['Blue']
             curr_symbol = 13
@@ -821,5 +776,4 @@
                                                              int(curr_symbol))), curr_label)
         self.appD.Bind(wx.EVT_CLOSE, self.on_AppDialog_close)
-        self.graph.selected_plottable = None
 
     def on_AppDialog_close(self, event):
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/Plotter2D.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/Plotter2D.py	(revision 3e5648b0f738718f823af66d5095c1cc74103d39)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/Plotter2D.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -14,5 +14,5 @@
 import sys
 import math
-import numpy as np
+import numpy
 import logging
 from sas.sasgui.plottools.PlotPanel import PlotPanel
@@ -30,6 +30,4 @@
 from graphAppearance import graphAppearance
 (InternalEvent, EVT_INTERNAL) = wx.lib.newevent.NewEvent()
-
-logger = logging.getLogger(__name__)
 
 DEFAULT_QMAX = 0.05
@@ -144,5 +142,5 @@
         """
         # Not implemented
-        if event is None:
+        if event == None:
             return
         event.Skip()
@@ -156,5 +154,5 @@
         PlotPanel.onLeftDown(self, event)
         ax = event.inaxes
-        if ax is not None:
+        if ax != None:
             # data coordinate position
             pos_x = "%8.3g" % event.xdata
@@ -227,5 +225,5 @@
         if self._is_changed_legend_label:
             data.label = self.title_label
-        if data.label is None:
+        if data.label == None:
             data.label = data.name
         if not self.title_font:
@@ -264,5 +262,5 @@
         # control axis labels from the panel itself
         yname, yunits = data.get_yaxis()
-        if self.yaxis_label is not None:
+        if self.yaxis_label != None:
             yname = self.yaxis_label
             yunits = self.yaxis_unit
@@ -271,5 +269,5 @@
             self.yaxis_unit = yunits
         xname, xunits = data.get_xaxis()
-        if self.xaxis_label is not None:
+        if self.xaxis_label != None:
             xname = self.xaxis_label
             xunits = self.xaxis_unit
@@ -295,5 +293,5 @@
 
         wx_id = ids.next()
-        slicerpop.Append(wx_id, '&Save Image', 'Save image as png')
+        slicerpop.Append(wx_id, '&Save Image')
         wx.EVT_MENU(self, wx_id, self.onSaveImage)
 
@@ -318,9 +316,11 @@
 
         slicerpop.AppendSeparator()
-        if len(self.data2D.detector) <= 1:
+        if len(self.data2D.detector) == 1:
             item_list = self.parent.get_current_context_menu(self)
-            if ((item_list is not None) and len(item_list) and
-                self.data2D.name.split(" ")[0] != 'Residuals'):
-                for item, wx_id in zip(item_list, [ids.next() for i in range(len(item_list))]):
+            if (not item_list == None) and (not len(item_list) == 0) and\
+                self.data2D.name.split(" ")[0] != 'Residuals':
+                # The line above; Not for trunk
+                # Note: reusing menu ids for the sub-menus.  See Plotter1D.
+                for item, wx_id in zip(item_list, self._menu_ids):
                     try:
                         slicerpop.Append(wx_id, item[0], item[1])
@@ -355,5 +355,5 @@
             slicerpop.Append(wx_id, '&Box Averaging in Qy')
             wx.EVT_MENU(self, wx_id, self.onBoxavgY)
-            if self.slicer is not None:
+            if self.slicer != None:
                 wx_id = ids.next()
                 slicerpop.Append(wx_id, '&Clear Slicer')
@@ -361,6 +361,5 @@
                 if self.slicer.__class__.__name__ != "BoxSum":
                     wx_id = ids.next()
-                    name = '&Edit Slicer Parameters and Batch Slicing'
-                    slicerpop.Append(wx_id, name)
+                    slicerpop.Append(wx_id, '&Edit Slicer Parameters')
                     wx.EVT_MENU(self, wx_id, self._onEditSlicer)
             slicerpop.AppendSeparator()
@@ -435,6 +434,6 @@
             except:
                 msg = "Add Text: Error. Check your property values..."
-                logger.error(msg)
-                if self.parent is not None:
+                logging.error(msg)
+                if self.parent != None:
                     wx.PostEvent(self.parent, StatusEvent(status=msg))
         dial.Destroy()
@@ -533,13 +532,13 @@
 
         """
-        # Clear current slicer
-        if self.slicer is not None:
+        ## Clear current slicer
+        if not self.slicer == None:
             self.slicer.clear()
-        # Create a new slicer
+        ## Create a new slicer
         self.slicer_z += 1
         self.slicer = slicer(self, self.subplot, zorder=self.slicer_z)
         self.subplot.set_ylim(self.data2D.ymin, self.data2D.ymax)
         self.subplot.set_xlim(self.data2D.xmin, self.data2D.xmax)
-        # Draw slicer
+        ## Draw slicer
         self.update()
         self.slicer.update()
@@ -570,8 +569,8 @@
         """
         # Find the best number of bins
-        npt = math.sqrt(len(self.data2D.data[np.isfinite(self.data2D.data)]))
+        npt = math.sqrt(len(self.data2D.data[numpy.isfinite(self.data2D.data)]))
         npt = math.floor(npt)
         from sas.sascalc.dataloader.manipulations import CircularAverage
-        # compute the maximum radius of data2D
+        ## compute the maximum radius of data2D
         self.qmax = max(math.fabs(self.data2D.xmax),
                         math.fabs(self.data2D.xmin))
@@ -579,7 +578,7 @@
                         math.fabs(self.data2D.ymin))
         self.radius = math.sqrt(math.pow(self.qmax, 2) + math.pow(self.ymax, 2))
-        # Compute beam width
+        ##Compute beam width
         bin_width = (self.qmax + self.qmax) / npt
-        # Create data1D circular average of data2D
+        ## Create data1D circular average of data2D
         Circle = CircularAverage(r_min=0, r_max=self.radius,
                                  bin_width=bin_width)
@@ -600,9 +599,9 @@
         new_plot.name = "Circ avg " + self.data2D.name
         new_plot.source = self.data2D.source
-        # new_plot.info = self.data2D.info
+        #new_plot.info = self.data2D.info
         new_plot.interactive = True
         new_plot.detector = self.data2D.detector
 
-        # If the data file does not tell us what the axes are, just assume...
+        ## If the data file does not tell us what the axes are, just assume...
         new_plot.xaxis("\\rm{Q}", "A^{-1}")
         if hasattr(self.data2D, "scale") and \
@@ -616,5 +615,6 @@
         new_plot.id = "Circ avg " + self.data2D.name
         new_plot.is_data = True
-        self.parent.update_theory(data_id=self.data2D.id, theory=new_plot)
+        self.parent.update_theory(data_id=self.data2D.id, \
+                                       theory=new_plot)
         wx.PostEvent(self.parent,
                      NewPlotEvent(plot=new_plot, title=new_plot.name))
@@ -629,6 +629,6 @@
 
         """
-        if self.slicer is not None:
-            from parameters_panel_slicer import SlicerParameterPanel
+        if self.slicer != None:
+            from SlicerParameters import SlicerParameterPanel
             dialog = SlicerParameterPanel(self, -1, "Slicer Parameters")
             dialog.set_slicer(self.slicer.__class__.__name__,
@@ -668,5 +668,5 @@
         params = self.slicer.get_params()
         ## Create a new panel to display results of summation of Data2D
-        from parameters_panel_boxsum import SlicerPanel
+        from slicerpanel import SlicerPanel
         win = MDIFrame(self.parent, None, 'None', (100, 200))
         new_panel = SlicerPanel(parent=win, id=-1,
@@ -719,5 +719,5 @@
         Clear the slicer on the plot
         """
-        if self.slicer is not None:
+        if not self.slicer == None:
             self.slicer.clear()
             self.subplot.figure.canvas.draw()
@@ -735,5 +735,5 @@
         """
         event_id = str(evt.GetId())
-        if self.parent is not None:
+        if self.parent != None:
             self._default_save_location = self.parent._default_save_location
         default_name = self.plots[self.graph.selected_plottable].label
@@ -758,10 +758,10 @@
         if default_name.count('.') > 0:
             default_name = default_name.split('.')[0]
-        if self.parent is not None:
+        #default_name += "_out"
+        if self.parent != None:
             self.parent.show_data2d(data, default_name)
 
     def modifyGraphAppearance(self, e):
-        self.graphApp = graphAppearance(self, 'Modify graph appearance',
-                                        legend=False)
+        self.graphApp = graphAppearance(self, 'Modify graph appearance', legend=False)
         self.graphApp.setDefaults(self.grid_on, self.legend_on,
                                   self.xaxis_label, self.yaxis_label,
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/SectorSlicer.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/SectorSlicer.py	(revision 8de66b66b52c8e66ba582290c53d3257a6fa6401)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/SectorSlicer.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -37,6 +37,4 @@
         ## Absolute value of the Angle between the middle line and any side line
         self.phi = math.pi / 12
-        # Binning base for log/lin binning
-        self.bin_base = 0
         ## Middle line
         self.main_line = LineInteractor(self, self.base.subplot, color='blue',
@@ -146,5 +144,5 @@
         data = self.base.data2D
         # If we have no data, just return
-        if data is None:
+        if data == None:
             return
         ## Averaging
@@ -153,10 +151,9 @@
         phimin = -self.left_line.phi + self.main_line.theta
         phimax = self.left_line.phi + self.main_line.theta
-        bin_base = self.bin_base
-        if nbins is None:
+        if nbins == None:
             nbins = 20
         sect = SectorQ(r_min=0.0, r_max=radius,
                        phi_min=phimin + math.pi,
-                       phi_max=phimax + math.pi, nbins=nbins, base=bin_base)
+                       phi_max=phimax + math.pi, nbins=nbins)
 
         sector = sect(self.base.data2D)
@@ -242,5 +239,4 @@
         params["Delta_Phi [deg]"] = math.fabs(self.left_line.phi * 180 / math.pi)
         params["nbins"] = self.nbins
-        params["binning base"] = self.bin_base
         return params
 
@@ -256,5 +252,4 @@
         phi = math.fabs(params["Delta_Phi [deg]"] * math.pi / 180)
         self.nbins = int(params["nbins"])
-        self.bin_base = params["binning base"]
         self.main_line.theta = main
         ## Reset the slicer parameters
@@ -367,7 +362,7 @@
         self.left_moving = left
         theta3 = 0
-        if phi is not None:
+        if phi != None:
             self.phi = phi
-        if delta is None:
+        if delta == None:
             delta = 0
         if  right:
@@ -379,5 +374,5 @@
             self.theta = mline.theta + self.phi
 
-        if mline is not None:
+        if mline != None:
             if delta != 0:
                 self.theta2 = mline + delta
@@ -543,5 +538,5 @@
         """
 
-        if theta is not None:
+        if theta != None:
             self.theta = theta
         x1 = self.radius * math.cos(self.theta)
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/SimplePlot.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/SimplePlot.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/SimplePlot.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -87,5 +87,5 @@
             pos = (pos_x, pos_y + 5)
         self.PopupMenu(slicerpop, pos)
-        if self.scale is not None:
+        if self.scale != None:
             self.parent.scale2d = self.scale
 
@@ -106,5 +106,5 @@
             self.leftdown = True
             ax = event.inaxes
-            if ax is not None:
+            if ax != None:
                 self.xInit, self.yInit = event.xdata, event.ydata
                 try:
@@ -123,5 +123,5 @@
         """
         self.resizing = False
-        if self.x_size is not None:
+        if self.x_size != None:
             if self.x_size == self.GetSize():
                 self.canvas.set_resizing(self.resizing)
@@ -161,7 +161,7 @@
         self.plots[plot.name] = plot
         # Axis scales
-        if plot.xtransform is not None:
+        if plot.xtransform != None:
             self.xLabel = plot.xtransform
-        if plot.ytransform is not None:
+        if plot.ytransform != None:
             self.yLabel = plot.ytransform
         # Init graph
@@ -188,5 +188,5 @@
     """
     def __init__(self, parent, id, title, scale='log_{10}',
-                 size=wx.Size(550, 470), show_menu_icons=True):
+                 size=wx.Size(550, 470)):
         """
         comment
@@ -202,5 +202,4 @@
         self._default_save_location = None
         self.scale = scale
-        self._show_menu_icons = show_menu_icons
         self.plotpanel = SimplePlotPanel(self, -1)
         self._build_menubar()
@@ -214,4 +213,5 @@
         quit_bmp = wx.ArtProvider.GetBitmap(wx.ART_QUIT, wx.ART_TOOLBAR, tsize)
         print_bmp = wx.ArtProvider.GetBitmap(wx.ART_PRINT, wx.ART_TOOLBAR, tsize)
+        preview_bmp = wx.ArtProvider.GetBitmap(wx.ART_REPORT_VIEW, wx.ART_TOOLBAR, tsize)
         copy_bmp = wx.ArtProvider.GetBitmap(wx.ART_COPY, wx.ART_TOOLBAR, tsize)
         menu_bar = wx.MenuBar()
@@ -219,17 +219,20 @@
         menu = wx.Menu()
         id = wx.NewId()
-        save_item = wx.MenuItem(menu, id, "&Save Image")
-        menu.AppendItem(save_item)
+        item = wx.MenuItem(menu, id, "&Save Image")
+        item.SetBitmap(save_bmp)
+        menu.AppendItem(item)
         wx.EVT_MENU(self, id, self.on_save_file)
 
         id = wx.NewId()
-        print_item = wx.MenuItem(menu, id, "&Print Image")
-        menu.AppendItem(print_item)
+        item = wx.MenuItem(menu, id, "&Print Image")
+        item.SetBitmap(print_bmp)
+        menu.AppendItem(item)
         wx.EVT_MENU(self, id, self.on_print_image)
 
         menu.AppendSeparator()
         id = wx.NewId()
-        quit_item = wx.MenuItem(menu, id, "&Quit")
-        menu.AppendItem(quit_item)
+        item = wx.MenuItem(menu, id, "&Quit")
+        item.SetBitmap(quit_bmp)
+        menu.AppendItem(item)
 
         menu_bar.Append(menu, "&File")
@@ -238,13 +241,8 @@
         menu_edit = wx.Menu()
         id = wx.NewId()
-        copy_item = wx.MenuItem(menu_edit, id, "&Copy")
-        menu_edit.AppendItem(copy_item)
+        item = wx.MenuItem(menu_edit, id, "&Copy")
+        item.SetBitmap(copy_bmp)
+        menu_edit.AppendItem(item)
         wx.EVT_MENU(self, id, self.on_copy_image)
-
-        if self._show_menu_icons:
-            save_item.SetBitmap(save_bmp)
-            print_item.SetBitmap(print_bmp)
-            quit_item.SetBitmap(quit_bmp)
-            copy_item.SetBitmap(copy_bmp)
 
         menu_bar.Append(menu_edit, "&Edit")
@@ -326,2 +324,3 @@
         except:
             self.Destroy()
+
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/SlicerParameters.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/SlicerParameters.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/SlicerParameters.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -0,0 +1,146 @@
+
+
+import wx
+import wx.lib.newevent
+#from copy import deepcopy
+from sas.sasgui.guiframe.events import EVT_SLICER_PARS
+from sas.sasgui.guiframe.utils import format_number
+from sas.sasgui.guiframe.events import EVT_SLICER
+from sas.sasgui.guiframe.events import SlicerParameterEvent
+
+
+class SlicerParameterPanel(wx.Dialog):
+    """
+    Panel class to show the slicer parameters
+    """
+    #TODO: show units
+    #TODO: order parameters properly
+
+    def __init__(self, parent, *args, **kwargs):
+        """
+        Dialog window that allow to edit parameters slicer
+        by entering new values
+        """
+        wx.Dialog.__init__(self, parent, *args, **kwargs)
+        self.params = {}
+        self.parent = parent
+        self.type = None
+        self.listeners = []
+        self.parameters = []
+        self.bck = wx.GridBagSizer(5, 5)
+        self.SetSizer(self.bck)
+        label = "Right-click on 2D plot for slicer options"
+        title = wx.StaticText(self, -1, label, style=wx.ALIGN_LEFT)
+        self.bck.Add(title, (0, 0), (1, 2),
+                     flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
+        # Bindings
+        self.parent.Bind(EVT_SLICER, self.onEVT_SLICER)
+        self.parent.Bind(EVT_SLICER_PARS, self.onParamChange)
+
+    def onEVT_SLICER(self, event):
+        """
+        Process EVT_SLICER events
+        When the slicer changes, update the panel
+
+        :param event: EVT_SLICER event
+        """
+        event.Skip()
+        if event.obj_class == None:
+            self.set_slicer(None, None)
+        else:
+            self.set_slicer(event.type, event.params)
+
+    def set_slicer(self, type, params):
+        """
+        Rebuild the panel
+        """
+        self.bck.Clear(True)
+        self.type = type
+        if type == None:
+            label = "Right-click on 2D plot for slicer options"
+            title = wx.StaticText(self, -1, label, style=wx.ALIGN_LEFT)
+            self.bck.Add(title, (0, 0), (1, 2),
+                         flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
+        else:
+            title = wx.StaticText(self, -1,
+                                  "Slicer Parameters", style=wx.ALIGN_LEFT)
+            self.bck.Add(title, (0, 0), (1, 2),
+                         flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
+            ix = 0
+            iy = 0
+            self.parameters = []
+            keys = params.keys()
+            keys.sort()
+            for item in keys:
+                iy += 1
+                ix = 0
+                if not item in ["count", "errors"]:
+                    text = wx.StaticText(self, -1, item, style=wx.ALIGN_LEFT)
+                    self.bck.Add(text, (iy, ix), (1, 1),
+                                 wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
+                    ctl = wx.TextCtrl(self, -1, size=(80, 20),
+                                      style=wx.TE_PROCESS_ENTER)
+                    hint_msg = "Modify the value of %s to change" % item
+                    hint_msg += " the 2D slicer"
+                    ctl.SetToolTipString(hint_msg)
+                    ix = 1
+                    ctl.SetValue(format_number(str(params[item])))
+                    self.Bind(wx.EVT_TEXT_ENTER, self.onTextEnter)
+                    self.parameters.append([item, ctl])
+                    self.bck.Add(ctl, (iy, ix), (1, 1),
+                                 wx.EXPAND | wx.ADJUST_MINSIZE, 0)
+                    ix = 3
+                    self.bck.Add((20, 20), (iy, ix), (1, 1),
+                                 wx.EXPAND | wx.ADJUST_MINSIZE, 0)
+                else:
+                    text = wx.StaticText(self, -1, item + " : ",
+                                         style=wx.ALIGN_LEFT)
+                    self.bck.Add(text, (iy, ix), (1, 1),
+                                 wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
+                    ctl = wx.StaticText(self, -1,
+                                        format_number(str(params[item])),
+                                        style=wx.ALIGN_LEFT)
+                    ix = 1
+                    self.bck.Add(ctl, (iy, ix), (1, 1),
+                                 wx.EXPAND | wx.ADJUST_MINSIZE, 0)
+            iy += 1
+            ix = 1
+            self.bck.Add((20, 20), (iy, ix), (1, 1),
+                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
+        self.bck.Layout()
+        self.bck.Fit(self)
+        self.parent.GetSizer().Layout()
+
+    def onParamChange(self, evt):
+        """
+        receive an event end reset value text fields
+        inside self.parameters
+        """
+        evt.Skip()
+        if evt.type == "UPDATE":
+            for item in self.parameters:
+                if item[0] in evt.params:
+                    item[1].SetValue("%-5.3g" % evt.params[item[0]])
+                    item[1].Refresh()
+
+    def onTextEnter(self, evt):
+        """
+        Parameters have changed
+        """
+        params = {}
+        has_error = False
+        for item in self.parameters:
+            try:
+                params[item[0]] = float(item[1].GetValue())
+                item[1].SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))
+                item[1].Refresh()
+            except:
+                has_error = True
+                item[1].SetBackgroundColour("pink")
+                item[1].Refresh()
+
+        if has_error == False:
+            # Post parameter event
+            ##parent hier is plotter2D
+            event = SlicerParameterEvent(type=self.type, params=params)
+            wx.PostEvent(self.parent, event)
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/__init__.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/__init__.py	(revision 959eb0181ad06828a748f04512f953aad5b31659)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/__init__.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/binder.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/binder.py	(revision 463e7ffce130ae386f93cd18b87a1120743e88b5)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/binder.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -4,6 +4,4 @@
 import logging
 import sys
-
-logger = logging.getLogger(__name__)
 
 class Selection(object):
@@ -72,5 +70,5 @@
             canvas.mpl_disconnect(canvas.scroll_pick_id)
         except:
-            logger.error(sys.exc_value)
+            logging.error(sys.exc_value)
         self.canvas = canvas
         self.figure = figure
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/boxMask.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/boxMask.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/boxMask.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -123,5 +123,5 @@
                                          x2=self.vertical_lines.x2,
                                          width=self.vertical_lines.half_width)
-        # if self.is_inside is not None:
+        # if self.is_inside != None:
         out = self._post_data()
         return out
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/boxSlicer.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/boxSlicer.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/boxSlicer.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -1,5 +1,5 @@
 import wx
 import math
-import numpy as np
+import numpy
 from sas.sasgui.guiframe.events import NewPlotEvent
 from sas.sasgui.guiframe.events import StatusEvent
@@ -139,5 +139,5 @@
 
         """
-        if self.direction is None:
+        if self.direction == None:
             self.direction = direction
 
@@ -147,8 +147,8 @@
         y_max = math.fabs(self.horizontal_lines.y)
 
-        if nbins is not None:
+        if nbins != None:
             self.nbins = nbins
-        if self.averager is None:
-            if new_slab is None:
+        if self.averager == None:
+            if new_slab == None:
                 msg = "post data:cannot average , averager is empty"
                 raise ValueError, msg
@@ -357,8 +357,8 @@
         """
         # # Reset x, y- coordinates if send as parameters
-        if x is not None:
-            self.x = np.sign(self.x) * math.fabs(x)
-        if y is not None:
-            self.y = np.sign(self.y) * math.fabs(y)
+        if x != None:
+            self.x = numpy.sign(self.x) * math.fabs(x)
+        if y != None:
+            self.y = numpy.sign(self.y) * math.fabs(y)
         # # Draw lines and markers
         self.inner_marker.set(xdata=[0], ydata=[self.y])
@@ -464,8 +464,8 @@
         """
         # # reset x, y -coordinates if given as parameters
-        if x is not None:
-            self.x = np.sign(self.x) * math.fabs(x)
-        if y is not None:
-            self.y = np.sign(self.y) * math.fabs(y)
+        if x != None:
+            self.x = numpy.sign(self.x) * math.fabs(x)
+        if y != None:
+            self.y = numpy.sign(self.y) * math.fabs(y)
         # # draw lines and markers
         self.inner_marker.set(xdata=[self.x], ydata=[0])
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/boxSum.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/boxSum.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/boxSum.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -353,7 +353,7 @@
             Draw the new roughness on the graph.
         """
-        if center_x is not None:
+        if center_x != None:
             self.x = center_x
-        if center_y is not None:
+        if center_y != None:
             self.y = center_y
         self.center_marker.set(xdata=[self.x], ydata=[self.y])
@@ -490,11 +490,11 @@
         """
         # # save the new height, witdh of the rectangle if given as a param
-        if width is not None:
+        if width != None:
             self.half_width = width
-        if height is not None:
+        if height != None:
             self.half_height = height
         # # If new  center coordinates are given draw the rectangle
         # #given these value
-        if center is not None:
+        if center != None:
             self.center_x = center.x
             self.center_y = center.y
@@ -511,11 +511,11 @@
             return
         # # if x1, y1, y2, y3 are given draw the rectangle with this value
-        if x1 is not None:
+        if x1 != None:
             self.x1 = x1
-        if x2 is not None:
+        if x2 != None:
             self.x2 = x2
-        if y1 is not None:
+        if y1 != None:
             self.y1 = y1
-        if y2 is not None:
+        if y2 != None:
             self.y2 = y2
         # # Draw 2 vertical lines and a marker
@@ -657,11 +657,11 @@
         """
         # # save the new height, witdh of the rectangle if given as a param
-        if width is not None:
+        if width != None:
             self.half_width = width
-        if height is not None:
+        if height != None:
             self.half_height = height
         # # If new  center coordinates are given draw the rectangle
         # #given these value
-        if center is not None:
+        if center != None:
             self.center_x = center.x
             self.center_y = center.y
@@ -679,11 +679,11 @@
             return
         # # if x1, y1, y2, y3 are given draw the rectangle with this value
-        if x1 is not None:
+        if x1 != None:
             self.x1 = x1
-        if x2 is not None:
+        if x2 != None:
             self.x2 = x2
-        if y1 is not None:
+        if y1 != None:
             self.y1 = y1
-        if y2 is not None:
+        if y2 != None:
             self.y2 = y2
         # # Draw 2 vertical lines and a marker
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/detector_dialog.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/detector_dialog.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/detector_dialog.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -7,5 +7,5 @@
 from sas.sasgui.guiframe.events import StatusEvent
 from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as Canvas
-import matplotlib as mpl
+from matplotlib import mpl
 from matplotlib import pylab
 # FONT size
@@ -90,7 +90,7 @@
             zmin = self.reset_zmin_ctl
             zmax = self.reset_zmax_ctl
-            if zmin is None:
+            if zmin == None:
                 zmin = ""
-            if zmax is None:
+            if zmax == None:
                 zmax = ""
             self.zmin_ctl.SetValue(str(zmin))
@@ -155,7 +155,7 @@
         self.qmax_ctl.SetLabel(str(format_number(qmax)))
         self.beam_ctl.SetLabel(str(format_number(beam)))
-        if zmin is not None:
+        if zmin != None:
             self.zmin_ctl.SetValue(str(format_number(zmin)))
-        if zmax is not None:
+        if zmax != None:
             self.zmax_ctl.SetValue(str(format_number(zmax)))
 
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/masking.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/masking.py	(revision 45dffa69cb5935e2da7c77a2f040debb07ceb1c6)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/masking.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -24,5 +24,5 @@
 import math
 import copy
-import numpy as np
+import numpy
 from sas.sasgui.plottools.PlotPanel import PlotPanel
 from sas.sasgui.plottools.plottables import Graph
@@ -100,5 +100,5 @@
         wx.Dialog.__init__(self, parent, id=id, *args, **kwds)
 
-        if data is not None:
+        if data != None:
             # Font size
             kwds = []
@@ -235,5 +235,5 @@
         event.Skip()
         # from boxMask import BoxMask
-        if event is not None:
+        if event != None:
             self._on_clear_slicer(event)
         self.slicer_z += 1
@@ -249,5 +249,5 @@
         Add new mask to old mask
         """
-        if self.slicer is not None:
+        if not self.slicer == None:
             data = Data2D()
             data = self.data
@@ -269,5 +269,5 @@
         Erase new mask from old mask
         """
-        if self.slicer is not None:
+        if not self.slicer == None:
             self.slicer_mask = self.slicer.update()
             mask = self.data.mask
@@ -298,5 +298,5 @@
         self.subplot.set_ylim(self.data.ymin, self.data.ymax)
         self.subplot.set_xlim(self.data.xmin, self.data.xmax)
-        mask = np.ones(len(self.data.mask), dtype=bool)
+        mask = numpy.ones(len(self.data.mask), dtype=bool)
         self.data.mask = mask
         # update mask plot
@@ -307,5 +307,5 @@
         Clear the slicer on the plot
         """
-        if self.slicer is not None:
+        if not self.slicer == None:
             self.slicer.clear()
             self.subplot.figure.canvas.draw()
@@ -336,5 +336,5 @@
         """
         # the case of liitle numbers of True points
-        if len(mask[mask]) < 10 and self.data is not None:
+        if len(mask[mask]) < 10 and self.data != None:
             self.ShowMessage()
             mask = copy.deepcopy(self.mask)
@@ -343,5 +343,5 @@
             self.mask = mask
         # make temperary data to plot
-        temp_mask = np.zeros(len(mask))
+        temp_mask = numpy.zeros(len(mask))
         temp_data = copy.deepcopy(self.data)
         # temp_data default is None
@@ -355,5 +355,5 @@
         temp_data.data[mask == False] = temp_mask[mask == False]
         self.plotpanel.clear()
-        if self.slicer is not None:
+        if self.slicer != None:
             self.slicer.clear()
             self.slicer = None
@@ -460,5 +460,5 @@
         wx.Dialog.__init__(self, parent, id=id, *args, **kwds)
 
-        if data is not None:
+        if data != None:
             # Font size
             kwds = []
@@ -710,5 +710,5 @@
         Status msg
         """
-        if self.parent.parent.parent is not None:
+        if self.parent.parent.parent != None:
             wx.PostEvent(self.parent.parent.parent,
                          StatusEvent(status=msg, type=type))
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/parameters_panel_boxsum.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/parameters_panel_boxsum.py	(revision 37d461c81bb3405cd6efc6bdadfe0ecd6dc5b338)
+++ 	(revision )
@@ -1,148 +1,0 @@
-import wx
-import wx.lib.newevent
-from parameters_panel_slicer import SlicerParameterPanel
-from sas.sasgui.guiframe.utils import format_number
-from sas.sasgui.guiframe.panel_base import PanelBase
-from sas.sasgui.guiframe.events import (SlicerParameterEvent, EVT_SLICER_PARS,
-                                        EVT_SLICER)
-
-
-class SlicerPanel(wx.Panel, PanelBase):
-    """
-    Panel class to show the slicer parameters
-    """
-    # Internal name for the AUI manager
-    window_name = "Slicer panel"
-    # Title to appear on top of the window
-    window_caption = "Slicer Panel"
-    CENTER_PANE = False
-
-    def __init__(self, parent, id=-1, type=None, base=None,
-                 params=None, *args, **kwargs):
-        wx.Panel.__init__(self, parent, id, *args, **kwargs)
-        PanelBase.__init__(self)
-        # Initialization of the class
-        self.base = base
-        if params is None:
-            params = {}
-        self.params = params
-        self.parent = base.parent
-        self.frame = None
-        self.type = type
-        self.listeners = []
-        self.parameters = []
-        self.bck = wx.GridBagSizer(5, 5)
-        self.SetSizer(self.bck)
-        if type is None and params is None:
-            label = "Right-click on 2D plot for slicer options"
-            title = wx.StaticText(self, -1, label, style=wx.ALIGN_LEFT)
-            self.bck.Add(title, (0, 0), (1, 2),
-                         flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
-        else:
-            self.set_slicer(type, params)
-        # Bindings
-        self.parent.Bind(EVT_SLICER, SlicerParameterPanel.on_evt_slicer)
-        self.parent.Bind(EVT_SLICER_PARS, SlicerParameterPanel.on_param_change)
-
-    def set_slicer(self, type, params):
-        """
-        Rebuild the panel
-        """
-        self.bck.Clear(True)
-        self.type = type
-        if type is None:
-            label = "Right-click on 2D plot for slicer options"
-            title = wx.StaticText(self, -1, label, style=wx.ALIGN_LEFT)
-            self.bck.Add(title, (0, 0), (1, 2),
-                         flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
-        else:
-            title_text = str(type) + "Parameters"
-            title = wx.StaticText(self, -1, title_text,
-                                  style=wx.ALIGN_LEFT)
-            self.bck.Add(title, (0, 0), (1, 2),
-                         flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
-            n = 1
-            self.parameters = []
-            keys = params.keys()
-            keys.sort()
-            for item in keys:
-                if not item.lower() in ["num_points", "avg", "avg_error", "sum",
-                                        "sum_error"]:
-                    n += 1
-                    text = wx.StaticText(self, -1, item, style=wx.ALIGN_LEFT)
-                    self.bck.Add(text, (n - 1, 0),
-                                 flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL,
-                                 border=15)
-                    ctl = wx.TextCtrl(self, -1, size=(80, 20),
-                                      style=wx.TE_PROCESS_ENTER)
-                    hint_msg = "Modify the value of %s to change " % item
-                    hint_msg += "the 2D slicer"
-                    ctl.SetToolTipString(hint_msg)
-                    ctl.SetValue(str(format_number(params[item])))
-                    self.Bind(wx.EVT_TEXT_ENTER, self.on_text_enter)
-                    ctl.Bind(wx.EVT_SET_FOCUS, self.on_set_focus)
-                    ctl.Bind(wx.EVT_KILL_FOCUS, self.on_text_enter)
-                    self.parameters.append([item, ctl])
-                    self.bck.Add(ctl, (n - 1, 1), flag=wx.TOP | wx.BOTTOM,
-                                 border=0)
-            for item in keys:
-                if item.lower() in ["num_points", "avg", "avg_error", "sum",
-                                    "sum_error"]:
-                    n += 1
-                    text = wx.StaticText(self, -1, item + ": ",
-                                         style=wx.ALIGN_LEFT)
-                    self.bck.Add(text, (n - 1, 0),
-                                 flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL,
-                                 border=15)
-                    ctl = wx.StaticText(self, -1,
-                                        str(format_number(params[item])),
-                                        style=wx.ALIGN_LEFT)
-                    ctl.SetToolTipString("Result %s" % item)
-                    self.bck.Add(ctl, (n - 1, 1), flag=wx.TOP | wx.BOTTOM,
-                                 border=0)
-        self.bck.Layout()
-        self.Layout()
-        p_sizer = self.parent.GetSizer()
-        if p_sizer is not None:
-            p_sizer.Layout()
-
-    def on_set_focus(self, evt):
-        """
-        Highlight the txtcrtl
-        """
-        evt.Skip()
-        # Get a handle to the TextCtrl
-        widget = evt.GetEventObject()
-        # Select the whole control, after this event resolves
-        wx.CallAfter(widget.SetSelection, -1, -1)
-
-    def on_text_enter(self, evt):
-        """
-        Parameters have changed
-        """
-        evt.Skip()
-        params = {}
-        has_error = False
-        for item in self.parameters:
-            try:
-                params[item[0]] = float(item[1].GetValue())
-                item[1].SetBackgroundColour(wx.SystemSettings_GetColour(
-                    wx.SYS_COLOUR_WINDOW))
-                item[1].Refresh()
-            except:
-                has_error = True
-                item[1].SetBackgroundColour("pink")
-                item[1].Refresh()
-        if not has_error:
-            # Post parameter event
-            # base is guiframe is this case
-            event = SlicerParameterEvent(type=self.type, params=params)
-            wx.PostEvent(self.base, event)
-
-    def on_close(self, event):
-        """
-        On Close Event
-        """
-        uid = self.uid
-        self.parent.delete_panel(uid)
-        self.frame.Destroy()
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/parameters_panel_slicer.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/parameters_panel_slicer.py	(revision 47d93073b33fc050c7f2f192dc9ec8131439e86c)
+++ 	(revision )
@@ -1,534 +1,0 @@
-
-
-import os
-import wx
-import wx.lib.newevent
-from sas.sascalc.dataloader.readers.cansas_reader import Reader
-from sas.sasgui.guiframe.utils import format_number
-from sas.sasgui.guiframe.events import EVT_SLICER_PARS, EVT_SLICER
-from sas.sasgui.guiframe.events import SlicerParameterEvent, StatusEvent
-from Plotter2D import ModelPanel2D
-apply_params, EVT_APPLY_PARAMS = wx.lib.newevent.NewEvent()
-save_files, EVT_AUTO_SAVE = wx.lib.newevent.NewEvent()
-
-FIT_OPTIONS = ["No fitting", "Fitting", "Batch Fitting"]
-CONVERT_KEYS = ["SectorInteractor", "AnnulusInteractor", "BoxInteractorX",
-                "BoxInteractorY"]
-CONVERT_DICT = {"SectorInteractor": "SectorQ",
-                "AnnulusInteractor": "AnnulusPhi",
-                "BoxInteractorX": "SlabX",
-                "BoxInteractorY": "SlabY"}
-BINNING_OPTIONS = {"Linear" : 0,
-                   "Logarithmic" : 10,}
-
-
-class SlicerParameterPanel(wx.Dialog):
-    """
-    Panel for dynamically changing slicer parameters and apply the same slicer
-    to multiple 2D plot panels
-    """
-
-    def __init__(self, parent, *args, **kwargs):
-        """
-        Dialog window that allow to edit parameters slicer
-        by entering new values
-        """
-        wx.Dialog.__init__(self, parent, *args, **kwargs)
-        self.params = {}
-        self.iter = 0
-        self.parent = parent
-        self.main_window = parent.parent
-        self.data_panel = self.main_window._data_panel
-        self.type = None
-        self.listeners = []
-        self.parameters = []
-        self.bck = wx.GridBagSizer(5, 5)
-        self.SetSizer(self.bck)
-        self.auto_save = None
-        self.path = None
-        self.fitting_options = None
-        self.bin_ctl = None
-        self.type_list = []
-        self.loaded_data = []
-        self.always_on = None
-        self.type_select = None
-        self.append_name = None
-        self.data_list = None
-        self.default_value = ""
-        self.batch_slicer_button = None
-        label = "Right-click on 2D plot for slicer options"
-        title = wx.StaticText(self, -1, label, style=wx.ALIGN_LEFT)
-        self.bck.Add(title, (0, 0), (1, 2),
-                     flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
-        # Bindings
-        self.parent.Bind(EVT_SLICER, self.on_evt_slicer)
-        self.Bind(EVT_SLICER_PARS, self.on_param_change)
-        self.Bind(EVT_APPLY_PARAMS, self.apply_params_list_and_process)
-        self.Bind(EVT_AUTO_SAVE, self.save_files)
-
-    def on_evt_slicer(self, event):
-        """
-        Process EVT_SLICER events
-        When the slicer changes, update the panel
-
-        :param event: EVT_SLICER event
-        """
-        event.Skip()
-        if event.obj_class is None:
-            self.set_slicer(None, None)
-        else:
-            self.set_slicer(event.type, event.params)
-
-    def set_slicer(self, type, params):
-        """
-        Rebuild the panel
-        """
-        self.bck.Clear(True)
-        self.bck.Add((5, 5), (0, 0), (1, 1),
-                     wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 5)
-        self.type = type
-        if type is None:
-            label = "Right-click on 2D plot for slicer options"
-            title = wx.StaticText(self, -1, label, style=wx.ALIGN_LEFT)
-            self.bck.Add(title, (1, 0), (1, 2),
-                         flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
-        else:
-            title = wx.StaticText(self, -1,
-                                  "Slicer Parameters:", style=wx.ALIGN_LEFT)
-            self.bck.Add(title, (1, 0), (1, 2),
-                         flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
-            iy = 1
-            self.parameters = []
-            keys = params.keys()
-            keys.sort()
-            for item in keys:
-                ix = 0
-                iy += 1
-                if item not in ["count", "errors", "binning base"]:
-                    text = wx.StaticText(self, -1, item, style=wx.ALIGN_LEFT)
-                    self.bck.Add(text, (iy, ix), (1, 1),
-                                 wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-                    ctl = wx.TextCtrl(self, -1, size=(80, 20),
-                                      style=wx.TE_PROCESS_ENTER)
-                    hint_msg = "Modify the value of %s to change" % item
-                    hint_msg += " the 2D slicer"
-                    ctl.SetToolTipString(hint_msg)
-                    ix = 1
-                    ctl.SetValue(format_number(str(params[item])))
-                    self.Bind(wx.EVT_TEXT_ENTER, self.on_text_enter)
-                    self.parameters.append([item, ctl])
-                    self.bck.Add(ctl, (iy, ix), (1, 1),
-                                 wx.EXPAND | wx.ADJUST_MINSIZE, 0)
-                    ix = 3
-                    self.bck.Add((20, 20), (iy, ix), (1, 1),
-                                 wx.EXPAND | wx.ADJUST_MINSIZE, 0)
-                elif item == 'binning base':
-                    text = wx.StaticText(self, -1, item, style=wx.ALIGN_LEFT)
-                    self.bck.Add(text, (iy, ix), (1, 1),
-                                 wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-                    options = BINNING_OPTIONS.keys()
-                    self.bin_ctl = wx.ComboBox(parent=self, choices=options)
-                    hint_msg = "Modify the value of %s to change" % item
-                    hint_msg += " the 2D slicer"
-                    self.bin_ctl.SetToolTipString(hint_msg)
-                    ix = 1
-                    result = ""
-                    value = 0
-                    for name, value in BINNING_OPTIONS.items():
-                        if value == params[item]:
-                            result = name
-                            break
-                    index = self.bin_ctl.FindString(result)
-                    self.bin_ctl.SetSelection(index)
-                    self.parameters.append([item, self.bin_ctl])
-                    self.Bind(wx.EVT_COMBOBOX, self.on_text_enter)
-                    self.bck.Add(self.bin_ctl, (iy, ix), (1, 1),
-                                 wx.EXPAND | wx.ADJUST_MINSIZE, 0)
-                    ix = 3
-                    self.bck.Add((20, 20), (iy, ix), (1, 1),
-                                 wx.EXPAND | wx.ADJUST_MINSIZE, 0)
-                else:
-                    text = wx.StaticText(self, -1, item + " : ",
-                                         style=wx.ALIGN_LEFT)
-                    self.bck.Add(text, (iy, ix), (1, 1),
-                                 wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-                    ctl = wx.StaticText(self, -1,
-                                        format_number(str(params[item])),
-                                        style=wx.ALIGN_LEFT)
-                    ix = 1
-                    self.bck.Add(ctl, (iy, ix), (1, 1),
-                                 wx.EXPAND | wx.ADJUST_MINSIZE, 0)
-
-            # Change slicer within the window
-            ix = 0
-            iy += 1
-            txt = "Slicer type"
-            text = wx.StaticText(self, -1, txt, style=wx.ALIGN_LEFT)
-            self.bck.Add(text, (iy, ix), (1, 1),
-                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-            self.type_list = CONVERT_KEYS
-            self.type_select = wx.ComboBox(parent=self, choices=self.type_list)
-            self.type_select.Bind(wx.EVT_COMBOBOX, self.on_change_slicer)
-            index = self.type_select.FindString(type)
-            self.type_select.SetSelection(index)
-            self.bck.Add(self.type_select, (iy, 1), (1, 1),
-                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-
-            # batch slicing parameters
-            title_text = "Batch Slicing Options:"
-            title = wx.StaticText(self, -1, title_text, style=wx.ALIGN_LEFT)
-            iy += 1
-            line = wx.StaticLine(self, -1, style=wx.LI_VERTICAL)
-            line.SetSize((60, 60))
-            self.bck.Add(line, (iy, ix), (1, 2),
-                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-            iy += 1
-            self.bck.Add(title, (iy, ix), (1, 1),
-                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-
-            # Create a list box with all of the 2D plots
-            iy += 1
-            self.process_list()
-            self.bck.Add(self.data_list, (iy, ix), (1, 1),
-                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-
-            # Checkbox to enable saving and fitting options
-            iy += 1
-            self.auto_save = wx.CheckBox(parent=self, id=wx.NewId(),
-                                         label="Auto save generated 1D:")
-            self.Bind(wx.EVT_CHECKBOX, self.on_auto_save_checked)
-            self.bck.Add(self.auto_save, (iy, ix), (1, 1),
-                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-            iy += 1
-            # File browser
-            save_to = "Save files to:"
-            save = wx.StaticText(self, -1, save_to, style=wx.ALIGN_LEFT)
-            path = os.getcwd()
-            self.path = wx.DirPickerCtrl(self, id=wx.NewId(), path=path,
-                                         message=save_to)
-            self.path.Enable(False)
-            self.bck.Add(save, (iy, ix), (1, 1),
-                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-            self.bck.Add(self.path, (iy, 1), (1, 1),
-                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-            # Append to file
-            iy += 1
-            self.update_file_append(params)
-            append_text = "Append to file name:"
-            append = wx.StaticText(self, -1, append_text, style=wx.ALIGN_LEFT)
-            self.append_name = wx.TextCtrl(parent=self, id=wx.NewId(),
-                                           name="Append to file name:")
-            append_tool_tip = "Files will be saved as <SlicerType><FileName>"
-            append_tool_tip += "<AppendToText>.txt"
-            self.append_name.SetToolTipString(append_tool_tip)
-            self.append_name.SetValue(self.default_value)
-            self.append_name.Enable(False)
-            self.bck.Add(append, (iy, ix), (1, 1),
-                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-            self.bck.Add(self.append_name, (iy, 1), (1, 1),
-                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-
-            # Combobox for selecting fitting options
-            iy += 1
-            fit_text = "Fitting Options:"
-            fit_text_item = wx.StaticText(self, -1, fit_text,
-                                          style=wx.ALIGN_LEFT)
-            self.bck.Add(fit_text_item, (iy, ix), (1, 1),
-                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-            self.fitting_options = wx.ComboBox(parent=self, choices=FIT_OPTIONS)
-            self.fitting_options.SetSelection(0)
-            self.bck.Add(self.fitting_options, (iy, 1), (1, 1),
-                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-            self.fitting_options.Enable(False)
-            self.fitting_options.Bind(wx.EVT_COMBOBOX, None)
-
-            # Button to start batch slicing
-            iy += 1
-            button_label = "Apply Slicer to Selected Plots"
-            self.batch_slicer_button = wx.Button(parent=self,
-                                                 label=button_label)
-            self.Bind(wx.EVT_BUTTON, self.on_batch_slicer)
-            self.bck.Add(self.batch_slicer_button, (iy, ix), (1, 1),
-                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
-            iy += 1
-            self.bck.Add((5, 5), (iy, ix), (1, 1),
-                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 5)
-        self.bck.Layout()
-        self.bck.Fit(self)
-        self.parent.GetSizer().Layout()
-
-    def on_param_change(self, evt):
-        """
-        receive an event end reset value text fields
-        inside self.parameters
-        """
-        evt.Skip()
-        if evt.type == "UPDATE":
-            for item in self.parameters:
-                if item[0] in evt.params:
-                    item[1].SetValue("%-5.3g" % evt.params[item[0]])
-                    item[1].Refresh()
-
-    def on_text_enter(self, evt):
-        """
-        Parameters have changed
-        """
-        params = {}
-        has_error = False
-        for item in self.parameters:
-            try:
-                if item[0] == "binning base":
-                    title = self.bin_ctl.GetValue()
-                    params["binning base"] = BINNING_OPTIONS.get(title)
-                    continue
-                params[item[0]] = float(item[1].GetValue())
-                item[1].SetBackgroundColour(
-                    wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))
-                item[1].Refresh()
-            except:
-                has_error = True
-                item[1].SetBackgroundColour("pink")
-                item[1].Refresh()
-
-        if not has_error:
-            # Post parameter event
-            # parent here is plotter2D
-            self.update_file_append(params)
-            self.append_name.SetValue(self.default_value)
-            self.append_name.Refresh()
-            event = SlicerParameterEvent(type=self.type, params=params)
-            wx.PostEvent(self.parent, event)
-
-    def on_batch_slicer(self, evt=None):
-        """
-        Event triggered when batch slicing button is pressed
-        :param evt: Event triggering the batch slicing
-        """
-        apply_to_list = []
-        spp = self.parent.parent
-        params = self.parent.slicer.get_params()
-        slicer_type = self.type_select.GetStringSelection()
-        save = self.auto_save.IsChecked()
-        append = self.append_name.GetValue()
-        path = self.path.GetPath()
-        fit = self.fitting_options.GetValue()
-
-        # Find desired 2D data panels
-        for key, mgr in spp.plot_panels.iteritems():
-            if mgr.graph.prop['title'] in self.data_list.CheckedStrings:
-                apply_to_list.append(mgr)
-
-        # Apply slicer type to selected panels
-        for item in apply_to_list:
-            self._apply_slicer_to_plot(item, slicer_type)
-
-        # Post an event to apply appropriate slicer params to each slicer
-        # Pass all variables, including class variables
-        event_params = apply_params(params=params, apply_to_list=apply_to_list,
-                                    auto_save=save, append=append, fit=fit,
-                                    path=path, type=slicer_type)
-        wx.PostEvent(self, event_params)
-
-    def on_change_slicer(self, evt):
-        """
-        Event driven slicer change when self.type_select changes
-        :param evt: Event triggering this change
-        """
-        self._apply_slicer_to_plot(self.parent)
-
-    def _apply_slicer_to_plot(self, plot, slicer_type=None):
-        """
-        Apply a slicer to *any* plot window, not just parent window
-        :param plot: 2D plot panel to apply a slicer to
-        :param slicer_type: The type of slicer to apply to the panel
-        """
-        # Skip redrawing the current plot if no change in slicer type
-        if self.parent == plot and self.type == slicer_type:
-            return
-        # Do not draw a slicer on a 1D plot
-        if not isinstance(plot, ModelPanel2D):
-            return
-        if slicer_type is None:
-            slicer_type = self.type_select.GetStringSelection()
-        if slicer_type == self.type_list[0]:
-            plot.onSectorQ(None)
-        elif slicer_type == self.type_list[1]:
-            plot.onSectorPhi(None)
-        elif slicer_type == self.type_list[2]:
-            plot.onBoxavgX(None)
-        elif slicer_type == self.type_list[3]:
-            plot.onBoxavgY(None)
-
-    def process_list(self):
-        """
-        Populate the check list from the currently plotted 2D data
-        """
-        # Reinitialize loaded data list on redraw
-        self.loaded_data = []
-        # Iterate over the loaded plots and find all 2D panels
-        for key, value in self.main_window.plot_panels.iteritems():
-            if isinstance(value, ModelPanel2D):
-                self.loaded_data.append(value.data2D.name)
-                if value.data2D.id == self.parent.data2D.id:
-                    # Set current plot panel as uncheckable
-                    self.always_on = self.loaded_data.index(value.data2D.name)
-        self.data_list = wx.CheckListBox(parent=self, id=wx.NewId(),
-                                         choices=self.loaded_data,
-                                         name="Apply Slicer to 2D Plots:")
-        # Check all items by default
-        for item in range(len(self.data_list.Items)):
-            self.data_list.Check(item)
-        self.data_list.Bind(wx.EVT_CHECKLISTBOX, self.on_check_box_list)
-
-    def on_check_box_list(self, evt=None):
-        """
-        Prevent a checkbox item from being unchecked
-        :param evt: Event triggered when a checkbox list item is checked
-        """
-        if evt is None:
-            return
-        index = evt.GetSelection()
-        if index == self.always_on:
-            self.data_list.Check(index)
-
-    def apply_params_list_and_process(self, evt=None):
-        """
-        Event based parameter setting.
-        :param evt: Event triggered to apply parameters to a list of plots
-                    evt should have attrs plot_list and params
-        """
-        if evt is None:
-            return
-        # Apply parameter list to each plot as desired
-        for item in evt.apply_to_list:
-            event = SlicerParameterEvent(type=evt.type, params=evt.params)
-            wx.PostEvent(item, event)
-        # Post an event to save each data set to file
-        if evt.auto_save:
-            event = save_files(append_to_name=evt.append, path=evt.path,
-                               type=evt.type, file_list=evt.apply_to_list,
-                               fit=evt.fit)
-            wx.PostEvent(self, event)
-
-    def save_files(self, evt=None):
-        """
-        Automatically save the sliced data to file.
-        :param evt: Event that triggered the call to the method
-        """
-
-        # Events triggered after this event pass other events to wx that are
-        # necessary before this event is called. If this is the first time
-        # reaching this event, send it to the end of the wx event queue
-        if self.iter < 2:
-            clone = evt.Clone()
-            wx.PostEvent(self, clone)
-            self.iter += 1
-            return
-        if evt is None:
-            return
-
-        # Start definitions
-        writer = Reader()
-        data_dic = {}
-        append = evt.append_to_name
-        names = []
-        f_name_list = []
-        f_path_list = []
-
-        # Get list of 2D data names for saving
-        for f_name in evt.file_list:
-            names.append(f_name.data2D.label)
-
-        # Find the correct plots to save
-        for key, plot in self.main_window.plot_panels.iteritems():
-            if not hasattr(plot, "data2D"):
-                for item in plot.plots:
-                    base = item.replace(CONVERT_DICT[evt.type], "")
-                    if base in names:
-                        data_dic[item] = plot.plots[item]
-
-        # Save files as Text
-        for item, data1d in data_dic.iteritems():
-            base = '.'.join(item.split('.')[:-1])
-            file_name = base + append + ".txt"
-            save_to = evt.path + "\\" + file_name
-            writer.write(save_to, data1d)
-            f_path_list.append(save_to)
-            f_name_list.append(file_name)
-
-        # Load files into GUI
-        for item in f_path_list:
-            self.main_window.load_data(item)
-
-        # Send to fitting
-        self.send_to_fitting(evt.fit, f_name_list)
-
-    def send_to_fitting(self, fit=FIT_OPTIONS[0], file_list=None):
-        """
-        Send a list of data to the fitting perspective
-        :param fit: fit type desired 
-        :param file_list: list of loaded file names to send to fit
-        """
-        if fit in FIT_OPTIONS and fit != FIT_OPTIONS[0] and \
-                        file_list is not None:
-            # Set perspective to fitting
-            int = self.data_panel.perspective_cbox.FindString("Fitting")
-            self.data_panel.perspective_cbox.SetSelection(int)
-            self.data_panel._on_perspective_selection(None)
-            # Unselect all loaded data
-            self.data_panel.selection_cbox.SetValue('Unselect all Data')
-            self.data_panel._on_selection_type(None)
-            # Click each sliced data file
-            for f_name in file_list:
-                num = len(f_name)
-                data_list = self.data_panel.list_cb_data
-                for key in data_list:
-                    loaded_key = (key[:num]) if len(key) > num else key
-                    if loaded_key == f_name:
-                        selection = key
-                        data_ctrl = data_list[selection][0]
-                        self.check_item_and_children(data_ctrl=data_ctrl,
-                                                     check_value=True)
-            # Switch to batch mode if selected
-            if fit == FIT_OPTIONS[2]:
-                self.data_panel.rb_single_mode.SetValue(False)
-                self.data_panel.rb_batch_mode.SetValue(True)
-                self.data_panel.on_batch_mode(None)
-            else:
-                self.data_panel.rb_single_mode.SetValue(True)
-                self.data_panel.rb_batch_mode.SetValue(False)
-                self.data_panel.on_single_mode(None)
-
-            # Post button click event to send data to fitting
-            evt = wx.PyCommandEvent(wx.EVT_BUTTON.typeId,
-                                    self.data_panel.bt_import.GetId())
-            wx.PostEvent(self.data_panel, evt)
-
-    def on_auto_save_checked(self, evt=None):
-        """
-        Enable/Disable auto append when checkbox is checked
-        :param evt: Event
-        """
-        self.append_name.Enable(self.auto_save.IsChecked())
-        self.path.Enable(self.auto_save.IsChecked())
-        self.fitting_options.Enable(self.auto_save.IsChecked())
-
-    def check_item_and_children(self, data_ctrl, check_value=True):
-        self.data_panel.tree_ctrl.CheckItem(data_ctrl, check_value)
-        if data_ctrl.HasChildren():
-            if check_value and not data_ctrl.IsExpanded():
-                return
-            for child_ctrl in data_ctrl.GetChildren():
-                self.data_panel.CheckItem(child_ctrl, check_value)
-
-    def update_file_append(self, params=None):
-        """
-        Update default_value when any parameters are changed
-        :param params: dictionary of parameters
-        """
-        self.default_value = ""
-        if params is None:
-            params = self.params
-        for key in params:
-            self.default_value += "_{0}".format(key).split(" [")[0]
-            self.default_value += "-{:.2f}".format(params[key])
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/plotting.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/plotting.py	(revision 235f514ba93b57fa63e44309f182acef0b98bb55)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/plotting.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -16,5 +16,4 @@
 from sas.sasgui.guiframe.events import EVT_NEW_PLOT
 from sas.sasgui.guiframe.events import EVT_PLOT_QRANGE
-from sas.sasgui.guiframe.events import EVT_PLOT_LIM
 from sas.sasgui.guiframe.events import DeletePlotPanelEvent
 from sas.sasgui.guiframe.plugin_base import PluginBase
@@ -80,5 +79,4 @@
         self.parent.Bind(EVT_NEW_PLOT, self._on_plot_event)
         self.parent.Bind(EVT_PLOT_QRANGE, self._on_plot_qrange)
-        self.parent.Bind(EVT_PLOT_LIM, self._on_plot_lim)
         # We have no initial panels for this plug-in
         return []
@@ -88,5 +86,5 @@
         On Qmin Qmax vertical line event
         """
-        if event is None:
+        if event == None:
             return
         if event.id in self.plot_panels.keys():
@@ -98,19 +96,4 @@
         panel.on_plot_qrange(event)
 
-    def _on_plot_lim(self, event=None):
-        if event is None:
-            return
-        if event.id in self.plot_panels.keys():
-            panel = self.plot_panels[event.id]
-        elif event.group_id in self.plot_panels.keys():
-            panel = self.plot_panels[event.group_id]
-        else:
-            return
-        if hasattr(event, 'xlim'):
-            panel.subplot.set_xlim(event.xlim)
-        if hasattr(event, 'ylim'):
-            panel.subplot.set_ylim(event.ylim)
-
-
     def _on_show_panel(self, event):
         """show plug-in panel"""
@@ -134,5 +117,7 @@
         """
         for group_id in self.plot_panels.keys():
-            self.clear_panel_by_id(group_id)
+            panel = self.plot_panels[group_id]
+            panel.graph.reset()
+            self.hide_panel(group_id)
         self.plot_panels = {}
 
@@ -327,7 +312,3 @@
                 new_panel = self.create_2d_panel(data, group_id)
             self.create_panel_helper(new_panel, data, group_id, title)
-            if hasattr(event, 'xlim'):
-                new_panel.subplot.set_xlim(event.xlim)
-            if hasattr(event, 'ylim'):
-                new_panel.subplot.set_ylim(event.ylim)
         return
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/profile_dialog.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/profile_dialog.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/profile_dialog.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -44,5 +44,5 @@
         wx.Dialog.__init__(self, parent, id=id, *args, **kwds)
 
-        if data is not None:
+        if data != None:
             #Font size
             kwds = []
@@ -284,5 +284,5 @@
             default_name = default_name.split('.')[0]
         default_name += "_out"
-        if self.parent is not None:
+        if self.parent != None:
             # What an ancestor!
             fit_panel = self.parent.parent.parent
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/sector_mask.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/sector_mask.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/sector_mask.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -96,5 +96,5 @@
             self.left_line.update(phi=self.right_line.phi, delta=None,
                                   mline=self.main_line, side=True, left=False)
-        #if self.is_inside is not None:
+        #if self.is_inside != None:
         out = self._post_data()
         return out
@@ -117,5 +117,5 @@
         data = self.base.data
         # If we have no data, just return
-        if data is None:
+        if data == None:
             return
         ## Averaging
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/slicerpanel.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/slicerpanel.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/slicerpanel.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -0,0 +1,170 @@
+import wx
+import wx.lib.newevent
+#from copy import deepcopy
+from sas.sasgui.guiframe.utils import format_number
+from sas.sasgui.guiframe.events import SlicerParameterEvent
+from sas.sasgui.guiframe.events import EVT_SLICER_PARS
+from sas.sasgui.guiframe.events import EVT_SLICER
+
+from sas.sasgui.guiframe.panel_base import PanelBase
+
+class SlicerPanel(wx.Panel, PanelBase):
+    """
+    Panel class to show the slicer parameters
+    """
+    #TODO: show units
+    #TODO: order parameters properly
+    ## Internal name for the AUI manager
+    window_name = "Slicer panel"
+    ## Title to appear on top of the window
+    window_caption = "Slicer Panel"
+    CENTER_PANE = False
+
+    def __init__(self, parent, id=-1, type=None, base=None,
+                 params=None, *args, **kwargs):
+        wx.Panel.__init__(self, parent, id, *args, **kwargs)
+        PanelBase.__init__(self)
+        ##  Initialization of the class
+        self.base = base
+        if params is None:
+            params = {}
+        self.params = params
+        self.parent = base.parent
+        self.frame = None
+        self.type = type
+        self.listeners = []
+        self.parameters = []
+        self.bck = wx.GridBagSizer(5, 5)
+        self.SetSizer(self.bck)
+        if type == None and params == None:
+            label = "Right-click on 2D plot for slicer options"
+            title = wx.StaticText(self, -1, label, style=wx.ALIGN_LEFT)
+            self.bck.Add(title, (0, 0), (1, 2),
+                         flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
+        else:
+            self.set_slicer(type, params)
+        ## Bindings
+        self.parent.Bind(EVT_SLICER, self.onEVT_SLICER)
+        self.parent.Bind(EVT_SLICER_PARS, self.onParamChange)
+
+    def onEVT_SLICER(self, event):
+        """
+        Process EVT_SLICER events
+        When the slicer changes, update the panel
+
+        :param event: EVT_SLICER event
+
+        """
+        event.Skip()
+        if event.obj_class == None:
+            self.set_slicer(None, None)
+        else:
+            self.set_slicer(event.type, event.params)
+
+    def set_slicer(self, type, params):
+        """
+        Rebuild the panel
+        """
+        self.bck.Clear(True)
+        self.type = type
+        if type == None:
+            label = "Right-click on 2D plot for slicer options"
+            title = wx.StaticText(self, -1, label, style=wx.ALIGN_LEFT)
+            self.bck.Add(title, (0, 0), (1, 2),
+                         flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
+        else:
+            title_text = str(type) + "Parameters"
+            title = wx.StaticText(self, -1, title_text,
+                                  style=wx.ALIGN_LEFT)
+            self.bck.Add(title, (0, 0), (1, 2),
+                         flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
+            n = 1
+            self.parameters = []
+            keys = params.keys()
+            keys.sort()
+            for item in keys:
+                if not item.lower() in ["num_points", "avg", "avg_error", "sum", "sum_error"]:
+                    n += 1
+                    text = wx.StaticText(self, -1, item, style=wx.ALIGN_LEFT)
+                    self.bck.Add(text, (n - 1, 0),
+                                 flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=15)
+                    ctl = wx.TextCtrl(self, -1, size=(80, 20),
+                                      style=wx.TE_PROCESS_ENTER)
+                    hint_msg = "Modify the value of %s to change " % item
+                    hint_msg += "the 2D slicer"
+                    ctl.SetToolTipString(hint_msg)
+                    ctl.SetValue(str(format_number(params[item])))
+                    self.Bind(wx.EVT_TEXT_ENTER, self.onTextEnter)
+                    ctl.Bind(wx.EVT_SET_FOCUS, self.onSetFocus)
+                    ctl.Bind(wx.EVT_KILL_FOCUS, self.onTextEnter)
+                    self.parameters.append([item, ctl])
+                    self.bck.Add(ctl, (n - 1, 1), flag=wx.TOP | wx.BOTTOM, border=0)
+            for item in keys:
+                if  item.lower() in ["num_points", "avg", "avg_error", "sum", "sum_error"]:
+                    n += 1
+                    text = wx.StaticText(self, -1, item + ": ", style=wx.ALIGN_LEFT)
+                    self.bck.Add(text, (n - 1, 0), flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL,
+                                 border=15)
+                    ctl = wx.StaticText(self, -1,
+                                        str(format_number(params[item])),
+                                        style=wx.ALIGN_LEFT)
+                    ctl.SetToolTipString("Result %s" % item)
+                    self.bck.Add(ctl, (n - 1, 1), flag=wx.TOP | wx.BOTTOM, border=0)
+        self.bck.Layout()
+        self.Layout()
+        psizer = self.parent.GetSizer()
+        if psizer != None:
+            psizer.Layout()
+
+    def onSetFocus(self, evt):
+        """
+        Highlight the txtcrtl
+        """
+        evt.Skip()
+        # Get a handle to the TextCtrl
+        widget = evt.GetEventObject()
+        # Select the whole control, after this event resolves
+        wx.CallAfter(widget.SetSelection, -1, -1)
+        return
+
+    def onParamChange(self, evt):
+        """
+        Receive and event and reset the text field contained in self.parameters
+
+        """
+        evt.Skip()
+        for item in self.parameters:
+            if item[0] in evt.params:
+                item[1].SetValue(format_number(evt.params[item[0]]))
+                item[1].Refresh()
+
+    def onTextEnter(self, evt):
+        """
+        Parameters have changed
+        """
+        evt.Skip()
+        params = {}
+        has_error = False
+        for item in self.parameters:
+            try:
+                params[item[0]] = float(item[1].GetValue())
+                item[1].SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))
+                item[1].Refresh()
+            except:
+                has_error = True
+                item[1].SetBackgroundColour("pink")
+                item[1].Refresh()
+
+        if has_error == False:
+            # Post parameter event
+            ## base is guiframe is this case
+            event = SlicerParameterEvent(type=self.type, params=params)
+            wx.PostEvent(self.base, event)
+
+    def on_close(self, event):
+        """
+        On Close Event
+        """
+        ID = self.uid
+        self.parent.delete_panel(ID)
+        self.frame.Destroy()
