Index: fittingview/src/sans/perspectives/fitting/fitpage.py
===================================================================
--- fittingview/src/sans/perspectives/fitting/fitpage.py	(revision 7ee79cba70c728ab1005d6373c62a6352ef0a95f)
+++ fittingview/src/sans/perspectives/fitting/fitpage.py	(revision 1b14795786d3947586fb520fd5306756edf3f391)
@@ -2653,5 +2653,11 @@
             event = PageInfoEvent(page = self)
             wx.PostEvent(self.parent, event) 
-     
+        param2fit = []
+        for item in self.param_toFit:
+            if item[0]:
+                param2fit.append(item[1])     
+        self.parent._manager.set_param2fit(self.uid, param2fit)
+
+        
     def select_param(self,event):
         """ 
@@ -2712,5 +2718,11 @@
             event = PageInfoEvent(page = self)
             wx.PostEvent(self.parent, event) 
-    
+        
+        param2fit = []
+        for item in self.param_toFit:
+            if item[0]:
+                param2fit.append(item[1])     
+        self.parent._manager.set_param2fit(self.uid, param2fit)
+        
     def set_model_param_sizer(self, model):
         """
Index: fittingview/src/sans/perspectives/fitting/fitproblem.py
===================================================================
--- fittingview/src/sans/perspectives/fitting/fitproblem.py	(revision 05325ec410ace1cf8e14479cda371da1827ceedd)
+++ fittingview/src/sans/perspectives/fitting/fitproblem.py	(revision 1b14795786d3947586fb520fd5306756edf3f391)
@@ -67,4 +67,13 @@
         :param name: name of the given parameter
         :param value: value of that parameter
+        """
+    def set_param2fit(self, list):
+        """
+        Store param names to fit (checked)
+        :param list: list of the param names
+        """
+    def get_param2fit(self):
+        """
+        return the list param names to fit
         """
     def get_model_param(self):
@@ -295,5 +304,18 @@
         if fid in self.iterkeys():
             return self[fid].get_model_param()
-      
+    
+    def set_param2fit(self, list):
+        """
+        Store param names to fit (checked)
+        :param list: list of the param names
+        """
+        self.list_param2fit = list
+        
+    def get_param2fit(self):
+        """
+        return the list param names to fit
+        """  
+        return self.list_param2fit
+          
     def schedule_tofit(self, schedule=0):
         """
@@ -523,5 +545,18 @@
         """
         return self.weight
-        
+    
+    def set_param2fit(self, list):
+        """
+        Store param names to fit (checked)
+        :param list: list of the param names
+        """
+        self.list_param2fit = list
+        
+    def get_param2fit(self):
+        """
+        return the list param names to fit
+        """  
+        return self.list_param2fit
+    
     def set_model_param(self,name,value=None):
         """ 
Index: fittingview/src/sans/perspectives/fitting/fitting.py
===================================================================
--- fittingview/src/sans/perspectives/fitting/fitting.py	(revision ea8de9424e9d09f1873b7b305c33259ec09c72f2)
+++ fittingview/src/sans/perspectives/fitting/fitting.py	(revision 1b14795786d3947586fb520fd5306756edf3f391)
@@ -429,5 +429,11 @@
             self.temp_state = []
             raise
-                 
+        
+    def set_param2fit(self, uid, param2fit):
+        """
+        Set the list of param names to fit for fitprobelm
+        """
+        self.page_finder[uid].set_param2fit(param2fit)
+                  
     def save_fit_state(self, filepath, fitstate):  
         """
Index: fittingview/src/sans/perspectives/fitting/simfitpage.py
===================================================================
--- fittingview/src/sans/perspectives/fitting/simfitpage.py	(revision 197600466f4130d20b91c23cd973bee5ac42233f)
+++ fittingview/src/sans/perspectives/fitting/simfitpage.py	(revision 1b14795786d3947586fb520fd5306756edf3f391)
@@ -22,5 +22,4 @@
     """
     fittable_param=[]
