Index: src/sas/sasgui/perspectives/fitting/fitpage.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/fitpage.py	(revision 9a5097cd1c76689d1f997b85ba43d12a95d8f243)
+++ src/sas/sasgui/perspectives/fitting/fitpage.py	(revision 71430650002a4f84cdc251291ad0ab128d83f64c)
@@ -1236,8 +1236,12 @@
             wx.PostEvent(self.parent, new_event)
             # update list of plugins if new plugin is available
-            custom_model = CUSTOM_MODEL
             mod_cat = self.categorybox.GetStringSelection()
-            if mod_cat == custom_model:
+            if mod_cat == CUSTOM_MODEL:
+                temp_id = self.model.id
                 temp = self.parent.update_model_list()
+                for v in self.parent.model_dictionary.values():
+                    if v.id == temp_id:
+                        self.model = v()
+                        break
                 if temp:
                     self.model_list_box = temp
Index: src/sas/sasgui/perspectives/fitting/fitpanel.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/fitpanel.py	(revision 67b0a99ce9f69a9dfef035e8e4a06588c9f1602f)
+++ src/sas/sasgui/perspectives/fitting/fitpanel.py	(revision c9ecd1b562e38798001341ea1382b347f0cc1af9)
@@ -92,11 +92,17 @@
             # state must be cloned
             state = page.get_state().clone()
-            if data is not None or page.model is not None:
+            # data_list only populated with real data
+            # Fake object in data from page.get_data() if model is selected
+            if len(page.data_list) is not 0 and page.model is not None:
                 new_doc = self._manager.state_reader.write_toXML(data,
                                                                  state,
                                                                  batch_state)
+                # Fit #2 through #n are append to first fit
                 if doc is not None and hasattr(doc, "firstChild"):
-                    child = new_doc.firstChild.firstChild
-                    doc.firstChild.appendChild(child)
+                    # Only append if properly formed new_doc
+                    if new_doc is not None and hasattr(new_doc, "firstChild"):
+                        child = new_doc.firstChild.firstChild
+                        doc.firstChild.appendChild(child)
+                # First fit defines the main document
                 else:
                     doc = new_doc
@@ -395,8 +401,5 @@
                 temp_data = page.get_data()
                 if temp_data is not None and temp_data.id in data:
-                    self.SetSelection(pos)
-                    self.on_close_page(event=None)
-                    temp = self.GetSelection()
-                    self.DeletePage(temp)
+                    self.close_page_with_data(temp_data)
             if self.sim_page is not None:
                 if len(self.sim_page.model_list) == 0:
@@ -404,6 +407,5 @@
                     self.SetSelection(pos)
                     self.on_close_page(event=None)
-                    temp = self.GetSelection()
-                    self.DeletePage(temp)
+                    self.DeletePage(pos)
                     self.sim_page = None
                     self.batch_on = False
Index: src/sas/sasgui/perspectives/fitting/models.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/models.py	(revision b1c20119cf657ba734745bce8235e0d675629175)
+++ src/sas/sasgui/perspectives/fitting/models.py	(revision b1c20119cf657ba734745bce8235e0d675629175)
@@ -20,4 +20,5 @@
 from sas.sasgui.guiframe.CategoryInstaller import CategoryInstaller
 from sasmodels.sasview_model import load_custom_model, load_standard_models
+from sas.sasgui.perspectives.fitting.fitpage import CUSTOM_MODEL
 
 logger = logging.getLogger(__name__)
@@ -265,5 +266,7 @@
         temp = {}
         if self.is_changed():
-            return  _find_models()
+            temp =  _find_models()
+            self.last_time_dir_modified = time.time()
+            return temp
         logger.info("plugin model : %s" % str(temp))
         return temp
@@ -312,5 +315,5 @@
         if os.path.isdir(plugin_dir):
             temp = os.path.getmtime(plugin_dir)
-            if  self.last_time_dir_modified != temp:
+            if  self.last_time_dir_modified < temp:
                 is_modified = True
                 self.last_time_dir_modified = temp
@@ -323,12 +326,12 @@
         new models were added else return empty dictionary
         """
+        self.plugins = []
         new_plugins = self.findModels()
-        if len(new_plugins) > 0:
-            for name, plug in  new_plugins.iteritems():
-                if name not in self.stored_plugins.keys():
-                    self.stored_plugins[name] = plug
-                    self.plugins.append(plug)
-                    self.model_dictionary[name] = plug
-            self.model_combobox.set_list("Plugin Models", self.plugins)
+        if new_plugins:
+            for name, plug in  new_plugins.items():
+                self.stored_plugins[name] = plug
+                self.plugins.append(plug)
+                self.model_dictionary[name] = plug
+            self.model_combobox.set_list(CUSTOM_MODEL, self.plugins)
             return self.model_combobox.get_list()
         else:
Index: src/sas/sasgui/perspectives/fitting/pagestate.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/pagestate.py	(revision 959eb0181ad06828a748f04512f953aad5b31659)
+++ src/sas/sasgui/perspectives/fitting/pagestate.py	(revision da9b23921df41d99e3b43e2bba26803e24afece2)
@@ -617,4 +617,6 @@
             value = ""
             content = line.split(":")
+            if line == '' or len(content) == 1:
+                continue
             name = content[0]
             try:
