diff --git a/rtd_cina/source/java/ch/systemsx/cisd/cina/shared/metadata/ImageMetadataExtractor.java b/rtd_cina/source/java/ch/systemsx/cisd/cina/shared/metadata/ImageMetadataExtractor.java
index d8a06376d7044a65b13ef50edb6677b56df12782..e9fa775a4aa17aa563d3488e8bc9ec27cf6c4320 100644
--- a/rtd_cina/source/java/ch/systemsx/cisd/cina/shared/metadata/ImageMetadataExtractor.java
+++ b/rtd_cina/source/java/ch/systemsx/cisd/cina/shared/metadata/ImageMetadataExtractor.java
@@ -18,13 +18,17 @@ package ch.systemsx.cisd.cina.shared.metadata;
 
 import java.io.File;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 import ch.systemsx.cisd.cina.shared.labview.Cluster;
+import ch.systemsx.cisd.cina.shared.labview.DBL;
+import ch.systemsx.cisd.cina.shared.labview.EW;
 import ch.systemsx.cisd.cina.shared.labview.LVData;
+import ch.systemsx.cisd.cina.shared.labview.LVDataBoolean;
 import ch.systemsx.cisd.cina.shared.labview.LVDataParser;
 import ch.systemsx.cisd.cina.shared.labview.LVDataString;
+import ch.systemsx.cisd.cina.shared.labview.U32;
+import ch.systemsx.cisd.cina.shared.labview.U8;
 
 /**
  * Class for extracting the metadata from a folder containing an image + metadata.
@@ -33,12 +37,22 @@ import ch.systemsx.cisd.cina.shared.labview.LVDataString;
  */
 public class ImageMetadataExtractor
 {
-    private final Map<String, String> metadata;
+    private final Map<String, String> metadataMap;
 
     private final File folder;
 
+    private LVData lvdata;
+
     private static final String METADATA_FILE_NAME = "metadata.xml";
 
+    private static final HashMap<String, String> prefixMap;
+    static
+    {
+        prefixMap = new HashMap<String, String>();
+        prefixMap.put("Pixelsize (nm)", "Size");
+        prefixMap.put("Image dimension (px)", "Dimension");
+    }
+
     /**
      * Create an image metadata with a parent metadata.
      * 
@@ -47,19 +61,27 @@ public class ImageMetadataExtractor
      */
     public ImageMetadataExtractor(Map<String, String> parentMetadata, File folder)
     {
-        this.metadata = new HashMap<String, String>(parentMetadata);
+        this.metadataMap = new HashMap<String, String>(parentMetadata);
         this.folder = folder;
     }
 
-    public Map<String, String> getMetadata()
+    /**
+     * Get the metadata extracted from the file in the form of a hash map. Parse must be called
+     * before getting the metadata.
+     */
+    public Map<String, String> getMetadataMap()
     {
-        return metadata;
+        assert lvdata != null;
+        return metadataMap;
     }
 
+    /**
+     * Parse the metadata file.
+     */
     public void parse()
     {
         File metadataFile = new File(folder, METADATA_FILE_NAME);
-        LVData lvdata = LVDataParser.parse(metadataFile);
+        lvdata = LVDataParser.parse(metadataFile);
         if (null == lvdata)
         {
             throw new IllegalArgumentException("Could not parse metadata in file "
@@ -73,10 +95,49 @@ public class ImageMetadataExtractor
         }
 
         Cluster cluster = lvdata.getClusters().get(0);
-        List<LVDataString> lvdataStrings = cluster.getStrings();
-        for (LVDataString lvdataString : lvdataStrings)
+        parseCluster(cluster, "");
+    }
+
+    private void parseCluster(Cluster cluster, String prefix)
+    {
+        for (LVDataString lvdataString : cluster.getStrings())
+        {
+            metadataMap.put(prefix + lvdataString.getName(), lvdataString.getValue());
+        }
+
+        for (U8 u8 : cluster.getU8s())
+        {
+            metadataMap.put(prefix + u8.getName(), u8.getValue().toString());
+        }
+
+        for (U32 u32 : cluster.getU32s())
+        {
+            metadataMap.put(prefix + u32.getName(), u32.getValue().toString());
+        }
+
+        for (DBL dbl : cluster.getDbls())
+        {
+            metadataMap.put(prefix + dbl.getName(), dbl.getValue().toString());
+        }
+
+        for (LVDataBoolean bool : cluster.getBooleans())
+        {
+            metadataMap.put(prefix + bool.getName(), bool.getValue().toString());
+        }
+
+        for (EW ew : cluster.getEws())
+        {
+            metadataMap.put(prefix + ew.getName(), ew.getChosenValue());
+        }
+
+        for (Cluster subcluster : cluster.getClusters())
         {
-            metadata.put(lvdataString.getName(), lvdataString.getValue());
+            String clusterPrefix = prefixMap.get(subcluster.getName());
+            if (null == clusterPrefix)
+            {
+                clusterPrefix = "";
+            }
+            parseCluster(subcluster, clusterPrefix);
         }
     }
 }
diff --git a/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/shared/metadata/ImageMetadataExtractorTest.java b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/shared/metadata/ImageMetadataExtractorTest.java
index aa19c74d9075a37fcd82f02e8d10531f2cc591d8..9d3ea8c545c0cdcb63d98f69660cbea3e8a56368 100644
--- a/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/shared/metadata/ImageMetadataExtractorTest.java
+++ b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/shared/metadata/ImageMetadataExtractorTest.java
@@ -37,10 +37,28 @@ public class ImageMetadataExtractorTest extends AssertJUnit
                         "sourceTest/java/ch/systemsx/cisd/cina/shared/metadata/Annotations/Replica for MRC files/MRC for Thomas/test20090422_BacklashRef.mrc");
         ImageMetadataExtractor metadata = new ImageMetadataExtractor(parentMetadata, folder);
         metadata.parse();
-        Map<String, String> metadataMap = metadata.getMetadata();
+        Map<String, String> metadataMap = metadata.getMetadataMap();
+        System.out.println(metadataMap);
+        assertEquals(16, metadataMap.size());
+
         assertEquals("", metadataMap.get("Annotation"));
         assertEquals("CM10", metadataMap.get("Microscope"));
         assertEquals("thomas.braun@unibas.ch", metadataMap.get("Operator"));
         assertEquals("test20090422_BacklashRef.mrc", metadataMap.get("Filename"));
+
+        assertEquals("1.7691349E-5", metadataMap.get("SizeX"));
+        assertEquals("1.7691349E-5", metadataMap.get("SizeY"));
+        assertEquals("0.0", metadataMap.get("SizeZ"));
+
+        assertEquals("2048", metadataMap.get("DimensionX"));
+        assertEquals("2048", metadataMap.get("DimensionY"));
+        assertEquals("1", metadataMap.get("DimensionZ"));
+
+        assertEquals("false", metadataMap.get("StackFlag"));
+        assertEquals("false", metadataMap.get("ColorFlag"));
+        assertEquals("16 bit SI", metadataMap.get("Data-type"));
+        assertEquals("-32417.0", metadataMap.get("Min"));
+        assertEquals("-29705.0", metadataMap.get("Max"));
+        assertEquals("2", metadataMap.get("Rating"));
     }
 }