diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
index c620fa2..7a5692c 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
@@ -28,6 +28,10 @@
         this.offset = 0;
     }
     
+    public PositionListWritable(int count, byte[] data, int offset) {
+        setNewReference(count, data, offset);
+    }
+    
     public PositionListWritable(List<PositionWritable> posns) {
         this();
         setSize(posns.size());  // reserve space for all elements
@@ -48,6 +52,11 @@
         valueCount += 1;
     }
     
+    public void append(byte mateId, long readId, int posId){
+        long uuid = (readId << 17) + ((posId & 0xFFFF) << 1) + (mateId & 0b1);
+        append(uuid);
+    }
+    
     public void append(PositionWritable pos) {
         if(pos != null)
             append(pos.getUUID());
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 1e4eed6..ae02982 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
@@ -30,9 +30,13 @@
         setNewReference(storage, offset);
     }
     
+    public void set(long uuid){
+        Marshal.putLong(uuid, storage, offset);
+    }
+    
     public void set(byte mateId, long readId, int posId){
-        long finalId = (readId << 17) + ((posId & 0xFFFF) << 1) + (mateId & 0b1);
-        Marshal.putLong(finalId, storage, offset);
+        long uuid = (readId << 17) + ((posId & 0xFFFF) << 1) + (mateId & 0b1);
+        Marshal.putLong(uuid, storage, offset);
     }
     
     public void set(PositionWritable pos) {
@@ -44,6 +48,10 @@
         this.offset = offset;
     }
     
+    public long getUUID(){
+        return Marshal.getLong(storage, offset);
+    }
+    
     public byte getMateId(){
         return (byte) (Marshal.getLong(storage, offset) & 0b1);
     }
@@ -56,10 +64,6 @@
         return (int) ((Marshal.getLong(storage, offset) >> 1) & 0xffff);
     }
     
-    public long getUUID(){
-        return Marshal.getLong(storage, offset);
-    }
-    
     public byte[] getByteArray() {
         return storage;
     }
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableTest.java
index 25353f0..37c64aa 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableTest.java
@@ -15,10 +15,6 @@
 
 package edu.uci.ics.genomix.data.test;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-
 import junit.framework.Assert;
 
 import org.junit.Test;
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionListWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionListWritableTest.java
index 1e965ef..fea658d 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionListWritableTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionListWritableTest.java
@@ -6,8 +6,8 @@
 
 import org.junit.Test;
 
-import edu.uci.ics.genomix.oldtype.PositionListWritable;
-import edu.uci.ics.genomix.oldtype.PositionWritable;
+import edu.uci.ics.genomix.type.PositionListWritable;
+import edu.uci.ics.genomix.type.PositionWritable;
 
 public class PositionListWritableTest {
 
@@ -15,17 +15,26 @@
     public void TestInitial() {
         PositionListWritable plist = new PositionListWritable();
         Assert.assertEquals(plist.getCountOfPosition(), 0);
-
+        
+        byte mateId;
+        long readId;
+        int posId;
         for (int i = 0; i < 200; i++) {
-            plist.append(i, (byte) i);
-            Assert.assertEquals(i, plist.getPosition(i).getReadID());
-            Assert.assertEquals((byte) i, plist.getPosition(i).getPosInRead());
+            mateId = (byte)1;
+            readId = (long)i;
+            posId = i;
+            plist.append(mateId, readId, posId);
+            Assert.assertEquals(plist.getPosition(i).getMateId(), mateId);
+            Assert.assertEquals(plist.getPosition(i).getReadId(), readId);
+            Assert.assertEquals(plist.getPosition(i).getPosId(), posId);
             Assert.assertEquals(i + 1, plist.getCountOfPosition());
         }
+        
         int i = 0;
         for (PositionWritable pos : plist) {
-            Assert.assertEquals(i, pos.getReadID());
-            Assert.assertEquals((byte) i, pos.getPosInRead());
+            Assert.assertEquals((byte)1, pos.getMateId());
+            Assert.assertEquals((long) i, pos.getReadId());
+            Assert.assertEquals(i, pos.getPosId());
             i++;
         }
         
@@ -43,16 +52,25 @@
         PositionListWritable plist = new PositionListWritable();
         Assert.assertEquals(plist.getCountOfPosition(), 0);
         
+        byte mateId;
+        long readId;
+        int posId;
         for (int i = 0; i < 5; i++) {
-            plist.append(i, (byte) i);
-            Assert.assertEquals(i, plist.getPosition(i).getReadID());
-            Assert.assertEquals((byte) i, plist.getPosition(i).getPosInRead());
+            mateId = (byte)1;
+            readId = (long)i;
+            posId = i;
+            plist.append(mateId, readId, posId);
+            Assert.assertEquals(plist.getPosition(i).getMateId(), mateId);
+            Assert.assertEquals(plist.getPosition(i).getReadId(), readId);
+            Assert.assertEquals(plist.getPosition(i).getPosId(), posId);
             Assert.assertEquals(i + 1, plist.getCountOfPosition());
         }
+        
         int i = 0;
         for (PositionWritable pos : plist) {
-            Assert.assertEquals(i, pos.getReadID());
-            Assert.assertEquals((byte) i, pos.getPosInRead());
+            Assert.assertEquals((byte)1, pos.getMateId());
+            Assert.assertEquals((long) i, pos.getReadId());
+            Assert.assertEquals(i, pos.getPosId());
             i++;
         }
         
@@ -65,7 +83,7 @@
         for(int j = 0; j < 5; j++){
             iterator = copyList.iterator();
             PositionWritable deletePos = new PositionWritable();
-            deletePos.set(j, (byte)j);
+            deletePos.set((byte)1, (long)j, j);
             while(iterator.hasNext()){
                 pos = iterator.next();
                 if(pos.equals(deletePos)){
@@ -76,8 +94,9 @@
             Assert.assertEquals(5 - 1 - j, copyList.getCountOfPosition());
             while(iterator.hasNext()){
                 pos = iterator.next();
-                Assert.assertTrue(pos.getReadID() != deletePos.getReadID());
-                Assert.assertTrue(pos.getPosInRead() != deletePos.getPosInRead());
+                Assert.assertTrue(pos.getUUID() != deletePos.getUUID());
+                Assert.assertTrue(pos.getReadId() != deletePos.getReadId());
+                Assert.assertTrue(pos.getPosId() != deletePos.getPosId());
                 i++;
             }
         }
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 552ec36..f7e634b 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
@@ -17,7 +17,7 @@
         int posId;
         byte[] start = new byte[8];
         for (int i = 0; i < 65535; i++) {
-            mateId = (byte)1;
+            mateId = (byte)1;//0
             readId = (long)i;
             posId = i;
             pos = new PositionWritable(mateId, readId, posId);
@@ -25,8 +25,8 @@
             Assert.assertEquals(pos.getReadId(), readId);
             Assert.assertEquals(pos.getPosId(), posId);
             
-            long finalId = ((readId + 1) << 17) + ((posId & 0xFFFF) << 1) + (mateId & 0b1);
-            Marshal.putLong(finalId, start, 0);
+            long uuid = ((readId + 1) << 17) + ((posId & 0xFFFF) << 1) + (mateId & 0b1);
+            Marshal.putLong(uuid, start, 0);
             pos1 = new PositionWritable(start, 0);
             Assert.assertEquals(pos1.getMateId(), mateId);
             Assert.assertEquals(pos1.getReadId(), readId + 1);
