diff --git a/pykat/optics/maps.py b/pykat/optics/maps.py
index d84991b323828349342d9cec439bfb18123758c2..737c8a0ab7cce2a0caff7053118ce6c266a3456c 100644
--- a/pykat/optics/maps.py
+++ b/pykat/optics/maps.py
@@ -41,8 +41,13 @@ class MirrorROQWeights:
             if self.tBack  is not None: self.tBack.writeToFile(f=f)
             
 class surfacemap(object):
+    
     def __init__(self, name, maptype, size, center, step_size, scaling, data=None,
                  notNan=None, Rc=None, zOffset=None, xyOffset=(.0,.0)):
+        '''
+        size, center, step_size, xyOffset are all tuples of the form (x, y),
+        i.e., (col, row).
+        '''
         
         self.name = name
         self.type = maptype
@@ -60,12 +65,12 @@ class surfacemap(object):
         self._xyOffset = xyOffset
 		
         if data is None:
-            self.data = np.zeros(size)
+            self.data = np.zeros(size[::-1])
         else:
             self.data = data
-            
+
         if notNan is None:
-            self.notNan = np.ones(size)
+            self.notNan = np.ones(size[::-1], dtype=bool)
         else:
             self.notNan = notNan
 
@@ -1088,9 +1093,24 @@ class surfacemap(object):
         rho = np.sqrt(X**2 + Y**2)
         return rho, phi
 
-    def preparePhaseMap(self, xyOffset=None, w=None, verbose=False):
+    def preparePhaseMap(self, w=None, xyOffset=None, verbose=False):
         '''
-        Based on Simtools function 'FT_prepare_phase_map_for_finesse.m' by Charlotte Bond.
+        Prepares the phase mirror map for being used in Finesse. The map is cropped, and
+        the curvature, offset and tilt are removed, in that order.
+
+        Input: w, xyOffset, verbose
+        w        - radius of Gaussian weights [m]. If specified, surfaces are fitted
+                   to the mirror map when removing curvature and tilt. Otherise, the
+                   whole mirror map is treated the same, thus covolutions with Zernike
+                   polynomials are used instead.
+        xyOffset - Beam center offset compared to the mirror center.
+        verbose  - True makes a chatty method, while False only prints the end results.
+
+        Output: amap
+        amap     - Aperture map (absorption map), i.e. zeros within the map surface and
+                   ones outside it.
+                   
+        Based on Charlotte Bond's Simtools function 'FT_prepare_phase_map_for_finesse.m'.
         '''
         if verbose:
             print('--------------------------------------------------')
@@ -1194,7 +1214,15 @@ class surfacemap(object):
             self.zernikeRemoved = (0,0,A0)
             if verbose:
                 print(' Equivalent Z00 amplitude from accumulated z-offsets, A00 = {:.2f}'.format(A0))
-            
+                
+        if verbose:
+            print(' Creating aperture map...')
+            # --------------------------------------------------------
+        amap = aperturemap(self.name, self.size, self.step_size,
+                           self.find_radius(method='min',unit='meters'), self.center)
+        if verbose:
+            print('  Aperture map created.')
+                                       
         if xyOffset is not None:
             if verbose:
                 print(' Offsetting mirror center in the xy-plane...')
@@ -1208,13 +1236,16 @@ class surfacemap(object):
             self.xyOffset = (0,0)
             
         if verbose:
-            print(' Writing phase map to file...')
+            print(' Writing maps to file...')
         # --------------------------------------------------------
         filename = self.name + '_finesse.txt'
         self.write_map(filename)
         if verbose:
             print('  Phase map written to file {:s}'.format(filename))
-        
+        filename = amap.name + '_aperture.txt'
+        amap.write_map(filename)
+        if verbose:
+            print('  Aperture map written to file {:s}'.format(filename))
         if verbose:
             print(' Writing result information to file...')
             # --------------------------------------------------------
@@ -1222,7 +1253,8 @@ class surfacemap(object):
         self.writeMapPrepResults(filename,w)
         if verbose:
             print('  Result written to file {:s}'.format(filename))
-        
+            
+            
         # Printing results to terminal
         print('--------------------------------------------------')
         print('Phase map prepared!' )
@@ -1249,14 +1281,12 @@ class surfacemap(object):
         print('--------------------------------------------------')
         print()
 
-        
-        # Todo:
-        # Add "create aperture map"
-        
+        return amap
     
-    def writeMapPrepResults(self, filename,w):
+    def writeMapPrepResults(self, filename, w):
         '''
-        Writing results to file. Not yet finished.
+        Writing result information to file. The same info that is written to the
+        terminal.
         '''
         import time
         with open(filename,'w') as mapfile:
@@ -1568,8 +1598,10 @@ class mergedmap:
 
 class aperturemap(surfacemap):
     
-    def __init__(self, name, size, step_size, R):
-        surfacemap.__init__(self, name, "absorption both", size, (np.array(size)+1)/2.0, step_size, 1)
+    def __init__(self, name, size, step_size, R, center=None):
+        if center is None:
+            center = (np.array(size)+1)/2.0
+        surfacemap.__init__(self, name, "absorption both", size, center, step_size, 1)
         self.R = R
         
     @property
@@ -1584,7 +1616,7 @@ class aperturemap(surfacemap):
         
         radius = np.sqrt(xx**2 + yy**2)
         
-        self.data = np.zeros(self.size)
+        self.data = np.zeros(self.size[::-1])
         self.data[radius > self.R] = 1.0