Index: src/sas/qtgui/MainWindow/DataExplorer.py
===================================================================
--- src/sas/qtgui/MainWindow/DataExplorer.py	(revision f7d39c90e720c67bb1718e4d9c97248022bb6365)
+++ src/sas/qtgui/MainWindow/DataExplorer.py	(revision 9463ca22fbd7a5dfabfd6ec8adf7690e1460bef6)
@@ -526,12 +526,14 @@
         # Now query the model item for available plots
         plots = GuiUtils.plotsFromFilename(filename, model)
-        ids = [list(self.active_plots.values())[id].data.id for id in range(len(self.active_plots))]
-        ids2 = [list(self.active_plots.keys())[id] for id in range(len(self.active_plots))]
+        ids_keys = list(self.active_plots.keys())
+        ids_vals = [val.data.id for val in self.active_plots.values()]
 
         new_plots = []
         for item, plot in plots.items():
             plot_id = plot.id
-            if plot_id in ids or plot_id in ids2:
+            if plot_id in ids_keys:
                 self.active_plots[plot_id].replacePlot(plot_id, plot)
+            elif plot_id in ids_vals:
+                list(self.active_plots.values())[ids_vals.index(plot_id)].replacePlot(plot_id, plot)
             else:
                 # Don't plot intermediate results, e.g. P(Q), S(Q)
@@ -666,4 +668,6 @@
                 old_plot.data = plot_set
                 old_plot.plot()
+                # need this for lookup - otherwise this plot will never update
+                self.active_plots[plot_set.id] = old_plot
 
     def updatePlot(self, new_data):
@@ -674,7 +678,12 @@
         assert type(data).__name__ in ['Data1D', 'Data2D']
 
-        id = data.id
-        if data.id in list(self.active_plots.keys()):
-            self.active_plots[id].replacePlot(id, data)
+        ids_keys = list(self.active_plots.keys())
+        ids_vals = [val.data.id for val in self.active_plots.values()]
+
+        data_id = data.id
+        if data_id in ids_keys:
+            self.active_plots[data_id].replacePlot(data_id, data)
+        elif data_id in ids_vals:
+            list(self.active_plots.values())[ids_vals.index(data_id)].replacePlot(data_id, data)
 
     def chooseFiles(self):
Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 906e0c71df33eebcbe340d616cf9ca363fdf31c3)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 9463ca22fbd7a5dfabfd6ec8adf7690e1460bef6)
@@ -2275,12 +2275,21 @@
             pq_data.symbol = "Line"
             self.createNewIndex(pq_data)
+            # self.communicate.plotUpdateSignal.emit([pq_data])
             new_plots.append(pq_data)
         if sq_data is not None:
             sq_data.symbol = "Line"
             self.createNewIndex(sq_data)
+            # self.communicate.plotUpdateSignal.emit([sq_data])
             new_plots.append(sq_data)
 
         if self.data_is_loaded:
             GuiUtils.deleteRedundantPlots(self.all_data[self.data_index], new_plots)
+
+        for plot in new_plots:
+            if hasattr(plot, "id") and "esidual" in plot.id:
+                # TODO: fix updates to residuals plot
+                pass
+            else:
+                self.communicate.plotUpdateSignal.emit([plot])
 
     def complete2D(self, return_data):
@@ -2294,5 +2303,5 @@
     def calculateResiduals(self, fitted_data):
         """
-        Calculate and print Chi2 and display chart of residuals
+        Calculate and print Chi2 and display chart of residuals. Returns residuals plot object.
         """
         # Create a new index for holding data
@@ -2309,5 +2318,5 @@
         self.lblChi2Value.setText(chi2_repr)
 
-        self.communicate.plotUpdateSignal.emit([fitted_data])
+        # self.communicate.plotUpdateSignal.emit([fitted_data])
 
         # Plot residuals if actual data
Index: src/sas/qtgui/Utilities/GuiUtils.py
===================================================================
--- src/sas/qtgui/Utilities/GuiUtils.py	(revision 0fe7e5b66cc36cd48e753501a3b3b5f1749f7251)
+++ src/sas/qtgui/Utilities/GuiUtils.py	(revision 9463ca22fbd7a5dfabfd6ec8adf7690e1460bef6)
@@ -335,5 +335,4 @@
         clone.__hash__ = self.__hash__
         return clone
-
 
 def getMonospaceFont():
