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 9993ab0..57d4a75 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
@@ -383,7 +383,7 @@
         intersection.retainAll(s2);
         System.out.println(intersection.toString());
         Set<Long> difference = new HashSet<Long>();
-        difference = s1;
+        difference.addAll(s1);
         difference.removeAll(s2);
         System.out.println(difference.toString());
     }
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerListWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerListWritableTest.java
index 0e406c1..3c1428a 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerListWritableTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerListWritableTest.java
@@ -103,6 +103,16 @@
         }
         
         Assert.assertEquals(0, kmerList.getCountOfPosition());
+        
+        KmerListWritable edgeList = new KmerListWritable(3);
+        KmerBytesWritable k = new KmerBytesWritable(3);
+        k.setByRead(("AAA").getBytes(), 0);
+        edgeList.append(k);
+        k.setByRead(("CCC").getBytes(), 0);
+        edgeList.append(k);
+        for(KmerBytesWritable edge : edgeList){
+        	System.out.println(edge.toString());
+        }
     }
     
     public String generaterRandomString(int n){
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java
index f019fb0..158104f 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java
@@ -91,7 +91,7 @@
             {"FR", "RR"}
     };
     public static Set<String> existKmerString = new HashSet<String>();
-    private Set<Long> readIdSet = new HashSet<Long>();
+    private Set<Long> readIdSet;
     private Set<Long> incomingReadIdSet = new HashSet<Long>();
     private Set<Long> outgoingReadIdSet = new HashSet<Long>();
     private Set<Long> selfReadIdSet = new HashSet<Long>();
@@ -172,7 +172,7 @@
             createdVertexSet.clear();
             while(msgIterator.hasNext()){
                 incomingMsg = msgIterator.next();
-                readIdSet.clear();
+                readIdSet = new HashSet<Long>();
                 for(PositionWritable nodeId : incomingMsg.getNodeIdList()){
                     readIdSet.add(nodeId.getReadId());
                 }
@@ -210,15 +210,15 @@
                         incomingReadIdSet = kmerMap.get(incomingEdge);
                         
                         //set all neighberEdge readId intersection
-                        neighborEdgeIntersection = selfReadIdSet;
+                        neighborEdgeIntersection.addAll(selfReadIdSet);
                         neighborEdgeIntersection.retainAll(outgoingReadIdSet);
                         neighborEdgeIntersection.retainAll(incomingReadIdSet);
                         //set outgoingEdge readId intersection
-                        outgoingEdgeIntersection = selfReadIdSet;
+                        outgoingEdgeIntersection.addAll(selfReadIdSet);
                         outgoingEdgeIntersection.retainAll(outgoingReadIdSet);
                         outgoingEdgeIntersection.removeAll(neighborEdgeIntersection); 
                         //set incomingEdge readId intersection
-                        incomingEdgeIntersection = selfReadIdSet;
+                        incomingEdgeIntersection.addAll(selfReadIdSet);
                         incomingEdgeIntersection.retainAll(incomingReadIdSet);
                         incomingEdgeIntersection.removeAll(neighborEdgeIntersection);
                         
@@ -274,7 +274,9 @@
             while(msgIterator.hasNext()){
                 incomingMsg = msgIterator.next();
                 /** update edgelist to new/created vertex **/
-                switch(incomingMsg.getFlag()){
+                byte meToNeighborDir = incomingMsg.getFlag();
+                byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+                switch(neighborToMeDir){
                     case MessageFlag.DIR_FF:
                         getVertexValue().getFFList().remove(incomingMsg.getSourceVertexId());
                         getVertexValue().getFFList().append(incomingMsg.getCreatedVertexId());
@@ -317,6 +319,7 @@
                     vertex.setVertexId(v.getCreatedVertexId());
                     vertex.setVertexValue(vertexValue);
                 }
+                createdVertexSet.clear();
             }
         }
     }
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/SplitRepeatmallTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/SplitRepeatSmallTestSuite.java
similarity index 97%
rename from genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/SplitRepeatmallTestSuite.java
rename to genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/SplitRepeatSmallTestSuite.java
index d87281d..21ffe34 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/SplitRepeatmallTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/SplitRepeatSmallTestSuite.java
@@ -40,8 +40,8 @@
 import edu.uci.ics.pregelix.core.util.PregelixHyracksIntegrationUtil;
 
 @SuppressWarnings("deprecation")
-public class SplitRepeatmallTestSuite extends TestSuite {
-    private static final Logger LOGGER = Logger.getLogger(SplitRepeatmallTestSuite.class.getName());
+public class SplitRepeatSmallTestSuite extends TestSuite {
+    private static final Logger LOGGER = Logger.getLogger(SplitRepeatSmallTestSuite.class.getName());
     //P4ForMergeGraph/bin/read
     public static final String PreFix = "data/SplitRepeat"; //"graphbuildresult";
     public static final String[] TestDir = { PreFix + File.separator
@@ -123,7 +123,7 @@
         List<String> onlys = getFileList(PATH_TO_ONLY);
         File testData = new File(PATH_TO_JOBS);
         File[] queries = testData.listFiles();
-        SplitRepeatmallTestSuite testSuite = new SplitRepeatmallTestSuite();
+        SplitRepeatSmallTestSuite testSuite = new SplitRepeatSmallTestSuite();
         testSuite.setUp();
         boolean onlyEnabled = false;
         FileSystem dfs = FileSystem.get(testSuite.conf);
diff --git a/genomix/genomix-pregelix/src/test/resources/only_splitrepeat.txt b/genomix/genomix-pregelix/src/test/resources/only_splitrepeat.txt
new file mode 100644
index 0000000..41cba34
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/only_splitrepeat.txt
@@ -0,0 +1 @@
+SplitRepeatGraph.xml
\ No newline at end of file