-    
     for item in model.getParamList():
         if not item  in model.getDispParamList():
@@ -60,5 +59,6 @@
         ## look like self.constraint_dict[page_id]= page 
         self.constraint_dict={}
-        ## item list  self.constraints_list=[combobox1, combobox2,=,textcrtl, button ]
+        ## item list  
+        # self.constraints_list=[combobox1, combobox2,=,textcrtl, button ]
         self.constraints_list=[]
         ## list of current model 
@@ -122,11 +122,12 @@
                 sizer.Clear(True)
                 self.sizer_constraints.Remove(sizer)
-              
-                self.sizer2.Layout()
-                self.SetScrollbars(20,20,25,65)
+                #self.SetScrollbars(20,20,25,65)
                 self.constraints_list.remove(item)
                 self.nb_constraint -= 1
+                self.sizer2.Layout()
+                self.Layout()
                 break
-                
+        self._onAdd_constraint(None)   
+             
     def onFit(self, event):
         """
@@ -144,8 +145,12 @@
                 if item[0].GetValue():
                     self.manager.schedule_for_fit(value=1, uid=item[2]) 
-            self.manager.onFit(uid=self.uid)
+            try:
+                self.manager.onFit(uid=self.uid)
+            except:
+                msg= "Select at least one parameter to fit in the FitPages."
+                wx.PostEvent(self.parent.parent, StatusEvent(status=msg))
         else:
             msg= "Select at least one model to fit "
-            wx.PostEvent(self.parent.Parent, StatusEvent(status=msg))
+            wx.PostEvent(self.parent.parent, StatusEvent(status=msg))
            
     def set_manager(self, manager):
@@ -199,5 +204,6 @@
         if len(self.model_toFit)==2:
             self._store_model()
-            if self.show_constraint.GetValue() and len(self.constraints_list)==0:
+            if self.show_constraint.GetValue() and\
+                             len(self.constraints_list)==0:
                 self._show_constraint()
         elif len(self.model_toFit)< 2:
@@ -235,5 +241,6 @@
         if len(self.page_finder)==0:
             msg = " No fit combinations are found! \n\n"
-            msg += " Please load data and set up at least two fit panels first..."
+            msg += " Please load data and set up "
+            msg += "at least two fit panels first..."
             sizer_title.Add(wx.StaticText(self, -1, msg))
         else:
@@ -282,9 +289,10 @@
         if len(self.model_toFit)< 2:
             msg= "Select at least 2 models to add constraint "
-            wx.PostEvent(self.parent.Parent, StatusEvent(status= msg ))
+            wx.PostEvent(self.parent.parent, StatusEvent(status= msg ))
             ## hide button
             self._hide_constraint()
             return
         if self.show_constraint.GetValue():
+            self._show_all_constraint() 
             self._show_constraint()
             return
@@ -292,5 +300,125 @@
            self._hide_constraint()
            return 
-            
+       
+    def _show_all_constraint(self):
+        """
+        Show constraint fields
+        """
+        #for id, model in self.constraint_dict.iteritems():   
+        box_description= wx.StaticBox(self, -1,"Easy Setup ")
+        boxsizer = wx.StaticBoxSizer(box_description, wx.HORIZONTAL)     
+        sizer_constraint =  wx.BoxSizer(wx.HORIZONTAL|wx.LEFT|wx.RIGHT|wx.EXPAND)
+        self.model_cbox_left = wx.ComboBox(self, -1, style=wx.CB_READONLY)
+        self.model_cbox_left.Clear()
+        self.model_cbox_right = wx.ComboBox(self, -1, style=wx.CB_READONLY)
+        self.model_cbox_right.Clear()
+        wx.EVT_COMBOBOX(self.model_cbox_left, -1, self._on_select_modelcb)
+        wx.EVT_COMBOBOX(self.model_cbox_right, -1, self._on_select_modelcb)
+        egal_txt= wx.StaticText(self,-1," = ")
+        self.set_button =wx.Button(self, wx.NewId(),'Set All')
+        self.set_button.Bind(wx.EVT_BUTTON, self._on_set_all_equal,
+                                       id=self.set_button.GetId())
+        set_tip = "Add constraints for all the adjustable parameters "
+        set_tip += "(checked in FitPages) if exist."
+        self.set_button.SetToolTipString(set_tip)
+        self.set_button.Disable()
+        
+        for id, model in self.constraint_dict.iteritems():
+            ## check if all parameters have been selected for constraint
+            ## then do not allow add constraint on parameters
+            self.model_cbox_left.Append( str(model.name), model)
+        self.model_cbox_left.Select(0)
+        for id, model in self.constraint_dict.iteritems():
+            ## check if all parameters have been selected for constraint
+            ## then do not allow add constraint on parameters
+            self.model_cbox_right.Append( str(model.name), model)
+        boxsizer.Add(self.model_cbox_left, 
+                             flag= wx.RIGHT|wx.EXPAND, border=10)
+        boxsizer.Add(wx.StaticText(self, -1,".parameters"),
+                             flag= wx.RIGHT|wx.EXPAND, border=5)
+        boxsizer.Add(egal_txt, flag= wx.RIGHT|wx.EXPAND, border=5)
+        boxsizer.Add(self.model_cbox_right, 
+                             flag= wx.RIGHT|wx.EXPAND, border=10)
+        boxsizer.Add(wx.StaticText(self, -1,".parameters"),
+                             flag= wx.RIGHT|wx.EXPAND,border=5)
+        boxsizer.Add((20,-1))
+        boxsizer.Add(self.set_button, flag= wx.RIGHT|wx.EXPAND, border=5)
+        sizer_constraint.Add(boxsizer, flag= wx.RIGHT|wx.EXPAND, border=5)
+        self.sizer_all_constraints.Insert(before=0,
+                             item=sizer_constraint, 
+                             flag= wx.TOP|wx.BOTTOM|wx.EXPAND, border=5)
+
+        self.sizer_all_constraints.Layout()
+        self.sizer2.Layout()
+        self.SetScrollbars(20,20,25,65)
+    
+    def _on_select_modelcb(self, event):
+        """
+        On select model left or right combobox
+        """
+        event.Skip()
+        flag = True
+        if self.model_cbox_left.GetValue().strip() == '':
+            flag = False
+        if self.model_cbox_right.GetValue().strip() == '':
+            flag = False
+        if self.model_cbox_left.GetValue() ==\
+                self.model_cbox_right.GetValue():
+            flag = False
+        self.set_button.Enable(flag)
+        
+    def _on_set_all_equal(self, event):
+        """
+        On set button
+        """
+        event.Skip()
+        length = len(self.constraints_list)
+        if length < 1:
+            return 
+        param_list = []
+        param_listB = []
+        selection = self.model_cbox_left.GetCurrentSelection()
+        model_left = self.model_cbox_left.GetValue()
+        model = self.model_cbox_left.GetClientData(selection)
+        selectionB = self.model_cbox_right.GetCurrentSelection()
+        model_right = self.model_cbox_right.GetValue()
+        modelB = self.model_cbox_right.GetClientData(selectionB)
+        for id, dic_model in self.constraint_dict.iteritems():
+            if model == dic_model:
+                param_list = self.page_finder[id].get_param2fit()
+            if modelB == dic_model:
+                param_listB = self.page_finder[id].get_param2fit()
+            if len(param_list) > 0 and len(param_listB) > 0:
+                break
+        #param_list= get_fittableParam(model)
+        #param_listB= get_fittableParam(modelB)
+        num_cbox = 0
+        has_param = False
+        for param in param_list:
+            num_cbox += 1
+            if param in param_listB:
+                self.model_cbox.SetStringSelection(model_left)
+                self._on_select_model(None)
+                self.param_cbox.Clear()
+                self.param_cbox.Append( str(param), model)
+                self.param_cbox.SetStringSelection( str(param))
+                self.ctl2.SetValue(str(model_right + "." + str(param)))
+                has_param = True
+                if num_cbox == len(param_list):
+                    break
+                self._show_constraint()
+        
+        self.sizer_constraints.Layout()
+        self.sizer2.Layout()
+
+        if not has_param:
+            msg= " There is no adjustable parameter (checked to fit)"
+            msg += " either one of the models."
+            wx.PostEvent(self.parent.parent, StatusEvent(info="warning", 
+                                                         status= msg ))
+        else:
+            msg= " The constraints are added."
+            wx.PostEvent(self.parent.parent, StatusEvent(info="info", 
+                                                         status= msg ))     
     def _show_constraint(self):
         """
