diff --git a/pykat/detectors.py b/pykat/detectors.py
index 5929d264dc1aed7d12f90cb8117f78a3b7fcb015..1f2d1b7906b185355e2f3d3f971c0ce1808d5f18 100644
--- a/pykat/detectors.py
+++ b/pykat/detectors.py
@@ -5,7 +5,7 @@ Created on Fri Feb 01 0split()9:09:10 2013
 @author: Daniel
 """
 import exceptions
-from pykat.utils import *
+import abc
 from pykat.node_network import *
 from pykat.param import Param
 
diff --git a/pykat/finesse.py b/pykat/finesse.py
index 2036863b19511e71ac627f7e135e238e8356b947..d7c23cdbc7bc5fe1e5c696012aad01d9dae9dcd1 100644
--- a/pykat/finesse.py
+++ b/pykat/finesse.py
@@ -181,7 +181,7 @@ class katRun(object):
     
     def __getitem__(self, value):
         idx = [i for i in range(len(self.ylabels)) if self.ylabels[i].split()[0] == str(value)]
-        
+
         if len(idx) > 0:
             out = self.y[:, idx]
             
diff --git a/pykat/utilities/maps.py b/pykat/utilities/maps.py
index 6b52951046a06ef6a6022679c7bad06bf2ac2fad..757260cc4887c9409f3bbe6eabe51d4ffb774dd5 100644
--- a/pykat/utilities/maps.py
+++ b/pykat/utilities/maps.py
@@ -2,8 +2,8 @@ from pykat.utilities.romhom import makeReducedBasis, makeEmpiricalInterpolant, m
 from scipy.interpolate import interp2d
 import numpy as np
 import math
-        
-        
+from pykat.utilities.zernike import *        
+		   
 class surfacemap(object):
     def __init__(self, name, maptype, size, center, step_size, scaling, data=None):
         
@@ -291,8 +291,39 @@ class tiltmap(surfacemap):
         
         self.data = (xx * self.tilt[1] + yy * self.tilt[0])/self.scaling
         
-        
-        
+
+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)
+		self.__zernikes = {}
+		self.radius = radius
+		
+	@property
+	def radius(self): return self.__radius
+
+	@radius.setter
+	def radius(self, value, update=True):
+		self.__radius = float(value)
+		if update: self.update_data()
+
+	def setZernike(self, m, n, amplitude, update=True):
+		self.__zernikes["%i%i" % (m, n)] = (m,n,amplitude)
+		if update: self.update_data()
+
+	def update_data(self):
+		X,Y = np.meshgrid(self.x, self.y)
+		R = np.sqrt(X**2 + Y**2)
+		PHI = np.arctan2(Y, X)
+
+		data = np.zeros(np.shape(R))
+
+		for i in self.__zernikes.items():
+			data += i[1][2] * zernike(i[1][0], i[1][1], R/self.radius, PHI)
+
+		self.data = data
+	
+			
+	
 def read_map(filename):
     with open(filename, 'r') as f: