diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionWritable.java
index ae02982..593ed65 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionWritable.java
@@ -16,6 +16,12 @@
     protected int offset;
     public static final int LENGTH = 8;
     
+    public static final int totalBits = 64;
+    private static final int bitsForMate = 1;
+    private static final int bitsForPosition = 16;
+    private static final int readIdShift = bitsForPosition + bitsForMate;
+    private static final int positionIdShift = bitsForMate;
+    
     public PositionWritable() {
         storage = new byte[LENGTH];
         offset = 0;
@@ -35,7 +41,7 @@
     }
     
     public void set(byte mateId, long readId, int posId){
-        long uuid = (readId << 17) + ((posId & 0xFFFF) << 1) + (mateId & 0b1);
+        long uuid = (readId << readIdShift) + ((posId & 0xFFFF) << positionIdShift) + (mateId & 0b1);
         Marshal.putLong(uuid, storage, offset);
     }
     
@@ -57,11 +63,11 @@
     }
     
     public long getReadId(){
-        return Marshal.getLong(storage, offset) >> 17;
+        return Marshal.getLong(storage, offset) >>> readIdShift;
     }
     
     public int getPosId(){
-        return (int) ((Marshal.getLong(storage, offset) >> 1) & 0xffff);
+        return (int) ((Marshal.getLong(storage, offset) >>> positionIdShift) & 0xffff);
     }
     
     public byte[] getByteArray() {
@@ -104,8 +110,11 @@
         return (this.getUUID() < other.getUUID()) ? -1 : ((this.getUUID() == other.getUUID()) ? 0 : 1);
     }
     
+    /*
+     * String of form "(readId-posID_mate)" where mate is _1 or _2
+     */
     @Override
     public String toString() {
-        return "(" + Long.toString(this.getUUID()) + ")";
+        return "(" + this.getReadId() + "-" + this.getPosId() + "_" + (this.getMateId() + 1) + ")";
     }
 }
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionWritableTest.java
index f7e634b..540c6eb 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionWritableTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionWritableTest.java
@@ -1,4 +1,6 @@
 package edu.uci.ics.genomix.data.test;
+import java.util.Random;
+
 import junit.framework.Assert;
 
 import org.junit.Test;
@@ -15,11 +17,12 @@
         byte mateId;
         long readId;
         int posId;
-        byte[] start = new byte[8];
-        for (int i = 0; i < 65535; i++) {
-            mateId = (byte)1;//0
-            readId = (long)i;
-            posId = i;
+        Random gen = new Random();
+        byte[] start = new byte[15];
+        for (long i = 0; i < (1 << 47); i++) {
+            mateId = (byte) (gen.nextBoolean() ? 1 : 0);
+            readId = i;
+            posId = (int) (i % (1 << 16));
             pos = new PositionWritable(mateId, readId, posId);
             Assert.assertEquals(pos.getMateId(), mateId);
             Assert.assertEquals(pos.getReadId(), readId);
@@ -36,6 +39,9 @@
             Assert.assertEquals(pos.getMateId(), mateId);
             Assert.assertEquals(pos.getReadId(), readId + 1);
             Assert.assertEquals(pos.getPosId(), posId);
+            
+            Assert.assertEquals(pos1.toString(), pos.toString());
+            String out = pos.toString();
         }
     }
 }
