diff --git a/bin/test_plot.py b/bin/test_plot.py
index cc54c7cb781272bd45698c1f6f40eb41a4d07138..230d6eb3854b283baa413bd2ef04d3f5a7dac2b5 100644
--- a/bin/test_plot.py
+++ b/bin/test_plot.py
@@ -8,7 +8,7 @@ import numpy as np
 import pylab as pl
 
 code = """
-l l1 1 0 0 n1
+l l1 1 0 0 n1 ### test
 s s1 10 1 n1 n2
 m m1 0.5 0.5 0 n2 n3
 s s2 10 1 n3 n4
@@ -29,7 +29,7 @@ kat.add(photodiode('pd_trs','n5'))
 kat.add(photodiode('pd_cav','n4', num_demods=1, demods=[1]))
 
 
-kat.add(xaxis("lin", [0, 360], kat.m2, kat.m2.phi, 100))
+kat.add(xaxis("lin", [0, 360], kat.m2.phi, 100))
 
 kat.m1.Rcx = -1000.0
 kat.m1.Rcy = -1000.0
diff --git a/pykat/components.py b/pykat/components.py
index ccfff540d7b11f6ce8528553d1d06787b0c2e401..67618085c6abb83ffc4f0a58f49ddc67ca5aa08b 100644
--- a/pykat/components.py
+++ b/pykat/components.py
@@ -17,6 +17,8 @@ from pykat.gui.graphics import *
 from pykat.SIfloat import *
 from pykat.param import Param, AttrParam
 
+import pykat.exceptions as pkex
+
 next_component_id = 1
 
 class NodeGaussSetter(object):
@@ -235,10 +237,10 @@ class mirror(AbstractMirrorComponent):
         values = text.split(" ")
 
         if values[0] != "m" and values[0] != "m1" and values[0] != "m2":
-            raise exceptions.RuntimeError("'{0}' not a valid Finesse mirror command".format(text))
+            raise pkex.BasePyKatException("'{0}' not a valid Finesse mirror command".format(text))
         
         if len(values) != 7:
-            raise exceptions.RuntimeError("Mirror Finesse code format incorrect '{0}'".format(text))
+            raise pkex.BasePyKatException("Mirror Finesse code format incorrect '{0}'".format(text))
 
         if len(values[0])==1:
             values.pop(0) # remove initial value
@@ -290,10 +292,10 @@ class beamSplitter(AbstractMirrorComponent):
         values = text.split(" ")
 
         if values[0] != "bs" and values[0] != "bs1" and values[0] != "bs2":
-            raise exceptions.RuntimeError("'{0}' not a valid Finesse beam splitter command".format(text))
+            raise pkex.BasePyKatException("'{0}' not a valid Finesse beam splitter command".format(text))
         
         if len(values) != 10:
-            raise exceptions.RuntimeError("Beam splitter Finesse code format incorrect '{0}'".format(text))
+            raise pkex.BasePyKatException("Beam splitter Finesse code format incorrect '{0}'".format(text))
 
         if len(values[0])==2:
             values.pop(0) # remove initial value
@@ -356,7 +358,7 @@ class space(Component):
         values = text.split(" ")
 
         if values[0] != "s":
-            raise exceptions.RuntimeError("'{0}' not a valid Finesse space command".format(text))
+            raise pkex.BasePyKatException("'{0}' not a valid Finesse space command".format(text))
 
         values.pop(0) # remove initial value
         
@@ -365,7 +367,7 @@ class space(Component):
         elif len(values) == 4:
             return space(values[0], values[2], values[3], values[1])
         else:
-            raise exceptions.RuntimeError("Space Finesse code format incorrect '{0}'".format(text))
+            raise pkex.BasePyKatException("Space Finesse code format incorrect '{0}'".format(text))
         
     def getFinesseText(self):
         rtn = []
@@ -397,16 +399,16 @@ class grating(Component):
             if node3 != None:
                 self._requested_node_names.append(node3)
             else:
-                raise exceptions.RuntimeError("Grating node 3 not specified")
+                raise pkex.BasePyKatException("Grating node 3 not specified")
 
         if n > 3:
             if node4 != None:
                 self._requested_node_names.append(node4)
             else:
-                raise exceptions.RuntimeError("Grating node 4 not specified")
+                raise pkex.BasePyKatException("Grating node 4 not specified")
 
         if n > 4 or n < 2:
-            raise exceptions.RuntimeError("Grating must have between 2 and 4 ports")
+            raise pkex.BasePyKatException("Grating must have between 2 and 4 ports")
         
         self.__n = n
         self.__d = Param("d", self, SIfloat(d))
@@ -422,7 +424,7 @@ class grating(Component):
     @n.setter
     def n(self, value):
         if value < 2 or value > 4:
-            raise exceptions.RuntimeError("Grating must have between 2 and 4 ports")
+            raise pkex.BasePyKatException("Grating must have between 2 and 4 ports")
         else:
             self.__n = value
     
@@ -466,11 +468,11 @@ class grating(Component):
         values = text.split(" ")
 
         if values[0][0 : 2] != "gr":
-            raise exceptions.RuntimeError("'{0}' not a valid Finesse grating command".format(text))
+            raise pkex.BasePyKatException("'{0}' not a valid Finesse grating command".format(text))
 
         if len(values[0]) > 2:
             if int(values[0][2]) > 4 or int(values[0][2]) < 2:
-                raise exceptions.RuntimeError("Grating must have between 2 and 4 ports")
+                raise pkex.BasePyKatException("Grating must have between 2 and 4 ports")
             else:
                 n = int(values[0][2])
         else:
@@ -480,17 +482,17 @@ class grating(Component):
         
         if n == 2:
             if len(values) != 4:
-                raise exceptions.RuntimeError("Two port grating must have 2 nodes defined")
+                raise pkex.BasePyKatException("Two port grating must have 2 nodes defined")
 
             return grating(values[0], values[2], values[3], None, None, n, values[1])
         elif n == 3:
             if len(values) != 5:
-                raise exceptions.RuntimeError("Three port grating must have 3 nodes defined")
+                raise pkex.BasePyKatException("Three port grating must have 3 nodes defined")
             
             return grating(values[0], values[2], values[3], values[4], None, n, values[1])
         else:
             if len(values) != 6:
-                raise exceptions.RuntimeError("Four port grating must have 4 nodes defined")
+                raise pkex.BasePyKatException("Four port grating must have 4 nodes defined")
             
             return grating(values[0], values[2], values[3], values[4], values[5], n, values[1])
         
@@ -534,14 +536,14 @@ class isolator(Component):
         values = text.split(" ")
 
         if values[0] != "isol":
-            raise exceptions.RuntimeError("'{0}' not a valid Finesse isolator command".format(text))
+            raise pkex.BasePyKatException("'{0}' not a valid Finesse isolator command".format(text))
 
         values.pop(0) # remove initial value
         
         if len(values) == 4:
             return isolator(values[0], values[2], values[3], values[1])
         else:
-            raise exceptions.RuntimeError("Isolator Finesse code format incorrect '{0}'".format(text))
+            raise pkex.BasePyKatException("Isolator Finesse code format incorrect '{0}'".format(text))
         
     def getFinesseText(self):
         rtn = ['isol {0} {1} {2} {3}'.format(self.name, self.S.value, self.nodes[0].name, self.nodes[1].name)]
@@ -576,14 +578,14 @@ class lens(Component):
         values = text.split(" ")
 
         if values[0] != "lens":
-            raise exceptions.RuntimeError("'{0}' not a valid Finesse lens command".format(text))
+            raise pkex.BasePyKatException("'{0}' not a valid Finesse lens command".format(text))
 
         values.pop(0) # remove initial value
         
         if len(values) == 4:
             return lens(values[0], values[2], values[3], values[1])
         else:
-            raise exceptions.RuntimeError("Lens Finesse code format incorrect '{0}'".format(text))
+            raise pkex.BasePyKatException("Lens Finesse code format incorrect '{0}'".format(text))
         
     def getFinesseText(self):
         rtn = ['lens {0} {1} {2} {3}'.format(self.name, self.f.value, self.nodes[0].name, self.nodes[1].name)]
@@ -651,7 +653,7 @@ class modulator(Component):
         v = text.split(" ")
 
         if v[0] != "mod":
-            raise exceptions.RuntimeError("'{0}' not a valid Finesse modulator command".format(text))
+            raise pkex.BasePyKatException("'{0}' not a valid Finesse modulator command".format(text))
 
         v.pop(0) # remove initial value
         
@@ -707,7 +709,7 @@ class laser(Component):
         values = text.split(" ")
 
         if values[0] != "l":
-            raise exceptions.RuntimeError("'{0}' not a valid Finesse laser command".format(text))
+            raise pkex.BasePyKatException("'{0}' not a valid Finesse laser command".format(text))
 
         values.pop(0) # remove initial value
         
diff --git a/pykat/finesse.py b/pykat/finesse.py
index 2126d1429fc86dac09cef1e7c41978964c9c4597..d98abb1a3357a5339ccd6e2d76b6a9d9d964a26d 100644
--- a/pykat/finesse.py
+++ b/pykat/finesse.py
@@ -377,8 +377,6 @@ class kat(object):
         blockComment = False
         
         commands=self.remove_comments(commands)
-        # convert block of strings to list of lines
-        commands = commands.split('\n')
         
         commands=self.processConstants(commands)
         
@@ -990,6 +988,10 @@ class kat(object):
         return getattr(self, '__comp_' + name)        
 
     def remove_comments(self, string):
+        """
+        This takes a raw Finesse code string and removes any comments
+        It returns a list of lines however, not a multiline string.
+        """
         pattern = r"(\".*?\"|\'.*?\'|%{3}[^\r\n]*$)|(/\*.*?\*/|%[^\r\n]*$|#[^\r\n]*$|//[^\r\n]*$)"
         # first group captures quoted strings (double or single)
         # second group captures comments (//single-line or /* multi-line */)
@@ -1001,7 +1003,23 @@ class kat(object):
                 return "" # so we will return empty to remove the comment
             else: # otherwise, we will return the 1st group
                 return match.group(1) # captured quoted-string
-        return regex.sub(_replacer, string)
+        
+        # remove any inline comments
+        string = regex.sub(_replacer, string)
+        
+        commands = []
+        
+        for line in string.split('\n'):
+            # add to a list all the positions of any inline comment markers
+            i = [line.find('#'), line.find('\\')]
+            i = filter(lambda a: a != -1, i)
+            
+            if len(i) == 0:
+                commands.append(line)
+            else:
+                commands.append(line[0:min(i)])
+            
+        return commands
 
 # printing pykat logo on first input
 kat.logo()