diff --git a/pykat/finesse.py b/pykat/finesse.py
index 8a244f3507cdd0d8116cf77796ca6c59de053dfd..76570ff1172173a6c2192de66b23b32f73e0ce83 100644
--- a/pykat/finesse.py
+++ b/pykat/finesse.py
@@ -30,6 +30,7 @@ import subprocess
 import tempfile
 import numpy as np
 import datetime
+import time
 import pickle
 import pykat
 import warnings
@@ -153,7 +154,8 @@ def f__lkat_trace_callback(lkat, trace_info, getCavities, getNodes, getSpaces):
                                              
 class katRun(object):
     def __init__(self):
-        self.runDateTime = datetime.datetime.now()
+        self.runtime = None
+        self.StartDateTime = datetime.datetime.now()
         self.x = None
         self.y = None
         self.xlabel = None
@@ -162,11 +164,12 @@ class katRun(object):
         self.katVersion = None
         self.yaxis = None
         
-    def plot(self):
+    def plot(self, logy=False):
         import pylab
         
         pylab.plot(self.x, self.y)
-        pylab.legend(self.ylabels,0)
+            
+        pylab.legend(self.ylabels, 0)
         pylab.xlabel(self.xlabel)
         pylab.show()
         
@@ -209,7 +212,8 @@ class katRun(object):
       
 class katRun2D(object):
     def __init__(self):
-        self.runDateTime = datetime.datetime.now()
+        self.runtime
+        self.startDateTime = datetime.datetime.now()
         self.x = None
         self.y = None
         self.z = None
@@ -956,7 +960,8 @@ class kat(object):
                 
             r.yaxis = self.yaxis
             r.katScript = "".join(self.generateKatScript())   
-
+            r.katScript += "time\n"
+            
             if (plot==None):
                 # ensure we don't do any plotting. That should be handled
                 # by user themselves
@@ -1022,13 +1027,18 @@ class kat(object):
                         
                         if printerr == 1:
                             sys.stdout.write("\r{0} {1}".format(action, prc))
-                            
                     else:
                         err += line
 
             
             [out,errpipe] = p.communicate()
             
+            _out = out.split("\n")
+            
+            for line in _out[::-1]:
+                if line.lstrip().startswith('computation time:'):
+                    r.runtime = float(line.split(":")[1].replace("s",""))
+                
             if printout == 1: 
                 print(out)
             else:
@@ -1039,8 +1049,6 @@ class kat(object):
             ix2 = out.find(')',ix)
             r.katVersion = out[ix:ix2]
             
-            r.runDateTime = datetime.datetime.now()
-
             # If Finesse returned an error, just print that and exit!
             if p.returncode != 0:
                 print(err)
diff --git a/pykat/optics/knm.py b/pykat/optics/knm.py
index 626335e9f7d5c6567d495df8473162078a52b2c7..b75ad51103841b307bd2bdf6e2b49a26caf01528 100644
--- a/pykat/optics/knm.py
+++ b/pykat/optics/knm.py
@@ -311,15 +311,15 @@ def ROM_HG_knm(weights, mode_in, mode_out, q1, q2, q1y=None, q2y=None, cache=Non
 
     elif n_mod_2 != m_mod_2:
         if npr_mod_2 == mpr_mod_2:
-            k_ROQ = np.einsum('ij,ij', u_xy_nodes, w_ij_Q1Q4) + np.einsum('ij,ij', -u_xy_nodes, w_ij_Q2Q3)
+            k_ROQ = np.einsum('ij,ij', u_xy_nodes, w_ij_Q1Q4) - np.einsum('ij,ij', u_xy_nodes, w_ij_Q2Q3)
         else:
-            k_ROQ = np.einsum('ij,ij', u_xy_nodes, w_ij_Q2Q4) + np.einsum('ij,ij', -u_xy_nodes, w_ij_Q1Q3)
+            k_ROQ = np.einsum('ij,ij', u_xy_nodes, w_ij_Q2Q4) - np.einsum('ij,ij', u_xy_nodes, w_ij_Q1Q3)
 
     elif npr_mod_2 != mpr_mod_2:
         if n_mod_2 == m_mod_2:
-            k_ROQ = np.einsum('ij,ij', u_xy_nodes, w_ij_Q3Q4) + np.einsum('ij,ij', -u_xy_nodes,  w_ij_Q1Q2)
+            k_ROQ = np.einsum('ij,ij', u_xy_nodes, w_ij_Q3Q4) - np.einsum('ij,ij', u_xy_nodes,  w_ij_Q1Q2)
         else:
-            k_ROQ = np.einsum('ij,ij', u_xy_nodes, w_ij_Q2Q4) + np.einsum('ij,ij', -u_xy_nodes, w_ij_Q1Q3)
+            k_ROQ = np.einsum('ij,ij', u_xy_nodes, w_ij_Q2Q4) - np.einsum('ij,ij', u_xy_nodes, w_ij_Q1Q3)
     
      
     return k_ROQ
diff --git a/pykat/optics/maps.py b/pykat/optics/maps.py
index 8bdf6f90f64ba7b1dbd5e6c746c9091f76ff82d5..0eb5422faa58cbbb8211c712b89b37a3b5b012c5 100644
--- a/pykat/optics/maps.py
+++ b/pykat/optics/maps.py
@@ -293,7 +293,7 @@ class curvedmap(surfacemap):
 class tiltmap(surfacemap):
     
     def __init__(self, name, size, step_size, tilt):
-        surfacemap.__init__(self, name, "phase", size, (np.array(size)+1)/2.0, step_size, 1e-9)
+        surfacemap.__init__(self, name, "phase reflection", size, (np.array(size)+1)/2.0, step_size, 1e-9)
         self.tilt = tilt
         
     @property
@@ -311,7 +311,7 @@ class tiltmap(surfacemap):
 
 class zernikemap(surfacemap):
 	def __init__(self, name, size, step_size, radius, scaling=1e-9):
-		surfacemap.__init__(self, name, "phase", size, (np.array(size)+1)/2.0, step_size, scaling)
+		surfacemap.__init__(self, name, "phase reflection", size, (np.array(size)+1)/2.0, step_size, scaling)
 		self.__zernikes = {}
 		self.radius = radius
 		
diff --git a/pykat/optics/romhom.py b/pykat/optics/romhom.py
index ac12c673509615a2431a4b85d0ed93b1aed50f9d..1766b8308ef9d97ec2bb743e855a0b242b36a7d4 100644
--- a/pykat/optics/romhom.py
+++ b/pykat/optics/romhom.py
@@ -2,7 +2,7 @@ import math
 import os.path
 import pykat
 import collections
-    
+
 from pykat.external.progressbar import ProgressBar, ETA, Percentage, Bar
 from itertools import combinations_with_replacement as combinations
 from pykat.optics.gaussian_beams import beam_param, HG_beam