Index: src/sas/qtgui/MainWindow/DataExplorer.py
===================================================================
--- src/sas/qtgui/MainWindow/DataExplorer.py	(revision 490e23094703e1b5d5c36760dfbaf44f7d7c5617)
+++ src/sas/qtgui/MainWindow/DataExplorer.py	(revision be74751f10c3d7ebd1a1cf7b810698c07275589c)
@@ -266,5 +266,5 @@
         filename = QtWidgets.QFileDialog.getOpenFileName(**kwargs)[0]
         if filename:
-            self.readAnalysis(filename)
+            self.readProject(filename)
 
     def saveProject(self):
@@ -414,7 +414,12 @@
         if 'svs' in ext.lower():
             # backward compatibility mode.
-            datasets = GuiUtils.readProjectFromSVS(filename)
-            #[[item_1, state_1], [item_2, state_2],...]
-
+            try:
+                datasets = GuiUtils.readProjectFromSVS(filename)
+            except Exception as ex:
+                # disregard malformed SVS and try to recover whatever
+                # is available
+                msg = "Error while reading the project file: "+str(ex)
+                logging.error(msg)
+                pass
             # Convert fitpage properties and update the dict
             try:
@@ -422,11 +427,14 @@
             except Exception as ex:
                 # disregard malformed SVS and try to recover regardless
-                msg = "Error while reading the project file: "+str(ex)
+                msg = "Error while converting the project file: "+str(ex)
                 logging.error(msg)
                 pass
         else:
             with open(filename, 'r') as infile:
-                all_data = GuiUtils.readDataFromFile(infile)
-
+                try:
+                    all_data = GuiUtils.readDataFromFile(infile)
+                except Exception as ex:
+                    logging.error("Project load failed with " + str(ex))
+                    return
         for key, value in all_data.items():
             if key=='is_batch':
@@ -489,14 +497,4 @@
                 self._perspective().updateFromParameters(page)
         pass # debugger
-
-    def readAnalysis(self, filename):
-        """
-        Read out a single dataset and fitpage from file
-        """
-        with open(filename, 'r') as infile:
-            all_data = GuiUtils.readDataFromFile(infile)
-
-            # send newly created items to the perspective
-            self.updatePerspectiveWithProperties(1, all_data)
 
     def updateModelFromData(self, data):
Index: src/sas/qtgui/MainWindow/GuiManager.py
===================================================================
--- src/sas/qtgui/MainWindow/GuiManager.py	(revision 17e2d502f3eee0b33fe32c43efbfb449831ddf14)
+++ src/sas/qtgui/MainWindow/GuiManager.py	(revision be74751f10c3d7ebd1a1cf7b810698c07275589c)
@@ -600,14 +600,17 @@
         # get fit page serialization
         params = per.serializeCurrentFitpage()
+        # Find dataset ids for the current tab
+        # (can be multiple, if batch)
         data_id = per.currentTabDataId()
         tab_id = per.currentTab.tab_id
-        data = self.filesWidget.getDataForID(data_id)
         analysis = {}
-        analysis['fit_data'] = data
-        analysis['fit_params'] = params
+        for id in data_id:
+            an = {}
+            data_for_id = self.filesWidget.getDataForID(id)
+            an['fit_data'] = data_for_id
+            an['fit_params'] = [params]
+            analysis[id] = an
 
         self.filesWidget.saveAnalysis(analysis, tab_id)
-
-        pass
 
     def actionQuit(self):
Index: src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py	(revision 17e2d502f3eee0b33fe32c43efbfb449831ddf14)
+++ src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py	(revision be74751f10c3d7ebd1a1cf7b810698c07275589c)
@@ -10,4 +10,5 @@
 import sas.qtgui.Utilities.LocalConfig as LocalConfig
 import sas.qtgui.Utilities.ObjectLibrary as ObjectLibrary
+import sas.qtgui.Utilities.GuiUtils as GuiUtils
 
 from sas.qtgui.Perspectives.Fitting.FittingWidget import FittingWidget
@@ -157,7 +158,11 @@
         Returns the data ID of the current tab
         """
-        tab_id = None
-        if self.currentTab.data:
-            tab_id = self.currentTab.data.id
+        tab_id = []
+        if not self.currentTab.data:
+            return tab_id
+        for item in self.currentTab.all_data:
+            data = GuiUtils.dataFromItem(item)
+            tab_id.append(data.id)
+
         return tab_id
 
