Index: src/sas/qtgui/Perspectives/Inversion/InversionPerspective.py
===================================================================
--- src/sas/qtgui/Perspectives/Inversion/InversionPerspective.py	(revision effdd985f2944ce006ebfc8af717a59162e0a957)
+++ src/sas/qtgui/Perspectives/Inversion/InversionPerspective.py	(revision 76567bb8b3aec2da697cceb2557fc5b334bfc028)
@@ -34,6 +34,6 @@
 
 
+# TODO: Use communicator to catch data deletions
 # TODO: Update help with batch capabilities
-# TODO: Method to export results in some meaningful way
 class InversionWindow(QtWidgets.QDialog, Ui_PrInversion):
     """
@@ -381,7 +381,13 @@
 
     def showBatchOutput(self, output_data):
+        """
+        Display the batch output in tabular form
+        :param output_data: Dictionary mapping filename -> P(r) instance
+        """
         if self.grid_window is None:
             self.grid_window = BatchInversionOutputPanel(
                 parent=self, output_data=output_data)
+        else:
+            self.grid_window.setupTable(output_data)
         self.grid_window.show()
 
@@ -499,7 +505,7 @@
             self.dmaxWindow.close()
             self.dmaxWindow = None
-        current_data = self._data
+        self._data_list.pop(self._data)
+        self._data = None
         self.dataList.removeItem(self.dataList.currentIndex())
-        self._data_list.pop(current_data)
         # Last file removed
         if len(self._data_list) == 0:
@@ -527,4 +533,8 @@
         for data_ref in self._data_list.keys():
             self.setCurrentData(data_ref)
+            self.performEstimate()
+            self.performEstimateNT()
+            self.acceptAlpha()
+            self.acceptNoTerms()
             self.startThread()
             output[self.logic.data.filename] = self._calculator
@@ -581,4 +591,7 @@
         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):
@@ -599,4 +612,7 @@
         self.estimation_thread.queue()
         self.estimation_thread.ready(2.5)
+        if self.waitForEach:
+            if self.estimation_thread.isrunning():
+                self.estimation_thread.update()
 
     ######################################################################
@@ -618,5 +634,6 @@
         if message:
             logging.info(message)
-        self.performEstimateNT()
+        if not self.waitForEach:
+            self.performEstimateNT()
 
     def _estimateNTCompleted(self, nterms, alpha, message, elapsed):
Index: src/sas/qtgui/Utilities/GridPanel.py
===================================================================
--- src/sas/qtgui/Utilities/GridPanel.py	(revision effdd985f2944ce006ebfc8af717a59162e0a957)
+++ src/sas/qtgui/Utilities/GridPanel.py	(revision 76567bb8b3aec2da697cceb2557fc5b334bfc028)
@@ -295,9 +295,9 @@
         """
         # headers
-        param_list = ['Filename', 'Rg', 'Chi^2/dof', 'I(Q=0)', 'Oscillations',
-                      'Background', 'P+ Fraction', 'P+1-theta Fraction',
-                      'Calculation Time']
-        # P(r) keys
-        pr_keys = ['background', ]
+        param_list = ['Filename', 'Rg [Ã
+]', 'Ï^2/dof', 'I(Q=0)', 'Oscillations',
+                      'Background [Ã
+^-1]', 'P+ Fraction', 'P+1-Ï Fraction',
+                      'Calc. Time [sec]']
 
         keys = data.keys()
@@ -314,6 +314,9 @@
             out = pr.out
             cov = pr.cov
+            if out is None:
+                logging.warning("P(r) for {} did not converge.".format(filename))
+                continue
             self.tblParams.setItem(i_row, 0, QtWidgets.QTableWidgetItem(
-                GuiUtils.formatNumber(filename, high=True)))
+                "{}".format(filename)))
             self.tblParams.setItem(i_row, 2, QtWidgets.QTableWidgetItem(
                 "{:.3g}".format(pr.chi2[0])))
@@ -322,26 +325,27 @@
             self.tblParams.setItem(i_row, 8, QtWidgets.QTableWidgetItem(
                 "{:.2g}".format(pr.elapsed)))
-            if out is not None:
-                self.tblParams.setItem(i_row, 1, QtWidgets.QTableWidgetItem(
-                    "{:.3g}".format(pr.rg(out))))
-                self.tblParams.setItem(i_row, 3, QtWidgets.QTableWidgetItem(
-                    "{:.3g}".format(pr.iq0(out))))
-                self.tblParams.setItem(i_row, 4, QtWidgets.QTableWidgetItem(
-                    "{:.3g}".format(pr.oscillations(out))))
-                self.tblParams.setItem(i_row, 6, QtWidgets.QTableWidgetItem(
-                    "{:.3g}".format(pr.get_positive(out))))
-                self.tblParams.setItem(i_row, 7, QtWidgets.QTableWidgetItem(
-                    "{:.3g}".format(pr.get_pos_err(out, cov))))
-            else:
-                self.tblParams.setItem(i_row, 1, QtWidgets.QTableWidgetItem(
-                    "NaN"))
-                self.tblParams.setItem(i_row, 3, QtWidgets.QTableWidgetItem(
-                    "NaN"))
-                self.tblParams.setItem(i_row, 4, QtWidgets.QTableWidgetItem(
-                    "NaN"))
-                self.tblParams.setItem(i_row, 6, QtWidgets.QTableWidgetItem(
-                    "NaN"))
-                self.tblParams.setItem(i_row, 7, QtWidgets.QTableWidgetItem(
-                    "NaN"))
+            self.tblParams.setItem(i_row, 1, QtWidgets.QTableWidgetItem(
+                "{:.3g}".format(pr.rg(out))))
+            self.tblParams.setItem(i_row, 3, QtWidgets.QTableWidgetItem(
+                "{:.3g}".format(pr.iq0(out))))
+            self.tblParams.setItem(i_row, 4, QtWidgets.QTableWidgetItem(
+                "{:.3g}".format(pr.oscillations(out))))
+            self.tblParams.setItem(i_row, 6, QtWidgets.QTableWidgetItem(
+                "{:.3g}".format(pr.get_positive(out))))
+            self.tblParams.setItem(i_row, 7, QtWidgets.QTableWidgetItem(
+                "{:.3g}".format(pr.get_pos_err(out, cov))))
 
         self.tblParams.resizeColumnsToContents()
+
+    @classmethod
+    def onHelp(cls):
+        """
+        Open a local url in the default browser
+        """
+        # TODO: Add anchor to batch fitting help when written
+        location = GuiUtils.HELP_DIRECTORY_LOCATION
+        url = "/user/sasgui/perspectives/pr/pr_help.html"
+        try:
+            webbrowser.open('file://' + os.path.realpath(location + url))
+        except webbrowser.Error as ex:
+            logging.warning("Cannot display help. %s" % ex)
