Index: src/sas/sasgui/perspectives/fitting/fitting.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/fitting.py	(revision 7673ecd9d5adcefdfa1fc6a6d1ff0649f8e63bc8)
+++ src/sas/sasgui/perspectives/fitting/fitting.py	(revision c80795771509368ca332b9df9af50d8e48a76f61)
@@ -313,5 +313,5 @@
         """
         event_id = event.GetId()
-        self.update_custom_combo()        
+        self.update_custom_combo()
 
     def update_custom_combo(self):
@@ -342,6 +342,5 @@
                                 page.formfactorbox.SetLabel(current_val)
         except:
-            pass
-
+            logging.error("update_custom_combo: %s", sys.exc_value)
 
     def set_edit_menu(self, owner):
@@ -1666,45 +1665,67 @@
         wx.PostEvent(self.parent, StatusEvent(status=msg, type="update"))
 
+    def create_theory_1D(self, x, y, page_id, model, data, state,
+                         data_description, data_id):
+        """
+            Create a theory object associate with an existing Data1D
+            and add it to the data manager.
+            @param x: x-values of the data
+            @param y: y_values of the data
+            @param page_id: fit page ID
+            @param model: model used for fitting
+            @param data: Data1D object to create the theory for
+            @param state: model state
+            @param data_description: title to use in the data manager
+            @param data_id: unique data ID
+        """
+        new_plot = Data1D(x=x, y=y)
+        new_plot.is_data = False
+        new_plot.dy = numpy.zeros(len(y))
+        new_plot.symbol = GUIFRAME_ID.CURVE_SYMBOL_NUM
+        _yaxis, _yunit = data.get_yaxis()
+        _xaxis, _xunit = data.get_xaxis()
+        new_plot.title = data.name
+
+        new_plot.group_id = data.group_id
+        if new_plot.group_id == None:
+            new_plot.group_id = data.group_id
+        new_plot.id = data_id
+        # Find if this theory was already plotted and replace that plot given
+        # the same id
+        self.page_finder[page_id].get_theory_data(fid=data.id)
+
+        if data.is_data:
+            data_name = str(data.name)
+        else:
+            data_name = str(model.__class__.__name__)
+
+        new_plot.name = data_description + " [" + data_name + "]"
+        new_plot.xaxis(_xaxis, _xunit)
+        new_plot.yaxis(_yaxis, _yunit)
+        self.page_finder[page_id].set_theory_data(data=new_plot,
+                                                  fid=data.id)
+        self.parent.update_theory(data_id=data.id, theory=new_plot,
+                                   state=state)
+        return new_plot
+
     def _complete1D(self, x, y, page_id, elapsed, index, model,
                     weight=None, fid=None,
                     toggle_mode_on=False, state=None,
                     data=None, update_chisqr=True,
-                    source='model', plot_result=True):
-        """
-        Complete plotting 1D data
+                    source='model', plot_result=True, unsmeared_model=None):
+        """
+            Complete plotting 1D data
+            @param unsmeared_model: fit model, without smearing
         """
         try:
             numpy.nan_to_num(y)
-
-            new_plot = Data1D(x=x, y=y)
-            new_plot.is_data = False
-            new_plot.dy = numpy.zeros(len(y))
-            new_plot.symbol = GUIFRAME_ID.CURVE_SYMBOL_NUM
-            _yaxis, _yunit = data.get_yaxis()
-            _xaxis, _xunit = data.get_xaxis()
-            new_plot.title = data.name
-
-            new_plot.group_id = data.group_id
-            if new_plot.group_id == None:
-                new_plot.group_id = data.group_id
-            new_plot.id = str(page_id) + " " + data.name
-            #if new_plot.id in self.color_dict:
-            #    new_plot.custom_color = self.color_dict[new_plot.id]
-            #find if this theory was already plotted and replace that plot given
-            #the same id
-            self.page_finder[page_id].get_theory_data(fid=data.id)
-
-            if data.is_data:
-                data_name = str(data.name)
-            else:
-                data_name = str(model.__class__.__name__)
-
-            new_plot.name = model.name + " [" + data_name + "]"
-            new_plot.xaxis(_xaxis, _xunit)
-            new_plot.yaxis(_yaxis, _yunit)
-            self.page_finder[page_id].set_theory_data(data=new_plot,
-                                                      fid=data.id)
-            self.parent.update_theory(data_id=data.id, theory=new_plot,
-                                       state=state)
+            new_plot = self.create_theory_1D(x, y, page_id, model, data, state,
+                                             data_description=model.name,
+                                             data_id=str(page_id) + " " + data.name)
+            if unsmeared_model is not None:
+                self.create_theory_1D(x, unsmeared_model, page_id, model, data, state,
+                                      data_description=model.name + " unsmeared",
+                                      data_id=str(page_id) + " " + data.name + " unsmeared")
+
             current_pg = self.fit_panel.get_page_by_id(page_id)
             title = new_plot.title
Index: src/sas/sasgui/perspectives/fitting/model_thread.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/model_thread.py	(revision 934ce6493af6e904cf20f2500ef522b42192adfd)
+++ src/sas/sasgui/perspectives/fitting/model_thread.py	(revision c80795771509368ca332b9df9af50d8e48a76f61)
@@ -166,4 +166,6 @@
         index = (self.qmin <= self.data.x) & (self.data.x <= self.qmax)
 
+        # If we use a smearer, also return the unsmeared model
+        output_unsmeared = None
         ##smearer the ouput of the plot
         if self.smearer is not None:
@@ -171,6 +173,8 @@
                                                              self.qmax)
             mask = self.data.x[first_bin:last_bin+1]
-            output[first_bin:last_bin+1] = self.model.evalDistribution(mask)
-            output = self.smearer(output, first_bin, last_bin)
+            output_unsmeared = numpy.zeros((len(self.data.x)))
+            output_unsmeared[first_bin:last_bin+1] = self.model.evalDistribution(mask)
+            output = self.smearer(output_unsmeared, first_bin, last_bin)
+            output_unsmeared = output_unsmeared[index]
         else:
             output[index] = self.model.evalDistribution(self.data.x[index])
@@ -187,5 +191,6 @@
                       data=self.data,
                       update_chisqr=self.update_chisqr,
-                      source=self.source)
+                      source=self.source,
+                      unsmeared_model=output_unsmeared)
 
     def results(self):