@@ -300,19 +428,18 @@
         if len(self.constraints_list)!= 0:
             nb_fit_param = 0
-            for model in self.constraint_dict.values():
-                nb_fit_param += len(get_fittableParam(model))
+            for id, model in self.constraint_dict.iteritems():
+                nb_fit_param += len(self.page_finder[id].get_param2fit())#len(get_fittableParam(model))
             ##Don't add anymore
             if len(self.constraints_list) == nb_fit_param:
                 msg= "Cannot add another constraint .Maximum of number "
                 msg += "Parameters name reached %s"%str(nb_fit_param)
-                wx.PostEvent(self.parent.Parent, StatusEvent(status= msg ))
+                wx.PostEvent(self.parent.parent, StatusEvent(status= msg ))
                 self.sizer_constraints.Layout()
                 self.sizer2.Layout()
                 self.SetScrollbars(20,20,25,65)
                 return
-            
         if len(self.model_toFit) < 2 :
             msg= "Select at least 2 model to add constraint "
-            wx.PostEvent(self.parent.Parent, StatusEvent(status= msg ))
+            wx.PostEvent(self.parent.parent, StatusEvent(status= msg ))
             self.sizer_constraints.Layout()
             self.sizer2.Layout()
@@ -323,5 +450,5 @@
         model_cbox = wx.ComboBox(self, -1,style=wx.CB_READONLY)
         model_cbox.Clear()
