diff --git a/bin/test_aperture.py b/bin/test_aperture.py
index a272bd815dc874fd8f9e5d68ff683a3003aacc1a..2824b4e93ca5e8d8e46e8f4bd0a254263a6dc78c 100644
--- a/bin/test_aperture.py
+++ b/bin/test_aperture.py
@@ -17,7 +17,7 @@ xaxis m1 r_ap lin 0.1e-3 2e-3 10
 
 kat = finesse.kat(kat_code = code)
 
-maxtem = np.arange(0, 3, 2)
+maxtem = np.arange(0, 1, 2)
 
 for tem in maxtem:
     print "Calculating maxtem ",tem,"..."
diff --git a/bin/test_parser.py b/bin/test_parser.py
index d1485db317b90fee55c6b65c40a4513f0096a113..159e751a8c1690db8c7e46d2fbe1133504a02b04 100644
--- a/bin/test_parser.py
+++ b/bin/test_parser.py
@@ -14,6 +14,7 @@ ad ad1 0 n2
 
 kat = finesse.kat(kat_code = code)
 
+kat.add(xaxis("lin", [0, 360], kat.m2, kat.m2.phi, 1000))
 kat.add(xaxis("lin", [0, 360], kat.m2, kat.m2.phi, 1000))
 
 r = kat.run(printerr=1)
diff --git a/bin/test_plot.py b/bin/test_plot.py
index efb42c6be9b0b61a9c1534da0f3d4cd41a3111b8..bc6440cdd3a8268b0c24afd3f979b15bf76bd9b7 100644
--- a/bin/test_plot.py
+++ b/bin/test_plot.py
@@ -24,7 +24,7 @@ kat.add(photodiode('pd_cav','n4'))
 kat.add(photodiode('pd_ref','n2'))
 kat.add(photodiode('pd_trs','n5'))
 
-kat.add(xaxis(Scale.linear, [0, 360], kat.m2, kat.m2.phi, 100))
+kat.add(xaxis("lin", [0, 360], kat.m2, kat.m2.phi, 100))
 
 kat.m1.Rcx = -1000.0
 kat.m1.Rcy = -1000.0
diff --git a/pykat/commands.py b/pykat/commands.py
index bf37eacd1e5dad5a1bbcd192928556916254b078..8737e57933f5a51ad55907507779c7e70b35310b 100644
--- a/pykat/commands.py
+++ b/pykat/commands.py
@@ -15,6 +15,10 @@ class Command(object):
         """ Base class for individual finesse optical components """    
         raise NotImplementedError("This function is not implemented")
     
+    @staticmethod
+    def parseFinesseText(text):    
+        raise NotImplementedError("This function is not implemented")
+    
     def _on_kat_add(self, kat):
         """
         Called when this component has been added to a kat object
@@ -53,12 +57,12 @@ class xaxis(Command):
         if numpy.size(limits) != 2 :
             raise exceptions.ValueError("limits input should be a 2x1 vector of limits for the xaxis")
             
-        self.limits = limits
+        self.limits = numpy.array(limits).astype(float)
         
         if steps <= 0 :
             raise exceptions.ValueError("steps value should be > 0")            
             
-        self.steps = steps
+        self.steps = int(steps)
         
         # if entered component is a string then just store and use that
         if isinstance(comp, str):
@@ -74,6 +78,20 @@ class xaxis(Command):
             raise exceptions.ValueError("param argument is not of type Param")
         else:
             self.__param = param
+    
+    @staticmethod
+    def parseFinesseText(text):
+        values = text.split(" ")
+        
+        if values[0] != "xaxis" and values[0] != "xaxis*" and values[0] != "x2axis" and values[0] != "x2axis*":
+            raise exceptions.RuntimeError("'{0}' not a valid Finesse xaxis command".format(text))
+
+        values.pop(0) # remove initial value
+        
+        if len(values) != 6:
+            raise exceptions.RuntimeError("xaxis Finesse code format incorrect '{0}'".format(text))
+
+        return xaxis(values[2], [values[3], values[4]], values[0], values[1], values[5])
         
     def getFinesseText(self):
         # store either the component name of the string provided
diff --git a/pykat/components.py b/pykat/components.py
index 3f0dd9fe177ba5c717b991b52bb2bb3c9fc140b2..c8c578b49b970cc6bad7e1259678ca905cd93669 100644
--- a/pykat/components.py
+++ b/pykat/components.py
@@ -20,11 +20,6 @@ class Component(object) :
         self.__nodes = []
         self._requested_node_names = []
         self._kat = None
-        
-        #if not isinstance(kat,pykat.finesse.kat):
-        #    raise exceptions.ValueError("kat argument is not a pykat.finesse.kat object")
-            
-        #kat.add(self)
     
     def _on_kat_add(self, kat):
         """
@@ -87,48 +82,48 @@ class mirror(Component):
         self._requested_node_names.append(node1)
         self._requested_node_names.append(node2)
         
-        self.__R = R
-        self.__T = T
-        self.__phi = phi
-        self.__Rcx = Rcx
-        self.__Rcy = Rcy
-        self.__xbeta = xbeta
-        self.__ybeta = ybeta
+        self.__R = float(R)
+        self.__T = float(T)
+        self.__phi = float(phi)
+        self.__Rcx = float(Rcx)
+        self.__Rcy = float(Rcy)
+        self.__xbeta = float(xbeta)
+        self.__ybeta = float(ybeta)
             
     @property
