Index: DataLoader/data_info.py
===================================================================
--- DataLoader/data_info.py	(revision b99ac22702d9634282d084e8a7da3aa3064bccf2)
+++ DataLoader/data_info.py	(revision d6513cd9709cf6e63b2f3e123ce200fc9081fecd)
@@ -104,18 +104,28 @@
     distance_unit = 'mm'
     ## Offset of this detector position in X, Y, (and Z if necessary) [Vector] [mm] 
-    offset = Vector()
+    offset = None
     offset_unit = 'm'
     ## Orientation (rotation) of this detector in roll, pitch, and yaw [Vector] [degrees]
-    orientation = Vector()
+    orientation = None
     orientation_unit = 'degree'
     ## Center of the beam on the detector in X and Y (and Z if necessary) [Vector] [mm]
-    beam_center = Vector()
+    beam_center = None
     beam_center_unit = 'mm'
     ## Pixel size in X, Y, (and Z if necessary) [Vector] [mm]
-    pixel_size = Vector()
+    pixel_size = None
     pixel_size_unit = 'mm'
     ## Slit length of the instrument for this detector.[float] [mm]
     slit_length = None
     slit_length_unit = 'mm'
+    
+    def __init__(self):
+        """
+            Initialize class attribute that are objects...
+        """
+        self.offset      = Vector()
+        self.orientation = Vector()
+        self.beam_center = Vector()
+        self.pixel_size  = Vector()
+        
     
     def __str__(self):
@@ -136,15 +146,19 @@
         return _str
 
+class Aperture:
+    # Aperture size [Vector]
+    size = None
+    size_unit = 'mm'
+    # Aperture distance [float]
+    distance = None
+    distance_unit = 'mm'
+    
+    def __init__(self):
+        self.size = Vector()
+    
 class Collimation:
     """
         Class to hold collimation information
     """
-    class Aperture:
-        # Aperture size [Vector]
-        size = Vector()
-        size_unit = 'mm'
-        # Aperture distance [float]
-        distance = None
-        distance_unit = 'mm'
     
     ## Length [float] [mm]
@@ -152,5 +166,8 @@
     length_unit = 'mm'
     ## Aperture
-    aperture = []
+    aperture = None
+    
+    def __init__(self):
+        self.aperture = []
     
     def __str__(self):
@@ -172,5 +189,5 @@
     radiation = ''
     ## Beam size [Vector] [mm]
-    beam_size = Vector()
+    beam_size = None
     beam_size_unit = 'mm'
     ## Beam shape [string]
@@ -189,4 +206,8 @@
     wavelength_spread_unit = 'percent'
     
+    def __init__(self):
+        self.beam_size = Vector()
+        
+    
     def __str__(self):
         _str  = "Source:\n"
@@ -229,11 +250,16 @@
     temperature_unit = 'C'
     ## Position [Vector] [mm]
-    position = Vector()
+    position = None
     position_unit = 'mm'
     ## Orientation [Vector] [degrees]
-    orientation = Vector()
+    orientation = None
     orientation_unit = 'degree'
     ## Details
-    details = []
+    details = None
+    
+    def __init__(self):
+        self.position    = Vector()
+        self.orientation = Vector()
+        self.details     = []
     
     def __str__(self):
@@ -264,6 +290,10 @@
     date = ''
     description= ''
-    term = []
-    notes = []
+    term = None
+    notes = None
+    
+    def __init__(self):
+        self.term = []
+        self.notes = []
     
     def __str__(self):
@@ -293,21 +323,21 @@
     filename   = ''
     ## Notes
-    notes      = []
+    notes      = None
     ## Processes (Action on the data)
-    process    = []
+    process    = None
     ## Instrument name
     instrument = ''
     ## Detector information
-    detector   = []
+    detector   = None
     ## Sample information
-    sample     = Sample()
+    sample     = None
     ## Source information
-    source     = Source()
+    source     = None
     ## Collimation information
-    collimation = []
+    collimation = None
     ## Additional meta-data
-    meta_data  = {}
+    meta_data  = None
     ## Loading errors
-    errors = []
+    errors = None
             
     def __init__(self):
@@ -583,11 +613,13 @@
     
     ## Vector of Q-values at the center of each bin in x
-    x_bins = []
+    x_bins = None
     
     ## Vector of Q-values at the center of each bin in y
-    y_bins = []
+    y_bins = None
     
     
     def __init__(self, data=None, err_data=None):
+        self.y_bins = []
+        self.x_bins = []
         DataInfo.__init__(self)
         plottable_2D.__init__(self, data, err_data)
Index: DataLoader/readers/cansas_reader.py
===================================================================
--- DataLoader/readers/cansas_reader.py	(revision 99d1af6082f75428716f6bace3bc5a668ba7a9b6)
+++ DataLoader/readers/cansas_reader.py	(revision d6513cd9709cf6e63b2f3e123ce200fc9081fecd)
@@ -20,5 +20,5 @@
 import numpy
 import os, sys
-from DataLoader.data_info import Data1D, Collimation, Detector, Process
+from DataLoader.data_info import Data1D, Collimation, Detector, Process, Aperture
 from xml import xpath
 
@@ -70,8 +70,8 @@
                     break
                 