-        param_cbox = wx.ComboBox(self, -1,style=wx.CB_READONLY)
+        param_cbox = wx.ComboBox(self, -1,style=wx.CB_READONLY, size=(100,-1),)
         param_cbox.Hide()
         
@@ -330,5 +457,5 @@
         
         wx.EVT_COMBOBOX(param_cbox,-1, self._on_select_param)
-        ctl2 = wx.TextCtrl(self, -1)
+        self.ctl2 = wx.TextCtrl(self, -1)
         egal_txt= wx.StaticText(self,-1," = ")
         btRemove = wx.Button(self,wx.NewId(),'Remove')
@@ -336,5 +463,5 @@
         btRemove.SetToolTipString("Remove constraint.")
        
-        for id,model in self.constraint_dict.iteritems():
+        for id, model in self.constraint_dict.iteritems():
             ## check if all parameters have been selected for constraint
             ## then do not allow add constraint on parameters
@@ -345,9 +472,9 @@
            
         wx.EVT_COMBOBOX(model_cbox,-1, self._on_select_model)
-    
+        sizer_constraint.Add((5,-1))
         sizer_constraint.Add(model_cbox, flag= wx.RIGHT|wx.EXPAND,border=10)
         sizer_constraint.Add(param_cbox, flag= wx.RIGHT|wx.EXPAND,border=5)
         sizer_constraint.Add(egal_txt, flag= wx.RIGHT|wx.EXPAND,border=5)
-        sizer_constraint.Add(ctl2, flag= wx.RIGHT|wx.EXPAND,border=10)
+        sizer_constraint.Add(self.ctl2, flag= wx.RIGHT|wx.EXPAND,border=10)
         sizer_constraint.Add(btRemove, flag= wx.RIGHT|wx.EXPAND,border=10)
       
@@ -356,5 +483,5 @@
                                    border=5)
         ##[combobox1, combobox2,=,textcrtl, remove button ]
