Index: sasview/wxcruft.py
===================================================================
--- sasview/wxcruft.py	(revision 6f3fea20af1759130054b5e4cfa4a251dc06cf52)
+++ sasview/wxcruft.py	(revision 2d88fc4a6cc278c2ea7ac05c75e83d324432f287)
@@ -57,5 +57,5 @@
 
     def __init__(self, millis, callableObj, *args, **kwargs):
-        print "=================== entering CallLater constructor"
+        # print "=================== entering CallLater constructor"
         assert callable(callableObj), "callableObj is not callable"
         self.millis = millis
@@ -81,5 +81,5 @@
             self.SetArgs(*args, **kwargs)
         self.Stop()
-        self.timer = wx.PyTimer(self.Notify, id=self.id)
+        self.timer = PyTimer(self.Notify, id=self.id)  # PAK
         self.timer.Start(self.millis, wx.TIMER_ONE_SHOT)
         self.running = True
Index: src/sas/guiframe/local_perspectives/plotting/Plotter1D.py
===================================================================
--- src/sas/guiframe/local_perspectives/plotting/Plotter1D.py	(revision 098f3d277d54e6ae4bae35ed0188be84b67fb171)
+++ src/sas/guiframe/local_perspectives/plotting/Plotter1D.py	(revision 2d88fc4a6cc278c2ea7ac05c75e83d324432f287)
@@ -36,4 +36,15 @@
     return [k for k, v in dic.iteritems() if v == val][0]
 
+class IdCollection:
+    def __init__(self):
+        self._ids = []
+        self._index = 0
+    def next(self):
+        if len(self._ids) == self._index:
+           self._ids.append(wx.NewId())
+        self._index += 1
+        return self._ids[self._index-1]
+    def reset(self):
+        self._index = 0
 
 
@@ -52,4 +63,5 @@
     ## Group ID
     group_id = None
+    _menu_ids = IdCollection()
 
     def __init__(self, parent, id=-1, color=None,
@@ -556,14 +568,15 @@
         self._slicerpop.set_plots(self.plots)
         self._slicerpop.set_graph(self.graph)
+        self._menu_ids.reset()
         if not self.graph.selected_plottable in self.plots:
             # Various plot options
-            wx_id = wx.NewId()
+            wx_id = self._menu_ids.next()
             self._slicerpop.Append(wx_id, '&Save Image', 'Save image as PNG')
             wx.EVT_MENU(self, wx_id, self.onSaveImage)
-            wx_id = wx.NewId()
+            wx_id = self._menu_ids.next()
             self._slicerpop.Append(wx_id, '&Print Image', 'Print image ')
             wx.EVT_MENU(self, wx_id, self.onPrint)
 
-            wx_id = wx.NewId()
+            wx_id = self._menu_ids.next()
             self._slicerpop.Append(wx_id, '&Copy to Clipboard',
                                    'Copy to the clipboard')
@@ -582,8 +595,8 @@
                     continue
 
-            wx_id = wx.NewId()
+            wx_id = self._menu_ids.next()
             plot_menu.Append(wx_id, "&DataInfo", name)
             wx.EVT_MENU(self, wx_id, self. _onDataShow)
-            wx_id = wx.NewId()
+            wx_id = self._menu_ids.next()
             plot_menu.Append(wx_id, "&Save Points as a File", name)
             wx.EVT_MENU(self, wx_id, self._onSave)
@@ -597,5 +610,5 @@
 
                     try:
-                        wx_id = wx.NewId()
+                        wx_id = self._menu_ids.next()
                         plot_menu.Append(wx_id, item[0], name)
                         wx.EVT_MENU(self, wx_id, item[2])
@@ -607,14 +620,14 @@
 
             if self.parent.ClassName.count('wxDialog') == 0:
-                wx_id = wx.NewId()
+                wx_id = self._menu_ids.next()
                 plot_menu.Append(wx_id, '&Linear Fit', name)
                 wx.EVT_MENU(self, wx_id, self.onFitting)
                 plot_menu.AppendSeparator()
 
-                wx_id = wx.NewId()
+                wx_id = self._menu_ids.next()
                 plot_menu.Append(wx_id, "Remove", name)
                 wx.EVT_MENU(self, wx_id, self._onRemove)
                 if not plot.is_data:
-                    wx_id = wx.NewId()
+                    wx_id = self._menu_ids.next()
                     plot_menu.Append(wx_id, '&Freeze', name)
                     wx.EVT_MENU(self, wx_id, self.onFreeze)
@@ -622,5 +635,5 @@
 
                 if plot.is_data:
-                    wx_id = wx.NewId()
+                    wx_id = self._menu_ids.next()
                     self.hide_menu = plot_menu.Append(wx_id, "Hide Error Bar", name)
 
@@ -636,8 +649,8 @@
                     plot_menu.AppendSeparator()
 
-                wx_id = wx.NewId()
+                wx_id = self._menu_ids.next()
                 plot_menu.Append(wx_id, '&Modify Plot Property', name)
                 wx.EVT_MENU(self, wx_id, self.createAppDialog)
-            wx_id = wx.NewId()
+            wx_id = self._menu_ids.next()
             # plot_menu.SetTitle(name)
             self._slicerpop.AppendMenu(wx_id, '&%s' % name, plot_menu)
@@ -648,9 +661,9 @@
             loc_menu = wx.Menu()
             for label in self._loc_labels:
-                wx_id = wx.NewId()
+                wx_id = self._menu_ids.next()
                 loc_menu.Append(wx_id, str(label), str(label))
                 wx.EVT_MENU(self, wx_id, self.onChangeLegendLoc)
 
-            wx_id = wx.NewId()
+            wx_id = self._menu_ids.next()
             self._slicerpop.Append(wx_id, '&Modify Graph Appearance',
                                    'Modify graph appearance')
@@ -660,16 +673,16 @@
 
             if self.position != None:
-                wx_id = wx.NewId()
+                wx_id = self._menu_ids.next()
                 self._slicerpop.Append(wx_id, '&Add Text')
                 wx.EVT_MENU(self, wx_id, self._on_addtext)
-                wx_id = wx.NewId()
+                wx_id = self._menu_ids.next()
                 self._slicerpop.Append(wx_id, '&Remove Text')
                 wx.EVT_MENU(self, wx_id, self._on_removetext)
                 self._slicerpop.AppendSeparator()
-            wx_id = wx.NewId()
+            wx_id = self._menu_ids.next()
             self._slicerpop.Append(wx_id, '&Change Scale')
             wx.EVT_MENU(self, wx_id, self._onProperties)
             self._slicerpop.AppendSeparator()
-            wx_id = wx.NewId()
+            wx_id = self._menu_ids.next()
             self._slicerpop.Append(wx_id, '&Reset Graph Range')
             wx.EVT_MENU(self, wx_id, self.onResetGraph)
@@ -677,5 +690,5 @@
             if self.parent.ClassName.count('wxDialog') == 0:
                 self._slicerpop.AppendSeparator()
-                wx_id = wx.NewId()
+                wx_id = self._menu_ids.next()
                 self._slicerpop.Append(wx_id, '&Window Title')
                 wx.EVT_MENU(self, wx_id, self.onChangeCaption)
Index: src/sas/guiframe/local_perspectives/plotting/Plotter2D.py
===================================================================
--- src/sas/guiframe/local_perspectives/plotting/Plotter2D.py	(revision 098f3d277d54e6ae4bae35ed0188be84b67fb171)
+++ src/sas/guiframe/local_perspectives/plotting/Plotter2D.py	(revision 2d88fc4a6cc278c2ea7ac05c75e83d324432f287)
@@ -287,17 +287,18 @@
 
         """
+        self._menu_ids.reset()
         slicerpop = PanelMenu()
         slicerpop.set_plots(self.plots)
         slicerpop.set_graph(self.graph)
 
-        wx_id = wx.NewId()
+        wx_id = self._menu_ids.next()
         slicerpop.Append(wx_id, '&Save Image')
         wx.EVT_MENU(self, wx_id, self.onSaveImage)
 
-        wx_id = wx.NewId()
+        wx_id = self._menu_ids.next()
         slicerpop.Append(wx_id, '&Print Image', 'Print image')
         wx.EVT_MENU(self, wx_id, self.onPrint)
 
-        wx_id = wx.NewId()
+        wx_id = self._menu_ids.next()
         slicerpop.Append(wx_id, '&Copy to Clipboard', 'Copy to the clipboard')
         wx.EVT_MENU(self, wx_id, self.OnCopyFigureMenu)
@@ -305,9 +306,9 @@
         # saving data
         plot = self.data2D
-        wx_id = wx.NewId()
+        wx_id = self._menu_ids.next()
         slicerpop.Append(wx_id, "&Data Info")
         wx.EVT_MENU(self, wx_id, self._onDataShow)
 
-        wx_id = wx.NewId()
+        wx_id = self._menu_ids.next()
         slicerpop.Append(wx_id, "&Save as a File (DAT)")
         self.action_ids[str(wx_id)] = plot
@@ -322,5 +323,5 @@
                 for item in item_list:
                     try:
-                        wx_id = wx.NewId()
+                        wx_id = self._menu_ids.next()
                         slicerpop.Append(wx_id, item[0], item[1])
                         wx.EVT_MENU(self, wx_id, item[2])
@@ -331,38 +332,38 @@
                 slicerpop.AppendSeparator()
 
-            wx_id = wx.NewId()
+            wx_id = self._menu_ids.next()
             slicerpop.Append(wx_id, '&Perform Circular Average')
             wx.EVT_MENU(self, wx_id, self.onCircular) \
             # For Masked Data
             if not plot.mask.all():
-                wx_id = wx.NewId()
+                wx_id = self._menu_ids.next()
                 slicerpop.Append(wx_id, '&Masked Circular Average')
                 wx.EVT_MENU(self, wx_id, self.onMaskedCircular)
-            wx_id = wx.NewId()
+            wx_id = self._menu_ids.next()
             slicerpop.Append(wx_id, '&Sector [Q View]')
             wx.EVT_MENU(self, wx_id, self.onSectorQ)
-            wx_id = wx.NewId()
+            wx_id = self._menu_ids.next()
             slicerpop.Append(wx_id, '&Annulus [Phi View ]')
             wx.EVT_MENU(self, wx_id, self.onSectorPhi)
-            wx_id = wx.NewId()
+            wx_id = self._menu_ids.next()
             slicerpop.Append(wx_id, '&Box Sum')
             wx.EVT_MENU(self, wx_id, self.onBoxSum)
-            wx_id = wx.NewId()
+            wx_id = self._menu_ids.next()
             slicerpop.Append(wx_id, '&Box Averaging in Qx')
             wx.EVT_MENU(self, wx_id, self.onBoxavgX)
-            wx_id = wx.NewId()
+            wx_id = self._menu_ids.next()
             slicerpop.Append(wx_id, '&Box Averaging in Qy')
             wx.EVT_MENU(self, wx_id, self.onBoxavgY)
             if self.slicer != None:
-                wx_id = wx.NewId()
+                wx_id = self._menu_ids.next()
                 slicerpop.Append(wx_id, '&Clear Slicer')
                 wx.EVT_MENU(self, wx_id, self.onClearSlicer)
                 if self.slicer.__class__.__name__ != "BoxSum":
-                    wx_id = wx.NewId()
+                    wx_id = self._menu_ids.next()
                     slicerpop.Append(wx_id, '&Edit Slicer Parameters')
                     wx.EVT_MENU(self, wx_id, self._onEditSlicer)
             slicerpop.AppendSeparator()
 
-        wx_id = wx.NewId()
+        wx_id = self._menu_ids.next()
         slicerpop.Append(wx_id, '&Edit Graph Label', 'Edit Graph Label')
         wx.EVT_MENU(self, wx_id, self.onEditLabels)
@@ -371,20 +372,20 @@
         # ILL mod here
 
-        wx_id = wx.NewId()
+        wx_id = self._menu_ids.next()
         slicerpop.Append(wx_id, '&Modify graph appearance', 'Modify graph appearance')
         wx.EVT_MENU(self, wx_id, self.modifyGraphAppearance)
         slicerpop.AppendSeparator()
 
-        wx_id = wx.NewId()
+        wx_id = self._menu_ids.next()
         slicerpop.Append(wx_id, '&2D Color Map')
         wx.EVT_MENU(self, wx_id, self._onEditDetector)
         slicerpop.AppendSeparator()
 
-        wx_id = wx.NewId()
+        wx_id = self._menu_ids.next()
         slicerpop.Append(wx_id, '&Toggle Linear/Log Scale')
         wx.EVT_MENU(self, wx_id, self._onToggleScale)
 
         slicerpop.AppendSeparator()
-        wx_id = wx.NewId()
+        wx_id = self._menu_ids.next()
         slicerpop.Append(wx_id, '&Window Title')
         wx.EVT_MENU(self, wx_id, self.onChangeCaption)
Index: src/sas/plottools/toolbar.py
===================================================================
--- src/sas/plottools/toolbar.py	(revision d3d67f06423dc337fd087c81b7cbd502dc7e1084)
+++ src/sas/plottools/toolbar.py	(revision 2d88fc4a6cc278c2ea7ac05c75e83d324432f287)
@@ -19,4 +19,13 @@
 
 class NavigationToolBar(NavigationToolbar2WxAgg):
+    _NTB2_HOME = wx.NewId()
+    _NTB2_BACK = wx.NewId()
+    _NTB2_FORWARD = wx.NewId()
+    _NTB2_PAN = wx.NewId()
+    _NTB2_ZOOM = wx.NewId()
+    _NTB2_SAVE = wx.NewId()
+    _NTB2_PRINT = wx.NewId()
+    _NTB2_RESET = wx.NewId()
+    _NTB2_COPY = wx.NewId()
     """
     Overwrite matplotlib toolbar
@@ -31,12 +40,4 @@
     def _init_toolbar(self):
         self._parent = self.canvas.GetParent()
-        self._NTB2_HOME = wx.NewId()
-        self._NTB2_BACK = wx.NewId()
-        self._NTB2_FORWARD = wx.NewId()
-        self._NTB2_PAN = wx.NewId()
-        self._NTB2_ZOOM = wx.NewId()
-        self._NTB2_SAVE = wx.NewId()
-        self._NTB2_PRINT = wx.NewId()
-        self._NTB2_RESET = wx.NewId()
 
         # for mpl 1.2+ compatibility
@@ -101,16 +102,13 @@
         """
         # Slicer plot popup menu
-        wx_id = wx.NewId()
         popup = wx.Menu()
-        popup.Append(wx_id, '&Save image', 'Save image as PNG')
-        wx.EVT_MENU(self, wx_id, self.save_figure)
+        popup.Append(self._NTB2_SAVE, '&Save image', 'Save image as PNG')
+        wx.EVT_MENU(self, self._NTB2_SAVE, self.save_figure)
 
-        wx_id = wx.NewId()
-        popup.Append(wx_id, '&Print image', 'Print image ')
-        wx.EVT_MENU(self, wx_id, self.print_figure)
+        popup.Append(self._NTB2_PRINT, '&Print image', 'Print image ')
+        wx.EVT_MENU(self, self._NTB2_PRINT, self.print_figure)
 
-        wx_id = wx.NewId()
-        popup.Append(wx_id, '&Copy to Clipboard', 'Copy image to the clipboard')
-        wx.EVT_MENU(self, wx_id, self.copy_figure)
+        popup.Append(self._NTB2_COPY, '&Copy to Clipboard', 'Copy image to the clipboard')
+        wx.EVT_MENU(self, self._NTB2_COPY, self.copy_figure)
 
         # Show the popup menu relative to the location of the toolbar
