Index: src/sas/qtgui/Perspectives/Inversion/InversionPerspective.py
===================================================================
--- src/sas/qtgui/Perspectives/Inversion/InversionPerspective.py	(revision 318b353ea4c52f0034692ba0653d7b1769337012)
+++ src/sas/qtgui/Perspectives/Inversion/InversionPerspective.py	(revision 98485fe969002d557f5e1664222aefe844f7a074)
@@ -78,5 +78,5 @@
 
         # Calculation threads used by all data items
-        self.waitForEach = False
+        self.isBatch = False
         self.calc_thread = None
         self.estimation_thread = None
@@ -97,5 +97,8 @@
         self.mapper = QtWidgets.QDataWidgetMapper(self)
 
+        # Batch fitting results
         self.grid_window = None
+        self.batchResults = {}
+        self.batchComplete = []
 
         # Add validators
@@ -376,5 +379,5 @@
         self.dmaxWindow.show()
 
-    def showBatchOutput(self, output_data):
+    def showBatchOutput(self):
         """
         Display the batch output in tabular form
@@ -383,7 +386,7 @@
         if self.grid_window is None:
             self.grid_window = BatchInversionOutputPanel(
-                parent=self, output_data=output_data)
+                parent=self, output_data=self.batchResults)
         else:
-            self.grid_window.setupTable(output_data)
+            self.grid_window.setupTable(self.batchResults)
         self.grid_window.show()
 
@@ -427,4 +430,8 @@
             DICT_KEYS[2]: self.data_plot
         }
+        # Update batch results window when finished
+        self.batchResults[self.logic.data.filename] = self._calculator
+        if self.grid_window is not None:
+            self.showBatchOutput()
 
     def getNFunc(self):
@@ -494,4 +501,13 @@
                                        "{:.3g}".format(
                                            pr.get_pos_err(out, cov))))
+        if self.pr_plot is not None:
+            title = self.pr_plot.name
+            GuiUtils.updateModelItemWithPlot(self._data, self.pr_plot, title)
+            self.communicate.plotRequestedSignal.emit([self.pr_plot])
+        if self.data_plot is not None:
+            title = self.data_plot.name
+            GuiUtils.updateModelItemWithPlot(self._data, self.data_plot, title)
+            self.communicate.plotRequestedSignal.emit(
+                [self.data_plot, self.logic.data])
         self.enableButtons()
 
@@ -501,4 +517,6 @@
             self.dmaxWindow.close()
             self.dmaxWindow = None
+        if self.grid_window is not None:
+            self.grid_window.close()
         if not data_list:
             data_list = [self._data]
@@ -529,17 +547,21 @@
     ######################################################################
     # Thread Creators
+
     def startThreadAll(self):
-        self.waitForEach = True
-        output = {}
-        for data_ref in self._data_list.keys():
-            self.setCurrentData(data_ref)
+        self.batchComplete = []
+        self.isBatch = True
+        self.performEstimate()
+        self.showBatchOutput()
+
+    def startNextBatchItem(self):
+        self.isBatch = False
+        for index in range(len(self._data_list)):
+            if index not in self.batchComplete:
+                self.dataList.setCurrentIndex(index)
+                self.isBatch = True
+                break
+        # If none left, end
+        if self.isBatch:
             self.performEstimate()
-            self.performEstimateNT()
-            self.acceptAlpha()
-            self.acceptNoTerms()
-            self.startThread()
-            output[self.logic.data.filename] = self._calculator
-        self.waitForEach = False
-        self.showBatchOutput(output)
 
     def startThread(self):
@@ -563,7 +585,4 @@
         self.calc_thread.queue()
         self.calc_thread.ready(2.5)
-        if self.waitForEach:
-            if self.calc_thread.isrunning():
-                self.calc_thread.update()
 
     def performEstimateNT(self):
@@ -592,7 +611,4 @@
         self.estimation_thread_nt.queue()
         self.estimation_thread_nt.ready(2.5)
-        if self.waitForEach:
-            if self.estimation_thread_nt.isrunning():
-                self.estimation_thread_nt.update()
 
     def performEstimate(self):
@@ -613,7 +629,4 @@
         self.estimation_thread.queue()
         self.estimation_thread.ready(2.5)
-        if self.waitForEach:
-            if self.estimation_thread.isrunning():
-                self.estimation_thread.update()
 
     ######################################################################
@@ -635,6 +648,5 @@
         if message:
             logging.info(message)
-        if not self.waitForEach:
-            self.performEstimateNT()
+        self.performEstimateNT()
 
     def _estimateNTCompleted(self, nterms, alpha, message, elapsed):
@@ -659,4 +671,8 @@
         if message:
             logging.info(message)
+        if self.isBatch:
+            self.acceptAlpha()
+            self.acceptNoTerms()
+            self.startThread()
 
     def _calculateCompleted(self, out, cov, pr, elapsed):
@@ -686,16 +702,13 @@
         self.pr_plot = self.logic.newPRPlot(out, self._calculator, cov)
         self.pr_plot.filename = self.logic.data.filename
-        title = self.pr_plot.name
-        GuiUtils.updateModelItemWithPlot(self._data, self.pr_plot, title)
-        self.communicate.plotRequestedSignal.emit([self.pr_plot])
         self.data_plot = self.logic.new1DPlot(out, self._calculator)
         self.data_plot.filename = self.logic.data.filename
-        title = self.data_plot.name
-        GuiUtils.updateModelItemWithPlot(self._data, self.data_plot, title)
-        self.communicate.plotRequestedSignal.emit([self.data_plot])
 
         # Udpate internals and GUI
         self.updateDataList(self._data)
         self.updateGuiValues()
+        if self.isBatch:
+            self.batchComplete.append(self.dataList.currentIndex())
+            self.startNextBatchItem()
 
     def _threadError(self, error):
Index: src/sas/qtgui/Utilities/GridPanel.py
===================================================================
--- src/sas/qtgui/Utilities/GridPanel.py	(revision 318b353ea4c52f0034692ba0653d7b1769337012)
+++ src/sas/qtgui/Utilities/GridPanel.py	(revision 98485fe969002d557f5e1664222aefe844f7a074)
@@ -349,2 +349,7 @@
         except webbrowser.Error as ex:
             logging.warning("Cannot display help. %s" % ex)
+
+    def closeEvent(self, event):
+        """Tell the parent window the window closed"""
+        self.parent.grid_window = None
+        event.accept()
