diff --git a/pykat/SIfloat.py b/pykat/SIfloat.py
index cac016f0623c82601cb7b6c072cb0e3c5b56b010..aa65c9ec2313f68deb721d7508182e61368c5937 100644
--- a/pykat/SIfloat.py
+++ b/pykat/SIfloat.py
@@ -1,3 +1,8 @@
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+
 import os
 import re
 import pykat.exceptions as pkex
diff --git a/pykat/colours.py b/pykat/colours.py
index cc65b2f77c41b757c5de407ecd8b7f8ca6315b86..94291cd35ad1ff93bbaac365fe6ca089161ecea6 100644
--- a/pykat/colours.py
+++ b/pykat/colours.py
@@ -4,6 +4,10 @@ Created on Mon Jan 28 10:43:18 2013
 
 @author: Daniel
 """
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
 
 class colours:
     HEADER = '\033[95m'
@@ -19,4 +23,4 @@ class colours:
         self.OKGREEN = ''
         self.WARNING = ''
         self.FAIL = ''
-        self.ENDC = ''
\ No newline at end of file
+        self.ENDC = ''
diff --git a/pykat/commands.py b/pykat/commands.py
index 6f0f1c89dfb111a55d78e3efcda25923b305dc4a..e770408a801d4fbc70c57be0870fc5d7e7dbbc66 100644
--- a/pykat/commands.py
+++ b/pykat/commands.py
@@ -4,11 +4,19 @@ Created on Mon Jan 28 11:58:09 2013
 
 @author: Daniel
 """
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+
 import numpy
 from numpy import min,max
-import exceptions
-from components import *
-from structs import *
+import pykat.external.six as six
+if six.PY2:
+	import exceptions
+from pykat.components import *
+from pykat.structs import *
+
 from pykat.param import Param, putter
 import pykat.exceptions as pkex
 from collections import namedtuple
diff --git a/pykat/components.py b/pykat/components.py
index fa2e91503c8a55ace8be17ce009c270095c15354..de6b365aa9632589b31f9ebde1fedb82abbf7d3e 100644
--- a/pykat/components.py
+++ b/pykat/components.py
@@ -4,7 +4,18 @@ Created on Mon Jan 28 11:10:01 2013
 
 @author: Daniel
 """
-import exceptions
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+
+from pykat import USE_GUI, HAS_OPTIVIS, NoGUIException
+
+import pykat.external.six as six
+
+if six.PY2:
+	import exceptions
+
 import pykat.exceptions as pkex
 import pykat
 from pykat.node_network import *
diff --git a/pykat/detectors.py b/pykat/detectors.py
index 1726b30f8b97f59ed27f9e002c06dac41c95179d..31bf62cb7e9fbe176c7d7b62d109bf4c58bdd336 100644
--- a/pykat/detectors.py
+++ b/pykat/detectors.py
@@ -4,14 +4,24 @@ Created on Fri Feb 01 0split()9:09:10 2013
 
 @author: Daniel
 """
-import exceptions
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+
+import pykat.external.six as six
+if six.PY2:
+	import exceptions
+
 import abc
 from pykat.node_network import *
 from pykat.param import Param
 from pykat.SIfloat import SIfloat
 
-import collections
+import pykat.external.six as six
 import pykat.exceptions as pkex
+
+import collections
 import warnings
 import copy
 
@@ -60,7 +70,7 @@ class BaseDetector(object) :
                         self._alternate_beam.append(False)
                         
                     self._requested_nodes.append(n)
-            elif isinstance(nodes, str):
+            elif isinstance(nodes, six.string_types):
                 # if we don't have a collection
                 if nodes[-1]=='*':
                     self._alternate_beam.append(True)
@@ -146,7 +156,7 @@ class BaseDetector(object) :
     
     def _getScaleCmds(self, rtn):
         if self.scale != None:
-            if isinstance(self.scale, str):
+            if isinstance(self.scale, six.string_types):
                 rtn.append("scale {1} {0}".format(self.name, self.scale))
             elif isinstance(self.scale, (list, tuple)):
                 for s in self.scale:
@@ -372,9 +382,11 @@ class pd(Detector1):
         
         fs = [self.__f1, self.__f2, self.__f3, self.__f4, self.__f5]
         ps = [self.__phi1, self.__phi2, self.__phi3, self.__phi4, self.__phi5]
-        
+
+        print("-------------------------------------------------------")
         for i in range(num_demods):
             f = 'f{0}'.format(i+1)
+            print("i {0} fs {1} f {2} keys {3}".format(i,len(fs),f, kwargs.keys()))
             
             if f in kwargs:
                 fs[i].value = kwargs[f]
@@ -434,7 +446,7 @@ class pd(Detector1):
             # check if we are setting no phase that this is only on the last
             # demodulation phase.
             raise pkex.BasePyKatException("Only last demodulation phase can be set to None")
-        elif isinstance(value, str) and not isinstance(value,float) and value.lower() != "max":
+        elif isinstance(value, six.string_types) and not isinstance(value,float) and value.lower() != "max":
             raise pkex.BasePyKatException("Demodulation phase can only be set to a 'max' or a number (or None if the last demodulation phase)")
             
         setattr(self, '_'+ self.__class__.__name__ +'__phi' + num, value)
@@ -878,4 +890,4 @@ class qhd(Detector2):
             for p in self._params:
                 rtn.extend(p.getFinesseText())
             
-        return rtn
\ No newline at end of file
+        return rtn
diff --git a/pykat/exceptions.py b/pykat/exceptions.py
index c1f620be084d1e200c3f0c14a8edafc77e565ccf..1382809d9777529702e0030a1e9e78e30eba5fce 100644
--- a/pykat/exceptions.py
+++ b/pykat/exceptions.py
@@ -1,4 +1,11 @@
-import exceptions
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+
+import pykat.external.six as six
+if six.PY2:
+	import exceptions
 import os
 
 class BasePyKatException(Exception):
diff --git a/pykat/finesse.py b/pykat/finesse.py
index 573fcccac792797e1c5f997fe247ccc84fdd69a3..0551f59a899608a7aebc963782a756a9a248037c 100644
--- a/pykat/finesse.py
+++ b/pykat/finesse.py
@@ -23,6 +23,11 @@ Contact at ddb@star.sr.bham.ac.uk
 
 @author: Daniel Brown
 """
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+
 import sys
 import os
 import subprocess
@@ -50,6 +55,8 @@ from pykat.commands import Command, xaxis
 from pykat.SIfloat import *
 from pykat.param import Param, AttrParam
 
+import pykat.external.six as six
+
 import pykat.exceptions as pkex
 
 from pykat import USE_GUI, NoGUIException
@@ -737,7 +744,7 @@ class kat(object):
                         # manually add the line to the block contents
                         self.__blocks[self.__currentTag].contents.append(line) 
                 
-                    if obj != None and not isinstance(obj, str):
+                    if obj != None and not isinstance(obj, six.string_types):
                         if self.hasNamedObject(obj.name):
                             getattr(self, obj.name).remove()
                             print "Removed existing object '{0}' of type {1} to add line '{2}'".format(obj.name, obj.__class__, line)
@@ -1049,13 +1056,14 @@ class kat(object):
                 
                 r.xlabel = hdr[0]
                 r.ylabel = hdr[1]
-                r.zlabels = map(str.strip, hdr[2:])
-                         
+                r.zlabels = [s.strip for s in hdr[2:]]
+                #r.zlabels = map(str.strip, hdr[2:])
             else:
                 [r.x,r.y,hdr] = self.readOutFile(outfile)
             
                 r.xlabel = hdr[0]
-                r.ylabels = map(str.strip, hdr[1:])
+                r.ylabels = [s.strip for s in hdr[1:]]
+                #r.ylabels = map(str.strip, hdr[1:]) // replaced 090415 adf 
                     
             if save_kat:
                 if kat_name == None:
@@ -1271,7 +1279,7 @@ class kat(object):
         for key in self.__blocks:
             objs = self.__blocks[key].contents
             for obj in objs:
-                if isinstance(obj, str):
+                if isinstance(obj,  six.string_types):
                     if fragment in obj:
                         print "  ** removing line '{0}'".format(obj)
                         objs.remove(obj)
@@ -1284,13 +1292,33 @@ class kat(object):
         pykat object that create similar commands so becareful.
         """
         self.__blocks[block].contents.append(line)
+        
+    def printExtraLines(self):
+        """
+        This prints all the Finesse commands that have not been parsed
+        into pykat objects. This should be used for reference only. To
+        add or remove extra lines use the addLine and removeLine methods.
+        """
+        found = False
+        
+        for key in self.__blocks:
+            objs = self.__blocks[key].contents
+            for obj in objs:
+                if isinstance(obj, six.string_types):
+                    print(obj)
+                    found = True
+        
+        if not found:
+            print("No extra lines were found")
+        
+>>>>>>> starting cnversion to pykat2 and 3 compatibility
                         
     def generateKatScript(self) :
         """ Generates the kat file which can then be run """
 
         def writeBlock():
             for obj in objs:
-                if isinstance(obj, str):
+                if isinstance(obj, six.string_types):
                     out.append(obj + '\n')
                     
                 elif isinstance(obj, Component) or isinstance(obj, Detector) or isinstance(obj, Command):
@@ -1364,7 +1392,7 @@ class kat(object):
 
                     out.append("vacuum {0}\n".format(" ".join(objs)))
                                         
-            elif isinstance(self.vacuum, str):
+            elif isinstance(self.vacuum, six.string_types):
                 out.append("vacuum {0}\n".format(self.vacuum))
             else:
                 pkex.BasePyKatException("Couldn't understand vacuum input list")
diff --git a/pykat/node_network.py b/pykat/node_network.py
index d35f45f7723130e0cc8502145049304833ca86f7..ae543e2444da93cdaf64948cec36eb9c1c7a9744 100644
--- a/pykat/node_network.py
+++ b/pykat/node_network.py
@@ -4,6 +4,10 @@ Created on Sun Jan 27 10:02:41 2013
 
 @author: Daniel
 """
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
 
 from pykat import USE_GUI, NoGUIException
 
diff --git a/pykat/param.py b/pykat/param.py
index 31fe7c36839d30d32e0db1946062aa94ceda8d8e..785092a41672f0876480c1008bf25bb034647647 100644
--- a/pykat/param.py
+++ b/pykat/param.py
@@ -1,3 +1,8 @@
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+
 import abc
 import pykat.exceptions as pkex
 import weakref
diff --git a/pykat/plotting.py b/pykat/plotting.py
index 10e6cc1a7ba9a1662c2743962778d1fe06e56bcf..7abd88cfdc0eeb6ef4a60a561b08202b21bb9ebf 100644
--- a/pykat/plotting.py
+++ b/pykat/plotting.py
@@ -4,6 +4,10 @@ Created on Sat Feb 02 10:35:04 2013
 
 @author: Daniel
 """
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
 
 import numpy as np
 import matplotlib
@@ -80,4 +84,4 @@ class pp():
     # for Palatino and other serif fonts use:
     #font = {'family':'serif','serif':['Palatino']}
     SCREEN_TITLE = True # show title on screen?
-    PRINT_TITLE = False # show title in saved file?
\ No newline at end of file
+    PRINT_TITLE = False # show title in saved file?
diff --git a/pykat/profiling.py b/pykat/profiling.py
index c6302a2f3d9e8b857fd30ce9f5c96083af92bdf2..4d1a7b9fdc9ae9a6fc761634ea7813a95b411bff 100644
--- a/pykat/profiling.py
+++ b/pykat/profiling.py
@@ -1,3 +1,8 @@
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+
 import numpy as np
 import pylab as pl
 
@@ -24,4 +29,4 @@ def plotReducedPerformanceData(perfdata, ordered=False):
     pl.xlabel("Time [s]")
     pl.title("Timing data for FINESSE")
     
-    return labels, times, fig
\ No newline at end of file
+    return labels, times, fig
diff --git a/pykat/structs.py b/pykat/structs.py
index d8838afbf36f703861cf719d2926e953707e75bd..90c5fb844fa656bd4ad7e59bcc4caed3c0b213ce 100644
--- a/pykat/structs.py
+++ b/pykat/structs.py
@@ -4,7 +4,11 @@ Created on Mon Jan 28 12:00:29 2013
 
 @author: Daniel
 """
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
 
 class Scale:
     linear = 'lin'
-    logarithmic = 'log'
\ No newline at end of file
+    logarithmic = 'log'