Index: src/sas/sascalc/dataloader/readers/cansas_reader.py
===================================================================
--- src/sas/sascalc/dataloader/readers/cansas_reader.py	(revision 654e8e066dda6b98c221cad28e05fa6996e7fc11)
+++ src/sas/sascalc/dataloader/readers/cansas_reader.py	(revision 654e8e066dda6b98c221cad28e05fa6996e7fc11)
@@ -1177,9 +1177,9 @@
             written = written | self.write_node(pix, "z", item.pixel_size.z,
                                                 {"unit": item.pixel_size_unit})
-            written = written | self.write_node(det, "slit_length",
-                                                item.slit_length,
-                                                {"unit": item.slit_length_unit})
             if written == True:
                 self.append(pix, det)
+            self.write_node(det, "slit_length", item.slit_length,
+                {"unit": item.slit_length_unit})
+
 
     def _write_process_notes(self, datainfo, entry_node):
Index: src/sas/sascalc/dataloader/readers/cansas_reader_HDF5.py
===================================================================
--- src/sas/sascalc/dataloader/readers/cansas_reader_HDF5.py	(revision 479799ca62cb68babc5dffcb75789060111eddeb)
+++ src/sas/sascalc/dataloader/readers/cansas_reader_HDF5.py	(revision 5e9062071eef0080f51c5de4c3cfb3bb129ebab6)
@@ -23,4 +23,6 @@
 
     Any number of SASdata sets may be present in a SASentry and the data within can be either 1D I(Q) or 2D I(Qx, Qy).
+
+    Also supports reading NXcanSAS formatted HDF5 files
 
     :Dependencies:
@@ -76,4 +78,6 @@
                 ## Add the last data set to the list of outputs
                 self.add_data_set()
+                ## Close the data file
+                self.raw_data.close()
         ## Return data set(s)
         return self.output
@@ -183,4 +187,10 @@
                     elif key == u'run':
                         self.current_datainfo.run.append(data_point)
+                        try:
+                            run_name = value.attrs['name']
+                            run_dict = {data_point: run_name}
+                            self.current_datainfo.run_name = run_dict
+                        except:
+                            pass
                     elif key == u'title':
                         self.current_datainfo.title = data_point
@@ -189,5 +199,7 @@
 
                     ## Sample Information
-                    elif key == u'Title' and self.parent_class == u'SASsample':
+                    elif key == u'Title' and self.parent_class == u'SASsample': # CanSAS 2.0 format
+                        self.current_datainfo.sample.name = data_point
+                    elif key == u'ID' and self.parent_class == u'SASsample': # NXcanSAS format
                         self.current_datainfo.sample.name = data_point
                     elif key == u'thickness' and self.parent_class == u'SASsample':
@@ -195,4 +207,16 @@
                     elif key == u'temperature' and self.parent_class == u'SASsample':
                         self.current_datainfo.sample.temperature = data_point
+                    elif key == u'transmission' and self.parent_class == u'SASsample':
+                        self.current_datainfo.sample.transmission = data_point
+                    elif key == u'x_position' and self.parent_class == u'SASsample':
+                        self.current_datainfo.sample.position.x = data_point
+                    elif key == u'y_position' and self.parent_class == u'SASsample':
+                        self.current_datainfo.sample.position.y = data_point
+                    elif key == u'polar_angle' and self.parent_class == u'SASsample':
+                        self.current_datainfo.sample.orientation.x = data_point
+                    elif key == u'azimuthal_angle' and self.parent_class == u'SASsample':
+                        self.current_datainfo.sample.orientation.z = data_point
+                    elif key == u'details' and self.parent_class == u'SASsample':
+                        self.current_datainfo.sample.details.append(data_point)
 
                     ## Instrumental Information
@@ -204,4 +228,31 @@
                         self.detector.distance = float(data_point)
                         self.detector.distance_unit = unit