-        self.constraints_list.append([model_cbox, param_cbox, egal_txt, ctl2,btRemove,sizer_constraint])
+        self.constraints_list.append([model_cbox, param_cbox, egal_txt, self.ctl2,btRemove,sizer_constraint])
     
         self.nb_constraint += 1
@@ -370,10 +497,12 @@
             self.page_finder[id].clear_model_param()
                
-        self.nb_constraint =0     
-        self.constraint_dict={}
+        self.nb_constraint = 0     
+        self.constraint_dict = {}
         if hasattr(self,"btAdd"):
             self.btAdd.Hide()
         self._store_model()
-        self.constraints_list=[]         
+        self.constraints_list = []   
+        self.sizer_all_constraints.Clear(True) 
+        self.sizer_all_constraints.Layout()         
         self.sizer_constraints.Clear(True) 
         self.sizer_constraints.Layout()    
@@ -389,6 +518,9 @@
         n = self.model_cbox.GetCurrentSelection()
         model = self.model_cbox.GetClientData(n)
-        
-        param_list= get_fittableParam(model)
+        for id, dic_model in self.constraint_dict.iteritems():
+            if model == dic_model:
+                param_list = self.page_finder[id].get_param2fit()
+                break
+        #param_list= get_fittableParam(model)
         length = len(self.constraints_list)
         if length < 1:
@@ -430,23 +562,25 @@
         if not self.show_constraint.GetValue():
             msg= " Select Yes to add Constraint "
-            wx.PostEvent(self.parent.Parent, StatusEvent(status= msg ))
+            wx.PostEvent(self.parent.parent, StatusEvent(status= msg ))
             return 
-        ## check that a constraint is added before allow to add another cosntraint
+        ## check that a constraint is added 
+        # before allow to add another constraint
         for item in self.constraints_list:
             model_cbox = item[0]
             if model_cbox.GetString(0)=="":
                 msg= " Select a model Name! "
-                wx.PostEvent(self.parent.Parent, StatusEvent(status= msg ))
+                wx.PostEvent(self.parent.parent, StatusEvent(status= msg ))
                 return 
             param_cbox = item[1]
             if param_cbox.GetString(0)=="":
                 msg= " Select a parameter Name! "
-                wx.PostEvent(self.parent.Parent, StatusEvent(status= msg ))
+                wx.PostEvent(self.parent.parent, StatusEvent(status= msg ))
                 return 
             ctl2 = item[3]
             if ctl2.GetValue().lstrip().rstrip()=="":
                 model= param_cbox.GetClientData(param_cbox.GetCurrentSelection())
-                msg= " Enter a constraint for %s.%s! "%(model.name,param_cbox.GetString(0))           
-                wx.PostEvent(self.parent.Parent, StatusEvent(status= msg ))
+                msg= " Enter a constraint for %s.%s! "%(model.name, 
+                                                        param_cbox.GetString(0))           
+                wx.PostEvent(self.parent.parent, StatusEvent(status= msg ))
                 return 
         ## some model or parameters can be constrained
