Index: fittingview/src/sans/perspectives/fitting/fit_thread.py
===================================================================
--- fittingview/src/sans/perspectives/fitting/fit_thread.py	(revision 8d57bdbe6ab3161837c5387fa2c5184a3b266d47)
+++ fittingview/src/sans/perspectives/fitting/fit_thread.py	(revision 6a4002d15ca352d7bf857b7d7b705d8d5e14b4ba)
@@ -93,4 +93,5 @@
             #    self.handler.error(msg=msg)
         except:
+            raise
             if self.handler is not None:
                 self.handler.error(msg=str(sys.exc_value))
Index: fittingview/src/sans/perspectives/fitting/fitpage.py
===================================================================
--- fittingview/src/sans/perspectives/fitting/fitpage.py	(revision e3f6ef584a5ae01e662ea218c7fa7fdd5773c86d)
+++ fittingview/src/sans/perspectives/fitting/fitpage.py	(revision 6a4002d15ca352d7bf857b7d7b705d8d5e14b4ba)
@@ -26,5 +26,4 @@
 from basepage import PageInfoEvent
 from sans.models.qsmearing import smear_selection
-
 
 class FitPage(BasicPage):
@@ -2082,71 +2081,42 @@
             dispersity = None
             pass
-        #set the panel when fit result are float not list
-        if out.__class__== numpy.float64:
-            self.param_toFit[0][2].SetValue(format_number(out, True))
+      
             
-            if self.param_toFit[0][4].IsShown and not self.is_mac:
-                self.param_toFit[0][4].Hide()
-            if cov !=None :
-                self.text2_3.Show(True)
-                try:
-                    if self.enable_disp.GetValue():
-                        if hasattr(self,"text_disp_1" ):
-                            if self.text_disp_1 !=None:
-                                self.text_disp_1.Show(True)
-                except:
-                    pass
-
-                if cov[0]==None or  not numpy.isfinite(cov[0]): 
-                    if self.param_toFit[0][3].IsShown and not self.is_mac:
-                        self.param_toFit[0][3].Hide()
-                else:                    
-                    self.param_toFit[0][3].Show(True)               
-                    self.param_toFit[0][4].Show(True)
-                    self.param_toFit[0][4].SetValue(format_number(cov[0], True))
-                    has_error = True
-        else:
-
-            i = 0
-            #Set the panel when fit result are list
-            for item in self.param_toFit:     
-                if len(item)>5 and item != None:     
-                    ## reset error value to initial state
-                    if not self.is_mac:
-                        item[3].Hide()
-                        item[4].Hide()
-                    
-                    for ind in range(len(out)):
-                        
-                        if item[1] == p_name[ind]:
-                            break        
-                    if len(out)<=len(self.param_toFit) and out[ind] !=None:   
-                        val_out = format_number(out[ind], True)                  
-                        item[2].SetValue(val_out)
-
-
-                    if(cov !=None):
-                        
-                        try:
-                            if dispersity !=None:
-                                if self.enable_disp.GetValue():
-                                    if hasattr(self,"text_disp_1" ):
-                                        if self.text_disp_1!=None:
-                                            if not self.text_disp_1.IsShown()\
-                                                and not self.is_mac:
-                                                self.text_disp_1.Show(True)
-                        except:
-                            pass    
-                   
-                        if cov[ind]!=None :
-                            if numpy.isfinite(float(cov[ind])):
-                                val_err = format_number(cov[ind], True)
-                                if not self.is_mac:
-                                    item[3].Show(True)
-                                    item[4].Show(True)
-                                item[4].SetValue(val_err)
-                                
-                                has_error = True
-                    i += 1         
+        i = 0
+        #Set the panel when fit result are list
+        for item in self.param_toFit:     
+            if len(item)>5 and item != None:     
+                ## reset error value to initial state
+                if not self.is_mac:
+                    item[3].Hide()
+                    item[4].Hide()
+                for ind in range(len(out)):
+                    if item[1] == p_name[ind]:
+                        break       
+                if len(out)<=len(self.param_toFit) and out[ind] !=None:   
+                    val_out = format_number(out[ind], True)                  
+                    item[2].SetValue(val_out)
+
+                if(cov !=None):
+                    try:
+                        if dispersity !=None:
+                            if self.enable_disp.GetValue():
+                                if hasattr(self,"text_disp_1" ):
+                                    if self.text_disp_1!=None:
+                                        if not self.text_disp_1.IsShown()\
+                                            and not self.is_mac:
+                                            self.text_disp_1.Show(True)
+                    except:
+                        pass    
+               
+                    if cov[ind]!=None :
+                        if numpy.isfinite(float(cov[ind])):
+                            val_err = format_number(cov[ind], True)
+                            if not self.is_mac:
+                                item[3].Show(True)
+                                item[4].Show(True)
+                            item[4].SetValue(val_err)
+                            has_error = True
+                i += 1         
         #Show error title when any errors displayed
         if has_error: 
