Index: sansview/perspectives/fitting/basepage.py
===================================================================
--- sansview/perspectives/fitting/basepage.py	(revision a1b247163dd00d4b19fd556819b00a9ccf638299)
+++ sansview/perspectives/fitting/basepage.py	(revision fb59ed90d8d3e021f0f291a9064098aae148158d)
@@ -94,4 +94,6 @@
         ##[cb state, name, value, "+/-", error of fit, min, max , units]
         self.parameters=[]
+        # non-fittable parameter whose value is astring
+        self.str_parameters = []
         ## list of parameters to fit , must be like self.parameters
         self.param_toFit=[]
@@ -947,4 +949,6 @@
         self._reset_parameters_state(self.orientation_params,
                                      state.orientation_params)
+        self._reset_parameters_state(self.str_parameters,
+                                     state.str_parameters)
         self._reset_parameters_state(self.parameters,state.parameters)    
          ## display dispersion info layer        
@@ -1486,4 +1490,6 @@
                 elif k == "Structure Factors":
                      self.struct_rbutton.SetValue(True)
+                elif  k == "Multi-Functions":
+                    continue
                 else:
                     self.plugin_rbutton.SetValue(True)
@@ -1536,4 +1542,6 @@
                 elif k == "Structure Factors":
                     self.struct_rbutton.SetValue(True)
+                elif  k == "Multi-Functions":
+                    continue
                 else:
                     self.plugin_rbutton.SetValue(True)
@@ -1622,4 +1630,5 @@
         self.text2 = wx.StaticText( self,-1,"P(Q)*S(Q)" )
         self.mutifactor_text = wx.StaticText( self,-1,"No. of Shells: " )
+        self.mutifactor_text1 = wx.StaticText( self,-1,"" )
         self.show_sld_button = wx.Button( self,-1,"Show SLD Profile" )
         self.show_sld_button.Bind(wx.EVT_BUTTON,self._on_show_sld)
@@ -1652,4 +1661,6 @@
         mutifactor_selection.Add(self.mutifactor_text)
         mutifactor_selection.Add(self.multifactorbox)
+        mutifactor_selection.Add((5,5))
+        mutifactor_selection.Add(self.mutifactor_text1)
         mutifactor_selection.Add((10,5))
         mutifactor_selection.Add(self.show_sld_button)
@@ -1662,4 +1673,5 @@
         
         self._set_multfactor_combobox()
+        self.multifactorbox.SetSelection(1)
         self.show_sld_button.Hide()
         #--------------------------------------------------------
@@ -1680,15 +1692,17 @@
         sld_data = Data1D(x,y)
         sld_data.name = 'SLD'
-   
-        self.panel = SLDPanel(self, data=sld_data,id =-1 )
+        sld_data.axes = self.sld_axes
+        self.panel = SLDPanel(self, data=sld_data,axes =self.sld_axes,id =-1 )
         self.panel.ShowModal()    
         
-    def _set_multfactor_combobox(self):   
+    def _set_multfactor_combobox(self, multiplicity=10):   
         """
         Set comboBox for muitfactor of CoreMultiShellModel
-        """
-        for idx in range(0,5):
+        :param multiplicit: no. of multi-functionality
+        """
+        # build content of the combobox
+        for idx in range(0,multiplicity):
             self.multifactorbox.Append(str(idx),int(idx))
-            self.multifactorbox.SetSelection(1) 
+            #self.multifactorbox.SetSelection(1) 
         self._hide_multfactor_combobox()
         
@@ -1699,4 +1713,5 @@
         if not self.mutifactor_text.IsShown():
             self.mutifactor_text.Show(True)
+            self.mutifactor_text1.Show(True)
         if not self.multifactorbox.IsShown():
             self.multifactorbox.Show(True)  
@@ -1708,4 +1723,5 @@
         if self.mutifactor_text.IsShown():
             self.mutifactor_text.Hide()
+            self.mutifactor_text1.Hide()
         if self.multifactorbox.IsShown():
             self.multifactorbox.Hide()   
@@ -1862,10 +1878,35 @@
             # set multifactor for Mutifunctional models    
             if form_factor().__class__ in self.model_list_box["Multi-Functions"]:
+                m_id = self.multifactorbox.GetCurrentSelection()
+                multiplicity = form_factor().multiplicity_info[0]
+                self.multifactorbox.Clear()
+                #self.mutifactor_text.SetLabel(form_factor().details[])
+                self._set_multfactor_combobox(multiplicity)
                 self._show_multfactor_combobox()
-                self.show_sld_button.Show(True)
-                m_id = self.multifactorbox.GetCurrentSelection()
+                #ToDo:  this info should be called directly from the model 
+                text = form_factor().multiplicity_info[1]#'No. of Shells: '
+
+                #self.mutifactor_text.Clear()
+                self.mutifactor_text.SetLabel(text)
+                if m_id > multiplicity -1:
+                    # default value
+                    m_id = 1
+                    
                 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))
+                self.multifactorbox.SetSelection(m_id)
+                # Check len of the text1 and max_multiplicity
+                text = ''
+                if form_factor.multiplicity_info[0] == len(form_factor.multiplicity_info[2]):
+                    text = form_factor.multiplicity_info[2][self.multi_factor]
+                self.mutifactor_text1.SetLabel(text)
+                # Check if model has  get sld profile.
+                if len(form_factor.multiplicity_info[3]) > 0:
+                    self.sld_axes = form_factor.multiplicity_info[3]
+                    self.show_sld_button.Show(True)
+                else:
+                    self.sld_axes = ""
+
             else:
                 self._hide_multfactor_combobox()
Index: sansview/perspectives/fitting/fitpage.py
===================================================================
--- sansview/perspectives/fitting/fitpage.py	(revision 20905a0de823d5d4e35ce6b55e1584bb244e53f2)
+++ sansview/perspectives/fitting/fitpage.py	(revision fb59ed90d8d3e021f0f291a9064098aae148158d)
@@ -1192,4 +1192,24 @@
             self.smear_accuracy.Append(list[idx],idx)
             
+    def _set_fun_box_list(self,fun_box):
+        """
+        Set the list of func for multifunctional models
+        """
+        # Check if it is multi_functional model
+        if self.model.__class__ not in self.model_list_box["Multi-Functions"]:
+            return None
+        # Get the func name list
+        list = self.model.fun_list
+        if len(list) == 0:
+            return None
+        # build function (combo)box
+        ind = 0
+        while(ind < len(list)):
+            for key, val in list.iteritems():
+                if (val == ind):
+                    fun_box.Append(key,val)
+                    break
+            ind += 1
+        
     def _on_select_accuracy(self,event):
         """
@@ -1206,4 +1226,26 @@
             if self.current_smearer != None:
                 self.current_smearer.set_accuracy(accuracy = self.smear2d_accuracy) 
+        event.Skip()
+
+    def _on_fun_box(self,event):
+        """
+        Select an func: Erf,Rparabola,LParabola
+        """
+        fun_val = None
+        fun_box = event.GetEventObject()
+        name = fun_box.Name
+        value = fun_box.GetValue()
+        if self.model.fun_list.has_key(value):
+            fun_val = self.model.fun_list[value]
+
+        self.model.setParam(name,fun_val)
+        # save state
+        self._copy_parameters_state(self.str_parameters, self.state.str_parameters)
+        # update params
+        self._update_paramv_on_fit() 
+        # draw
+        self._draw_model()
+        self.Refresh()
+        # get ready for new event
         event.Skip()
         
@@ -2046,4 +2088,5 @@
         self.sizer3.Clear(True)
         self.parameters = []
+        self.str_parameters = []
         self.param_toFit=[]
         self.fittable_param=[]
