Index: src/sas/sascalc/data_util/nxsunit.py
===================================================================
--- src/sas/sascalc/data_util/nxsunit.py	(revision 574adc767a9e86744546f8edd6a23dc4f81914ad)
+++ src/sas/sascalc/data_util/nxsunit.py	(revision 8f882fecc993c2aea9372b888a43497808abe2d7)
@@ -136,6 +136,7 @@
     sld = { '10^-6 Angstrom^-2': 1e-6, 'Angstrom^-2': 1 }
     Q = { 'invA': 1, 'invAng': 1, 'invAngstroms': 1, '1/A': 1,
+          '1/Angstrom': 1, '1/angstrom': 1, 'A^{-1}': 1, 'cm^{-1}': 1,
           '10^-3 Angstrom^-1': 1e-3, '1/cm': 1e-8, '1/m': 1e-10,
-          'nm^-1': 0.1, '1/nm': 0.1, 'n_m^-1': 0.1 }
+          'nm^{-1}': 1, 'nm^-1': 0.1, '1/nm': 0.1, 'n_m^-1': 0.1 }
 
     _caret_optional(sld)
@@ -157,5 +158,5 @@
     # units for that particular dimension.
     # Note: don't have support for dimensionless units.
-    unknown = {None:1, '???':1, '': 1, 'a.u.': 1}
+    unknown = {None:1, '???':1, '': 1, 'a.u.': 1, 'Counts': 1, 'counts': 1}
 
     def __init__(self, name):
Index: src/sas/sascalc/dataloader/file_reader_base_class.py
===================================================================
--- src/sas/sascalc/dataloader/file_reader_base_class.py	(revision 058f6c331803fd9d3a8627da92364a3b0c0c29b5)
+++ src/sas/sascalc/dataloader/file_reader_base_class.py	(revision 8f882fecc993c2aea9372b888a43497808abe2d7)
@@ -175,5 +175,7 @@
                 # Normalize the units for
                 data.x_unit = self.format_unit(data.x_unit)
+                data._xunit = data.x_unit
                 data.y_unit = self.format_unit(data.y_unit)
+                data._yunit = data.y_unit
                 # Sort data by increasing x and remove 1st point
                 ind = np.lexsort((data.y, data.x))
@@ -206,6 +208,9 @@
             elif isinstance(data, Data2D):
                 # Normalize the units for
-                data.x_unit = self.format_unit(data.Q_unit)
-                data.y_unit = self.format_unit(data.I_unit)
+                data.Q_unit = self.format_unit(data.Q_unit)
+                data.I_unit = self.format_unit(data.I_unit)
+                data._xunit = data.Q_unit
+                data._yunit = data.Q_unit
+                data._zunit = data.I_unit
                 data.data = data.data.astype(np.float64)
                 data.qx_data = data.qx_data.astype(np.float64)
@@ -318,4 +323,6 @@
                 try:
                     data.x = data_conv_x(data.x, units=default_q_unit)
+                    data._xunit = default_q_unit
+                    data.x_unit = default_q_unit
                     if data.dx is not None:
                         data.dx = data_conv_x(data.dx, units=default_q_unit)
@@ -330,4 +337,6 @@
                 try:
                     data.y = data_conv_y(data.y, units=default_i_unit)
+                    data._yunit = default_i_unit
+                    data.y_unit = default_i_unit
                     if data.dy is not None:
                         data.dy = data_conv_y(data.dy, units=default_i_unit)
Index: src/sas/sascalc/dataloader/readers/cansas_reader_HDF5.py
===================================================================
--- src/sas/sascalc/dataloader/readers/cansas_reader_HDF5.py	(revision 3bab401d91e365ff93f8efbf5368655767ff2e5f)
+++ src/sas/sascalc/dataloader/readers/cansas_reader_HDF5.py	(revision 8f882fecc993c2aea9372b888a43497808abe2d7)
@@ -137,4 +137,5 @@
             if isinstance(value, h5py.Group):
                 # Set parent class before recursion