+                    elif key == u'slit_length' and self.parent_class == u'SASdetector':
+                        self.detector.slit_length = float(data_point)
+                        self.detector.slit_length_unit = unit
+                    elif key == u'x_position' and self.parent_class == u'SASdetector':
+                        self.detector.offset.x = float(data_point)
+                        self.detector.offset_unit = unit
+                    elif key == u'y_position' and self.parent_class == u'SASdetector':
+                        self.detector.offset.y = float(data_point)
+                        self.detector.offset_unit = unit
+                    elif key == u'polar_angle' and self.parent_class == u'SASdetector':
+                        self.detector.orientation.x = float(data_point)
+                        self.detector.orientation_unit = unit
+                    elif key == u'azimuthal_angle' and self.parent_class == u'SASdetector':
+                        self.detector.orientation.z = float(data_point)
+                        self.detector.orientation_unit = unit
+                    elif key == u'beam_center_x' and self.parent_class == u'SASdetector':
+                        self.detector.beam_center.x = float(data_point)
+                        self.detector.beam_center_unit = unit
+                    elif key == u'beam_center_y' and self.parent_class == u'SASdetector':
+                        self.detector.beam_center.y = float(data_point)
+                        self.detector.beam_center_unit = unit
+                    elif key == u'x_pixel_size' and self.parent_class == u'SASdetector':
+                        self.detector.pixel_size.x = float(data_point)
+                        self.detector.pixel_size_unit = unit
+                    elif key == u'y_pixel_size' and self.parent_class == u'SASdetector':
+                        self.detector.pixel_size.y = float(data_point)
+                        self.detector.pixel_size_unit = unit
                     elif key == u'SSD' and self.parent_class == u'SAScollimation':
                         self.collimation.length = data_point
@@ -213,5 +264,7 @@
                     elif key == u'name' and self.parent_class == u'SASprocess':
                         self.process.name = data_point
-                    elif key == u'Title' and self.parent_class == u'SASprocess':
+                    elif key == u'Title' and self.parent_class == u'SASprocess': # CanSAS 2.0 format
+                        self.process.name = data_point
+                    elif key == u'name' and self.parent_class == u'SASprocess': # NXcanSAS format
                         self.process.name = data_point
                     elif key == u'description' and self.parent_class == u'SASprocess':
@@ -230,8 +283,28 @@
                         self.trans_spectrum.wavelength.append(data_point)
 
-                    ## Other Information
+                    ## Source
                     elif key == u'wavelength' and self.parent_class == u'SASdata':
                         self.current_datainfo.source.wavelength = data_point
-                        self.current_datainfo.source.wavelength.unit = unit
+                        self.current_datainfo.source.wavelength_unit = unit
+                    elif key == u'incident_wavelength' and self.parent_class == u'SASsource':
+                        self.current_datainfo.source.wavelength = data_point
+                        self.current_datainfo.source.wavelength_unit = unit
+                    elif key == u'wavelength_max' and self.parent_class == u'SASsource':
+                        self.current_datainfo.source.wavelength_max = data_point
+                        self.current_datainfo.source.wavelength_max_unit = unit
+                    elif key == u'wavelength_min' and self.parent_class == u'SASsource':
+                        self.current_datainfo.source.wavelength_min = data_point
+                        self.current_datainfo.source.wavelength_min_unit = unit
+                    elif key == u'wavelength_spread' and self.parent_class == u'SASsource':
+                        self.current_datainfo.source.wavelength_spread = data_point
+                        self.current_datainfo.source.wavelength_spread_unit = unit
+                    elif key == u'beam_size_x' and self.parent_class == u'SASsource':
+                        self.current_datainfo.source.beam_size.x = data_point
+                        self.current_datainfo.source.beam_size_unit = unit
+                    elif key == u'beam_size_y' and self.parent_class == u'SASsource':
+                        self.current_datainfo.source.beam_size.y = data_point
+                        self.current_datainfo.source.beam_size_unit = unit
+                    elif key == u'beam_shape' and self.parent_class == u'SASsource':
+                        self.current_datainfo.source.beam_shape = data_point
                     elif key == u'radiation' and self.parent_class == u'SASsource':
                         self.current_datainfo.source.radiation = data_point
@@ -376,4 +449,5 @@
         self.current_datainfo = DataInfo()
 
+
     def _initialize_new_data_set(self, parent_list = None):
         """