@@ -483,5 +617,5 @@
         """
         msg = "Select at least 2 model to add constraint "
-        wx.PostEvent(self.parent.Parent, StatusEvent(status= msg ))
+        wx.PostEvent(self.parent.parent, StatusEvent(status= msg ))
         
         self.sizer2.Clear(True)
@@ -489,8 +623,10 @@
         boxsizer1 = wx.StaticBoxSizer(box_description, wx.VERTICAL)
         sizer_title = wx.BoxSizer(wx.HORIZONTAL)
+        self.sizer_all_constraints = wx.BoxSizer(wx.HORIZONTAL)
         self.sizer_constraints = wx.BoxSizer(wx.VERTICAL)
         sizer_button = wx.BoxSizer(wx.HORIZONTAL)
         
-        self.hide_constraint = wx.RadioButton(self, -1, 'No', (10, 10), style=wx.RB_GROUP)
+        self.hide_constraint = wx.RadioButton(self, -1, 'No', (10, 10), 
+                                              style=wx.RB_GROUP)
         self.show_constraint = wx.RadioButton(self, -1, 'Yes', (10, 30))
         self.Bind( wx.EVT_RADIOBUTTON, self._display_constraint,
@@ -508,17 +644,22 @@
         sizer_title.Add( self.hide_constraint )
         sizer_title.Add(( 10,10) )
-       
+        
         self.btAdd =wx.Button(self,wx.NewId(),'Add')
-        self.btAdd.Bind(wx.EVT_BUTTON, self._onAdd_constraint,id= self.btAdd.GetId())
+        self.btAdd.Bind(wx.EVT_BUTTON, self._onAdd_constraint, 
+                        id=self.btAdd.GetId())
         self.btAdd.SetToolTipString("Add another constraint?")
         self.btAdd.Hide()
      
-        text_hint = wx.StaticText(self,-1,"Example: [M0][paramter] = M1.parameter") 
+        text_hint = wx.StaticText(self, -1, 
+                                  "Example: [M0][paramter] = M1.parameter") 
         sizer_button.Add(text_hint, 0 , wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 10)
         sizer_button.Add(self.btAdd, 0, wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 10)
        
         boxsizer1.Add(sizer_title, flag= wx.TOP|wx.BOTTOM,border=10)
-        boxsizer1.Add(self.sizer_constraints, flag= wx.TOP|wx.BOTTOM,border=10)
-        boxsizer1.Add(sizer_button, flag= wx.TOP|wx.BOTTOM,border=10)
+        boxsizer1.Add(self.sizer_all_constraints, flag= wx.TOP|wx.BOTTOM, 
+                      border=10)
+        boxsizer1.Add(self.sizer_constraints, flag= wx.TOP|wx.BOTTOM, 
+                      border=10)
+        boxsizer1.Add(sizer_button, flag= wx.TOP|wx.BOTTOM, border=10)
         
         self.sizer2.Add(boxsizer1,0, wx.EXPAND | wx.ALL, 10)
@@ -530,6 +671,7 @@
         get values from the constrainst textcrtl ,parses them into model name
         parameter name and parameters values.
-        store them in a list self.params .when when params is not empty set_model 
-        uses it to reset the appropriate model and its appropriates parameters
+        store them in a list self.params .when when params is not empty 
+        set_model uses it to reset the appropriate model 
+        and its appropriates parameters
         """
         for item in self.constraints_list:
@@ -539,13 +681,14 @@
             if param.lstrip().rstrip()=="":
                 param= None
-                msg= " Constraint will be ignored!. missing parameters in combobox"
-                msg+= " to set constraint! "
-                wx.PostEvent(self.parent.Parent, StatusEvent(status= msg ))
+                msg= " Constraint will be ignored!. missing parameters"
+                msg+= " in combobox to set constraint! "
+                wx.PostEvent(self.parent.parent, StatusEvent(status= msg ))
             for id, value in self.constraint_dict.iteritems():
                 if model == value:
                     if constraint == "":
-                        msg= " Constraint will be ignored!. missing value in textcrtl"
-                        msg+= " to set constraint! "
-                        wx.PostEvent(self.parent.Parent, StatusEvent(status= msg ))
+                        msg= " Constraint will be ignored!. missing value"
+                        msg+= " in textcrtl to set constraint! "
+                        wx.PostEvent(self.parent.parent, 
+                                     StatusEvent(status= msg ))
                         constraint = None
                     for fid in self.page_finder[id].iterkeys():
@@ -566,5 +709,6 @@
         sizer.Clear(True)
         
-        new_name = wx.StaticText(self, -1, 'New Model Name', style=wx.ALIGN_CENTER)
+        new_name = wx.StaticText(self, -1, 'New Model Name', 
+                                 style=wx.ALIGN_CENTER)
         new_name.SetBackgroundColour('orange')
         sizer.Add(new_name,(iy, ix),(1,1),
