Index: src/sas/qtgui/Plotting/Slicers/AnnulusSlicer.py
===================================================================
--- src/sas/qtgui/Plotting/Slicers/AnnulusSlicer.py	(revision 4992ff2626be19df7de9e5dfc0078b96bf47a75e)
+++ src/sas/qtgui/Plotting/Slicers/AnnulusSlicer.py	(revision e20870bce5dcfe5fc479f9b0858c50abf55ae0d0)
@@ -382,154 +382,3 @@
         self.set_cursor(x, self._inner_mouse_y)
 
-class CircularMask(BaseInteractor):
-    """
-     Draw a ring Given a radius
-    """
-    def __init__(self, base, axes, color='grey', zorder=3, side=None):
-        """
-        :param: the color of the line that defined the ring
-        :param r: the radius of the ring
-        :param sign: the direction of motion the the marker
-        """
-        BaseInteractor.__init__(self, base, axes, color=color)
-        self.markers = []
-        self.axes = axes
-        self.base = base
-        self.is_inside = side
-        self.qmax = min(numpy.fabs(self.base.data.xmax),
-                        numpy.fabs(self.base.data.xmin))  # must be positive
-        self.connect = self.base.connect
-
-        # Cursor position of Rings (Left(-1) or Right(1))
-        self.xmaxd = self.base.data.xmax
-        self.xmind = self.base.data.xmin
-
-        if (self.xmaxd + self.xmind) > 0:
-            self.sign = 1
-        else:
-            self.sign = -1
-        # Inner circle
-        self.outer_circle = RingInteractor(self, self.axes, 'blue',
-                                           zorder=zorder + 1, r=self.qmax / 1.8,
-                                           sign=self.sign)
-        self.outer_circle.qmax = self.qmax * 1.2
-        self.update()
-        self._post_data()
-
-    def set_layer(self, n):
-        """
-        Allow adding plot to the same panel
-        :param n: the number of layer
-        """
-        self.layernum = n
-        self.update()
-
-    def clear(self):
-        """
-        Clear the slicer and all connected events related to this slicer
-        """
-        self.clear_markers()
-        self.outer_circle.clear()
-        self.base.connect.clearall()
-
-    def update(self):
-        """
-        Respond to changes in the model by recalculating the profiles and
-        resetting the widgets.
-        """
-        # Update locations
-        self.outer_circle.update()
-        self._post_data()
-        out = self._post_data()
-        return out
-
-    def save(self, ev):
-        """
-        Remember the roughness for this layer and the next so that we
-        can restore on Esc.
-        """
-        self.outer_circle.save(ev)
-
-    def _post_data(self):
-        """
-        Uses annulus parameters to plot averaged data into 1D data.
-
-        :param nbins: the number of points to plot
-
-        """
-        # Data to average
-        data = self.base.data
-
-        # If we have no data, just return
-        if data is None:
-            return
-        mask = data.mask
-        from sas.sascalc.dataloader.manipulations import Ringcut
-
-        rmin = 0
-        rmax = numpy.fabs(self.outer_circle.get_radius())
-
-        # Create the data1D Q average of data2D
-        mask = Ringcut(r_min=rmin, r_max=rmax)
-
-        if self.is_inside:
-            out = (mask(data) == False)
-        else:
-            out = (mask(data))
-        return out
-
-
-    def moveend(self, ev):
-        """
-        Called when any dragging motion ends.
-        Post an event (type =SlicerParameterEvent)
-        to plotter 2D with a copy  slicer parameters
-        Call  _post_data method
-        """
-        self.base.thaw_axes()
-        # create a 1D data plot
-        self._post_data()
-
-    def restore(self):
-        """
-        Restore the roughness for this layer.
-        """
-        self.outer_circle.restore()
-
-    def move(self, x, y, ev):
-        """
-        Process move to a new position, making sure that the move is allowed.
-        """
-        pass
-
-    def set_cursor(self, x, y):
-        pass
-
-    def getParams(self):
-        """
-        Store a copy of values of parameters of the slicer into a dictionary.
-
-        :return params: the dictionary created
-
-        """
-        params = {}
-        params["outer_radius"] = numpy.fabs(self.outer_circle._inner_mouse_x)
-        return params
-
-    def setParams(self, params):
-        """
-        Receive a dictionary and reset the slicer with values contained
-        in the values of the dictionary.
-
-        :param params: a dictionary containing name of slicer parameters and
-            values the user assigned to the slicer.
-        """
-        outer = numpy.fabs(params["outer_radius"])
-        # Update the picture
-        self.outer_circle.set_cursor(outer, self.outer_circle._inner_mouse_y)
-        # Post the data given the nbins entered by the user
-        self._post_data()
-
-    def draw(self):
-        self.base.update()
-
+
Index: src/sas/qtgui/Plotting/Slicers/Arc.py
===================================================================
--- src/sas/qtgui/Plotting/Slicers/Arc.py	(revision cee5c78929349ae10afc88cb8b95e0c907f1826a)
+++ src/sas/qtgui/Plotting/Slicers/Arc.py	(revision e20870bce5dcfe5fc479f9b0858c50abf55ae0d0)
@@ -2,7 +2,7 @@
     Arc slicer for 2D data
 """
-import math
+import numpy as np
 
-from .BaseInteractor import BaseInteractor
+from sas.qtgui.Plotting.Slicers.BaseInteractor import BaseInteractor
 
 class ArcInteractor(BaseInteractor):
@@ -11,5 +11,5 @@
     """
     def __init__(self, base, axes, color='black', zorder=5, r=1.0,
-                 theta1=math.pi / 8, theta2=math.pi / 4):
+                 theta1=np.pi / 8, theta2=np.pi / 4):
         BaseInteractor.__init__(self, base, axes, color=color)
         self.markers = []
