Index: src/sas/data_util/calcthread.py
===================================================================
--- src/sas/data_util/calcthread.py	(revision 794922220f2fb3b23dd08c648aabf87b4850596c)
+++ src/sas/data_util/calcthread.py	(revision 373d4eebe3a548f70f917fec87bdb5280e67d1e0)
@@ -84,5 +84,5 @@
     should be implemented vary from framework to framework.
 
-    For wx, something like the following is needed: ::
+    For wx, something like the following is needed::
 
         import wx, wx.lib.newevent
Index: src/sas/guiframe/plugin_base.py
===================================================================
--- src/sas/guiframe/plugin_base.py	(revision 0fa825ca15a5d51759fc3bbcd6281549c01117bf)
+++ src/sas/guiframe/plugin_base.py	(revision 373d4eebe3a548f70f917fec87bdb5280e67d1e0)
@@ -13,5 +13,5 @@
 ################################################################################
 
-class PluginBase:
+class PluginBase(object):
     """
     This class defines the interface for a Plugin class
@@ -36,5 +36,5 @@
     def __init__(self, name="Test_plugin", standalone=True):
         """
-            Abstract class for gui_manager Plugins.
+        Abstract class for gui_manager Plugins.
         """
         # Define if the plugin is local to Viewerframe  and always active
Index: src/sas/perspectives/fitting/basepage.py
===================================================================
--- src/sas/perspectives/fitting/basepage.py	(revision acf8e4a58aad50df871a259b771db1d582942abb)
+++ src/sas/perspectives/fitting/basepage.py	(revision 373d4eebe3a548f70f917fec87bdb5280e67d1e0)
@@ -398,88 +398,4 @@
             batch_menu.Enable(self.batch_on and flag)
 
-    class ModelTextCtrl(wx.TextCtrl):
-        """
-        Text control for model and fit parameters.
-        Binds the appropriate events for user interactions.
-        Default callback methods can be overwritten on initialization
-
-        :param kill_focus_callback: callback method for EVT_KILL_FOCUS event
-        :param set_focus_callback:  callback method for EVT_SET_FOCUS event
-        :param mouse_up_callback:   callback method for EVT_LEFT_UP event
-        :param text_enter_callback: callback method for EVT_TEXT_ENTER event
-
-        """
-        ## Set to True when the mouse is clicked while whole string is selected
-        full_selection = False
-        ## Call back for EVT_SET_FOCUS events
-        _on_set_focus_callback = None
-
-        def __init__(self, parent, id=-1,
-                     value=wx.EmptyString,
-                     pos=wx.DefaultPosition,
-                     size=wx.DefaultSize,
-                     style=0,
-                     validator=wx.DefaultValidator,
-                     name=wx.TextCtrlNameStr,
-                     kill_focus_callback=None,
-                     set_focus_callback=None,
-                     mouse_up_callback=None,
-                     text_enter_callback=None):
-
-            wx.TextCtrl.__init__(self, parent, id, value, pos,
-                                 size, style, validator, name)
-
-            # Bind appropriate events
-            self._on_set_focus_callback = parent.onSetFocus \
-                      if set_focus_callback is None else set_focus_callback
-            self.Bind(wx.EVT_SET_FOCUS, self._on_set_focus)
-            self.Bind(wx.EVT_KILL_FOCUS, self._silent_kill_focus \
-                      if kill_focus_callback is None else kill_focus_callback)
-            self.Bind(wx.EVT_TEXT_ENTER, parent._onparamEnter \
-                      if text_enter_callback is None else text_enter_callback)
-            if not ON_MAC:
-                self.Bind(wx.EVT_LEFT_UP, self._highlight_text \
-                          if mouse_up_callback is None else mouse_up_callback)
-
-        def _on_set_focus(self, event):
-            """
-            Catch when the text control is set in focus to highlight the whole
-            text if necessary
-
-            :param event: mouse event
-
-            """
-            event.Skip()
-            self.full_selection = True
-            return self._on_set_focus_callback(event)
-
-        def _highlight_text(self, event):
-            """
-            Highlight text of a TextCtrl only of no text has be selected
-
-            :param event: mouse event
-
-            """
-            # Make sure the mouse event is available to other listeners
-            event.Skip()
-            control = event.GetEventObject()
-            if self.full_selection:
-                self.full_selection = False
-                # Check that we have a TextCtrl
-                if issubclass(control.__class__, wx.TextCtrl):
-                    # Check whether text has been selected,
-                    # if not, select the whole string
-                    (start, end) = control.GetSelection()
-                    if start == end:
-                        control.SetSelection(-1, -1)
-
-        def _silent_kill_focus(self, event):
-            """
-            Save the state of the page
-            """
-
-            event.Skip()
-            #pass
-
     def set_page_info(self, page_info):
         """