-                if nodes[0].hasAttributes():
-                    for i in range(nodes[0].attributes.length):
-                        attr[nodes[0].attributes.item(i).nodeName] \
-                            = nodes[0].attributes.item(i).nodeValue
+            if nodes[0].hasAttributes():
+                for i in range(nodes[0].attributes.length):
+                    attr[nodes[0].attributes.item(i).nodeName] \
+                        = nodes[0].attributes.item(i).nodeValue
         except:
             # problem reading the node. Skip it and return that
@@ -317,6 +317,5 @@
             apert_list = xpath.Evaluate('aperture', item)
             for apert in apert_list:
-                aperture =  collim.Aperture()
-                
+                aperture =  Aperture()
                 _store_float('distance', apert, 'distance', aperture)    
                 _store_float('size/x', apert, 'size.x', aperture)    
@@ -426,10 +425,25 @@
         data_info.dx = dx
         data_info.dy = dy
+        
+        data_conv_q = None
+        data_conv_i = None
+        
+        if has_converter == True and data_info.x_unit != '1/A':
+            data_conv_q = Converter('1/A')
+            # Test it
+            data_conv_q(1.0, output.Q_unit)
+            
+        if has_converter == True and data_info.y_unit != '1/cm':
+            data_conv_i = Converter('1/cm')
+            # Test it
+            data_conv_i(1.0, output.I_unit)            
+    
+        
         if data_conv_q is not None:
-            data_info.xaxis("\\rm{Q}", output.x_unit)
+            data_info.xaxis("\\rm{Q}", data_info.x_unit)
         else:
             data_info.xaxis("\\rm{Q}", 'A^{-1}')
         if data_conv_i is not None:
-            data_info.yaxis("\\{I(Q)}", output.y_unit)
+            data_info.yaxis("\\{I(Q)}", data_info.y_unit)
         else:
             data_info.yaxis("\\rm{I(Q)}","cm^{-1}")
Index: DataLoader/test/cansas1d.xml
===================================================================
--- DataLoader/test/cansas1d.xml	(revision 8780e9a7e98f59c06b1819f1e068b7e84f496efc)
+++ DataLoader/test/cansas1d.xml	(revision d6513cd9709cf6e63b2f3e123ce200fc9081fecd)
@@ -66,4 +66,5 @@
 			</SASsource>
 			<SAScollimation>
+				<length unit='mm'> 123.0</length>
 				<aperture name="source" type="radius">
 					<size>
Index: DataLoader/test/utest_abs_reader.py
===================================================================
--- DataLoader/test/utest_abs_reader.py	(revision b99ac22702d9634282d084e8a7da3aa3064bccf2)
+++ DataLoader/test/utest_abs_reader.py	(revision d6513cd9709cf6e63b2f3e123ce200fc9081fecd)
@@ -134,5 +134,77 @@
         self.data = Loader().load("cansas1d.xml")
  
-        
+    def test_checkdata(self):
+        """
+            Check the data content to see whether 
+            it matches the specific file we loaded.
+            Check the units too to see whether the
+            Data1D defaults changed. Otherwise the
+            tests won't pass
+        """
+        self.assertEqual(self.data.filename, "cansas1d.xml")
+        self.assertEqual(self.data.run, "1234")
+        
+        # Sample info
+        self.assertEqual(self.data.sample.ID, "SI600-new-long")
+        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.assertEqual(self.data.sample.temperature_unit, 'C')
+        self.assertEqual(self.data.sample.temperature, 0)
+
+        self.assertEqual(self.data.sample.position_unit, 'mm')
+        self.assertEqual(self.data.sample.position.x, 10)
+        self.assertEqual(self.data.sample.position.y, 0)
+
+        self.assertEqual(self.data.sample.orientation_unit, 'degree')
+        self.assertEqual(self.data.sample.orientation.x, 22.5)
+        self.assertEqual(self.data.sample.orientation.y, 0.02)
+
+        self.assertEqual(self.data.sample.details[0], "http://chemtools.chem.soton.ac.uk/projects/blog/blogs.php/bit_id/2720") 
+        self.assertEqual(self.data.sample.details[1], "Some text here") 
+        
+        # Instrument info
+        self.assertEqual(self.data.instrument, "TEST instrument")
+        
+        # Source
+        self.assertEqual(self.data.source.radiation, "neutron")
+        
+        self.assertEqual(self.data.source.beam_size_unit, "mm")
+        self.assertEqual(self.data.source.beam_size.x, 12)
+        self.assertEqual(self.data.source.beam_size.y, 12)
+        
+        self.assertEqual(self.data.source.beam_shape, "disc")
+        
+        self.assertEqual(self.data.source.wavelength_unit, "A")
+        self.assertEqual(self.data.source.wavelength, 6)
+        
+        self.assertEqual(self.data.source.wavelength_max_unit, "nm")
+        self.assertEqual(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.assertEqual(self.data.source.wavelength_spread_unit, "percent")
+        self.assertEqual(self.data.source.wavelength_spread, 14.3)
+        
+        # Collimation
+        _found1 = False
+        _found2 = False
+        self.assertEqual(self.data.collimation[0].length, 123.)
+        
+        for item in self.data.collimation[0].aperture:
+            self.assertEqual(item.size_unit,'mm')
+            self.assertEqual(item.distance_unit,'mm')
+            
+            if item.size.x==50 \
+                and item.distance==11000.:
+                _found1 = True
+            elif item.size.x==1.0:
+                _found2 = True
+                
+        if _found1==False or _found2==False:
+            print item.distance
+            raise RuntimeError, "Could not find all data %s %s" % (_found1, _found2) 
+            
         
         