Index: fittingview/src/sans/perspectives/fitting/fitting.py
===================================================================
--- fittingview/src/sans/perspectives/fitting/fitting.py	(revision e3f6ef584a5ae01e662ea218c7fa7fdd5773c86d)
+++ fittingview/src/sans/perspectives/fitting/fitting.py	(revision 6a4002d15ca352d7bf857b7d7b705d8d5e14b4ba)
@@ -828,5 +828,5 @@
                                     batch_outputs=batch_outputs,
                                     page_id=list_page_id,
-                                    completefn=self._simul_fit_completed,
+                                    completefn=self._fit_completed,
                                     ftol=self.ftol)
             else:
@@ -837,5 +837,5 @@
                                     batch_outputs=batch_outputs,
                                     page_id=list_page_id,
-                                    completefn=self._single_fit_completed,
+                                    completefn=self._fit_completed,
                                     ftol=self.ftol)
             
@@ -850,5 +850,5 @@
                                     page_id=list_page_id,
                                     updatefn=handler.update_fit,
-                                    completefn=self._simul_fit_completed,
+                                    completefn=self._fit_completed,
                                     ftol=self.ftol)
         self.fit_thread_list[current_page_id] = calc_fit
@@ -1067,5 +1067,4 @@
         
    
-        
     def _batch_single_fit_complete_helper(self, result, pars, page_id, 
                             batch_outputs, batch_inputs, elapsed=None):
@@ -1092,56 +1091,51 @@
                 batch_outputs[pars[index]] = []
                 batch_inputs["error on %s" % pars[index]] = []
+            msg = ""
             for res in result:
-                #Separate result in to data corresponding to each page
-                temp_pars = []
-                temp_res_param = []
-                # Park sorts the params by itself so that we must check 
-                # param name and resort it back as it was. No effects on Scipy.
-                if res.parameters != None:
-                    model = cpage.model
-                    for fid in self.page_finder[pid]:
-                        if fid != None:
-                            # Below works only for batch using one model
-                            model = self.page_finder[pid][fid].get_model()
-                            break
-                    for p in res.parameters:
-                        model_name, param_name = self.split_string(p.name)  
-                        if model.name == model_name:
-                            p_name= model.name+"."+param_name
-                            if p.name == p_name:      
-                                temp_res_param.append(p)
-                                temp_pars.append(param_name)
-                    res.parameters = temp_res_param
-                    pars = temp_pars
-                
                 model, data = res.inputs[0]
-                temp_model = model#.clone()
-                if res is None:
-                    null_value = numpy.nan
-                    cell = BatchCell()
-                    cell.label = null_value
-                    cell.value = null_value
-                    cell.object = [None]
-                    batch_outputs["Chi2"].append(cell)
-                    for param in temp_model.getParamList():
-                        if temp_model.is_fittable(param):
-                            for index  in range(len(pars)):
-                                #replug only fitted values
-                                if param != pars[index]:
-                                    batch_outputs[pars[index]].append(null_value)
-                                    item = null_value
-                                    batch_inputs["error on %s" % pars[index]].append(item)
-                                    if pars[index] in model.getParamList():
-                                        temp_model.setParam(pars[index], res.pvec[index])
-                                else:
-                                     batch_outputs[str(param)].append(temp_model.getParam(param))
+                if res.fitness is None or \
+                    not numpy.isfinite(res.fitness) or \
+                    numpy.any(res.pvec == None) or not \
+                    numpy.all(numpy.isfinite(res.pvec)):
+                    data_name = str(None)
+                    if data is not None:
+                        data_name = str(data.name)
+                    model_name = str(None)
+                    if model is not None:
+                        model_name = str(model.name)
+                    msg += "Data %s and Model %s did not fit.\n" % (data_name, 
+                                                                    model_name)
+                    print msg
+                    wx.PostEvent(self.parent, StatusEvent(status=msg,
+                                                          error="error",
+                                                          type="stop"))
                 else:
-                    from sans.guiframe.data_processor import BatchCell
+                    #Separate result in to data corresponding to each page
+                    temp_pars = []
+                    temp_res_param = []
+                    # Park sorts the params by itself so that we must check 
+                    # param name and resort it back as it was. No effects on Scipy.
+                    if res.parameters != None:
+                        model = cpage.model
+                        for fid in self.page_finder[pid]:
+                            if fid != None:
+                                # Below works only for batch using one model
+                                model = self.page_finder[pid][fid].get_model()
+                                break
+                        for p in res.parameters:
+                            model_name, param_name = self.split_string(p.name)  
+                            if model.name == model_name:
+                                p_name= model.name+"."+param_name
+                                if p.name == p_name:      
+                                    temp_res_param.append(p)
+                                    temp_pars.append(param_name)
+                        res.parameters = temp_res_param
+                        pars = temp_pars
                     cell = BatchCell()
                     cell.label = res.fitness
                     cell.value = res.fitness
                     batch_outputs["Chi2"].append(cell)
-                    for param in temp_model.getParamList():
-                        if temp_model.is_fittable(param):
+                    for param in model.getParamList():
+                        if model.is_fittable(param):
                             for index  in range(len(pars)):
                                 #replug only fitted values
@@ -1150,11 +1144,11 @@
                                     item = res.stderr[index]
                                     batch_inputs["error on %s" % pars[index]].append(item)
-                                    if pars[index] in temp_model.getParamList():
-                                        temp_model.setParam(pars[index], res.pvec[index])
+                                    if pars[index] in model.getParamList():
+                                        model.setParam(pars[index], res.pvec[index])
                                 else:
-                                     batch_outputs[str(param)].append(temp_model.getParam(param))
+                                     batch_outputs[str(param)].append(model.getParam(param))
                                 
-                self.page_finder[pid].set_batch_result(batch_inputs=batch_inputs,
-                                                 batch_outputs=batch_outputs)   
+                    self.page_finder[pid].set_batch_result(batch_inputs=batch_inputs,
+                                                     batch_outputs=batch_outputs)   
                 cpage = self.fit_panel.get_page_by_id(pid)
                 cpage._on_fit_complete()
@@ -1162,12 +1156,11 @@
                 fitproblem = self.page_finder[pid][data.id]
                 
-               
                 from sans.models.qsmearing import smear_selection
-                #smearer = fitproblem.get_smearer()
-                smearer = smear_selection(data, temp_model)
+                smearer = smear_selection(data, model)
                 qmin, qmax = fitproblem.get_range()
                 weight = fitproblem.get_weight()
                 flag = issubclass(data.__class__, Data2D)
-                self.draw_model(model=temp_model,
+                """
+                self.draw_model(model=model,
                                   page_id=pid, 
                                   data=data, 
@@ -1182,4 +1175,5 @@
                                   weight=weight,
                                   source='fit')
+                                  """
        
     def on_set_batch_result(self, page_id, fid, batch_outputs, batch_inputs):
@@ -1220,5 +1214,5 @@
         batch_outputs["Chi2"][index].object = [residuals]
        
-    def _single_fit_completed(self, result, pars, page_id, batch_outputs,
+    def old_single_fit_completed(self, result, pars, page_id, batch_outputs,
                           batch_inputs=None,  elapsed=None):
         """
@@ -1251,5 +1245,6 @@
                                              type="stop"))
                     return
-                if not numpy.isfinite(result.fitness) or \
+                if result.fitness is not None or \
+                not numpy.isfinite(result.fitness) or \
                         numpy.any(result.pvec == None) or \
                         not numpy.all(numpy.isfinite(result.pvec)):
@@ -1290,5 +1285,5 @@
                 raise
                
-    def _simul_fit_completed(self, result, page_id, batch_outputs,
+    def _fit_completed(self, result, page_id, batch_outputs,
                              batch_inputs=None,
                               pars=None, 
@@ -1308,60 +1303,44 @@
         self._mac_sleep(0.2) 
         try:
-            msg = "" 
-            if result == None:
+            index = 0
+            for uid in page_id:
+                res = result[index]
+                if res.fitness is not None or \
+                    not numpy.isfinite(res.fitness) or \
+                    numpy.any(res.pvec == None) or \
+                    not numpy.all(numpy.isfinite(res.pvec)):
+                    msg = "Fitting did not converge!!!"
+                    wx.PostEvent(self.parent, 
+                             StatusEvent(status=msg, 
+                                         info="warning",
+                                         type="stop"))
+                    self._update_fit_button(page_id)
+                cpage = self.fit_panel.get_page_by_id(uid)
+                # Make sure we got all results 
+                #(CallAfter is important to MAC)
+                wx.CallAfter(cpage.onsetValues, res.fitness, res.param_list, 
+                             res.pvec, res.stderr)
+                index += 1
+                cpage._on_fit_complete()
+                if res.stderr == None:
+                    msg = "Fit Abort: "
+                else:
+                    msg = "Fitting: "
+                msg += "Completed!!!"
+                wx.PostEvent(self.parent, StatusEvent(status=msg))
+        except ValueError:
+                raise
                 self._update_fit_button(page_id)
-                msg= "Complex Fitting did not converge!!!"
-                wx.PostEvent(self.parent, StatusEvent(status=msg,
+                msg = "Single Fitting did not converge!!!"
+                wx.PostEvent(self.parent, StatusEvent(status=msg, info="error",
                                                       type="stop"))
-                return
-            if not numpy.isfinite(result.fitness) or \
-                numpy.any(result.pvec == None) or not \
-                numpy.all(numpy.isfinite(result.pvec)):
-                self._update_fit_button(page_id)
-                msg= "Simultaneous Fitting did not converge!!!"
-                wx.PostEvent(self.parent, StatusEvent(status=msg,type="stop"))
-                return
-              
-            for uid in page_id:   
-                fpdict = self.page_finder[uid]
-                for value in fpdict.itervalues():
-                    model = value.get_model()
-                    data =  value.get_fit_data()
-                    small_param_name = []
-                    small_out = []
-                    small_cov = []
-                    #Separate result in to data corresponding to each page
-                    for p in result.parameters:
-                        #print "simul ----", p , p.__class__, p.model.name, p.data.name
-                        model_name, param_name = self.split_string(p.name)  
-                        if model.name == model_name:
-                            p_name= model.name+"."+param_name
-                            if p.name == p_name:      
-                                if p.value != None and numpy.isfinite(p.value):
-                                    small_out.append(p.value)
-                                    small_param_name.append(param_name)
-                                    small_cov.append(p.stderr)
-                # Display result on each page 
-                cpage = self.fit_panel.get_page_by_id(uid)
-                wx.CallAfter(cpage.onsetValues, 
-                                    result.fitness,
-                                  small_param_name,
-                                  small_out,small_cov)
-                cpage._on_fit_complete()
-                msg = "Fit completed!"
-                wx.PostEvent(self.parent, StatusEvent(status=msg))
-        except Exception:
+        except:
             raise
             self._update_fit_button(page_id)
-            msg = "Complex Fitting did not converge!!!"
+            msg = "Single Fit completed but Following"
+            msg += " error occurred:%s" % sys.exc_value
             wx.PostEvent(self.parent, StatusEvent(status=msg, info="error",
                                                   type="stop"))
-            return
-        except:
-            self._update_fit_button(page_id)
-            msg = "Simultaneous Fit completed"
-            msg += " but Following error occurred:%s" % sys.exc_value
-            wx.PostEvent(self.parent, StatusEvent(status=msg, type="stop"))
-    
+           
     def _update_fit_button(self, page_id):
         """