@@ -1680,4 +1596,5 @@
                                                   draw=False)
                 elif not self._is_2D():
+                    enable_smearer = not self.disable_smearer.GetValue()
                     self._manager.set_smearer(smearer=temp_smearer,
                                               qmin=float(self.qmin_x),
@@ -1685,6 +1602,6 @@
                                               fid=self.data.id,
                                               qmax=float(self.qmax_x),
-                            enable_smearer=not self.disable_smearer.GetValue(),
-                                                 draw=False)
+                                              enable_smearer=enable_smearer,
+                                              draw=False)
                     if self.data != None:
                         index_data = ((self.qmin_x <= self.data.x) & \
@@ -3774,2 +3691,87 @@
         toggle view of model from 1D to 2D  or 2D from 1D if implemented
         """
+
+class ModelTextCtrl(wx.TextCtrl):
+    """
+    Text control for model and fit parameters.
+    Binds the appropriate events for user interactions.
+    Default callback methods can be overwritten on initialization
+
+    :param kill_focus_callback: callback method for EVT_KILL_FOCUS event
+    :param set_focus_callback:  callback method for EVT_SET_FOCUS event
+    :param mouse_up_callback:   callback method for EVT_LEFT_UP event
+    :param text_enter_callback: callback method for EVT_TEXT_ENTER event
+
+    """
+    ## Set to True when the mouse is clicked while whole string is selected
+    full_selection = False
+    ## Call back for EVT_SET_FOCUS events
+    _on_set_focus_callback = None
+
+    def __init__(self, parent, id=-1,
+                 value=wx.EmptyString,
+                 pos=wx.DefaultPosition,
+                 size=wx.DefaultSize,
+                 style=0,
+                 validator=wx.DefaultValidator,
+                 name=wx.TextCtrlNameStr,
+                 kill_focus_callback=None,
+                 set_focus_callback=None,
+                 mouse_up_callback=None,
+                 text_enter_callback=None):
+
+        wx.TextCtrl.__init__(self, parent, id, value, pos,
+                             size, style, validator, name)
+
+        # Bind appropriate events
+        self._on_set_focus_callback = parent.onSetFocus \
+            if set_focus_callback is None else set_focus_callback
+        self.Bind(wx.EVT_SET_FOCUS, self._on_set_focus)
+        self.Bind(wx.EVT_KILL_FOCUS, self._silent_kill_focus \
+            if kill_focus_callback is None else kill_focus_callback)
+        self.Bind(wx.EVT_TEXT_ENTER, parent._onparamEnter \
+            if text_enter_callback is None else text_enter_callback)
+        if not ON_MAC:
+            self.Bind(wx.EVT_LEFT_UP, self._highlight_text \
+                if mouse_up_callback is None else mouse_up_callback)
+
+    def _on_set_focus(self, event):
+        """
+        Catch when the text control is set in focus to highlight the whole
+        text if necessary
+
+        :param event: mouse event
+
+        """
+        event.Skip()
+        self.full_selection = True
+        return self._on_set_focus_callback(event)
+
+    def _highlight_text(self, event):
+        """
+        Highlight text of a TextCtrl only of no text has be selected
+
+        :param event: mouse event
+
+        """
+        # Make sure the mouse event is available to other listeners
+        event.Skip()
+        control = event.GetEventObject()
+        if self.full_selection:
+            self.full_selection = False
+            # Check that we have a TextCtrl
+            if issubclass(control.__class__, wx.TextCtrl):
+                # Check whether text has been selected,
+                # if not, select the whole string
+                (start, end) = control.GetSelection()
+                if start == end:
+                    control.SetSelection(-1, -1)
+
+    def _silent_kill_focus(self, event):
+        """
+        Save the state of the page
+        """
+
+        event.Skip()
+        #pass
+
Index: src/sas/perspectives/fitting/batchfitpage.py
===================================================================
--- src/sas/perspectives/fitting/batchfitpage.py	(revision 2f4b43041eaa7b7f496750f223a299cb33cd268e)
+++ src/sas/perspectives/fitting/batchfitpage.py	(revision 373d4eebe3a548f70f917fec87bdb5280e67d1e0)
@@ -122,5 +122,5 @@
 #         self.sizer5.Clear(True)
 #      
-#         self.qmin  = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20), 
+#         self.qmin  = ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),
 #                                           style=wx.TE_PROCESS_ENTER, 
 #                                     text_enter_callback = self._onQrangeEnter)
@@ -128,5 +128,5 @@
 #         self.qmin.SetToolTipString("Minimun value of Q in linear scale.")
 #      
-#         self.qmax  = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20), 
+#         self.qmax  = ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),
 #                                           style=wx.TE_PROCESS_ENTER, 
 #                                         text_enter_callback=self._onQrangeEnter)
Index: src/sas/perspectives/fitting/fitpage.py
===================================================================
--- src/sas/perspectives/fitting/fitpage.py	(revision 85ccd3aa3a994f27c69753416a881a44cb0fcf37)
+++ src/sas/perspectives/fitting/fitpage.py	(revision 526542037f3eafd1f7f48d2365935e46d6fe7c26)
@@ -26,4 +26,5 @@
 from sas.perspectives.fitting.basepage import PageInfoEvent as PageInfoEvent
 from sas.models.qsmearing import smear_selection
+from .basepage import ModelTextCtrl
 
 
@@ -284,17 +285,17 @@
 
         #textcntrl for custom resolution
-        self.smear_pinhole_max = self.ModelTextCtrl(self, -1,
+        self.smear_pinhole_max = ModelTextCtrl(self, -1,
                             size=(_BOX_WIDTH - 25, 20),
                             style=wx.TE_PROCESS_ENTER,
                             text_enter_callback=self.onPinholeSmear)
-        self.smear_pinhole_min = self.ModelTextCtrl(self, -1,
+        self.smear_pinhole_min = ModelTextCtrl(self, -1,
                             size=(_BOX_WIDTH - 25, 20),
                             style=wx.TE_PROCESS_ENTER,
                             text_enter_callback=self.onPinholeSmear)
-        self.smear_slit_height = self.ModelTextCtrl(self, -1,
+        self.smear_slit_height = ModelTextCtrl(self, -1,
                             size=(_BOX_WIDTH - 25, 20),
                             style=wx.TE_PROCESS_ENTER,
                             text_enter_callback=self.onSlitSmear)
-        self.smear_slit_width = self.ModelTextCtrl(self, -1,
+        self.smear_slit_width = ModelTextCtrl(self, -1,
                             size=(_BOX_WIDTH - 25, 20),
                             style=wx.TE_PROCESS_ENTER,
@@ -303,8 +304,8 @@
         ## smear
         self.smear_data_left = BGTextCtrl(self, -1,
-                                         size=(_BOX_WIDTH - 25, 20), style=0)
+                                          size=(_BOX_WIDTH - 25, 20), style=0)
         self.smear_data_left.SetValue(str(self.dq_l))
         self.smear_data_right = BGTextCtrl(self, -1,
-                                        size=(_BOX_WIDTH - 25, 20), style=0)
+                                           size=(_BOX_WIDTH - 25, 20), style=0)
         self.smear_data_right.SetValue(str(self.dq_r))
 
@@ -355,8 +356,8 @@
         self.Npts_fit.SetToolTipString(\
                             " Npts : number of points selected for fitting")
-        self.Npts_total = self.ModelTextCtrl(self, -1,
-                        size=(_BOX_WIDTH, 20),
-                        style=wx.TE_PROCESS_ENTER,
-                        text_enter_callback=self._onQrangeEnter)
+        self.Npts_total = ModelTextCtrl(self, -1,
+                            size=(_BOX_WIDTH, 20),
+                            style=wx.TE_PROCESS_ENTER,
+                            text_enter_callback=self._onQrangeEnter)
         self.Npts_total.SetValue(format_number(self.npts_x))
         self.Npts_total.SetToolTipString(\
@@ -515,9 +516,9 @@
         self.sizer5.Clear(True)
 
-        self.qmin = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),
-                                    style=wx.TE_PROCESS_ENTER,
-                                    set_focus_callback=self.qrang_set_focus,
-                                    text_enter_callback=self._onQrangeEnter,
-                                    name='qmin')
+        self.qmin = ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),
+                                  style=wx.TE_PROCESS_ENTER,
+                                  set_focus_callback=self.qrang_set_focus,
+                                  text_enter_callback=self._onQrangeEnter,
+                                  name='qmin')
         self.qmin.SetValue(str(self.qmin_x))
         q_tip = "Click outside of the axes\n to remove the lines."
@@ -526,9 +527,9 @@
         self.qmin.SetToolTipString(qmin_tip)
 
-        self.qmax = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),
-                                       style=wx.TE_PROCESS_ENTER,
-                                       set_focus_callback=self.qrang_set_focus,
-                                       text_enter_callback=self._onQrangeEnter,
-                                       name='qmax')
+        self.qmax = ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),
+                                  style=wx.TE_PROCESS_ENTER,
+                                  set_focus_callback=self.qrang_set_focus,
+                                  text_enter_callback=self._onQrangeEnter,
+                                  name='qmax')
         self.qmax.SetValue(str(self.qmax_x))
         qmax_tip = "Maximum value of Q.\n"
@@ -686,7 +687,7 @@
                         ix = 1
                         value = self.model.getParam(name1)
-                        ctl1 = self.ModelTextCtrl(self, -1,
-                                                  size=(_BOX_WIDTH / 1.3, 20),
-                                                  style=wx.TE_PROCESS_ENTER)
+                        ctl1 = ModelTextCtrl(self, -1,
+                                             size=(_BOX_WIDTH / 1.3, 20),
+                                             style=wx.TE_PROCESS_ENTER)
                         ctl1.SetLabel('PD[ratio]')
                         poly_text = "Polydispersity (STD/mean) of %s\n" % item
@@ -715,8 +716,8 @@
 
                         ix = 4
-                        ctl3 = self.ModelTextCtrl(self, -1,
-                                                  size=(_BOX_WIDTH / 2, 20),
-                                                  style=wx.TE_PROCESS_ENTER,
-                                text_enter_callback=self._onparamRangeEnter)
+                        ctl3 = ModelTextCtrl(self, -1,
+                                             size=(_BOX_WIDTH / 2, 20),
+                                             style=wx.TE_PROCESS_ENTER,
+                            text_enter_callback=self._onparamRangeEnter)
 
                         self.sizer4_4.Add(ctl3, (iy, ix), (1, 1),
@@ -724,7 +725,7 @@
 
                         ix = 5
-                        ctl4 = self.ModelTextCtrl(self, -1,
-                                                  size=(_BOX_WIDTH / 2, 20),
-                                                  style=wx.TE_PROCESS_ENTER,
+                        ctl4 = ModelTextCtrl(self, -1,
+                                             size=(_BOX_WIDTH / 2, 20),
+                                             style=wx.TE_PROCESS_ENTER,
                             text_enter_callback=self._onparamRangeEnter)
 
@@ -738,7 +739,7 @@
                         ix = 6
                         value = self.model.getParam(name2)
-                        Tctl = self.ModelTextCtrl(self, -1,
-                                                  size=(_BOX_WIDTH / 2.2, 20),
-                                                  style=wx.TE_PROCESS_ENTER)
+                        Tctl = ModelTextCtrl(self, -1,
+                                             size=(_BOX_WIDTH / 2.2, 20),
+                                             style=wx.TE_PROCESS_ENTER)
 
                         Tctl.SetValue(str(format_number(value)))
@@ -750,7 +751,7 @@
                         ix = 7
                         value = self.model.getParam(name3)
-                        Tct2 = self.ModelTextCtrl(self, -1,
-                                                  size=(_BOX_WIDTH / 2.2, 20),
-                                                  style=wx.TE_PROCESS_ENTER)
+                        Tct2 = ModelTextCtrl(self, -1,
+                                             size=(_BOX_WIDTH / 2.2, 20),
+                                             style=wx.TE_PROCESS_ENTER)
 
                         Tct2.SetValue(str(format_number(value)))
@@ -811,7 +812,7 @@
                         ix = 1
                         value = self.model.getParam(name1)
-                        ctl1 = self.ModelTextCtrl(self, -1,
-                                                  size=(_BOX_WIDTH / 1.3, 20),
-                                                  style=wx.TE_PROCESS_ENTER)
+                        ctl1 = ModelTextCtrl(self, -1,
+                                             size=(_BOX_WIDTH / 1.3, 20),
+                                             style=wx.TE_PROCESS_ENTER)
                         poly_tip = "Absolute Sigma for %s." % item
                         ctl1.SetToolTipString(poly_tip)
@@ -859,7 +860,7 @@
 
                         ix = 4
-                        ctl3 = self.ModelTextCtrl(self, -1,
-                                                  size=(_BOX_WIDTH / 2, 20),
-                                                  style=wx.TE_PROCESS_ENTER,
+                        ctl3 = ModelTextCtrl(self, -1,
+                                             size=(_BOX_WIDTH / 2, 20),
+                                             style=wx.TE_PROCESS_ENTER,
                                 text_enter_callback=self._onparamRangeEnter)
 
@@ -870,7 +871,7 @@
 
                         ix = 5
-                        ctl4 = self.ModelTextCtrl(self, -1,
-                            size=(_BOX_WIDTH / 2, 20),
-                            style=wx.TE_PROCESS_ENTER,
+                        ctl4 = ModelTextCtrl(self, -1,
+                                             size=(_BOX_WIDTH / 2, 20),
+                                             style=wx.TE_PROCESS_ENTER,
                             text_enter_callback=self._onparamRangeEnter)
                         self.sizer4_4.Add(ctl4, (iy, ix), (1, 1),
@@ -886,7 +887,7 @@
                         ix = 6
                         value = self.model.getParam(name2)
-                        Tctl = self.ModelTextCtrl(self, -1,
-                                                 size=(_BOX_WIDTH / 2.2, 20),
-                                                 style=wx.TE_PROCESS_ENTER)
+                        Tctl = ModelTextCtrl(self, -1,
+                                             size=(_BOX_WIDTH / 2.2, 20),
+                                             style=wx.TE_PROCESS_ENTER)
 
                         Tctl.SetValue(str(format_number(value)))
@@ -906,7 +907,7 @@
                         ix = 7
                         value = self.model.getParam(name3)
-                        Tct2 = self.ModelTextCtrl(self, -1,
-                                                  size=(_BOX_WIDTH / 2.2, 20),
-                                                  style=wx.TE_PROCESS_ENTER)
+                        Tct2 = ModelTextCtrl(self, -1,
+                                             size=(_BOX_WIDTH / 2.2, 20),
+                                             style=wx.TE_PROCESS_ENTER)
 
                         Tct2.SetValue(str(format_number(value)))
@@ -1061,5 +1062,5 @@
             label = "Fit"
             color = "black"
-        self.btFit.Enable(False)
+        #self.btFit.Enable(False)
         self.btFit.SetLabel(label)
         self.btFit.SetForegroundColour(color)
@@ -1140,5 +1141,5 @@
         self.state.formfactorcombobox = self.formfactorbox.GetLabel()
         self.enable_fit_button()
-        if self.model != None:
+        if self.model is not None:
             self.m_name = self.model.name
             self.state.m_name = self.m_name
@@ -1152,8 +1153,4 @@
                     self._keep.Enable(not self.batch_on)
                     self._set_save_flag(True)
-            # Reset smearer, model and data
-            if not copy_flag:
-                self.disable_smearer.SetValue(True)
-                self.enable_smearer.SetValue(False)
 
             # more disables for 2D
@@ -1162,6 +1159,4 @@
             try:
                 # update smearer sizer
-                #if not self.enable_smearer.GetValue():
-                #    self.disable_smearer.SetValue(True)
                 self.onSmear(None)
                 temp_smear = None
@@ -1268,4 +1263,5 @@
                 elif self.data.__class__.__name__ != "Data2D" and \
                         not self.enable2D:
+                    enable_smearer = not self.disable_smearer.GetValue()
                     self._manager.set_smearer(smearer=temp_smearer,
                                               fid=self.data.id,
@@ -1273,6 +1269,6 @@
                                               qmin=float(self.qmin_x),
                                               qmax=float(self.qmax_x),
-                            enable_smearer=not self.disable_smearer.GetValue(),
-                                            draw=True)
+                                              enable_smearer=enable_smearer,
+                                              draw=True)
                 if flag:
                     #self.compute_chisqr(smearer= temp_smearer)
@@ -1772,6 +1768,5 @@
         self.current_smearer = smear_selection(data, self.model)
         flag = self.disable_smearer.GetValue()
-        self.disable_smearer.SetValue(flag)
-        if self.current_smearer == None:
+        if self.current_smearer is None:
             self.enable_smearer.Disable()
         else:
@@ -1959,6 +1954,4 @@
         if flag:
             #set model view button
-            if not self.enable_smearer.GetValue():
-                    self.disable_smearer.SetValue(True)
             self.onSmear(None)
 
@@ -2132,18 +2125,12 @@
                             if numpy.isfinite(float(cov[ind])):
                                 val_err = format_number(cov[ind], True)
-                                if not self.is_mac:
-                                    item[3].Show(True)
-                                    item[4].Show(True)
- 				    item[4].SetForegroundColour(wx.BLACK)
-                                item[4].SetValue(val_err)
-                                has_error = True
-			    else:
-			        val_err = 'NaN'
-                                if not self.is_mac:
-                                    item[3].Show(True)
-                                    item[4].Show(True)
-				    item[4].SetForegroundColour(wx.RED)
-                                item[4].SetValue(val_err)
-                                has_error = True
+                            else:
+                                val_err = 'NaN'
+                            if not self.is_mac:
+                                item[3].Show(True)
+                                item[4].Show(True)
+                                item[4].SetForegroundColour(wx.RED)
+                            item[4].SetValue(val_err)
+                            has_error = True
                 i += 1
             else:
@@ -2196,14 +2183,4 @@
 
         """
-        if self.model == None:
-            self.disable_smearer.SetValue(True)
-            if event == None:
-                return
-            msg = "Please select a Model first..."
-            wx.MessageBox(msg, 'Info')
-            wx.PostEvent(self._manager.parent,
-                         StatusEvent(status="Smear: %s" % msg))
-            return
-
         # Need update param values
         self._update_paramv_on_fit()
@@ -2345,10 +2322,11 @@
         ## set smearing value whether or not the data contain the smearing info
 
+        enable_smearer = not self.disable_smearer.GetValue()
         self._manager.set_smearer(smearer=self.current_smearer,
-                            fid=self.data.id,
-                            qmin=float(self.qmin_x),
-                            qmax=float(self.qmax_x),
-                            enable_smearer=not self.disable_smearer.GetValue(),
-                            uid=self.uid)
+                                  fid=self.data.id,
+                                  qmin=float(self.qmin_x),
+                                  qmax=float(self.qmax_x),
+                                  enable_smearer=enable_smearer,
+                                  uid=self.uid)
         return msg
 
