diff --git a/uk/ac/sanger/artemis/components/variant/BCFReader.java b/uk/ac/sanger/artemis/components/variant/BCFReader.java
index 6998a27c8fbf1b80275c97301b46903d6f1ef9a2..6730934199fac6d791b370a65d11012ddee47f57 100644
--- a/uk/ac/sanger/artemis/components/variant/BCFReader.java
+++ b/uk/ac/sanger/artemis/components/variant/BCFReader.java
@@ -187,22 +187,28 @@ class BCFReader
         nc = 1;
 
       String fmts[] = bcfRecord.format.split(":");
-      for(int j=0; j<fmts.length; j++)
+      bcfRecord.data = new String[nsamples][fmts.length];
+      
+      for(int j=0; j<nsamples; j++)
       {
-        int nb = getByteSize(fmts[j],nc);
-        str = new byte[nb];
-        is.read(str);
+        for(int k=0; k<fmts.length; k++)
+        {
+          int nb = getByteSize(fmts[k],nc);
+          str = new byte[nb];
+          is.read(str);
         
-        final String value;
-        if(fmts[j].equals("GT"))
-          value = getGTString(str[0]);
-        else if(fmts[j].equals("PL"))
-          value = getPLString(str, nc);
-        else if(fmts[j].equals("DP")||fmts[j].equals("SP")||fmts[j].equals("GQ"))
-          value = Integer.toString(byteToInt(str[0]));
-        else
-          value = "";
-        bcfRecord.data.put(fmts[j], value);
+          final String value;
+          if(fmts[k].equals("GT"))
+            value = getGTString(str[0]);
+          else if(fmts[k].equals("PL"))
+            value = getPLString(str, nc);
+          else if(fmts[k].equals("DP")||fmts[k].equals("SP")||fmts[k].equals("GQ"))
+            value = Integer.toString(byteToInt(str[0]));
+          else
+            value = "";
+  
+          bcfRecord.data[j][k] = value;
+        }
       }
       
     }
diff --git a/uk/ac/sanger/artemis/components/variant/VCFRecord.java b/uk/ac/sanger/artemis/components/variant/VCFRecord.java
index d755d7fd9bc781dac7c5023fdf7410e78ba162e9..e96b68f02a9edf476537d6f75a54b281f205c517 100644
--- a/uk/ac/sanger/artemis/components/variant/VCFRecord.java
+++ b/uk/ac/sanger/artemis/components/variant/VCFRecord.java
@@ -23,9 +23,6 @@
 
 package uk.ac.sanger.artemis.components.variant;
 
-import java.util.HashMap;
-import java.util.Iterator;
-
 class VCFRecord
 {
   protected String ID;
@@ -37,14 +34,32 @@ class VCFRecord
   protected float quality;
   protected String info;
   protected String format;
-  protected HashMap<String, String> data = new HashMap<String, String>();
+  protected String data[][];
   
   public String toString()
+  {
+    return seqID+"\t"+pos+"\t"+ID+"\t"+ref+"\t"+alt+"\t"+quality+
+           "\t"+filter+"\t"+info+"\t"+format+"\t"+getSampleDataString();
+  }
+  
+  /**
+   * Return the sample data as a tab-delimited string
+   * @return
+   */
+  private String getSampleDataString()
   {
     StringBuffer buff = new StringBuffer();
-    Iterator<String> it = data.values().iterator();
-    while(it.hasNext())
-      buff.append(it.next()+ ( (it.hasNext()) ? ":" : "" ) );
-    return seqID+"\t"+pos+"\t"+ID+"\t"+ref+"\t"+alt+"\t"+quality+"\t"+filter+"\t"+info+"\t"+format+"\t"+buff.toString();
+    for(int i=0; i<data.length; i++)       // loop over samples
+    {
+      for(int j=0; j<data[i].length; j++)  // loop over values
+      {
+        buff.append(data[i][j]);
+        if(j<data[i].length-1)
+          buff.append(":");
+      }
+      if(i<data.length-1)
+        buff.append("\t");
+    }
+    return buff.toString();
   }
 }
\ No newline at end of file