@@ -2074,9 +2117,16 @@
             Custom compare to order, first by alphabets then second by number.
             """ 
+            # number at the last digit
             a_last = a[len(a)-1]
             b_last = b[len(b)-1]
-            
+            # default
             num_a = None
             num_b = None
+            # split the names
+            a2 = a.lower().split('_')
+            b2 = b.lower().split('_')
+            # check length of a2, b2
+            len_a2 = len(a2)
+            len_b2 = len(b2)
             # check if it contains a int number(<10)
             try: 
@@ -2086,15 +2136,25 @@
                 num_b = int(b_last)
             except: pass
+            # Put 'scale' near the top; happens 
+            # when numbered param name exists
+            if a == 'scale':
+                return -1
             # both have a number    
             if num_a != None and num_b != None:
-                if num_a > num_b: return 1
+                if num_a > num_b: return -1
+                # same number
                 elif num_a == num_b: 
-                    return cmp(a.lower(), b.lower())
-                else: return -1
+                    # different last names
+                    if a2[len_a2-1] != b2[len_b2-1] and num_a != 0:
+                        return -cmp(a2[len_a2-1], b2[len_b2-1])
+                    else: 
+                        return cmp(a, b) 
+                else: return 1
             # one of them has a number
             elif num_a != None: return 1
             elif num_b != None: return -1
-            # no nuumbers
+            # no numbers
             else: return cmp(a.lower(), b.lower())
+
                         
         keys.sort(custom_compare)
@@ -2147,61 +2207,86 @@
                 iy += 1
                 ix = 0
-                ## add parameters name with checkbox for selecting to fit
-                cb = wx.CheckBox(self, -1, item )              
-                cb.SetToolTipString(" Check for fitting.")
-                #cb.SetValue(True)
-                wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param)
-                
-                sizer.Add( cb,( iy, ix),(1,1),
-                             wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 5)
-                
-                ## add parameter value
-                ix += 1
-                value= self.model.getParam(item)
-                ctl1 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20),
-                                    style=wx.TE_PROCESS_ENTER)
-                ctl1.SetToolTipString("Hit 'Enter' after typing.")
-                ctl1.SetValue(format_number(value))
-                sizer.Add(ctl1, (iy,ix),(1,1), wx.EXPAND)
-                ## text to show error sign
-                ix += 1
-                text2=wx.StaticText(self, -1, '+/-')
-                sizer.Add(text2,(iy, ix),(1,1),\
-                                wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
-                text2.Hide() 
-                ix += 1
-                ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=0)
-                sizer.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
-                ctl2.Hide()
-                
-                ix += 1
-                ctl3 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
-                                               text_enter_callback = self._onparamRangeEnter)
-     
-                sizer.Add(ctl3, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
-                ctl3.Hide()
-        
-                ix += 1
-                ctl4 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
-                                               text_enter_callback = self._onparamRangeEnter)
-                sizer.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
-      
-                ctl4.Hide()
-
-                if self.engine_type=="park":
-                    ctl3.Show(True)
-                    ctl4.Show(True)
-                ix +=1
-                # Units
-                if self.model.details.has_key(item):
-                    units = wx.StaticText(self, -1, self.model.details[item][0], style=wx.ALIGN_LEFT)
+                if self.model.__class__ in self.model_list_box["Multi-Functions"] \
+                    and item in self.model.non_fittable:
+                    non_fittable_name = wx.StaticText(self, -1, item )
+                    sizer.Add(non_fittable_name,(iy, ix),(1,1),\
+                            wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 21)
+                    ## add parameter value
+                    ix += 1
+                    value= self.model.getParam(item)
+                    if len(self.model.fun_list) > 0:
+                        num = item.split('_')[1][5:7]
+                        fun_box = wx.ComboBox(self, -1,size=(100,-1),style=wx.CB_READONLY, name = '%s'% item)
+                        self._set_fun_box_list(fun_box)
+                        fun_box.SetSelection(0)
+                        #self.fun_box.SetToolTipString("A function describing the interface")
+                        wx.EVT_COMBOBOX(fun_box,-1, self._on_fun_box)
+                    else:
+                        fun_box = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20),
+                                        style=wx.TE_PROCESS_ENTER, name ='%s'% item)
+                        fun_box.SetToolTipString("Hit 'Enter' after typing.")
+                        fun_box.SetValue(format_number(value))
+                    sizer.Add(fun_box, (iy,ix),(1,1), wx.EXPAND)
+                    self.str_parameters.append([None,item, fun_box,None,None,None,None,None])
+
+                    
                 else:
-                    units = wx.StaticText(self, -1, "", style=wx.ALIGN_LEFT)
-                sizer.Add(units, (iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0)
+                    ## add parameters name with checkbox for selecting to fit
+                    cb = wx.CheckBox(self, -1, item )              
+                    cb.SetToolTipString(" Check for fitting.")
+                    #cb.SetValue(True)
+                    wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param)
                     
-                ##[cb state, name, value, "+/-", error of fit, min, max , units]
-                self.parameters.append([cb,item, ctl1,
-                                        text2,ctl2, ctl3, ctl4,units])
-              
+                    sizer.Add( cb,( iy, ix),(1,1),
+                                 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 5)
+
+                    ## add parameter value
+                    ix += 1
+                    value= self.model.getParam(item)
+                    ctl1 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20),
+                                        style=wx.TE_PROCESS_ENTER)
+                    ctl1.SetToolTipString("Hit 'Enter' after typing.")
+                    ctl1.SetValue(format_number(value))
+                    sizer.Add(ctl1, (iy,ix),(1,1), wx.EXPAND)
+                    ## text to show error sign
+                    ix += 1
+                    text2=wx.StaticText(self, -1, '+/-')
+                    sizer.Add(text2,(iy, ix),(1,1),\
+                                    wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
+                    text2.Hide() 
+                    ix += 1
+                    ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=0)
+                    sizer.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
+                    ctl2.Hide()
+                    
+                    ix += 1
+                    ctl3 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
+                                                   text_enter_callback = self._onparamRangeEnter)
+         
+                    sizer.Add(ctl3, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
+                    ctl3.Hide()
+            
+                    ix += 1
+                    ctl4 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER,
+                                                   text_enter_callback = self._onparamRangeEnter)
+                    sizer.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
+          
+                    ctl4.Hide()
+    
+                    if self.engine_type=="park":
+                        ctl3.Show(True)
+                        ctl4.Show(True)
+                    ix +=1
+                    # Units
+                    if self.model.details.has_key(item):
+                        units = wx.StaticText(self, -1, self.model.details[item][0], style=wx.ALIGN_LEFT)
+                    else:
+                        units = wx.StaticText(self, -1, "", style=wx.ALIGN_LEFT)
+                    sizer.Add(units, (iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0)
+                        
+                    ##[cb state, name, value, "+/-", error of fit, min, max , units]
+                    self.parameters.append([cb,item, ctl1,
+                                            text2,ctl2, ctl3, ctl4,units])
+                                  
         iy+=1
         sizer.Add((10,10),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
Index: sansview/perspectives/fitting/fitting.py
===================================================================
--- sansview/perspectives/fitting/fitting.py	(revision 7a078643f880a7d4151c32547cc839eb098db2f3)
+++ sansview/perspectives/fitting/fitting.py	(revision fb59ed90d8d3e021f0f291a9064098aae148158d)
@@ -823,5 +823,5 @@
             self.fitter.set_model(model, self.fit_id,
                                    pars,constraints = listOfConstraint)
-            
+            print "listOfConstraint",listOfConstraint
             self.fitter.set_data(data=metadata,Uid=self.fit_id,
                                  smearer=smearer,qmin= qmin,qmax=qmax )
Index: sansview/perspectives/fitting/models.py
===================================================================
--- sansview/perspectives/fitting/models.py	(revision a1b247163dd00d4b19fd556819b00a9ccf638299)
+++ sansview/perspectives/fitting/models.py	(revision fb59ed90d8d3e021f0f291a9064098aae148158d)
@@ -172,5 +172,4 @@
         
         """