+                last_parent_class = self.parent_class
                 self.parent_class = class_name
                 parent_list.append(key)
@@ -144,11 +145,11 @@
                     self.add_data_set(key)
                 elif class_prog.match(u'SASdata'):
+                    self._initialize_new_data_set(value)
                     self._find_data_attributes(value)
-                    self._initialize_new_data_set(parent_list)
                 # Recursion step to access data within the group
                 self.read_children(value, parent_list)
+                self.add_intermediate()
                 # Reset parent class when returning from recursive method
-                self.parent_class = class_name
-                self.add_intermediate()
+                self.parent_class = last_parent_class
                 parent_list.remove(key)
 
@@ -533,5 +534,5 @@
         self.current_datainfo = DataInfo()
 
-    def _initialize_new_data_set(self, parent_list=None):
+    def _initialize_new_data_set(self, value=None):
         """
         A private class method to generate a new 1D or 2D data object based on
@@ -541,8 +542,5 @@
         :param parent_list: List of names of parent elements
         """
-
-        if parent_list is None:
-            parent_list = []
-        if self._find_intermediate(parent_list, "Qx"):
+        if self._is2d(value):
             self.current_dataset = plottable_2D()
         else:
@@ -565,8 +563,14 @@
         :param value: SASdata/NXdata HDF5 Group
         """
+        signal = "I"
+        i_axes = ["Q"]
+        q_indices = [0]
         attrs = value.attrs
-        signal = attrs.get("signal")
-        i_axes = np.array(str(attrs.get("I_axes")).split(","))
-        q_indices = np.int_(attrs.get("Q_indices").split(","))
+        if hasattr(attrs, "signal"):
+            signal = attrs.get("signal")
+        if hasattr(attrs, "I_axes"):
+            i_axes = np.array(str(attrs.get("I_axes")).split(","))
+        if hasattr(attrs, "Q_indices"):
+            q_indices = np.int_(attrs.get("Q_indices").split(","))
         keys = value.keys()
         self.mask_name = attrs.get("mask")
@@ -578,30 +582,26 @@
             if item in keys:
                 q_vals = value.get(item)
-                self.q_uncertainties = q_vals.attrs.get("uncertainty")
-                self.q_resolutions = q_vals.attrs.get("resolution")
+                self.q_uncertainties = q_vals.attrs.get("uncertainties")
+                if self.q_uncertainties is None:
+                    self.q_uncertainties = q_vals.attrs.get("uncertainty")
+                self.q_resolutions = q_vals.attrs.get("resolutions")
         if self.i_name in keys:
             i_vals = value.get(self.i_name)
-            self.i_uncertainties = i_vals.attrs.get("uncertainty")
-
-    def _find_intermediate(self, parent_list, basename=""):
-        """
-        A private class used to find an entry by either using a direct key or
-        knowing the approximate basename.
+            self.i_uncertainties = i_vals.attrs.get("uncertainties")
+            if self.i_uncertainties is None:
+                self.i_uncertainties = i_vals.attrs.get("uncertainty")
+
+    def _is2d(self, value, basename="I"):
+        """
+        A private class to determine if the data set is 1d or 2d.
 
         :param parent_list: List of parents nodes in the HDF5 file
         :param basename: Approximate name of an entry to search for
-        :return:
-        """
-
-        entry = False
-        key_prog = re.compile(basename)
-        top = self.raw_data
-        for parent in parent_list:
-            top = top.get(parent)
-        for key in top.keys():
-            if key_prog.match(key):
-                entry = True
-                break
-        return entry
+        :return: True if 2D, otherwise false
+        """
+
+        vals = value.get(basename)
+        return (vals is not None and vals.shape is not None
+                and len(vals.shape) != 1)
 
     def _create_unique_key(self, dictionary, name, numb=0):
