diff --git a/genomix/genomix-hadoop/expected/result2 b/genomix/genomix-hadoop/expected/result2
index 3665e18..db55a38 100755
--- a/genomix/genomix-hadoop/expected/result2
+++ b/genomix/genomix-hadoop/expected/result2
@@ -1,3 +1,8 @@
-39 41 0c	1	1
-e4 04 31	24	1
-93 13 c4	16	1
+GCA	-72
+AGC	1
+CGC	-119
+TGC	1
+ATC	36
+TCG	18
+CAT	66
+GCT	32
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixCombiner.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixCombiner.java
index 1a33c7a..5d39928 100755
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixCombiner.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixCombiner.java
@@ -42,8 +42,9 @@
         byte bytCount = 0;
         while (values.hasNext()) {
             //Merge By the all adjacent Nodes;
-            groupByAdjList = (byte) (groupByAdjList | values.next().getAdjBitMap());
-            count ++;
+            KmerCountValue geneValue = values.next();
+            groupByAdjList = (byte) (groupByAdjList | geneValue.getAdjBitMap());
+            count = count + (int) geneValue.getCount();
         }
         if (count >= 127)
             bytCount = (byte) 127;
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixDriver.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixDriver.java
index 6e55f09..b90ab23 100755
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixDriver.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixDriver.java
@@ -28,8 +28,6 @@
 import org.apache.hadoop.mapred.TextInputFormat;
 import org.kohsuke.args4j.CmdLineParser;
 import org.kohsuke.args4j.Option;
-
-import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.genomix.type.KmerCountValue;
 
 /**
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixMapper.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixMapper.java
index 443cceb..cd8b7e3 100755
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixMapper.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixMapper.java
@@ -55,20 +55,20 @@
 
     /*succeed node
       A 00000001 1
-      G 00000010 2
-      C 00000100 4
+      C 00000010 2
+      G 00000100 4
       T 00001000 8
       precursor node
       A 00010000 16
-      G 00100000 32
-      C 01000000 64
+      C 00100000 32
+      G 01000000 64
       T 10000000 128*/
     @Override
     public void map(LongWritable key, Text value, OutputCollector<BytesWritable, KmerCountValue> output,
             Reporter reporter) throws IOException {
         /* A 00
-           G 01
-           C 10
+           C 01
+           G 10
            T 11*/
         String geneLine = value.toString(); // Read the Real Gene Line
         Pattern genePattern = Pattern.compile("[AGCT]+");
@@ -76,7 +76,7 @@
         boolean isValid = geneMatcher.matches();
         if (isValid == true) {
             /** first kmer */
-            byte count = 0;
+            byte count = 1;
             byte[] array = geneLine.getBytes();
             byte[] kmer = Kmer.compressKmer(KMER_SIZE, array, 0);
             byte pre = 0;
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixReducer.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixReducer.java
index 03bad56..676d6f1 100755
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixReducer.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/graphbuilding/GenomixReducer.java
@@ -41,8 +41,7 @@
         byte bytCount = 0;
         while (values.hasNext()) {
             //Merge By the all adjacent Nodes;
-            KmerCountValue geneValue = values.next();
-            
+            KmerCountValue geneValue = values.next();            
             groupByAdjList = (byte) (groupByAdjList | geneValue.getAdjBitMap());
             count = count + (int) geneValue.getCount();
         }
diff --git a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/graphbuilding/GraphBuildingTest.java b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/graphbuilding/GraphBuildingTest.java
index 28cbbbc..6bd3bd5 100755
--- a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/graphbuilding/GraphBuildingTest.java
+++ b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/graphbuilding/GraphBuildingTest.java
@@ -35,23 +35,24 @@
 
 import edu.uci.ics.genomix.type.Kmer;
 import edu.uci.ics.genomix.type.KmerCountValue;
+import edu.uci.ics.utils.TestUtils;
 /**
  * This class test the correctness of graphbuilding program
  */
 @SuppressWarnings("deprecation")
 public class GraphBuildingTest {
 
-    private static final String ACTUAL_RESULT_DIR = "actual";
-    @SuppressWarnings("deprecation")
+    private static final String ACTUAL_RESULT_DIR = "actual1";
+    private static final String COMPARE_DIR = "compare";
     private JobConf conf = new JobConf();
     private static final String HADOOP_CONF_PATH = ACTUAL_RESULT_DIR + File.separator + "conf.xml";
-    private static final String DATA_PATH = "data/webmap/text.txt";
+    private static final String DATA_PATH = "data/webmap/Test.txt";
     private static final String HDFS_PATH = "/webmap";
-    private static final String RESULT_PATH = "/result2";
-    private static final String EXPECTED_PATH = "expected/result2";
-    private static final String TEST_SOURCE_DIR = "testactual/source.txt";
+    private static final String RESULT_PATH = "/result1";
+    private static final String EXPECTED_PATH = "expected/result1";
+    private static final String TEST_SOURCE_DIR = COMPARE_DIR + RESULT_PATH + "/comparesource.txt";
     private static final int COUNT_REDUCER = 4;
-    private static final int SIZE_KMER = 12;
+    private static final int SIZE_KMER = 3;
     
     private MiniDFSCluster dfsCluster;
     private MiniMRCluster mrCluster;
@@ -70,11 +71,12 @@
 
         SequenceFile.Reader reader = null;
         Path path = new Path(RESULT_PATH + "/part-00000");
-        reader = new SequenceFile.Reader(dfs, path, conf);
+        reader = new SequenceFile.Reader(dfs, path, conf); 
         BytesWritable key = (BytesWritable) ReflectionUtils.newInstance(reader.getKeyClass(), conf);
         KmerCountValue value = (KmerCountValue) ReflectionUtils.newInstance(reader.getValueClass(), conf);
         File filePathTo = new File(TEST_SOURCE_DIR);
         BufferedWriter bw = new BufferedWriter(new FileWriter(filePathTo));
+        
         while (reader.next(key, value)) {
             bw.write(Kmer.recoverKmerFrom(SIZE_KMER, key.getBytes(), 0, key.getLength()) + "\t" + value.toString());
             bw.newLine();
@@ -82,7 +84,7 @@
         bw.close();
 
         dumpResult();
-//        TestUtils.compareWithResult(new File(TEST_SOURCE_DIR), new File(EXPECTED_PATH));
+        TestUtils.compareWithResult(new File(TEST_SOURCE_DIR), new File(EXPECTED_PATH));
 
         cleanupHadoop();
 
@@ -114,7 +116,7 @@
 
     private void dumpResult() throws IOException {
         Path src = new Path(RESULT_PATH);
-        Path dest = new Path(ACTUAL_RESULT_DIR + "/");
+        Path dest = new Path(ACTUAL_RESULT_DIR);
         dfs.copyToLocalFile(src, dest);
     }
 }
diff --git a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/utils/TestUtils.java b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/utils/TestUtils.java
index 237a764..015017a 100755
--- a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/utils/TestUtils.java
+++ b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/utils/TestUtils.java
@@ -71,7 +71,5 @@
 
     public static void main(String[] args) throws Exception {
         TestUtils TUtils = new TestUtils();
-        TUtils.compareWithResult(new File("/Users/hadoop/Documents/workspace/Test/part-00000"), new File(
-                "/Users/hadoop/Documents/workspace/Test/test.txt"));
     }
 }
