diff --git a/uk/ac/sanger/artemis/components/variant/BCFReader.java b/uk/ac/sanger/artemis/components/variant/BCFReader.java
index e923003c67a20240f5ff680fa44972774a19816a..d4114fb9180f2e1af8f0146b966d4f202bc1155c 100644
--- a/uk/ac/sanger/artemis/components/variant/BCFReader.java
+++ b/uk/ac/sanger/artemis/components/variant/BCFReader.java
@@ -218,30 +218,36 @@ class BCFReader extends AbstractVCFReader
 
       String fmts[] = VCFRecord.COLON_PATTERN.split( bcfRecord.getFormat() );
       bcfRecord.setData( new String[nsamples][fmts.length] );
-      
-      for(int j=0; j<nsamples; j++)
+
+      for(int i=0; i<fmts.length; i++)
       {
-        for(int k=0; k<fmts.length; k++)
+        int nb = getByteSize(fmts[i],nc);
+        str = new byte[nb];
+        is.read(str);
+
+        if(fmts[i].equals("GT"))
         {
-          int nb = getByteSize(fmts[k],nc);
-          str = new byte[nb];
-          is.read(str);
-        
-          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 = new String(str);
-  
-          bcfRecord.getData()[j][k] = value;
+          for(int j=0; j<nsamples; j++)
+            bcfRecord.getData()[j][i] = getGTString(str[j]);
         }
-      }
-      
-    }
+        else if(fmts[i].equals("PL"))
+        {
+          String pls[] = getPLString(str, nsamples);
+          for(int j=0; j<nsamples; j++)
+            bcfRecord.getData()[j][i] = pls[j];
+        }
+        else if(fmts[i].equals("DP")||fmts[i].equals("SP")||fmts[i].equals("GQ"))
+        {
+          for(int j=0; j<nsamples; j++)
+            bcfRecord.getData()[j][i] = Integer.toString(byteToInt(str[j]));
+        }
+        else
+        {
+          bcfRecord.getData()[0][i] = new String(str);
+        }
+     }
+   }
+
     
     return bcfRecord;
   }
@@ -323,18 +329,32 @@ class BCFReader extends AbstractVCFReader
     else                        // misc
       return 4*nsamples;        // uint32_t+char*
   }
-  
-  
-  private String getPLString(byte[] b, int nc)
+
+  /**
+   * Phred scaled likelihood of data.
+   * @param b
+   * @param nsamples
+   * @return
+   */
+  private String[] getPLString(byte[] b, int nsamples)
   {
-    StringBuffer buff = new StringBuffer();
-    for(int i=0;i<b.length; i++)
+    String pls[] = new String[nsamples];
+    int nb = b.length / nsamples;
+    int cnt = 0;
+
+    for(int i=0; i<nsamples; i++)
     {
-      buff.append(byteToInt(b[i]));
-      if(i<b.length-1)
-        buff.append(",");
+      StringBuffer buff = new StringBuffer();
+      for(int j=0;j<nb; j++)
+      {
+        buff.append(byteToInt(b[cnt]));
+        if(j<nb-1)
+          buff.append(",");
+        cnt++;
+      }
+      pls[i] = buff.toString();
     }
-    return buff.toString();
+    return pls;
   }
   
   /**