Index: sansview/perspectives/fitting/fit_thread.py
===================================================================
--- sansview/perspectives/fitting/fit_thread.py	(revision 1c1436d03cf82633c72f1491995cf3e093f6237a)
+++ sansview/perspectives/fitting/fit_thread.py	(revision ad6dd4c5980ac8cc667bc8bc815576f0a349465a)
@@ -139,5 +139,5 @@
             handler= ConsoleUpdate(parent= self.parent,improvement_delta=0.1)
             #Result from the fit
-            result = self.fitter.fit(handler= handler)
+            result = self.fitter.fit(handler= handler, curr_thread=self)
         
             elapsed = time.time()-self.starttime
@@ -150,5 +150,9 @@
             # Thread was interrupted, just proceed and re-raise.
             # Real code should not print, but this is an example...
+            #print "keyboard exception"
             raise
-      
+        
+        except :
+            #print "uncaught exception"
+            raise
     
Index: sansview/perspectives/fitting/fitpage.py
===================================================================
--- sansview/perspectives/fitting/fitpage.py	(revision 813334e1ab9133413285c19e0910f0282e30f4e2)
+++ sansview/perspectives/fitting/fitpage.py	(revision ad6dd4c5980ac8cc667bc8bc815576f0a349465a)
@@ -68,4 +68,6 @@
         if len(self.parameters)==0:
             return
+        if event.type =="park":
+            self.btFit.SetLabel("Fit")
         for item in self.parameters:
             if event.type =="scipy":
@@ -454,5 +456,4 @@
             Allow to fit
         """
-        #self.btFit.SetLabel("Stop")
         from sans.guiframe.utils import check_value
         flag = check_value( self.qmin, self.qmax) 
@@ -469,21 +470,41 @@
 
         # Remove or do not allow fitting on the Q=0 point, especially when y(q=0)=None at x[0].
-        #ToDo: Fix this.
-        #if float(self.qmin.GetValue())==0.0 and self.data.x[0]==0 and not numpy.isfinite(self.data.y[0]):
-        #    self.qmin_x = min(self.data.x[self.data.x!=0])
-        #else:                       
+        #ToDo: Fix this.                
         self.qmin_x = float(self.qmin.GetValue())
-        
         self.qmax_x =float( self.qmax.GetValue())
         self.manager._reset_schedule_problem( value=0)
         self.manager.schedule_for_fit( value=1,page=self,fitproblem =None) 
         self.manager.set_fit_range(page= self,qmin= self.qmin_x, qmax= self.qmax_x)
+        
         #single fit 
         self.manager.onFit()
+        ## allow stopping the fit 
+        if self.engine_type=="scipy":
+            self.btFit.SetLabel("Stop")
+            self.btFit.Unbind(event=wx.EVT_BUTTON, id= self.btFit.GetId())
+            self.btFit.Bind(event= wx.EVT_BUTTON, handler=self._StopFit, id=self.btFit.GetId())
+        else:
+            self.btFit.SetLabel("Fit")
+            self.btFit.Bind(event= wx.EVT_BUTTON, handler=self._onFit, id=self.btFit.GetId())
         self.btFit.SetFocus()    
         self.sizer5.Layout()
         self.SetScrollbars(20,20,55,40)
         
-        
+    def _StopFit(self, event):
+        """
+            Stop fit 
+        """
+        self.btFit.SetLabel("Fit")
+        if self.engine_type=="scipy":
+            self.manager.stop_fit()
+            self.btFit.Unbind(event=wx.EVT_BUTTON, id=self.btFit.GetId())
+            self.btFit.Bind(event=wx.EVT_BUTTON, handler=self._onFit,id=self.btFit.GetId())
+        else:
+            self.btFit.Unbind(event=wx.EVT_BUTTON, id=self.btFit.GetId())
+            self.btFit.Bind(event= wx.EVT_BUTTON, handler=self._onFit, id=self.btFit.GetId())
+        self.btFit.SetFocus()    
+        self.sizer5.Layout()
+        self.SetScrollbars(20,20,55,40)    
+            
     def _on_select_model(self, event): 
         """
@@ -619,5 +640,5 @@
                 except:
                     pass
-                if cov[0]==None:  
+                if cov[0]==None or  not numpy.isfinite(cov[0]): 
                     self.param_toFit[0][3].Hide()
                     self.param_toFit[0][4].Clear()
@@ -658,5 +679,5 @@
                             break
                     ## unable to compare cov[j]==numpy.nan so switch to None
-                    if cov[j]==None:
+                    if cov[j]==None or not numpy.isfinite(cov[j]):
                         item[3].Hide()
                         item[4].Refresh()
Index: sansview/perspectives/fitting/fitting.py
===================================================================
--- sansview/perspectives/fitting/fitting.py	(revision 813334e1ab9133413285c19e0910f0282e30f4e2)
+++ sansview/perspectives/fitting/fitting.py	(revision ad6dd4c5980ac8cc667bc8bc815576f0a349465a)
@@ -354,6 +354,6 @@
             Stop the fit engine
         """
-        if self.calc_fit!= None and self.calc_thread.isrunning():
-            self.calc_thread.stop()
+        if self.calc_fit!= None and self.calc_fit.isrunning():
+            self.calc_fit.stop()
             wx.PostEvent(self.parent, StatusEvent(status="Fitting  \
                 is cancelled" , type="stop"))
@@ -681,6 +681,10 @@
       
         try:
+            if result ==None:
+                msg= "Simple Fitting Stop !!!"
+                wx.PostEvent(self.parent, StatusEvent(status=msg,type="stop"))
+                return
             if numpy.any(result.pvec ==None )or not numpy.all(numpy.isfinite(result.pvec) ):
-                msg= "Fitting did not converge!!!"
+                msg= "Single Fitting did not converge!!!"
                 wx.PostEvent(self.parent, StatusEvent(status=msg,type="stop"))
                 return
@@ -727,4 +731,12 @@
         ## fit more than 1 model at the same time 
         try:
+            if result ==None:
+                msg= "Complex Fitting Stop !!!"
+                wx.PostEvent(self.parent, StatusEvent(status=msg,type="stop"))
+                return
+            if numpy.any(result.pvec ==None )or not numpy.all(numpy.isfinite(result.pvec) ):
+                msg= "Single Fitting did not converge!!!"
+                wx.PostEvent(self.parent, StatusEvent(status=msg,type="stop"))
+                return
             for page, value in self.page_finder.iteritems():
                 if value.get_scheduled()==1:
