Index: src/sas/sasgui/guiframe/local_perspectives/plotting/Plotter2D.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/Plotter2D.py	(revision b2b3693291d8e49fd33718753161206c1964548c)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/Plotter2D.py	(revision dfa1579dc713e50371113a003b4c13111ea45202)
@@ -359,5 +359,6 @@
                 if self.slicer.__class__.__name__ != "BoxSum":
                     wx_id = ids.next()
-                    slicerpop.Append(wx_id, '&Edit Slicer Parameters')
+                    name = '&Edit Slicer Parameters and Batch Slicing'
+                    slicerpop.Append(wx_id, name)
                     wx.EVT_MENU(self, wx_id, self._onEditSlicer)
             slicerpop.AppendSeparator()
@@ -530,13 +531,13 @@
 
         """
-        ## Clear current slicer
+        # 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,5 +571,5 @@
         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))
@@ -576,7 +577,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)
@@ -597,9 +598,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 \
@@ -613,6 +614,5 @@
         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))
@@ -627,6 +627,6 @@
 
         """
-        if self.slicer != None:
-            from SlicerParameters import SlicerParameterPanel
+        if self.slicer is not None:
+            from parameters_panel_slicer import SlicerParameterPanel
             dialog = SlicerParameterPanel(self, -1, "Slicer Parameters")
             dialog.set_slicer(self.slicer.__class__.__name__,
@@ -666,5 +666,5 @@
         params = self.slicer.get_params()
         ## Create a new panel to display results of summation of Data2D
-        from slicerpanel import SlicerPanel
+        from parameters_panel_boxsum import SlicerPanel
         win = MDIFrame(self.parent, None, 'None', (100, 200))
         new_panel = SlicerPanel(parent=win, id=-1,
@@ -717,5 +717,5 @@
         Clear the slicer on the plot
         """
-        if not self.slicer == None:
+        if self.slicer is not None:
             self.slicer.clear()
             self.subplot.figure.canvas.draw()
@@ -733,5 +733,5 @@
         """
         event_id = str(evt.GetId())
-        if self.parent != None:
+        if self.parent is not None:
             self._default_save_location = self.parent._default_save_location
         default_name = self.plots[self.graph.selected_plottable].label
@@ -756,10 +756,10 @@
         if default_name.count('.') > 0:
             default_name = default_name.split('.')[0]
-        #default_name += "_out"
-        if self.parent != None:
+        if self.parent is not 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: c/sas/sasgui/guiframe/local_perspectives/plotting/SlicerParameters.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/SlicerParameters.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
+++ 	(revision )
@@ -1,146 +1,0 @@
-
-
-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/parameters_panel_boxsum.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/parameters_panel_boxsum.py	(revision 39f0bf40d4c6ac22a3a4e2a133263a5da2bfe588)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/parameters_panel_boxsum.py	(revision 39f0bf40d4c6ac22a3a4e2a133263a5da2bfe588)
@@ -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()
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/parameters_panel_slicer.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/parameters_panel_slicer.py	(revision f15da54b9dc574a0b4c2ebe235578b855ff86c72)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/parameters_panel_slicer.py	(revision f15da54b9dc574a0b4c2ebe235578b855ff86c72)
@@ -0,0 +1,278 @@
+
+
+import wx
+import wx.lib.newevent
+import time
+#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, SlicerEvent
+from Plotter2D import ModelPanel2D
+from sas.sascalc.dataloader.data_info import Data1D, Data2D
+ApplyParams, EVT_APPLY_PARAMS = wx.lib.newevent.NewEvent()
+
+
+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)
+        self.Bind(EVT_APPLY_PARAMS, self.apply_params_list)
+
+    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 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:
+                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)
+            ix = 0
+            iy += 1
+
+            # Change slicer within the window
+            txt = "Slicer"
+            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)
+            type_list = ["SectorInteractor", "AnnulusInteractor",
+                         "BoxInteractorX", "BoxInteractorY"]
+            self.type_select = wx.ComboBox(parent=self, choices=type_list)
+            self.Bind(wx.EVT_COMBOBOX, self.onChangeSlicer)
+            index = self.type_select.FindString(self.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
+            ln = wx.StaticLine(self, -1, style=wx.LI_VERTICAL)
+            ln.SetSize((60,60))
+            self.bck.Add(ln, (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)
+            iy += 1
+            self.process_list()
+            self.bck.Add(self.data_list, (iy, ix), (1, 1),
+                         wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
+            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.onBatchSlice)
+            self.bck.Add(self.batch_slicer_button, (iy, ix), (1, 1),
+                             wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
+            # TODO: Select all button
+            # TODO: Check box for saving file
+            # TODO: append to file information and file type
+            # TODO: Send to fitting options
+
+            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 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 not has_error:
+            # Post parameter event
+            # parent here is plotter2D
+            event = SlicerParameterEvent(type=self.type, params=params)
+            wx.PostEvent(self.parent, event)
+
+    def onBatchSlice(self, evt=None):
+        """
+        Method invoked with batch slicing button is pressed
+        :param evt: Event triggering hide/show of the batch slicer parameters
+        """
+        apply_to_list = []
+        spp = self.parent.parent
+        params = self.parent.slicer.get_params()
+        type = self.type_select.GetStringSelection()
+
+        # Find loaded 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 to selected panels
+        for item in apply_to_list:
+            self._apply_slicer_to_plot(item, type)
+
+        event = ApplyParams(params=params, plot_list=apply_to_list)
+        wx.PostEvent(self, event)
+
+        # TODO: save file (if desired)
+        # TODO: send to fitting (if desired)
+
+    def onChangeSlicer(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, type=None):
+        """
+        Apply a slicer to *any* plot window, not just parent window
+        :param plot: 2D plot panel to apply a slicer to
+        :param type: The type of slicer to apply to the panel
+        :return: Return the plot with the slicer applied
+        """
+        if type is None:
+            type = self.type_select.GetStringSelection()
+        if type == "SectorInteractor":
+            plot.onSectorQ(None)
+        elif type == "AnnulusInteractor":
+            plot.onSectorPhi(None)
+        elif type == "BoxInteractorX":
+            plot.onBoxavgX(None)
+        elif type == "BoxInteractorY":
+            plot.onBoxavgY(None)
+
+    def process_list(self):
+        self.checkme = None
+        main_window = self.parent.parent
+        self.loaded_data = []
+        id = wx.NewId()
+        for key, value in main_window.plot_panels.iteritems():
+            if isinstance(value, ModelPanel2D):
+                self.loaded_data.append(value.data2D.name)
+                if value.data2D.id == self.parent.data2D.id:
+                    self.checkme = self.loaded_data.index(value.data2D.name)
+        self.data_list = wx.CheckListBox(parent=self, id=id,
+                                         choices=self.loaded_data,
+                                         name="Apply Slicer to 2D Plots:")
+        if self.checkme is not None:
+            self.data_list.Check(self.checkme)
+        self.data_list.Bind(wx.EVT_CHECKLISTBOX, self.onCheckBoxList)
+
+    def onCheckBoxList(self, e):
+        """
+        Do not allow a checkbox to be unchecked
+        :param e: Event triggered when a checkbox list item is checked
+        """
+        index = e.GetSelection()
+        if index == self.checkme:
+            self.data_list.Check(index)
+
+    def apply_params_list(self, evt=None):
+        for item in evt.plot_list:
+            item.slicer.set_params(evt.params)
+            item.slicer.base.update()
+        self.Destroy()
Index: c/sas/sasgui/guiframe/local_perspectives/plotting/slicerpanel.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/slicerpanel.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
+++ 	(revision )
@@ -1,170 +1,0 @@
-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()
