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 eca4a28..db9f4aa 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
@@ -118,6 +118,16 @@
 
             @Override
             public void remove() {
+//                for(int cursor = currentIndex; cursor < valueCount; cursor++){
+//                    System.arraycopy(storage, offset + cursor * PositionWritable.LENGTH, 
+//                            storage, offset + (cursor-1) * PositionWritable.LENGTH, PositionWritable.LENGTH);
+//                }
+                if(currentIndex < valueCount - 1)
+                    System.arraycopy(storage, offset + currentIndex * PositionWritable.LENGTH, 
+                          storage, offset + (currentIndex - 1) * PositionWritable.LENGTH, 
+                          (valueCount - currentIndex) * PositionWritable.LENGTH);
+                valueCount--;
+                currentIndex--;
             }
         };
         return it;
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 19f2f39..881af61 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
@@ -1,5 +1,7 @@
 package edu.uci.ics.genomix.data.test;
 
+import java.util.Iterator;
+
 import junit.framework.Assert;
 
 import org.junit.Test;
@@ -36,4 +38,53 @@
         }
     }
     
+    @Test
+    public void TestRemove() {
+        PositionListWritable plist = new PositionListWritable();
+        Assert.assertEquals(plist.getCountOfPosition(), 0);
+        
+        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());
+            Assert.assertEquals(i + 1, plist.getCountOfPosition());
+        }
+        int i = 0;
+        for (PositionWritable pos : plist) {
+            Assert.assertEquals(i, pos.getReadID());
+            Assert.assertEquals((byte) i, pos.getPosInRead());
+            i++;
+        }
+        
+        i = 0;
+        PositionWritable pos = new PositionWritable();
+        Iterator<PositionWritable> iterator = plist.iterator();
+        
+        PositionWritable deletePos = new PositionWritable();
+        deletePos.set(2, (byte)2);
+        while(iterator.hasNext()){
+            pos = iterator.next();
+            if(pos.equals(deletePos)){
+                iterator.remove();
+                break;
+            }
+        }
+        Assert.assertEquals(4, plist.getCountOfPosition());
+        
+        while(iterator.hasNext()){
+            pos = iterator.next();
+            Assert.assertTrue(pos.getReadID() != deletePos.getReadID());
+            Assert.assertTrue(pos.getPosInRead() != deletePos.getPosInRead());
+            i++;
+        }
+        
+        i = 0;
+        iterator = plist.iterator();
+        while(iterator.hasNext()){
+            pos = iterator.next();
+            iterator.remove();
+        }
+        
+        Assert.assertEquals(0, plist.getCountOfPosition());
+    }
 }
