Index: theoryview/perspectives/theory/basepage.py
===================================================================
--- theoryview/perspectives/theory/basepage.py	(revision 74755ffa1ce766f8db2e7443abc981f716782e5c)
+++ theoryview/perspectives/theory/basepage.py	(revision 4523b6854d1499ab35e8e024eeddfffd99dfe319)
@@ -94,5 +94,5 @@
         if self.model != None:
             self.disp_list= self.model.getDispParamList()
-        
+        self.multi_factor = None
         ##enable model 2D draw
         self.enable2D= False
@@ -497,4 +497,5 @@
             ## reset state of checkbox,textcrtl  and  regular parameters value
             self.reset_page(previous_state)      
+  
                   
     def onSave(self, event):
@@ -505,4 +506,6 @@
         if self.model==None:
             return 
+        self.save_current_state()
+        """
         if hasattr(self,"enable_disp"):
             self.state.enable_disp = copy.deepcopy(self.enable_disp.GetValue())
@@ -511,5 +514,5 @@
 
         self.state.model.name= self.model.name
-
+        """
         new_state = self.state.clone()
         new_state.model.name = self.state.model.name
@@ -697,5 +700,9 @@
         self.structurebox.SetSelection(state.structurecombobox )
         self.formfactorbox.SetSelection(state.formfactorcombobox)
-        
+        if state.multi_factor != None:
+            self.multifactorbox.SetSelection(state.multi_factor-1)
+        #draw the pnael according to the new model parameter 
+        self._on_select_model(event=None)
+       
         ## enable the view 2d button if this is a modelpage type
         if hasattr(self,"model_view"):
@@ -1153,5 +1160,5 @@
         else:
             boxsizer1 = box_sizer
-            
+        sizer_buttons = wx.BoxSizer(wx.HORIZONTAL)        
         #--------------------------------------------------------
         self.shape_rbutton = wx.RadioButton(self, -1, 'Shapes', style=wx.RB_GROUP)
@@ -1177,9 +1184,15 @@
         sizer_radiobutton.Add(self.struct_rbutton)
         
+        sizer_buttons.Add(sizer_radiobutton)
+        # detail button
+        if object !=None:
+            sizer_buttons.Add((50,0))
+            sizer_buttons.Add(object)
+            
         sizer_selection = wx.BoxSizer(wx.HORIZONTAL)
-        
+        mutifactor_selection = wx.BoxSizer(wx.HORIZONTAL)
         self.text1 = wx.StaticText( self,-1,"" )
         self.text2 = wx.StaticText( self,-1,"P(Q)*S(Q)" )
-        
+        self.mutifactor_text = wx.StaticText( self,-1,"No. of Shells: " )
         
         self.formfactorbox = wx.ComboBox(self, -1,style=wx.CB_READONLY)
@@ -1189,7 +1202,8 @@
             
         self.structurebox = wx.ComboBox(self, -1,style=wx.CB_READONLY)
+        self.multifactorbox = wx.ComboBox(self, -1,style=wx.CB_READONLY)
         wx.EVT_COMBOBOX(self.formfactorbox,-1, self._on_select_model)
         wx.EVT_COMBOBOX(self.structurebox,-1, self._on_select_model)
-        
+        wx.EVT_COMBOBOX(self.multifactorbox,-1, self._on_select_model)
     
         ## fill combox box
@@ -1224,13 +1238,17 @@
         sizer_selection.Add((5,5))
         sizer_selection.Add(self.structurebox)
-        sizer_selection.Add((5,5))
-        
-        boxsizer1.Add( sizer_radiobutton )
-        boxsizer1.Add( (20,20))
+        #sizer_selection.Add((5,5))
+        mutifactor_selection.Add((10,5))
+        mutifactor_selection.Add(self.mutifactor_text)
+        mutifactor_selection.Add(self.multifactorbox)
+        
+        boxsizer1.Add( sizer_buttons )
+        boxsizer1.Add( (15,15))
         boxsizer1.Add( sizer_selection )
-        if object !=None:
-            boxsizer1.Add( (-72,-72))
-            boxsizer1.Add( object,  0, wx.ALIGN_RIGHT| wx.RIGHT, 35)
-            boxsizer1.Add( (60,60))
+        boxsizer1.Add( (10,10))
+        boxsizer1.Add(mutifactor_selection)
+        
+        self._set_multfactor_combobox()
+
         #--------------------------------------------------------
         sizer.Add(boxsizer1,0, wx.EXPAND | wx.ALL, 10)
