Index: sansview/perspectives/fitting/basepage.py
===================================================================
--- sansview/perspectives/fitting/basepage.py	(revision e8147340a32071691e64f557c7edcb5e79227d09)
+++ sansview/perspectives/fitting/basepage.py	(revision dad49a0eda2b68ae0a70d5552131de1779c5a7aa)
@@ -101,5 +101,5 @@
         """
         # Skipping the save state functionality for release 0.9.0
-        return
+        #return
     
         pos = event.GetPosition()
@@ -258,6 +258,4 @@
             @param event: check box event
         """
-        
-        
         # Go through the list of dispersion check boxes to identify which one has changed 
         for p in self.disp_cb_dict:
@@ -265,5 +263,5 @@
             if event.GetEventObject() == self.disp_cb_dict[p]:              
 
-                
+                self.state.disp_cb_dict[p]=  self.disp_cb_dict[p].GetValue()
                 if self.disp_cb_dict[p].GetValue() == True:
                     # The user wants this parameter to be averaged. 
@@ -304,4 +302,9 @@
                     #TODO: refactor model to clean this up?
                     self._disp_obj_dict[p] = disp_model
+                    self.state._disp_obj_dict [p]= disp_model
+                    self.state.values=[]
+                    self.state.weights=[]
+                    self.state.values = values
+                    self.state.weights = weights
                     # Set the new model as the dispersion object for the selected parameter
                     self.model.set_dispersion(p, disp_model)
@@ -315,7 +318,10 @@
                     # The parameter was un-selected. Go back to Gaussian model (with 0 pts)
                     self._reset_dispersity()
-                    
+              
                 ## Redraw the model
                 self._draw_model()
+                ## post state to fit panel
+                event = PageInfoEvent(page = self)
+                wx.PostEvent(self.parent, event)
         return
     
@@ -460,5 +466,4 @@
                if hasattr(self,"cb1"):
                    self.state.cb1= self.cb1.GetValue()
-           
         except:
             pass
@@ -472,5 +477,4 @@
             self.state.enable_smearer = copy.deepcopy(self.enable_smearer.GetValue())
             self.state.disable_smearer = copy.deepcopy(self.disable_smearer.GetValue())
-            
             
         if hasattr(self,"disp_box"):
@@ -504,5 +508,4 @@
                                      self.state.orientation_params_disp)
         self._copy_parameters_state(self.parameters, self.state.parameters)
-       
         self._copy_parameters_state(self.fittable_param, self.state.fittable_param)
         self._copy_parameters_state(self.fixed_param, self.state.fixed_param)
@@ -526,8 +529,8 @@
         self._set_model_sizer_selection( self.model )
         self.set_model_param_sizer(self.model)
-      
+       
         self.enable2D= state.enable2D
         self.state.enable2D= state.enable2D
-       
+        
         if hasattr(self,"model_view"):
             if not self.enable2D:
@@ -543,15 +546,45 @@
         if hasattr(self, "disp_box"):
             self.disp_box.SetSelection(self.state.disp_box)  
-            
-            self.disp_cb_dict = {}
-            for k,v in self.state.disp_cb_dict.iteritems():
+          
+            self._set_dipers_Param(event=None)
+          
+            n = self.disp_box.GetCurrentSelection()
+            dispersity= self.disp_box.GetClientData(n)
+            name= dispersity.__name__
+            if name == "GaussianDispersion":
+                self.disp_cb_dict = {}
                 self.disp_cb_dict = copy.deepcopy(state.disp_cb_dict) 
                 self.state.disp_cb_dict = copy.deepcopy(state.disp_cb_dict) 
-                
-            self._disp_obj_dict={}
-            for k , v in self.state._disp_obj_dict.iteritems():
-                self._disp_obj_dict[k]=v
-      
-        self._set_dipers_Param(event=None)
+                    
+                self._disp_obj_dict={}
+                for k , v in self.state._disp_obj_dict.iteritems():
+                    self._disp_obj_dict[k]=v
+            
+            if  name=="ArrayDispersion":
+               
+                for k,v in state.disp_cb_dict.iteritems():
+                    self.disp_cb_dict[k].SetValue(v) 
+                    
+                self._disp_obj_dict={}    
+                for k , v in state._disp_obj_dict.iteritems():
+                    # Create the dispersion objects
+                    from sans.models.dispersion_models import ArrayDispersion
+                    disp_model = ArrayDispersion()
+                    self.state.values = copy.deepcopy(state.values)
+                    self.state.weights = copy.deepcopy(state.weights)
+                    
+                    disp_model.set_weights(self.state.values, self.state.weights)
+                    
+                    self._disp_obj_dict[k] = disp_model
+                    self.state._disp_obj_dict[k]= disp_model
+                    self.state.values=[]
+                    self.state.weights=[]
+                    
+                    if not hasattr(self.model, "_persistency_dict"):
+                        self.model._persistency_dict = {}
+                    self.model._persistency_dict[k] = [self.state.values, self.state.weights]
+                    # Set the new model as the dispersion object for the selected parameter
+                    self.model.set_dispersion(k, disp_model)
+                   
         ##plotting range restore    
         self._reset_plotting_range()
@@ -563,5 +596,4 @@
             self.compute_chisqr(smearer= self.smearer)  
             
-       
         ## reset state of checkbox,textcrtl  and parameters value
         self._reset_parameters_state(self.orientation_params_disp,
@@ -572,12 +604,9 @@
         self._reset_parameters_state(self.fittable_param,state.fittable_param)
         self._reset_parameters_state(self.fixed_param,state.fixed_param)
+        ## draw the model with previous parameters value
         self._onparamEnter_helper()
         ## reset context menu items
         self._reset_context_menu()
-        ## draw the model with previous parameters value
-        #self._draw_model()
-        
-   
-   
+       
          
         
@@ -611,7 +640,5 @@
             Reset the plotting range to a given state
         """
-        
-        #self.qmin.SetValue(format_number(self.state.qmin))
-        #self.qmax.SetValue(format_number(self.state.qmax)) 
+       
         self.qmin.SetValue(str(self.state.qmin))
         self.qmax.SetValue(str(self.state.qmax)) 
@@ -1341,4 +1368,5 @@
         self.sizer4.Layout()
         self.SetScrollbars(20,20,200,100)
+      
 
     def _set_range_sizer(self, title, object1=None,object=None):
@@ -1400,5 +1428,5 @@
         """
         # Skipping save state functionality for release 0.9.0
-        return
+        #return
     
         self.sizer6.Clear(True)
Index: sansview/perspectives/fitting/fitting.py
===================================================================
--- sansview/perspectives/fitting/fitting.py	(revision c3435b7f0ebc3fbcc3b56e979a88fa5500167b2b)
+++ sansview/perspectives/fitting/fitting.py	(revision dad49a0eda2b68ae0a70d5552131de1779c5a7aa)
@@ -963,4 +963,5 @@
         self.calc_thread.ready(0.01)
     
+    
     def _fill_default_model2D(self, theory, qmax,qstep, qmin=None):
         """
@@ -1038,4 +1039,5 @@
         
         return my_info
+                
                 
     def _complete1D(self, x,y, elapsed,model,data=None):
@@ -1082,6 +1084,5 @@
             wx.PostEvent( self.parent, StatusEvent(status= msg, type="stop"  ))
             return  
-        
-                 
+                  
     
         
@@ -1137,4 +1138,5 @@
         """
         self.err_dy= event.err_dy
+        
          
     def _draw_model2D(self,model,data=None,description=None, enable2D=False,
@@ -1150,5 +1152,4 @@
             
         """
-        
         x=  numpy.linspace(start= -1*qmax,
                                stop= qmax,
@@ -1240,7 +1241,4 @@
             
    
-
-
-   
 if __name__ == "__main__":
     i = Plugin()
Index: sansview/perspectives/fitting/modelpage.py
===================================================================
--- sansview/perspectives/fitting/modelpage.py	(revision 848a2ef13f7ff02ac2ba77a50890ad96b5d4eef2)
+++ sansview/perspectives/fitting/modelpage.py	(revision dad49a0eda2b68ae0a70d5552131de1779c5a7aa)
@@ -14,5 +14,5 @@
 import basepage
 from basepage import BasicPage
-
+from basepage import PageInfoEvent
 
 class ModelPage(BasicPage):
@@ -315,5 +315,9 @@
                         item[2].Enable()
         self.state.enable2D =  copy.deepcopy(self.enable2D)
-    
+        ## post state to fit panel
+        event = PageInfoEvent(page = self)
+        wx.PostEvent(self.parent, event)
+        
+        
                 
     def reset_page(self, state):
Index: sansview/perspectives/fitting/pagestate.py
===================================================================
--- sansview/perspectives/fitting/pagestate.py	(revision c477b310889b106862984c80a816386ea5e0a3e0)
+++ sansview/perspectives/fitting/pagestate.py	(revision dad49a0eda2b68ae0a70d5552131de1779c5a7aa)
@@ -23,4 +23,6 @@
         # model on which the fit would be performed
         self.model = model
+        if not hasattr(self.model, "_persistency_dict"):
+            self.model._persistency_dict = {}
         #fit page manager 
         self.manager = None
@@ -50,4 +52,7 @@
         self._disp_obj_dict={}
         self.disp_cb_dict={}
+        self.values=[]
+        self.weights=[]
+                    
         #contains link between a model and selected parameters to fit 
         self.param_toFit =[]
@@ -105,9 +110,15 @@
         obj.enable_disp = copy.deepcopy(self.enable_disp)
         obj.disable_disp = copy.deepcopy(self.disable_disp)
-        
+        if len(self.model._persistency_dict)>0:
+            for k, v in self.model._persistency_dict.iteritems():
+                obj.model._persistency_dict[k] = copy.deepcopy(v)
         if len(self._disp_obj_dict)>0:
             for k , v in self._disp_obj_dict.iteritems():
                 obj._disp_obj_dict[k]= v
-        obj.disp_cb_dict = copy.deepcopy(self.disp_cb_dict)
+        if len(self.disp_cb_dict)>0:
+            for k , v in self.disp_cb_dict.iteritems():
+                obj.disp_cb_dict[k]= v
+        obj.values = copy.deepcopy(self.values)
+        obj.weights = copy.deepcopy(self.weights)
         obj.enable_smearer = copy.deepcopy(self.enable_smearer)
         obj.disable_smearer = copy.deepcopy(self.disable_smearer)