-        ## form factor
         from sans.models.SphereModel import SphereModel
         self.shape_list.append(SphereModel)
@@ -185,5 +184,5 @@
         self.shape_list.append(FuzzySphereModel)
         self.multiplication_factor.append(FuzzySphereModel)
-        
+           
         from sans.models.CoreShellModel import CoreShellModel
         self.shape_list.append(CoreShellModel)
@@ -194,5 +193,5 @@
         self.multiplication_factor.append(CoreMultiShellModel)
         self.multi_func_list.append(CoreMultiShellModel)
-        
+
         from sans.models.VesicleModel import VesicleModel
         self.shape_list.append(VesicleModel)
@@ -232,8 +231,22 @@
         self.multiplication_factor.append(ParallelepipedModel)
         
+        from sans.models.CSParallelepipedModel import CSParallelepipedModel
+        self.shape_list.append(CSParallelepipedModel)
+        self.multiplication_factor.append(CSParallelepipedModel)
+        
         from sans.models.EllipticalCylinderModel import EllipticalCylinderModel
         self.shape_list.append(EllipticalCylinderModel)
         self.multiplication_factor.append(EllipticalCylinderModel)
-                
+        
+        from sans.models.BarBellModel import BarBellModel
+        self.shape_list.append(BarBellModel)
+        # not implemeted yet!
+        #self.multiplication_factor.append(BarBellModel)
+        
+        from sans.models.CappedCylinderModel import CappedCylinderModel
+        self.shape_list.append(CappedCylinderModel)
+        # not implemeted yet!
+        #self.multiplication_factor.append(CappedCylinderModel)
+        
         from sans.models.EllipsoidModel import EllipsoidModel
         self.shape_list.append(EllipsoidModel)
