Index: fittingview/src/sans/perspectives/fitting/basepage.py
===================================================================
--- fittingview/src/sans/perspectives/fitting/basepage.py	(revision 6f140f2b7ee93e52dce795ce3d1b3010a48f3268)
+++ fittingview/src/sans/perspectives/fitting/basepage.py	(revision 33477fd748ae9325c91873a945ff31c42315527a)
@@ -202,4 +202,12 @@
             else:
                 self._create_default_1d_data()
+            if self.model != None:
+                if not self.data.is_data:
+                    self._manager.page_finder[self.uid].set_fit_data(data=[self.data])
+            self.on_smear_helper(update=True)
+            self.state.enable_smearer=  self.enable_smearer.GetValue()
+            self.state.disable_smearer=self.disable_smearer.GetValue()
+            self.state.pinhole_smearer = self.pinhole_smearer.GetValue()
+            self.state.slit_smearer = self.slit_smearer.GetValue()
         
     def _create_default_1d_data(self):
@@ -1456,5 +1464,5 @@
             else:
                 #self.btFit.Enable(True)
-                if is_2Ddata  and not self.batch_on: 
+                if is_2Ddata  and self.data.is_data and not self.batch_on: 
                     self.btEditMask.Enable(True)
             if is_modified and self.fitrange:
@@ -1482,5 +1490,9 @@
         ##So make sure that update param values on_Fit.
         #self._undo.Enable(True)
-        if self.model !=None:           
+        if self.model !=None:   
+            if self.Npts_total.GetValue() != self.Npts_fit.GetValue():
+                if not self.data.is_data:
+                    self._manager.page_finder[self.uid].set_fit_data(data=\
+                                                                    [self.data])      
             ##Check the values
             self._check_value_enter( self.fittable_param ,is_modified)
@@ -1554,5 +1566,5 @@
         else:
             #self.btFit.Enable(True)
-            if self._is_2D() and  self.data != None and not self.batch_on:
+            if self._is_2D() and  self.data.is_data and not self.batch_on:
                 self.btEditMask.Enable(True)
 
@@ -1562,5 +1574,8 @@
             wx.PostEvent(self.parent.parent, StatusEvent(status=msg))
         
-        self.save_current_state()
+        try:
+            self.save_current_state()
+        except:
+            pass
    
         return flag                           
Index: fittingview/src/sans/perspectives/fitting/fitpage.py
===================================================================
--- fittingview/src/sans/perspectives/fitting/fitpage.py	(revision 7fd4afd4dbb8e685a7ba84dc131d41d1581e158d)
+++ fittingview/src/sans/perspectives/fitting/fitpage.py	(revision 33477fd748ae9325c91873a945ff31c42315527a)
@@ -1443,4 +1443,7 @@
         msg= ""
         wx.PostEvent(self.parent.parent, StatusEvent(status = msg ))
+        # For theory mode
+        if not self.data.is_data:
+            self.create_default_data()
         # Flag to register when a parameter has changed.
         is_modified = False
@@ -2580,11 +2583,33 @@
                             "Smear: %s"%msg))
             return
-        
         # Need update param values
         self._update_paramv_on_fit()
-        
+        temp_smearer = self.on_smear_helper()            
+        
+        self.sizer_set_smearer.Layout()
+        self.Layout()
+        self._set_weight()
+        
+        ## set smearing value whether or not the data contain the smearing info
+        wx.CallAfter(self._manager.set_smearer, uid=self.uid, smearer=temp_smearer,
+                                  fid=self.data.id,
+                        qmin=float(self.qmin_x),
+                        qmax=float(self.qmax_x),
+                        enable_smearer=not self.disable_smearer.GetValue(),
+                         draw=True) 
+        
+        self.state.enable_smearer=  self.enable_smearer.GetValue()
+        self.state.disable_smearer=self.disable_smearer.GetValue()
+        self.state.pinhole_smearer = self.pinhole_smearer.GetValue()
+        self.state.slit_smearer = self.slit_smearer.GetValue()
+        
+    def on_smear_helper(self, update=False):
+        """
+        Help for onSmear
+        
+        :param update: force or not to update
+        """
+        self._get_smear_info()
         temp_smearer = None
-        self._get_smear_info()
-        
         #renew smear sizer
         if self.smear_type != None:
@@ -2594,13 +2619,12 @@
 
         self._hide_all_smear_info()
-        
         data = copy.deepcopy(self.data)
+        
         # make sure once more if it is smearer
         temp_smearer = smear_selection(data, self.model)
-        if self.current_smearer != temp_smearer:
+        if self.current_smearer != temp_smearer or update:
             self.current_smearer = temp_smearer
         if self.enable_smearer.GetValue():
             if hasattr(self.data,"dxl"):
-                
                 msg= ": Resolution smearing parameters"
             if hasattr(self.data,"dxw"):
@@ -2623,24 +2647,8 @@
         elif self.slit_smearer.GetValue():
             self.onSlitSmear(None)
-            
         self._show_smear_sizer()
         
-        self.sizer_set_smearer.Layout()
-        self.Layout()
-        self._set_weight()
-        
-        ## set smearing value whether or not the data contain the smearing info
-        wx.CallAfter(self._manager.set_smearer, uid=self.uid, smearer=temp_smearer,
-                                  fid=self.data.id,
-                        qmin=float(self.qmin_x),
-                        qmax=float(self.qmax_x),
-                        enable_smearer=not self.disable_smearer.GetValue(),
-                         draw=True) 
-        
-        self.state.enable_smearer=  self.enable_smearer.GetValue()
-        self.state.disable_smearer=self.disable_smearer.GetValue()
-        self.state.pinhole_smearer = self.pinhole_smearer.GetValue()
-        self.state.slit_smearer = self.slit_smearer.GetValue()
-      
+        return temp_smearer
+    
     def on_complete_chisqr(self, event):  
         """