@@ -2378,14 +2356,4 @@
         are compute when fitting
         """
-        if self.model == None:
-            self.disable_smearer.SetValue(True)
-            if event == None:
-                return
-            msg = "Please select a Model first..."
-            wx.MessageBox(msg, 'Info')
-            wx.PostEvent(self._manager.parent,
-                         StatusEvent(status="Smear: %s" % msg))
-            return
-
         # Need update param values
         self._update_paramv_on_fit()
@@ -2475,6 +2443,5 @@
             of the values entered for slit smear
         """
-        if self.data.__class__.__name__ == "Data2D" or \
-                        self.enable2D:
+        if self.data.__class__.__name__ == "Data2D" or self.enable2D:
             return
         # make sure once more if it is smearer
@@ -2513,10 +2480,11 @@
         self.current_smearer = smear_selection(data, self.model)
         ## set smearing value whether or not the data contain the smearing info
+        enable_smearer = not self.disable_smearer.GetValue()
         self._manager.set_smearer(smearer=self.current_smearer,
-                                 fid=self.data.id,
-                                 qmin=float(self.qmin_x),
-                                 qmax=float(self.qmax_x),
-                        enable_smearer=not self.disable_smearer.GetValue(),
-                                 uid=self.uid)
+                                  fid=self.data.id,
+                                  qmin=float(self.qmin_x),
+                                  qmax=float(self.qmax_x),
+                                  enable_smearer=enable_smearer,
+                                  uid=self.uid)
         return msg
 