@@ -259,4 +272,16 @@
         from sans.models.LamellarPSHGModel import LamellarPSHGModel
         self.shape_list.append(LamellarPSHGModel)
+        
+        from sans.models.LamellarPCrystalModel import LamellarPCrystalModel
+        self.shape_list.append(LamellarPCrystalModel)
+        
+        from sans.models.SCCrystalModel import SCCrystalModel
+        self.shape_list.append(SCCrystalModel)
+        
+        from sans.models.FCCrystalModel import FCCrystalModel
+        self.shape_list.append(FCCrystalModel)
+        
+        from sans.models.BCCrystalModel import BCCrystalModel
+        self.shape_list.append(BCCrystalModel)
       
         ## Structure factor 
@@ -272,6 +297,6 @@
         from sans.models.HayterMSAStructure import HayterMSAStructure
         self.struct_list.append(HayterMSAStructure)
-    
-        ##shape-independent models  
+        
+        ##shape-independent models
         from sans.models.PowerLawAbsModel import PowerLawAbsModel
         self.shape_indep_list.append( PowerLawAbsModel )
@@ -280,5 +305,11 @@
         self.shape_indep_list.append(BEPolyelectrolyte )
         self.form_factor_dict[str(wx.NewId())] =  [SphereModel]
-
+        
+        from sans.models.BroadPeakModel import BroadPeakModel
+        self.shape_indep_list.append(BroadPeakModel)
+        
+        from sans.models.CorrLengthModel import CorrLengthModel
+        self.shape_indep_list.append(CorrLengthModel)
+        
         from sans.models.DABModel import DABModel
         self.shape_indep_list.append(DABModel )
@@ -287,10 +318,20 @@
         self.shape_indep_list.append(DebyeModel )
         
+        #FractalModel (a c-model)is now being used instead of FractalAbsModel.
+        from sans.models.FractalModel import FractalModel
+        self.shape_indep_list.append(FractalModel )
+        
+        from sans.models.FractalCoreShellModel import FractalCoreShellModel
+        self.shape_indep_list.append(FractalCoreShellModel )
+        
+        from sans.models.GaussLorentzGelModel import GaussLorentzGelModel
+        self.shape_indep_list.append(GaussLorentzGelModel) 
+                
         from sans.models.GuinierModel import GuinierModel
         self.shape_indep_list.append(GuinierModel )
         
-        from sans.models.FractalModel import FractalModel
-        self.shape_indep_list.append(FractalModel )
-        
+        from sans.models.GuinierPorodModel import GuinierPorodModel
+        self.shape_indep_list.append(GuinierPorodModel )
+
         from sans.models.LorentzModel import LorentzModel
         self.shape_indep_list.append( LorentzModel) 
@@ -304,20 +345,38 @@
         from sans.models.Poly_GaussCoil import Poly_GaussCoil
         self.shape_indep_list.append(Poly_GaussCoil)
-                 
+        
+        from sans.models.PolymerExclVolume import PolymerExclVolume
+        self.shape_indep_list.append(PolymerExclVolume)
+        
         from sans.models.PorodModel import PorodModel
-        self.shape_indep_list.append(PorodModel )
-        
-        #FractalModel (a c-model)will be used.
-        #from sans.models.FractalAbsModel import FractalAbsModel
-        #self.shape_indep_list.append(FractalAbsModel)
+        self.shape_indep_list.append(PorodModel )      
+        
+        from sans.models.RPA10Model import RPA10Model
+        self.shape_indep_list.append(RPA10Model)
+        self.multi_func_list.append(RPA10Model)
         
         from sans.models.TeubnerStreyModel import TeubnerStreyModel
         self.shape_indep_list.append(TeubnerStreyModel )
         
+        from sans.models.TwoLorentzianModel import TwoLorentzianModel
+        self.shape_indep_list.append(TwoLorentzianModel )
+        
+        from sans.models.TwoPowerLawModel import TwoPowerLawModel
+        self.shape_indep_list.append(TwoPowerLawModel )
+        
+        from sans.models.UnifiedPowerRgModel import UnifiedPowerRgModel
+        self.shape_indep_list.append(UnifiedPowerRgModel )
+        self.multi_func_list.append(UnifiedPowerRgModel)
+        
         from sans.models.LineModel import LineModel
         self.shape_indep_list.append(LineModel)
         
+        from sans.models.ReflectivityModel import ReflectivityModel
+        self.multi_func_list.append(ReflectivityModel)
+    
         #Looking for plugins
         self.plugins = findModels()
+        self._get_multifunc_models()
+        self.plugins.append(ReflectivityModel)
         return 0
 
@@ -466,4 +525,17 @@
         wx.PostEvent(self.event_owner, evt)
         
+    def _get_multifunc_models(self):
+        """
+        Get the multifunctional models
+        """
+        for item in self.plugins:
+            try:
+                # check the multiplicity if any
+                if item.multiplicity_info[0] > 1:
+                    self.multi_func_list.append(item)
+            except:
+                # pass to other items
+                pass
+                    
     def get_model_list(self):    
         """
Index: sansview/perspectives/fitting/pagestate.py
===================================================================
--- sansview/perspectives/fitting/pagestate.py	(revision 4523b6854d1499ab35e8e024eeddfffd99dfe319)
+++ sansview/perspectives/fitting/pagestate.py	(revision fb59ed90d8d3e021f0f291a9064098aae148158d)
@@ -66,5 +66,6 @@
                             ["weights", "weights"]]
 
-list_of_state_parameters = [["parameters", "parameters"] ,                     
+list_of_state_parameters = [["parameters", "parameters"] , 
+                            ["str_parameters", "str_parameters"] ,                     
                             ["orientation_parameters", "orientation_params"],
                             ["dispersity_parameters", "orientation_params_disp"],
@@ -172,4 +173,6 @@
         # Contains link between  model ,all its parameters, and panel organization
         self.parameters = []
+        # String parameter list that can not be fitted
+        self.str_parameters = []
         # Contains list of parameters that cannot be fitted and reference to 
         #panel objects 
@@ -270,4 +273,5 @@
         obj.enable2D = copy.deepcopy(self.enable2D)
         obj.parameters = copy.deepcopy(self.parameters)
+        obj.str_parameters = copy.deepcopy(self.str_parameters)
         obj.fixed_param = copy.deepcopy(self.fixed_param)
         obj.fittable_param = copy.deepcopy(self.fittable_param)
@@ -365,4 +369,6 @@
         rep += "number parameters(self.parameters): %s\n"%len(self.parameters)
         rep = self._repr_helper( list=self.parameters, rep=rep)
+        rep += "number str_parameters(self.str_parameters): %s\n"%len(self.str_parameters)
+        rep = self._repr_helper( list=self.str_parameters, rep=rep)
         rep += "number orientation parameters"
         rep += "(self.orientation_params): %s\n"%len(self.orientation_params)
Index: sansview/perspectives/fitting/simfitpage.py
===================================================================
--- sansview/perspectives/fitting/simfitpage.py	(revision 5062bbf9abf800e4b5ffab0375da1c4a03967672)
+++ sansview/perspectives/fitting/simfitpage.py	(revision fb59ed90d8d3e021f0f291a9064098aae148158d)
@@ -23,5 +23,6 @@
     for item in model.getParamList():
         if not item  in model.getDispParamList():
-            fittable_param.append(item)
+            if not item in model.non_fittable:
+                fittable_param.append(item)
             
     for item in model.fixed:
