Index: sansview/perspectives/fitting/basepage.py
===================================================================
--- sansview/perspectives/fitting/basepage.py	(revision f1aa3857f2c211477d6caa55083eb3ae3236523e)
+++ sansview/perspectives/fitting/basepage.py	(revision c69b6d52664add01a9b00ef1d28762b0d370cee8)
@@ -860,5 +860,5 @@
             after fitting
         """
-        
+        """
         if hasattr(self,"text2_3"):
             self.text2_3.Hide()
@@ -883,6 +883,6 @@
                     item[4].Hide()
         ##Is this layout necessary? Had a problem w/MAC:Not anymore.
-        #self.Layout()
-        
+        self.Layout()
+        """
         return        
     def _selectDlg(self):
Index: sansview/perspectives/fitting/fitpage.py
===================================================================
--- sansview/perspectives/fitting/fitpage.py	(revision ffb838f31914f39e49ce268c987d5920a6644de1)
+++ sansview/perspectives/fitting/fitpage.py	(revision c69b6d52664add01a9b00ef1d28762b0d370cee8)
@@ -61,5 +61,5 @@
         self.Bind(EVT_FITTER_TYPE,self._on_engine_change)
         self.Bind(EVT_FIT_STOP,self._on_fit_complete)
-    
+
     def _on_fit_complete(self, event):
         """
@@ -376,4 +376,6 @@
                         ctl3 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
                                                        kill_focus_callback = self._onparamRangeEnter,
+                                                       text_enter_callback = self._onparamRangeEnter,
+                                                       #mouse_up_callback = self._onparamRangeEnter,
                                                        set_focus_callback  = self._onparamRangeEnter)
 
@@ -384,4 +386,6 @@
                         ctl4 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
                                                        kill_focus_callback = self._onparamRangeEnter,
+                                                       text_enter_callback = self._onparamRangeEnter,
+                                                       #mouse_up_callback = self._onparamRangeEnter,
                                                        set_focus_callback  = self._onparamRangeEnter)
                         self.sizer4_4.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
@@ -474,4 +478,6 @@
                         ctl3 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
                                                        kill_focus_callback = self._onparamRangeEnter,
+                                                       text_enter_callback = self._onparamRangeEnter,
+                                                       #mouse_up_callback = self._onparamRangeEnter,
                                                        set_focus_callback  = self._onparamRangeEnter)
 
@@ -483,4 +489,6 @@
                         ctl4 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
                                                        kill_focus_callback = self._onparamRangeEnter,
+                                                       text_enter_callback = self._onparamRangeEnter,
+                                                       #mouse_up_callback = self._onparamRangeEnter,
                                                        set_focus_callback  = self._onparamRangeEnter)
                         self.sizer4_4.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
@@ -587,5 +595,5 @@
         
         #Clear errors if exist from previous fitting
-        self._clear_Err_on_Fit()    
+        self._clear_Err_on_Fit() 
 
         # Remove or do not allow fitting on the Q=0 point, especially when y(q=0)=None at x[0].
@@ -699,4 +707,5 @@
             Check validity of value enter in the parameters range field
         """
+        is_modified = False   
         tcrtl= event.GetEventObject()
         if tcrtl.GetValue().lstrip().rstrip()!="":
@@ -706,27 +715,22 @@
             except:
                 tcrtl.SetBackgroundColour("pink")
-                tcrtl.Refresh()
                 return
         else:
            tcrtl.SetBackgroundColour(wx.WHITE)
+           self.save_current_state()
+           #is_modified = True
            
-        is_modified = False   
-        if self.model !=None:         
-            # Flag to register when a parameter has changed.            
-            is_modified =self._check_value_enter( self.fittable_param ,is_modified)
-            is_modified =self._check_value_enter( self.fixed_param ,is_modified)
-            is_modified =self._check_value_enter( self.parameters ,is_modified)  
-
-        #self._onparamEnter_helper() 
-        tcrtl.Refresh()
+        if not is_modified:
+            self._onparamEnter_helper()
         ## new state posted
-        if is_modified:
+        if self.state_change:
             #self._undo.Enable(True)
             self.save_current_state()
-            #self._undo.Enable(True)
             event = PageInfoEvent(page = self)
             wx.PostEvent(self.parent, event)
             self.state_change= False
-        
+        self.Layout()
+        self.Refresh()                
+
                 
         
@@ -766,4 +770,10 @@
         """
         return float(self.qmin_x) , float(self.qmax_x)
+
+    def get_chi2(self):
+        """
+            return the current chi2
+        """
+        return self.tcChi.GetLabel()
         
     def get_param_list(self):