@@ -2552,16 +2520,7 @@
             return
 
-        if self.model == None:
-            self.disable_smearer.SetValue(True)
-            if event == None:
-                return
-            msg = "Please select a Model first..."
-            wx.MessageBox(msg, 'Info')
-            wx.PostEvent(self._manager.parent,
-                         StatusEvent(status="Smear: %s" % msg))
-            return
         # Need update param values
         self._update_paramv_on_fit()
-        if self.model != None:
+        if self.model is not None:
             if self.data.is_data:
                 self._manager.page_finder[self.uid].add_data(data=self.data)
@@ -2573,4 +2532,5 @@
 
         ## set smearing value whether or not the data contain the smearing info
+        enable_smearer = not self.disable_smearer.GetValue()
         wx.CallAfter(self._manager.set_smearer, uid=self.uid,
                      smearer=temp_smearer,
@@ -2578,5 +2538,5 @@
                      qmin=float(self.qmin_x),
                      qmax=float(self.qmax_x),
-                     enable_smearer=not self.disable_smearer.GetValue(),
+                     enable_smearer=enable_smearer,
                      draw=True)
 
@@ -2594,5 +2554,5 @@
         self._get_smear_info()
         #renew smear sizer
-        if self.smear_type != None:
+        if self.smear_type is not None:
             self.smear_description_smear_type.SetValue(str(self.smear_type))
             self.smear_data_left.SetValue(str(self.dq_l))
@@ -2607,5 +2567,5 @@
             self.current_smearer = temp_smearer
         if self.enable_smearer.GetValue():
-            if self.current_smearer == None:
+            if self.current_smearer is None:
                 wx.PostEvent(self._manager.parent,
                     StatusEvent(status="Data contains no smearing information"))
@@ -2953,6 +2913,6 @@
                         wx.EVT_COMBOBOX(fun_box, -1, self._on_fun_box)
                     else:
-                        fun_box = self.ModelTextCtrl(self, -1,
-                                                     size=(_BOX_WIDTH, 20),
+                        fun_box = ModelTextCtrl(self, -1,
+                                                size=(_BOX_WIDTH, 20),
                                 style=wx.TE_PROCESS_ENTER, name='%s' % item)
                         fun_box.SetToolTipString(\
@@ -2977,6 +2937,6 @@
                     ix += 1
                     value = self.model.getParam(item)
-                    ctl1 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),
-                                        style=wx.TE_PROCESS_ENTER)
+                    ctl1 = ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),
+                                         style=wx.TE_PROCESS_ENTER)
                     ctl1.SetToolTipString(\
                                 "Hit 'Enter' after typing to update the plot.")
@@ -2999,7 +2959,7 @@
 
                     ix += 1
-                    ctl3 = self.ModelTextCtrl(self, -1,
-                                              size=(_BOX_WIDTH / 1.9, 20),
-                                              style=wx.TE_PROCESS_ENTER,
+                    ctl3 = ModelTextCtrl(self, -1,
+                                         size=(_BOX_WIDTH / 1.9, 20),
+                                         style=wx.TE_PROCESS_ENTER,
                                 text_enter_callback=self._onparamRangeEnter)
                     min_bound = self.model.details[item][1]
@@ -3011,7 +2971,7 @@
 
                     ix += 1
-                    ctl4 = self.ModelTextCtrl(self, -1,
-                                              size=(_BOX_WIDTH / 1.9, 20),
-                                              style=wx.TE_PROCESS_ENTER,
+                    ctl4 = ModelTextCtrl(self, -1,
+                                         size=(_BOX_WIDTH / 1.9, 20),
+                                         style=wx.TE_PROCESS_ENTER,
                                 text_enter_callback=self._onparamRangeEnter)
                     max_bound = self.model.details[item][2]
@@ -3115,6 +3075,6 @@
                     ix += 1
                     value = self.model.getParam(item)
-                    ctl1 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),
-                                        style=wx.TE_PROCESS_ENTER)
+                    ctl1 = ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),
+                                         style=wx.TE_PROCESS_ENTER)
                     ctl1.SetToolTipString(\
                                 "Hit 'Enter' after typing to update the plot.")
@@ -3142,7 +3102,7 @@
 
                     ix += 1
-                    ctl3 = self.ModelTextCtrl(self, -1,
-                                              size=(_BOX_WIDTH / 1.8, 20),
-                                              style=wx.TE_PROCESS_ENTER,
+                    ctl3 = ModelTextCtrl(self, -1,
+                                         size=(_BOX_WIDTH / 1.8, 20),
+                                         style=wx.TE_PROCESS_ENTER,
                                 text_enter_callback=self._onparamRangeEnter)
 
@@ -3152,7 +3112,7 @@
 
                     ix += 1
-                    ctl4 = self.ModelTextCtrl(self, -1,
-                                              size=(_BOX_WIDTH / 1.8, 20),
-                                              style=wx.TE_PROCESS_ENTER,
+                    ctl4 = ModelTextCtrl(self, -1,
+                                         size=(_BOX_WIDTH / 1.8, 20),
+                                         style=wx.TE_PROCESS_ENTER,
                             text_enter_callback=self._onparamRangeEnter)
                     sizer.Add(ctl4, (iy, ix), (1, 1),
Index: src/sas/perspectives/fitting/fitting.py
===================================================================
--- src/sas/perspectives/fitting/fitting.py	(revision acf8e4a58aad50df871a259b771db1d582942abb)
+++ src/sas/perspectives/fitting/fitting.py	(revision 373d4eebe3a548f70f917fec87bdb5280e67d1e0)
@@ -1211,5 +1211,5 @@
             del self.fit_thread_list[uid]
 
-        self._update_fit_button(page_id)
+        wx.CallAfter(self._update_fit_button, page_id)
         t1 = time.time()
         str_time = time.strftime("%a, %d %b %Y %H:%M:%S ", time.localtime(t1))
@@ -1450,5 +1450,5 @@
                                                       type="stop"))
         wx.PostEvent(self.result_panel, PlotResultEvent(result=result))
-        self._update_fit_button(page_id)
+        wx.CallAfter(self._update_fit_button, page_id)
         result = result[0]
         self.fit_thread_list = {}
@@ -1470,5 +1470,5 @@
                                          info="warning",
                                          type="stop"))
-                    self._update_fit_button(page_id)
+                    wx.CallAfter(self._update_fit_button, page_id)
                 else:
                     #set the panel when fit result are float not list