-    def R(self):
-        return Param('R',self.__R)
+    def R(self): return Param('R', self.__R)
     @R.setter
-    def R(self,value):
-        self.__R = value
+    def R(self,value): self.__R = float(value)
+    
     @property
     def T(self): return Param('T', self.__T)
     @T.setter
-    def T(self,value): self.__T = value
+    def T(self,value): self.__T = float(value)
         
     @property
     def phi(self): return Param('phi', self.__phi)
     @phi.setter
-    def phi(self,value): self.__phi = value
+    def phi(self,value): self.__phi = float(value)
     
     @property
     def Rcx(self): return Param('Rcx', self.__Rcx)
     @Rcx.setter
-    def Rcx(self,value): self.__Rcx = value
+    def Rcx(self,value): self.__Rcx = float(value)
+    
     @property
     def Rcy(self): return Param('Rcy', self.__Rcy)
     @Rcy.setter
-    def Rcy(self,value): self.__Rcy = value
+    def Rcy(self,value): self.__Rcy = float(value)
     
     
     @property
     def xbeta(self): return Param('xbeta', self.__xbeta)
     @xbeta.setter
-    def xbeta(self,value): self.__xbeta = value
+    def xbeta(self,value): self.__xbeta = float(value)
     @property
     def ybeta(self): return Param('ybeta', self.__ybeta)
     @ybeta.setter
-    def ybeta(self,value): self.__ybeta = value
+    def ybeta(self,value): self.__ybeta = float(value)
     
     @property
     def Rc(self):
@@ -139,8 +134,8 @@ class mirror(Component):
     
     @Rc.setter
     def Rc(self,value):
-        self.Rcx = value
-        self.Rcy = value
+        self.Rcx = float(value)
+        self.Rcy = float(value)
     
     @staticmethod
     def parseFinesseText(text):
@@ -178,7 +173,7 @@ class mirror(Component):
         if self._svgItem == None:
             nodes = self.getNodes()
             self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/mirror_flat.svg",self
-                                                ,[(-4,15,self.nodes[0]),(14,15,self.nodes[1])])
+                                                ,[(-4,15,nodes[0]),(14,15,nodes[1])])
         return self._svgItem
    
    
@@ -189,18 +184,18 @@ class space(Component):
         self._requested_node_names.append(node1)
         self._requested_node_names.append(node2)
         
-        self.__L = L
-        self.__n = n
+        self.__L = float(L)
+        self.__n = float(n)
         self._QItem = None
         
     @property
     def L(self): return Param('L', self.__L)
     @L.setter
-    def L(self,value): self.__L = value
+    def L(self,value): self.__L = float(value)
     @property
     def n(self): return Param('n', self.__n)
     @n.setter
-    def n(self,value): self.__n = value
+    def n(self,value): self.__n = float(value)
     
     @staticmethod
     def parseFinesseText(text):
@@ -253,24 +248,24 @@ class laser(Component):
         
         self._requested_node_names.append(node)
         
-        self.__power = P
-        self.__f_offset = f_offset
-        self.__phase = phase
+        self.__power = float(P)
+        self.__f_offset = float(f_offset)
+        self.__phase = float(phase)
         
     @property
     def power(self): return Param('P', self.__power)
     @power.setter
-    def power(self,value): self.__power = value
+    def power(self,value): self.__power = float(value)
     
     @property
     def f_offset(self): return Param('f', self.__f_offset)
     @f_offset.setter
-    def f_offset(self,value): self.__f_offset = value
+    def f_offset(self,value): self.__f_offset = float(value)
     
     @property
     def phase(self): return Param('phase', self.__phase)
     @phase.setter
-    def phase(self,value): self.__phase = value
+    def phase(self,value): self.__phase = float(value)
     
     @staticmethod
     def parseFinesseText(text):
@@ -295,6 +290,7 @@ class laser(Component):
          
     def getQGraphicsItem(self):
         if self._svgItem == None:
+            nodes = self.getNodes()
             self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/laser.svg",
                                                    self,[(65,25,nodes[0])])
             
diff --git a/pykat/detectors.py b/pykat/detectors.py
index dadcc9a7226737fafe793d8b4eebb8842a16f690..f28228b600ab93ed5850b3834b0a2f376738df1f 100644
--- a/pykat/detectors.py
+++ b/pykat/detectors.py
@@ -28,7 +28,6 @@ class Detector(object) :
 
     def _on_kat_add(self, kat):
         self._node = kat.nodes.createNode(self.__requested_node)
-        #self.__node.connect(self)
     
     @staticmethod
     def parseFinesseText(text):    
diff --git a/pykat/finesse.py b/pykat/finesse.py
index f44d3657b3ae5481259c3e3061d8ff82503b0275..3124134cc49a657aa7715f9585c8a511207d837c 100644
--- a/pykat/finesse.py
+++ b/pykat/finesse.py
@@ -144,6 +144,8 @@ class kat(object):
                     self.add(pykat.components.space.parseFinesseText(line))
                 elif(first == "l"):
                     self.add(pykat.components.laser.parseFinesseText(line))
+                elif(first == "xaxis" or first == "x2axis" or first == "xaxis*" or first == "x2axis*"):
+                    self.add(pykat.commands.xaxis.parseFinesseText(line))
                 else:
                     print "Could not parse `{0}`".format(line)
                     self.__extra_lines.append(line + "\n")