diff --git a/bin/test_pass_though.py b/bin/test_pass_though.py
new file mode 100644
index 0000000000000000000000000000000000000000..3a8c020228b49bd1cccb137632c57d6a19eacb6b
--- /dev/null
+++ b/bin/test_pass_though.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Thu Dec 12 15:29:19 2013
+
+Takes a set of Finesse commands as input, parses it and outputs it again.
+Used to check whether Finesse components, detectors, etc. are properly
+reproducing the parameters they are given.
+
+@author: Sean Leavey
+"""
+
+from pykat import finesse
+
+code = """
+l l1 1 0 0 n1
+s s1 10 1 n1 n2
+m m1 1 0 0 n2 n3
+gr4 grating 1500 n4 n5 n6 n7
+
+pd refl n2
+
+xaxis m1 r_ap lin 0.1e-3 2e-3 10
+"""
+
+kat = finesse.kat()
+kat.parseCommands(code)
+
+scriptList = kat.generateKatScript()
+
+print ''.join(scriptList)
\ No newline at end of file
diff --git a/pykat/components.py b/pykat/components.py
index 4ad2983cdcb869913a62d07594269a26146f271a..d914b06dcb81b633e4eaebde115c89de63dfaf89 100644
--- a/pykat/components.py
+++ b/pykat/components.py
@@ -479,19 +479,40 @@ class grating(Component):
         values.pop(0) # remove initial value
         
         if n == 2:
+            if len(values) != 4:
+                raise exceptions.RuntimeError("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")
+            
             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")
+            
             return grating(values[0], values[2], values[3], values[4], values[5], n, values[1])
         
     def getFinesseText(self):
+        rtn = []
+        
         if self.__n == 2:
-            return 'gr{0} {1} {2} {3} {4}'.format(self.__n, self.name, self.__d, self.nodes[0].name, self.nodes[1].name)            
+            rtn.append('gr{0} {1} {2} {3} {4}'.format(self.__n, self.name, self.__d, self.nodes[0].name, self.nodes[1].name))
         elif self.__n == 3:
-            return 'gr{0} {1} {2} {3} {4} {5}'.format(self.__n, self.name, self.__d, self.nodes[0].name, self.nodes[1].name, self.nodes[2].name)
+            rtn.append('gr{0} {1} {2} {3} {4} {5}'.format(self.__n, self.name, self.__d, self.nodes[0].name, self.nodes[1].name, self.nodes[2].name))
         else:
-            return 'gr{0} {1} {2} {3} {4}'.format(self.__n, self.name, self.__d, self.nodes[0].name, self.nodes[1].name, self.nodes[2].name, self.nodes[3].name)
+            rtn.append('gr{0} {1} {2} {3} {4} {5} {6}'.format(self.__n, self.name, self.__d, self.nodes[0].name, self.nodes[1].name, self.nodes[2].name, self.nodes[3].name))
+        
+        if self.eta_0 != 0: rtn.append("attr {0} eta_0 {1}".format(self.name,self.__eta_0))
+        if self.eta_1 != 0: rtn.append("attr {0} eta_1 {1}".format(self.name,self.__eta_1))
+        if self.eta_2 != 0: rtn.append("attr {0} eta_2 {1}".format(self.name,self.__eta_2))
+        if self.eta_3 != 0: rtn.append("attr {0} eta_3 {1}".format(self.name,self.__eta_3))
+        if self.rho_0 != 0: rtn.append("attr {0} rho_0 {1}".format(self.name,self.__rho_0))
+        if self.alpha != 0: rtn.append("attr {0} alpha {1}".format(self.name,self.__alpha))
+        # TODO: implement Rcx, Rcy, Rc
+        
+        return rtn
        
     def getQGraphicsItem(self):
         if self._QItem == None: