Index: src/sas/sascalc/dataloader/readers/cansas_reader_HDF5.py
===================================================================
--- src/sas/sascalc/dataloader/readers/cansas_reader_HDF5.py	(revision a165bee3b40017a5b44026ae96a02ba16157b647)
+++ src/sas/sascalc/dataloader/readers/cansas_reader_HDF5.py	(revision 9220e89c31ca5156d9c3a40634b4257084d139a2)
@@ -14,4 +14,9 @@
 from ..loader_exceptions import FileContentsException, DefaultReaderException
 from ..file_reader_base_class import FileReader, decode
+
+try:
+  basestring
+except NameError:  # CRUFT: python 2 support
+  basestring = str
 
 
@@ -630,5 +635,5 @@
         :param parent_list: List of names of parent elements
         """
-        if self._is2d(value):
+        if self._is_2d_not_multi_frame(value):
             self.current_dataset = plottable_2D()
         else:
@@ -639,15 +644,13 @@
 
     @staticmethod
-    def check_is_list_or_array(iterable):
-        try:
-            iter(iterable)
-            if (not isinstance(iterable, np.ndarray) and not isinstance(
-                    iterable, list)) or (isinstance(iterable, basestring)):
-                raise TypeError
-        except TypeError:
-            if isinstance(iterable, basestring):
-                iterable = iterable.split(",")
-            else:
-                iterable = [iterable]
+    def as_list_or_array(iterable):
+        """
+        Return value as a list if not already a list or array.
+        :param iterable:
+        :return:
+        """
+        if not (isinstance(iterable, np.ndarray) or isinstance(iterable, list)):
+            iterable = iterable.split(",") if isinstance(iterable, basestring)\
+                else [iterable]
         return iterable
 
@@ -671,11 +674,9 @@
         i_axes = attrs.get("I_axes", ["Q"])
         q_indices = attrs.get("Q_indices", [0])
-        q_indices = map(int, self.check_is_list_or_array(q_indices))
-        i_axes = self.check_is_list_or_array(i_axes)
+        i_axes = self.as_list_or_array(i_axes)
         keys = value.keys()
         # Assign attributes to appropriate class variables
+        self.q_names = [i_axes[int(v)] for v in self.as_list_or_array(q_indices)]
         self.mask_name = attrs.get("mask")
-        for val in q_indices:
-            self.q_names.append(i_axes[val])
         self.i_name = signal
         self.i_node = value.get(self.i_name)
@@ -699,5 +700,5 @@
                 self.i_uncertainties_name = i_vals.attrs.get("uncertainty")
 
-    def _is2d(self, value, i_base="", q_base=[]):
+    def _is_2d_not_multi_frame(self, value, i_base="", q_base=""):
         """
         A private class to determine if the data set is 1d or 2d.
@@ -709,11 +710,11 @@
         i_basename = i_base if i_base != "" else self.i_name
         i_vals = value.get(i_basename)
-        q_basename = q_base if q_base != [] else self.q_names
+        q_basename = q_base if q_base != "" else self.q_names
         q_vals = value.get(q_basename[0])
-        self.multi_frame = True if (i_vals is not None and q_vals is not None
-                                    and len(i_vals.shape) != 1
-                                    and len(q_vals.shape) == 1) else False
-        return (i_vals is not None and i_vals.shape is not None
-                and len(i_vals.shape) != 1 and not self.multi_frame)
+        self.multi_frame = (i_vals is not None and q_vals is not None
+                            and len(i_vals.shape) != 1
+                            and len(q_vals.shape) == 1)
+        return (i_vals is not None and len(i_vals.shape) != 1
+                and not self.multi_frame)
 
     def _create_unique_key(self, dictionary, name, numb=0):
Index: src/sas/sascalc/file_converter/nxcansas_writer.py
===================================================================
--- src/sas/sascalc/file_converter/nxcansas_writer.py	(revision 2ca5d57bc4f8c564621aed80c21b30baf39fe4cc)
+++ src/sas/sascalc/file_converter/nxcansas_writer.py	(revision 9220e89c31ca5156d9c3a40634b4257084d139a2)
@@ -87,6 +87,5 @@
                     entry[names[2]].attrs['units'] = units
 
-        valid_data = all([issubclass(d.__class__, (Data1D, Data2D)) for d in
-                          dataset])
+        valid_data = all([isinstance(d, (Data1D, Data2D)) for d in dataset])
         if not valid_data:
             raise ValueError("All entries of dataset must be Data1D or Data2D"
Index: src/sas/sasgui/guiframe/gui_manager.py
===================================================================
--- src/sas/sasgui/guiframe/gui_manager.py	(revision 9f45f8328cd9af1bcc0fa001c852cbca57cfa454)
+++ src/sas/sasgui/guiframe/gui_manager.py	(revision 9220e89c31ca5156d9c3a40634b4257084d139a2)
@@ -2580,10 +2580,11 @@
             # Instantiate a loader
             loader = Loader()
-            if os.path.splitext(mypath)[1].lower() == '.dat':
+            ext = os.path.splitext(mypath)[1].lower()
+            if ext == '.dat':
                 # Make sure the ext included in the file name
                 # especially on MAC
                 fileName = os.path.splitext(path)[0] + ext_format
                 loader.save(fileName, data, ext_format)
-            elif os.path.splitext(mypath)[1].lower() == '.h5':
+            elif ext == '.h5':
                 # Make sure the ext included in the file name
                 # especially on MAC
