diff --git a/pykat/gw_detectors/ifo.py b/pykat/gw_detectors/ifo.py
index ffc01f574456fc7a4c2718422315ca14fa08dcd3..6cd77428decd7076a12ce73ea4c6d025976ba4c3 100644
--- a/pykat/gw_detectors/ifo.py
+++ b/pykat/gw_detectors/ifo.py
@@ -9,6 +9,7 @@ import copy
 import warnings
 import cmath
 from pykat import finesse
+from pykat.finesse import BlockedKatFile
 import pykat.components
 import pykat.exceptions as pkex
 import pykat.external.peakdetect as peak
@@ -48,13 +49,16 @@ class aLIGO(object):
         self.kat.verbose=verbose
         self._data_path=pkg_resources.resource_filename('pykat.gw_detectors','finesse_files/')
 
+        self.rawBlocks = BlockedKatFile()
         if katfile:
             self.kat.loadKatFile(katfile)
+            self.rawBlocks.read(katfile)
         else:
             if _name not in names: # TODO different files not yet implemented
                 printf("aLIGO name `{}' not recognised, must be 'default', 'LLO' or 'LHO'",_name)
             #print(data_path)
             self.kat.loadKatFile(self._data_path+"aLIGO.kat")
+            self.rawBlocks.read(self._data_path+"aLIGO.kat")
 
         # ----------------------------------------------------------------------
         # set variables to zero first
@@ -481,30 +485,22 @@ put f1m f $mx1
         return self.DCoffset
 
     def generate_tuning_block(self, kat):
-        code1 = """
-%%% FTblock tunings
-###########################################################################"""
-        code2 = """
+        code1 = """###########################################################################
 const phi_ITMX {:.8}
 const phi_ITMY {:.8}
 const phi_ETMX {:.8}
 const phi_ETMY {:.8}""".format(float(kat.ITMX.phi), float(kat.ITMY.phi), float(kat.ETMX.phi),float(kat.ETMY.phi))
 
-        code3 = """
+        code2 = """
 const phi_BS   {:.8}
 const phi_PRM  {:.8}
-const phi_SRM  {:.8}""".format(float(kat.BS.phi), float(kat.PRM.phi), float(kat.SRM.phi))
+const phi_SRM  {:.8}
+###########################################################################""".format(float(kat.BS.phi), float(kat.PRM.phi), float(kat.SRM.phi))
 
-        code4 = """
-###########################################################################
-%%% FTend tuning"""
-        return "".join([code1, code2, code3, code4])
+        return "".join([code1, code2])
 
     def generate_errsig_block(self, kat, noplot=False):
-        code1 = """
-%%% FTblock errsigs
-###########################################################################
-"""
+        code1 = "###########################################################################\n" 
         sigDARM = self.DARM.signal(kat)
         sigCARM = self.CARM.signal(kat)
         sigPRCL = self.PRCL.signal(kat)
@@ -525,10 +521,7 @@ noplot {}
 noplot {}
 noplot {}
 noplot {}""".format(nameDARM, nameCARM, namePRCL, nameMICH, nameSRCL)
-
-        code4 = """
-###########################################################################
-%%% FTend errsigs"""
+        code4="\n###########################################################################"
         return "".join([code1, code2, code3, code4])
 
             
@@ -556,7 +549,7 @@ noplot {}""".format(nameDARM, nameCARM, namePRCL, nameMICH, nameSRCL)
             gainMICH = round_to_n(gainsAdjustment[3] * factor / ogMICH, 2) # manually tuned
             gainSRCL = round_to_n(gainsAdjustment[4] * factor / ogSRCL, 2) # gain hirarchy with MICH
             gains = [ gainDARM, gainCARM, gainPRCL, gainMICH, gainSRCL]
-        self.lockGains = gains.copy()
+        self.lockGains = copy.deepcopy(gains)
         
         # rms: loop accuracies in meters (manually tuned for the loops to work
         # with the default file)
@@ -572,7 +565,7 @@ noplot {}""".format(nameDARM, nameCARM, namePRCL, nameMICH, nameSRCL)
             accMICH = round_to_n(np.abs(factor * rms[3] * ogMICH),2)
             accSRCL = round_to_n(np.abs(factor * rms[4] * ogSRCL),2) 
             accuracies = [accDARM, accCARM, accPRCL, accMICH, accSRCL]
-        self.lockAccuracies = accuracies.copy()
+        self.lockAccuracies = copy.deepcopy(accuracies)
 
 
         nameDARM = self.DARM.signal_name(kat)
@@ -617,9 +610,7 @@ noplot {}""".format(nameDARM, nameCARM, namePRCL, nameMICH, nameSRCL)
     def generate_lock_block(self, kat, verbose=False):
         if self.lockNames == None or self.lockAccuracies == None or self.lockGains == None:
             raise pkex.BasePyKatException("run gerate_locks before generate_lock_block")            
-        code1 = """
-%%% FTblock locks
-###########################################################################
+        code1 = """###########################################################################
 set AS_f2_I_re {} re
 set CARM_err {} re
 set PRCL_err {} re
@@ -656,7 +647,7 @@ noplot CARM_lock
 noplot ETMX_lock
 noplot ETMY_lock
 ###########################################################################
-%%% FTend locks"""
+"""
         if verbose:
             print(" .--------------------------------------------------.")
             print(" | Lock commands used:                              |")