Index: src/sas/sascalc/dataloader/readers/cansas_reader.py
===================================================================
--- src/sas/sascalc/dataloader/readers/cansas_reader.py	(revision 5f26aa48a5e34765d73c20fa10024d5319567854)
+++ src/sas/sascalc/dataloader/readers/cansas_reader.py	(revision 654e8e066dda6b98c221cad28e05fa6996e7fc11)
@@ -62,4 +62,5 @@
     type_name = "canSAS"
     invalid = True
+    frm = ""
     ## Log messages and errors
     logging = None
@@ -138,5 +139,4 @@
                     for entry in entry_list:
                         # Create a new DataInfo object for every <SASentry>
-
 
                         # Set the file name and then parse the entry.
@@ -183,5 +183,5 @@
         return self.output
 
-    def _parse_entry(self, dom):
+    def _parse_entry(self, dom, recurse=False):
         """
         Parse a SASEntry - new recursive method for parsing the dom of
@@ -192,6 +192,5 @@
         """
 
-        frm = inspect.stack()[1]
-        if not self._is_call_local(frm):
+        if not self._is_call_local() and not recurse:
             self.reset_state()
             self.add_data_set()
@@ -201,6 +200,4 @@
         self.base_ns = "{0}{1}{2}".format("{", \
                             CANSAS_NS.get(self.cansas_version).get("ns"), "}")
-        tagname = ''
-        tagname_original = ''
 
         # Go through each child in the parent element
@@ -225,5 +222,5 @@
                     self._initialize_new_data_set()
                 ## Recursion step to access data within the group
-                self._parse_entry(node)
+                self._parse_entry(node, True)
                 if tagname == "SASsample":
                     self.current_datainfo.sample.name = name
@@ -437,5 +434,6 @@
                 length = len(self.names) - 1
             self.parent_class = self.names[length]
-        if not self._is_call_local(frm):
+        if not self._is_call_local() and not recurse:
+            self.frm = ""
             self.add_data_set()
             empty = None
@@ -448,12 +446,12 @@
 
 
-    def _is_call_local(self, frm=""):
-        """
-
-        :return:
-        """
-        if frm == "":
-            frm = inspect.stack()[1]
-        mod_name = frm[1].replace("\\", "/").replace(".pyc", "")
+    def _is_call_local(self):
+        """
+
+        """
+        if self.frm == "":
+            inter = inspect.stack()
+            self.frm = inter[2]
+        mod_name = self.frm[1].replace("\\", "/").replace(".pyc", "")
         mod_name = mod_name.replace(".py", "")
         mod = mod_name.split("sas/")
@@ -836,6 +834,6 @@
         # If the calling function was not the cansas reader, return a minidom
         #      object rather than an lxml object.
-        frm = inspect.stack()[1]
-        doc, entry_node = self._check_origin(entry_node, doc, frm)
+        self.frm = inspect.stack()[1]
+        doc, entry_node = self._check_origin(entry_node, doc)
         return doc, entry_node
 
@@ -1232,5 +1230,5 @@
                 self.append(node, entry_node)
 
-    def _check_origin(self, entry_node, doc, frm):
+    def _check_origin(self, entry_node, doc):
         """
         Return the document, and the SASentry node associated with
@@ -1242,7 +1240,7 @@
         :param doc: entire xml tree
         """
-        if not frm:
-            frm = inspect.stack()[1]
-        mod_name = frm[1].replace("\\", "/").replace(".pyc", "")
+        if not self.frm:
+            self.frm = inspect.stack()[1]
+        mod_name = self.frm[1].replace("\\", "/").replace(".pyc", "")
         mod_name = mod_name.replace(".py", "")
         mod = mod_name.split("sas/")
Index: src/sas/sasgui/perspectives/fitting/pagestate.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/pagestate.py	(revision 7673ecd9d5adcefdfa1fc6a6d1ff0649f8e63bc8)
+++ src/sas/sasgui/perspectives/fitting/pagestate.py	(revision 654e8e066dda6b98c221cad28e05fa6996e7fc11)
@@ -1569,5 +1569,8 @@
                     if output[ind].run_name is not None\
                         and len(output[ind].run_name) != 0:
-                        name = output[ind].run_name
+                        if isinstance(output[ind].run_name, dict):
+                            name = output[ind].run_name.keys()[0]
+                        else:
+                            name = output[ind].run_name
                     else:
                         name = original_fname
Index: src/sas/sasgui/perspectives/invariant/invariant_panel.py
===================================================================
--- src/sas/sasgui/perspectives/invariant/invariant_panel.py	(revision cb93b405a73e2c9eef55d1ac6f2bbcff2b0b9d6d)
+++ src/sas/sasgui/perspectives/invariant/invariant_panel.py	(revision 654e8e066dda6b98c221cad28e05fa6996e7fc11)
@@ -830,8 +830,13 @@
         """
         try:
-            attr = getattr(self, key)
+            if key in ['compute_num', 'file', 'is_time_machine', 'state_num']:
+                return
+            else:
+                attr = getattr(self, key)
             if attr.__class__.__name__ == "StaticText":
                 return
-            if type(value) is not bool:
+            if value in ["True", "False", True, False]:
+                value = bool(value)
+            else:
                 value = str(value)
             attr.SetValue(value)