@@ -1238,4 +1256,31 @@
         self.SetScrollbars(20,20,25,65)
         
+    def _set_multfactor_combobox(self):   
+        """
+        Set comboBox for muitfactor of CoreMultiShellModel
+        """
+        for idx in range(1,5):
+            self.multifactorbox.Append(str(idx),int(idx))
+            self.multifactorbox.SetSelection(0) 
+        self._hide_multfactor_combobox()
+        
+    def _show_multfactor_combobox(self):   
+        """
+        Show the comboBox of muitfactor of CoreMultiShellModel
+        """ 
+        if not self.mutifactor_text.IsShown():
+            self.mutifactor_text.Show(True)
+        if not self.multifactorbox.IsShown():
+            self.multifactorbox.Show(True)  
+             
+    def _hide_multfactor_combobox(self):   
+        """
+        Hide the comboBox of muitfactor of CoreMultiShellModel
+        """ 
+        if self.mutifactor_text.IsShown():
+            self.mutifactor_text.Hide()
+        if self.multifactorbox.IsShown():
+            self.multifactorbox.Hide()   
+     
         
     def _show_combox(self, event):
@@ -1419,5 +1464,21 @@
             self.structurebox.Enable()
             self.text2.Enable()
-           
+
+        if form_factor != None:    
+            # set multifactor for Mutifunctional models    
+            if form_factor().name == 'CoreMultiShellModel':
+                self._show_multfactor_combobox()
+                m_id = self.multifactorbox.GetCurrentSelection()
+                self.multi_factor = self.multifactorbox.GetClientData(m_id)
+                if self.multi_factor == None: self.multi_factor =0
+                form_factor = form_factor(int(self.multi_factor))
+            else:
+                self._hide_multfactor_combobox()
+                form_factor = form_factor()
+                self.multi_factor = None
+        else:
+            self._hide_multfactor_combobox()
+            self.multi_factor = None  
+              
         s_id = self.structurebox.GetCurrentSelection()
         struct_factor = self.structurebox.GetClientData( s_id )
@@ -1425,9 +1486,9 @@
         if  struct_factor !=None:
             from sans.models.MultiplicationModel import MultiplicationModel
-            self.model= MultiplicationModel(form_factor(),struct_factor())
+            self.model= MultiplicationModel(form_factor,struct_factor())
             
         else:
             if form_factor != None:
-                self.model= form_factor()
+                self.model= form_factor
             else:
                 self.model = None
@@ -1437,4 +1498,6 @@
         self.state.parameters =[]
         self.state.model =self.model
+        self.state.qmin = self.qmin_x
+        self.state.multi_factor = self.multi_factor
         self.disp_list =self.model.getDispParamList()
         self.state.disp_list = self.disp_list
Index: theoryview/perspectives/theory/models.py
===================================================================
--- theoryview/perspectives/theory/models.py	(revision 74755ffa1ce766f8db2e7443abc981f716782e5c)
+++ theoryview/perspectives/theory/models.py	(revision 4523b6854d1499ab35e8e024eeddfffd99dfe319)
@@ -190,9 +190,9 @@
         self.shape_list.append(CoreShellModel)
         self.multiplication_factor.append(CoreShellModel)
-
-        from sans.models.CoreFourShellModel import CoreFourShellModel
-        self.shape_list.append(CoreFourShellModel)
-        self.multiplication_factor.append(CoreFourShellModel)
-        
+        
+        from sans.models.CoreMultiShellModel import CoreMultiShellModel
+        self.shape_list.append(CoreMultiShellModel)
+        self.multiplication_factor.append(CoreMultiShellModel)
+
         from sans.models.VesicleModel import VesicleModel
         self.shape_list.append(VesicleModel)
Index: theoryview/perspectives/theory/pagestate.py
===================================================================
--- theoryview/perspectives/theory/pagestate.py	(revision 74755ffa1ce766f8db2e7443abc981f716782e5c)
+++ theoryview/perspectives/theory/pagestate.py	(revision 4523b6854d1499ab35e8e024eeddfffd99dfe319)
@@ -84,4 +84,5 @@
         self.npts = None
         self.name=""
+        self.multi_factor = None
         ## enable smearering state
         self.enable_smearer = False
@@ -146,4 +147,5 @@
         obj.qmin = copy.deepcopy(self.qmin)
         obj.qmax = copy.deepcopy(self.qmax)
+        obj.multi_factor = copy.deepcopy(self.multi_factor)
         obj.npts = copy.deepcopy(self.npts )
         obj.cb1 = copy.deepcopy(self.cb1)
