Index: src/sas/qtgui/DataExplorer.py
===================================================================
--- src/sas/qtgui/DataExplorer.py	(revision 4ff5e35d00b160c5d5bf2b130c80b30fd4119335)
+++ src/sas/qtgui/DataExplorer.py	(revision 9f25bce3a6433f280a7e1a6a6e898ad7f6aefbf3)
@@ -967,4 +967,6 @@
         # Check if there are any other items for this tab
         # If so, delete them
+        # TODO: fix this to resemble GuiUtils.updateModelItemWithPlot
+        # 
         current_tab_name = model_item.text()[:2]
         for current_index in xrange(self.theory_model.rowCount()):
Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 7d077d102dde02b0f95f856a18145c67b9e47ddd)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 9f25bce3a6433f280a7e1a6a6e898ad7f6aefbf3)
@@ -237,7 +237,7 @@
         self.cmdPlot.clicked.connect(self.onPlot)
         # Line edits
-        self.txtNpts.textChanged.connect(self.onNpts)
-        self.txtMinRange.textChanged.connect(self.onMinRange)
-        self.txtMaxRange.textChanged.connect(self.onMaxRange)
+        self.txtNpts.editingFinished.connect(self.onNpts)
+        self.txtMinRange.editingFinished.connect(self.onMinRange)
+        self.txtMaxRange.editingFinished.connect(self.onMaxRange)
 
         # Respond to change in parameters from the UI
@@ -366,9 +366,10 @@
         Plot the current set of data
         """
-        if self.data is None :#or not self.data.is_data:
+        if self.data is None :
             self.createDefaultDataset()
         self.calculateQGridForModel()
 
-    def onNpts(self, text):
+    #def onNpts(self, text):
+    def onNpts(self):
         """
         Callback for number of points line edit update
@@ -376,5 +377,5 @@
         # assumes type/value correctness achieved with QValidator
         try:
-            self.npts = int(text)
+            self.npts = int(self.txtNpts.text())
         except ValueError:
             # TODO
@@ -382,6 +383,10 @@
             # notifying the user about format available.
             pass
-
-    def onMinRange(self, text):
+        # Force redisplay
+        if self.model_is_loaded:
+            self.onPlot()
+
+    #def onMinRange(self, text):
+    def onMinRange(self):
         """
         Callback for minimum range of points line edit update
@@ -389,5 +394,5 @@
         # assumes type/value correctness achieved with QValidator
         try:
-            self.q_range_min = float(text)
+            self.q_range_min = float(self.txtMinRange.text())
         except ValueError:
             # TODO
@@ -397,6 +402,9 @@
         # set Q range labels on the main tab
         self.lblMinRangeDef.setText(str(self.q_range_min))
-
-    def onMaxRange(self, text):
+        if self.model_is_loaded:
+            self.onPlot()
+
+    #def onMaxRange(self, text):
+    def onMaxRange(self):
         """
         Callback for maximum range of points line edit update
@@ -404,9 +412,11 @@
         # assumes type/value correctness achieved with QValidator
         try:
-            self.q_range_max = float(text)
+            self.q_range_max = float(self.txtMaxRange.text())
         except:
             pass
         # set Q range labels on the main tab
         self.lblMaxRangeDef.setText(str(self.q_range_max))
+        if self.model_is_loaded:
+            self.onPlot()
 
     def setDefaultStructureCombo(self):
@@ -633,5 +643,4 @@
         # Notify the GUI manager so it can update the main model in DataExplorer
         GuiUtils.updateModelItemWithPlot(self._index, QtCore.QVariant(fitted_data), name)
-        # Force redisplay
 
     def createTheoryIndex(self, fitted_data):
@@ -712,4 +721,5 @@
             residuals_plot.id = "Residual " + residuals_plot.id
             self.createNewIndex(residuals_plot)
+            self.communicate.plotUpdateSignal.emit([residuals_plot])
 
         self.communicate.plotUpdateSignal.emit([fitted_data])
Index: src/sas/qtgui/Plotter.py
===================================================================
--- src/sas/qtgui/Plotter.py	(revision 0268aed2269053d708f7e97fbea13db43e371ab4)
+++ src/sas/qtgui/Plotter.py	(revision 9f25bce3a6433f280a7e1a6a6e898ad7f6aefbf3)
@@ -572,8 +572,8 @@
 
         #if self.leftdown and self.selectedText is not None:
-        if self.leftdown or self.selectedText is None:
+        if not self.leftdown or self.selectedText is None:
             return
         # User has clicked on text and is dragging
-        if event.inaxes is  None:
+        if event.inaxes is None:
             # User has dragged outside of axes
             self.selectedText = None
Index: src/sas/qtgui/Plotter2D.py
===================================================================
--- src/sas/qtgui/Plotter2D.py	(revision 0274aea17d12bcd5a0747b9d79037feef0aa7d24)
+++ src/sas/qtgui/Plotter2D.py	(revision 9f25bce3a6433f280a7e1a6a6e898ad7f6aefbf3)
@@ -277,5 +277,4 @@
         variant_plot = QtCore.QVariant(new_plot)
         GuiUtils.updateModelItemWithPlot(self._item, variant_plot, new_plot.id)
-        # TODO: force immediate display (?)
 
     def setSlicer(self, slicer):