@@ -788,5 +798,8 @@
        
         """
-        self.tcChi.SetLabel(format_number(chisqr))
+        #format chi2
+        chi2 = format_number(chisqr)
+        
+        self.tcChi.SetLabel(chi2)
         params = {}
         is_modified = False
@@ -804,9 +817,10 @@
         #set the panel when fit result are float not list
         if out.__class__== numpy.float64:
+            #print "float64"
             self.param_toFit[0][2].SetValue(format_number(out))
             self.param_toFit[0][2].Refresh()
             
-            self.param_toFit[0][4].Clear()
-            self.param_toFit[0][4].Hide()
+            if self.param_toFit[0][4].IsShown:
+                self.param_toFit[0][4].Hide()
             if cov !=None :
                 self.text2_3.Show(True)
@@ -821,20 +835,19 @@
 
                 if cov[0]==None or  not numpy.isfinite(cov[0]): 
-                    self.param_toFit[0][3].Hide()
-                    self.param_toFit[0][4].Clear()
-                    #self.param_toFit[0][4].Hide()
-                    self.param_toFit[0][4].Refresh()
+                    if self.param_toFit[0][3].IsShown:
+                        self.param_toFit[0][3].Hide()
                 else:
+                    
                     self.param_toFit[0][3].Show(True)
-                    self.param_toFit[0][4].Clear()
+                    self.param_toFit[0][3].Refresh()                 
+                    self.param_toFit[0][4].Show(True)
                     self.param_toFit[0][4].SetValue(format_number(cov[0]))
-                    self.param_toFit[0][4].Show(True)
                     self.param_toFit[0][4].Refresh()
                     has_error = True
         else:
-           
+           	
             if self.text2_3.IsShown():
                 self.text2_3.Hide()
-            
+            i = 0
             #Set the panel when fit result are list
             for item in self.param_toFit:               
@@ -845,5 +858,5 @@
                     item[4].Hide()
        
-                if( out != None ) and len(out)<=len(self.param_toFit):#and i < len(out):
+                if( out != None ) and len(out)<=len(self.param_toFit) and i < len(out):
                     item[2].SetValue(format_number(self.model.getParam(item[1])))
                     item[2].Refresh()
@@ -854,5 +867,5 @@
                         break        
 
-                if(cov !=None)  and len(cov)<=len(self.param_toFit):#and i < len(cov):
+                if(cov !=None)  and len(cov)<=len(self.param_toFit) and i < len(cov):
                     try:
                         name= dispersity.__name__
@@ -877,5 +890,5 @@
                         item[4].Refresh()
                         has_error = True
-                    
+        	    i += 1             
         #Show error title when any errors displayed
         if has_error: 
@@ -889,5 +902,5 @@
         self.Layout()
         self.Refresh()
-        
+
     def onSmear(self, event):
         """
@@ -1220,4 +1233,6 @@
                 ctl3 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
                                                kill_focus_callback = self._onparamRangeEnter,
+                                               text_enter_callback = self._onparamRangeEnter,
+                                               #mouse_up_callback = self._onparamRangeEnter,
                                                set_focus_callback  = self._onparamRangeEnter)
      
@@ -1228,4 +1243,6 @@
                 ctl4 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
                                                kill_focus_callback = self._onparamRangeEnter,
+                                               text_enter_callback = self._onparamRangeEnter,
+                                               #mouse_up_callback = self._onparamRangeEnter,
                                                set_focus_callback  = self._onparamRangeEnter)
                 sizer.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
@@ -1313,8 +1330,9 @@
                     
                     
-                    #param_min, param_max= self.model.details[item][1:]
                     ix += 1
                     ctl3 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
                                                    kill_focus_callback = self._onparamRangeEnter,
+                                                   text_enter_callback = self._onparamRangeEnter,
+                                                   #mouse_up_callback = self._onparamRangeEnter,
                                                    set_focus_callback  = self._onparamRangeEnter)
                
@@ -1330,4 +1348,6 @@
                     ctl4 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
                                                    kill_focus_callback = self._onparamRangeEnter,
+                                                   text_enter_callback = self._onparamRangeEnter,
+                                                   #mouse_up_callback = self._onparamRangeEnter,
                                                    set_focus_callback  = self._onparamRangeEnter)
                     sizer.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
Index: sansview/perspectives/fitting/fitting.py
===================================================================
--- sansview/perspectives/fitting/fitting.py	(revision 6d9107370296ef59f9f0b56c3bdec65ee95c15a9)
+++ sansview/perspectives/fitting/fitting.py	(revision c69b6d52664add01a9b00ef1d28762b0d370cee8)
@@ -20,4 +20,5 @@
 from sans.guiframe.dataFitting import Theory1D
 from sans.guiframe import dataFitting 
+from sans.guiframe.utils import format_number
 
 from sans.guicomm.events import NewPlotEvent, StatusEvent  
@@ -751,5 +752,5 @@
                 wx.PostEvent(self.parent, StatusEvent(status=msg,type="stop"))
                 return
-            if numpy.any(result.pvec ==None )or not numpy.all(numpy.isfinite(result.pvec) ):
+            if not numpy.isfinite(result.fitness) or 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"))
@@ -798,13 +799,21 @@
         ## fit more than 1 model at the same time 
         try:
+            msg = "" 
             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) ):
+            if not numpy.isfinite(result.fitness) or 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 format_number(result.fitness) == page.get_chi2():
+                    #ToDo: Compare parameter inputs with outputs too.
+                    msg= "Simultaneous Fit completed"
+                    msg +=" but chi2 has not been improved..."
+                    wx.PostEvent(self.parent, StatusEvent(status="%s " % msg)) 
+                    break                   
                 if value.get_scheduled()==1:
                     model = value.get_model()
@@ -838,5 +847,5 @@
                     self.draw_model( model=model, data= metadata, smearer=smearer,
                                      qmin= qmin, qmax= qmax)
-            wx.PostEvent(self.parent, StatusEvent(status="", type="stop"))
+            wx.PostEvent(self.parent, StatusEvent(status=msg, type="stop"))
         except:
              msg= "Simultaneous Fit completed"