@@ -55,6 +55,6 @@
             Return arc radius
         """
-        radius = math.sqrt(math.pow(self._mouse_x, 2) + \
-                           math.pow(self._mouse_y, 2))
+        radius = np.sqrt(np.power(self._mouse_x, 2) + \
+                           np.power(self._mouse_y, 2))
         return radius
 
@@ -75,18 +75,18 @@
             self.theta2 = theta2
         while self.theta2 < self.theta1:
-            self.theta2 += (2 * math.pi)
-        while self.theta2 >= (self.theta1 + 2 * math.pi):
-            self.theta2 -= (2 * math.pi)
-        npts = int((self.theta2 - self.theta1) / (math.pi / 120))
+            self.theta2 += (2 * np.pi)
+        while self.theta2 >= (self.theta1 + 2 * np.pi):
+            self.theta2 -= (2 * np.pi)
+        npts = int((self.theta2 - self.theta1) / (np.pi / 120))
 
         if r is None:
-            self.radius = math.sqrt(math.pow(self._mouse_x, 2) + \
-                                     math.pow(self._mouse_y, 2))
+            self.radius = np.sqrt(np.power(self._mouse_x, 2) + \
+                                     np.power(self._mouse_y, 2))
         else:
             self.radius = r
         for i in range(self.npts):
             phi = (self.theta2 - self.theta1) / (self.npts - 1) * i + self.theta1
-            xval = 1.0 * self.radius * math.cos(phi)
-            yval = 1.0 * self.radius * math.sin(phi)
+            xval = 1.0 * self.radius * np.cos(phi)
+            yval = 1.0 * self.radius * np.sin(phi)
 
             x.append(xval)
Index: src/sas/qtgui/Plotting/Slicers/AzimutSlicer.py
===================================================================
--- src/sas/qtgui/Plotting/Slicers/AzimutSlicer.py	(revision b3e8629bf18b74f4214d6552e620fcbc4e73a28c)
+++ src/sas/qtgui/Plotting/Slicers/AzimutSlicer.py	(revision e20870bce5dcfe5fc479f9b0858c50abf55ae0d0)
@@ -4,6 +4,8 @@
 # TODO: NEED MAJOR REFACTOR
 #
-import math
-from .BaseInteractor import BaseInteractor
+import numpy as np
+from sas.qtgui.Plotting.Slicers.Arc import ArcInteractor
+from sas.qtgui.Plotting.Slicers.RadiusInteractor import RadiusInteractor
+from sas.qtgui.Plotting.Slicers.BaseInteractor import BaseInteractor
 
 class SectorInteractor(BaseInteractor):
@@ -22,9 +24,8 @@
         # # Number of points on the plot
         self.nbins = 20
-        theta1 = 2 * math.pi / 3
-        theta2 = -2 * math.pi / 3
+        theta1 = 2 * np.pi / 3
+        theta2 = -2 * np.pi / 3
 
         # Inner circle
-        from .Arc import ArcInteractor
         self.inner_circle = ArcInteractor(self, self.base.subplot,
                                           zorder=zorder,
@@ -40,5 +41,4 @@
         self.outer_circle.qmax = self.qmax * 1.2
         # self.outer_circle.set_cursor(self.base.qmax/1.8, 0)
-        from Edge import RadiusInteractor
         self.right_edge = RadiusInteractor(self, self.base.subplot,
                                            zorder=zorder + 1,
@@ -132,7 +132,4 @@
             phimin = self.left_edge.get_angle()
             phimax = self.right_edge.get_angle()
-        # print "phimin, phimax, rmin ,rmax",math.degrees(phimin),
-        # math.degrees(phimax), rmin ,rmax
-        # from sas.sascalc.dataloader.manipulations import SectorQ
 
         sect = new_sector(r_min=rmin, r_max=rmax,
Index: src/sas/qtgui/Plotting/Slicers/BoxSlicer.py
===================================================================
--- src/sas/qtgui/Plotting/Slicers/BoxSlicer.py	(revision 4992ff2626be19df7de9e5dfc0078b96bf47a75e)
+++ src/sas/qtgui/Plotting/Slicers/BoxSlicer.py	(revision e20870bce5dcfe5fc479f9b0858c50abf55ae0d0)
@@ -1,5 +1,5 @@
 import numpy
 
-from .BaseInteractor import BaseInteractor
+from sas.qtgui.Plotting.Slicers.BaseInteractor import BaseInteractor
 from sas.qtgui.Plotting.PlotterData import Data1D
 import sas.qtgui.Utilities.GuiUtils as GuiUtils
Index: src/sas/qtgui/Plotting/Slicers/BoxSum.py
===================================================================
--- src/sas/qtgui/Plotting/Slicers/BoxSum.py	(revision fbfc488f82ca4192217ad32b69f00fc4a4e137ab)
+++ src/sas/qtgui/Plotting/Slicers/BoxSum.py	(revision e20870bce5dcfe5fc479f9b0858c50abf55ae0d0)
@@ -8,5 +8,5 @@
 from sas.qtgui.Utilities.GuiUtils import formatNumber, toDouble
 
-from .BaseInteractor import BaseInteractor
+from sas.qtgui.Plotting.Slicers.BaseInteractor import BaseInteractor
 from sas.sascalc.dataloader.manipulations import Boxavg
 from sas.sascalc.dataloader.manipulations import Boxsum
Index: src/sas/qtgui/Plotting/Slicers/RadiusInteractor.py
===================================================================
--- src/sas/qtgui/Plotting/Slicers/RadiusInteractor.py	(revision e20870bce5dcfe5fc479f9b0858c50abf55ae0d0)
+++ src/sas/qtgui/Plotting/Slicers/RadiusInteractor.py	(revision e20870bce5dcfe5fc479f9b0858c50abf55ae0d0)
@@ -0,0 +1,129 @@
+import numpy as np
+from sas.qtgui.Plotting.Slicers.BaseInteractor import BaseInteractor
+
+
+class RadiusInteractor(BaseInteractor):
+    """
+    Select an annulus through a 2D plot
+    """
+    def __init__(self, base, axes, color='black', zorder=5, arc1=None,
+                 arc2=None, theta=np.pi / 8):
+        """
+        """
+        _BaseInteractor.__init__(self, base, axes, color=color)
+        self.markers = []
+        self.axes = axes
+        self.r1 = arc1.get_radius()
+        self.r2 = arc2.get_radius()
+        self.theta = theta
+        self.save_theta = theta
+        self.move_stop = False
+        self.theta_left = None
+        self.theta_right = None
+        self.arc1 = arc1
+        self.arc2 = arc2
+        x1 = self.r1 * np.cos(self.theta)
+        y1 = self.r1 * np.sin(self.theta)
+        x2 = self.r2 * np.cos(self.theta)
+        y2 = self.r2 * np.sin(self.theta)
+        self.line = self.axes.plot([x1, x2], [y1, y2],
+                                   linestyle='-', marker='',
+                                   color=self.color,
+                                   visible=True)[0]
+        self.phi = theta
+        self.npts = 20
+        self.has_move = False
+        self.connect_markers([self.line])
+        self.update()
+
+    def set_layer(self, n):
+        """
+        """
+        self.layernum = n
+        self.update()
+
+    def clear(self):
+        """
+        """
+        self.clear_markers()
+        try:
+            self.line.remove()
+        except:
+            # Old version of matplotlib
+            for item in range(len(self.axes.lines)):
+                del self.axes.lines[0]
+
+    def get_angle(self):
+        """
+        """
+        return self.theta
+
+    def update(self, r1=None, r2=None, theta=None):
+        """
+        Draw the new roughness on the graph.
+        """
+        if r1 is not None:
+            self.r1 = r1
+        if r2 is not None:
+            self.r2 = r2
+        if theta is not None:
+            self.theta = theta
+        x1 = self.r1 * np.cos(self.theta)
+        y1 = self.r1 * np.sin(self.theta)
+        x2 = self.r2 * np.cos(self.theta)
+        y2 = self.r2 * np.sin(self.theta)
+        self.line.set(xdata=[x1, x2], ydata=[y1, y2])
+
+    def save(self, ev):
+        """
+        Remember the roughness for this layer and the next so that we
+        can restore on Esc.
+        """
+        self.save_theta = np.arctan2(ev.y, ev.x)
+        self.base.freeze_axes()
+
+    def moveend(self, ev):
+        """
+        """
+        self.has_move = False
+        self.base.moveend(ev)
+
+    def restore(self, ev):
+        """
+        Restore the roughness for this layer.
+        """
+        self.theta = self.save_theta
+
+    def move(self, x, y, ev):
+        """
+        Process move to a new position, making sure that the move is allowed.
+        """
+        self.theta = np.arctan2(y, x)
+        self.has_move = True
+        self.base.base.update()
+
+    def set_cursor(self, r_min, r_max, theta):
+        """
+        """
+        self.theta = theta
+        self.r1 = r_min
+        self.r2 = r_max
+        self.update()
+
+    def get_params(self):
+        """
+        """
+        params = {}
+        params["radius1"] = self.r1
+        params["radius2"] = self.r2
+        params["theta"] = self.theta
+        return params
+
+    def set_params(self, params):
+        """
+        """
+        x1 = params["radius1"]
+        x2 = params["radius2"]
+        theta = params["theta"]
+        self.set_cursor(x1, x2, theta)
+
Index: src/sas/qtgui/Plotting/Slicers/SectorSlicer.py
===================================================================
--- src/sas/qtgui/Plotting/Slicers/SectorSlicer.py	(revision d6b8a1dfaf6521ae4a9054d5195def2810d6d8bc)
+++ src/sas/qtgui/Plotting/Slicers/SectorSlicer.py	(revision e20870bce5dcfe5fc479f9b0858c50abf55ae0d0)
@@ -5,5 +5,5 @@
 import logging
 
-from .BaseInteractor import BaseInteractor
+from sas.qtgui.Plotting.Slicers.BaseInteractor import BaseInteractor
 from sas.qtgui.Plotting.PlotterData import Data1D
 import sas.qtgui.Utilities.GuiUtils as GuiUtils
@@ -283,4 +283,5 @@
         self.markers = []
         self.axes = axes
+        self.color = color
         # compute the value of the angle between the current line and
         # the x-axis
@@ -438,5 +439,6 @@
         if self.phi > numpy.pi:
             self.phi = 2 * numpy.pi - numpy.fabs(self.theta2 - self.theta)
-        self.base.base.update()
+        #self.base.base.update()
+        self.base.update()
 
     def set_cursor(self, x, y):
@@ -464,4 +466,5 @@
 
         self.markers = []
+        self.color = color
         self.axes = axes
         self.save_theta = theta
@@ -541,5 +544,6 @@
         self.theta = numpy.arctan2(y, x)
         self.has_move = True
-        self.base.base.update()
+        #self.base.base.update()
+        self.base.update()
 
     def set_cursor(self, x, y):
