Index: src/sas/sascalc/dataloader/readers/cansas_reader.py
===================================================================
--- src/sas/sascalc/dataloader/readers/cansas_reader.py	(revision 1686a333c537addee2a00ed89b00c694826a8f17)
+++ src/sas/sascalc/dataloader/readers/cansas_reader.py	(revision 5f26aa48a5e34765d73c20fa10024d5319567854)
@@ -206,4 +206,7 @@
         # Go through each child in the parent element
         for node in dom:
+            attr = node.attrib
+            name = attr.get("name", "")
+            type = attr.get("type", "")
             # Get the element name and set the current names level
             tagname = node.tag.replace(self.base_ns, "")
@@ -223,4 +226,13 @@
                 ## Recursion step to access data within the group
                 self._parse_entry(node)
+                if tagname == "SASsample":
+                    self.current_datainfo.sample.name = name
+                elif tagname == "beam_size":
+                    self.current_datainfo.source.beam_size_name = name
+                elif tagname == "SAScollimation":
+                    self.collimation.name = name
+                elif tagname == "aperture":
+                    self.aperture.name = name
+                    self.aperture.type = type
                 self.add_intermediate()
             else:
@@ -229,4 +241,5 @@
                 ## If this is a dataset, store the data appropriately
                 if tagname == 'Run':
+                    self.current_datainfo.run_name[data_point] = name
                     self.current_datainfo.run.append(data_point)
                 elif tagname == 'Title':
@@ -369,5 +382,10 @@
                     self.process.notes.append(data_point)
                 elif tagname == 'term' and self.parent_class == 'SASprocess':
-                    self.process.term.append(data_point)
+                    unit = attr.get("unit", "")
+                    dic = {}
+                    dic["name"] = name
+                    dic["value"] = data_point
+                    dic["unit"] = unit
+                    self.process.term.append(dic)
 
                 ## Transmission Spectrum
@@ -531,5 +549,5 @@
             self.current_datainfo.collimation.append(self.collimation)
             self.collimation = Collimation()
-        elif self.parent_class == 'SASaperture':
+        elif self.parent_class == 'aperture':
             self.collimation.aperture.append(self.aperture)
             self.aperture = Aperture()
@@ -646,9 +664,9 @@
         err_msg = None
         default_unit = None
-        if 'unit' in attr and attr.get('unit') is not None and not self.ns_list.ns_optional:
+        if not isinstance(node_value, float):
+            node_value = float(node_value)
+        if 'unit' in attr and attr.get('unit') is not None:
             try:
                 local_unit = attr['unit']
-                if not isinstance(node_value, float):
-                    node_value = float(node_value)
                 unitname = self.ns_list.current_level.get("unit", "")
                 if "SASdetector" in self.names:
@@ -907,14 +925,14 @@
                 self.write_node(point, "I", datainfo.y[i],
                                 {'unit': datainfo.y_unit})
-            if datainfo.dy != None and len(datainfo.dy) > i:
+            if datainfo.dy is not None and len(datainfo.dy) > i:
                 self.write_node(point, "Idev", datainfo.dy[i],
                                 {'unit': datainfo.y_unit})
-            if datainfo.dx != None and len(datainfo.dx) > i:
+            if datainfo.dx is not None and len(datainfo.dx) > i:
                 self.write_node(point, "Qdev", datainfo.dx[i],
                                 {'unit': datainfo.x_unit})
-            if datainfo.dxw != None and len(datainfo.dxw) > i:
+            if datainfo.dxw is not None and len(datainfo.dxw) > i:
                 self.write_node(point, "dQw", datainfo.dxw[i],
                                 {'unit': datainfo.x_unit})
-            if datainfo.dxl != None and len(datainfo.dxl) > i:
+            if datainfo.dxl is not None and len(datainfo.dxl) > i:
                 self.write_node(point, "dQl", datainfo.dxl[i],
                                 {'unit': datainfo.x_unit})
@@ -1184,4 +1202,7 @@
                 if isinstance(term, list):
                     value = term['value']
+                    del term['value']
+                elif isinstance(term, dict):
+                    value = term.get("value")
                     del term['value']
                 else:
Index: test/sasdataloader/test/utest_abs_reader.py
===================================================================
--- test/sasdataloader/test/utest_abs_reader.py	(revision b699768550de9d4b35b087234ec1d2a461922bab)
+++ test/sasdataloader/test/utest_abs_reader.py	(revision 5f26aa48a5e34765d73c20fa10024d5319567854)
@@ -176,6 +176,5 @@
         
         self.assertEqual(self.data.run[0], "1234")
-        self.assertEqual(self.data.meta_data['loader'], "CanSAS 1D")
-        self.assertEqual(len(self.data.errors), 0)
+        self.assertEqual(self.data.meta_data['loader'], "CanSAS XML 1D")
         
         # Data
@@ -198,7 +197,7 @@
         self.assertEqual(self.data.sample.name, "my sample")
         self.assertEqual(self.data.sample.thickness_unit, 'mm')
-        self.assertEqual(self.data.sample.thickness, 1.03)
-        
-        self.assertEqual(self.data.sample.transmission, 0.327)
+        self.assertAlmostEqual(self.data.sample.thickness, 1.03)
+        
+        self.assertAlmostEqual(self.data.sample.transmission, 0.327)
         
         self.assertEqual(self.data.sample.temperature_unit, 'C')
@@ -233,7 +232,7 @@
         
         self.assertEqual(self.data.source.wavelength_max_unit, "nm")
-        self.assertEqual(self.data.source.wavelength_max, 1.0)
+        self.assertAlmostEqual(self.data.source.wavelength_max, 1.0)
         self.assertEqual(self.data.source.wavelength_min_unit, "nm")
-        self.assertEqual(self.data.source.wavelength_min, 0.22)
+        self.assertAlmostEqual(self.data.source.wavelength_min, 0.22)
         self.assertEqual(self.data.source.wavelength_spread_unit, "percent")
         self.assertEqual(self.data.source.wavelength_spread, 14.3)
@@ -248,5 +247,5 @@
             self.assertEqual(item.size_unit,'mm')
             self.assertEqual(item.distance_unit,'mm')
-            
+
             if item.size.x==50 \
                 and item.distance==11000.0 \
@@ -294,4 +293,5 @@
             self.assertTrue(item.date in ['04-Sep-2007 18:35:02',
                                           '03-SEP-2006 11:42:47'])
+            print item.term
             for t in item.term:
                 if t['name']=="ABS:DSTAND" \
@@ -345,9 +345,9 @@
         self.assertEqual(self.data.filename, filename)
         # The followed should not have been loaded
-        self.assertEqual(self.data.sample.thickness, 0.00103)
+        self.assertAlmostEqual(self.data.sample.thickness, 0.00103)
         # This one should
-        self.assertEqual(self.data.sample.transmission, 0.327)
-        
-        self.assertEqual(self.data.meta_data['loader'], "CanSAS 1D")
+        self.assertAlmostEqual(self.data.sample.transmission, 0.327)
+        
+        self.assertEqual(self.data.meta_data['loader'], "CanSAS XML 1D")
         print self.data.errors
         self.assertEqual(len(self.data.errors), 1)
@@ -385,3 +385,3 @@
 
 if __name__ == '__main__':
-    unittest.main(testRunner=unittest.TextTestRunner(verbosity=2))
+    unittest.main()
