Mapper passes test
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/oldtype/NodeWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/oldtype/NodeWritable.java
index 3931e7f..9fc1829 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/oldtype/NodeWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/oldtype/NodeWritable.java
@@ -211,13 +211,13 @@
     @Override
     public String toString() {
         StringBuilder sbuilder = new StringBuilder();
-        sbuilder.append('(');
+        sbuilder.append('{');
         sbuilder.append(nodeID.toString()).append('\t');
         sbuilder.append(forwardForwardList.toString()).append('\t');
         sbuilder.append(forwardReverseList.toString()).append('\t');
         sbuilder.append(reverseForwardList.toString()).append('\t');
         sbuilder.append(reverseReverseList.toString()).append('\t');
-        sbuilder.append(kmer.toString()).append(')');
+        sbuilder.append(kmer.toString()).append('}');
         return sbuilder.toString();
     }
 
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/IntermediateNodeWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/IntermediateNodeWritable.java
deleted file mode 100644
index 2787ef3..0000000
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/IntermediateNodeWritable.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package edu.uci.ics.genomix.type;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.io.Serializable;
-
-import org.apache.hadoop.io.WritableComparable;
-
-public class IntermediateNodeWritable implements WritableComparable<IntermediateNodeWritable>, Serializable{
-
-    private static final long serialVersionUID = 1L;
-    public static final IntermediateNodeWritable EMPTY_NODE = new IntermediateNodeWritable();
-    
-    private KmerListWritable forwardForwardList;
-    private KmerListWritable forwardReverseList;
-    private KmerListWritable reverseForwardList;
-    private KmerListWritable reverseReverseList;
-    private PositionWritable nodeId;
-    
-    public IntermediateNodeWritable(){
-        forwardForwardList = new KmerListWritable();
-        forwardReverseList = new KmerListWritable();
-        reverseForwardList = new KmerListWritable();
-        reverseReverseList = new KmerListWritable();
-        nodeId = new PositionWritable();
-    }
-    
-    public IntermediateNodeWritable(KmerListWritable FFList, KmerListWritable FRList,
-            KmerListWritable RFList, KmerListWritable RRList, PositionWritable uniqueKey) {
-        this();
-        set(FFList, FRList, RFList, RRList, uniqueKey);
-    }
-    
-    public void set(IntermediateNodeWritable node){
-        set(node.forwardForwardList, node.forwardReverseList, node.reverseForwardList, 
-                node.reverseReverseList, node.nodeId);
-    }
-    
-    public void set(KmerListWritable FFList, KmerListWritable FRList,
-            KmerListWritable RFList, KmerListWritable RRList, PositionWritable uniqueKey) {
-        this.forwardForwardList.set(FFList);
-        this.forwardReverseList.set(FRList);
-        this.reverseForwardList.set(RFList);
-        this.reverseReverseList.set(RRList);
-        this.nodeId.set(uniqueKey);
-    }
-
-    public void reset(int kmerSize) {
-        forwardForwardList.reset();
-        forwardReverseList.reset();
-        reverseForwardList.reset();
-        reverseReverseList.reset();
-        nodeId.reset();
-    }
-    
-    public KmerListWritable getFFList() {
-        return forwardForwardList;
-    }
-
-    public void setFFList(KmerListWritable forwardForwardList) {
-        this.forwardForwardList.set(forwardForwardList);
-    }
-
-    public KmerListWritable getFRList() {
-        return forwardReverseList;
-    }
-
-    public void setFRList(KmerListWritable forwardReverseList) {
-        this.forwardReverseList.set(forwardReverseList);
-    }
-
-    public KmerListWritable getRFList() {
-        return reverseForwardList;
-    }
-
-    public void setRFList(KmerListWritable reverseForwardList) {
-        this.reverseForwardList.set(reverseForwardList);
-    }
-
-    public KmerListWritable getRRList() {
-        return reverseReverseList;
-    }
-
-    public void setRRList(KmerListWritable reverseReverseList) {
-        this.reverseReverseList.set(reverseReverseList);
-    }
-
-	public PositionWritable getNodeId() {
-        return nodeId;
-    }
-
-    public void setNodeId(PositionWritable nodeId) {
-        this.nodeId.set(nodeId);
-    }
-
-    @Override
-    public void readFields(DataInput in) throws IOException {
-        this.forwardForwardList.readFields(in);
-        this.forwardReverseList.readFields(in);
-        this.reverseForwardList.readFields(in);
-        this.reverseReverseList.readFields(in);
-        this.nodeId.readFields(in);
-    }
-
-    @Override
-    public void write(DataOutput out) throws IOException {
-        this.forwardForwardList.write(out);
-        this.forwardReverseList.write(out);
-        this.reverseForwardList.write(out);
-        this.reverseReverseList.write(out);
-        this.nodeId.write(out);
-    }
-
-    @Override
-    public int compareTo(IntermediateNodeWritable other) {
-        // TODO Auto-generated method stub
-        return this.nodeId.compareTo(other.nodeId);
-    }
-    
-    @Override
-    public int hashCode() {
-        return this.nodeId.hashCode();
-    }
-    
-    @Override
-    public boolean equals(Object o) {
-        if (o instanceof IntermediateNodeWritable) {
-            IntermediateNodeWritable nw = (IntermediateNodeWritable) o;
-            return (this.forwardForwardList.equals(nw.forwardForwardList)
-                    && this.forwardReverseList.equals(nw.forwardReverseList)
-                    && this.reverseForwardList.equals(nw.reverseForwardList)
-                    && this.reverseReverseList.equals(nw.reverseReverseList) && (this.nodeId.equals(nw.nodeId)));
-        }
-        return false;
-    }
-    
-    @Override
-    public String toString() {
-        StringBuilder sbuilder = new StringBuilder();
-        sbuilder.append('(');
-        sbuilder.append(nodeId.toString()).append('\t');
-        sbuilder.append(forwardForwardList.toString()).append('\t');
-        sbuilder.append(forwardReverseList.toString()).append('\t');
-        sbuilder.append(reverseForwardList.toString()).append('\t');
-        sbuilder.append(reverseReverseList.toString()).append('\t').append(')');
-        return sbuilder.toString();
-    }
-}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java
index 0f91a7c..b791515 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java
@@ -17,7 +17,7 @@
     protected byte[] storage;
     protected int offset;
     protected int valueCount;
-    public int kmerByteSize = 0; //default kmerSize = 5, kmerByteSize = 2, fix length once setting
+    public int kmerByteSize = 0; 
     public int kmerlength = 0;
     protected static final byte[] EMPTY = {};
     
@@ -29,13 +29,10 @@
         this.offset = 0;
     }
     
-    public KmerListWritable(int kmerSize) {
+    public KmerListWritable(int kmerlength) {
         this();
-        this.kmerByteSize = KmerUtil.getByteNumFromK(kmerSize);;
-    }
-    
-    public KmerListWritable(int count, byte[] data, int offset) {
-        setNewReference(count, data, offset);
+        this.kmerlength = kmerlength;
+        this.kmerByteSize = KmerUtil.getByteNumFromK(kmerlength);;
     }
     
     public KmerListWritable(int kmerlength, int count, byte[] data, int offset) {
@@ -66,6 +63,20 @@
         valueCount += 1;
     }
     
+    /*
+     * Append the otherList to the end of myList
+     */
+    public void appendList(KmerListWritable otherList) {
+        if (otherList.valueCount > 0) {
+            setSize((valueCount + otherList.valueCount) * PositionWritable.LENGTH);
+            // copy contents of otherList into the end of my storage
+            System.arraycopy(otherList.storage, otherList.offset,
+                    storage, offset + valueCount * kmerByteSize, 
+                    otherList.valueCount * kmerByteSize);
+            valueCount += otherList.valueCount;
+        }
+    }
+    
     protected void setSize(int size) {
         if (size > getCapacity()) {
             setCapacity((size * 3 / 2));
@@ -177,10 +188,6 @@
     public String toString() {
         StringBuilder sbuilder = new StringBuilder();
         sbuilder.append('[');
-//        for (KmerBytesWritable kmer : this) {
-//            sbuilder.append(kmer.toString());
-//            sbuilder.append(',');
-//        }
         for(int i = 0; i < valueCount; i++){
             sbuilder.append(getPosition(i).toString());
             sbuilder.append(',');
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
index c5576f6..e265fa9 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
@@ -13,7 +13,7 @@
     private static final long serialVersionUID = 1L;
     public static final NodeWritable EMPTY_NODE = new NodeWritable(0);
     
-    private PositionWritable nodeId;
+    private PositionListWritable nodeId;
     private KmerListWritable forwardForwardList;
     private KmerListWritable forwardReverseList;
     private KmerListWritable reverseForwardList;
@@ -35,7 +35,7 @@
     }
     
     public NodeWritable(int kmerSize) {
-        nodeId = new PositionWritable();
+        nodeId = new PositionListWritable();
         forwardForwardList = new KmerListWritable();
         forwardReverseList = new KmerListWritable();
         reverseForwardList = new KmerListWritable();
@@ -43,7 +43,7 @@
         kmer = new KmerBytesWritable(kmerSize);
     }
     
-    public NodeWritable(PositionWritable nodeId, KmerListWritable FFList, KmerListWritable FRList,
+    public NodeWritable(PositionListWritable nodeId, KmerListWritable FFList, KmerListWritable FRList,
             KmerListWritable RFList, KmerListWritable RRList, KmerBytesWritable kmer) {
         this(kmer.getKmerLength());
         set(nodeId, FFList, FRList, RFList, RRList, kmer);
@@ -54,7 +54,7 @@
                 node.reverseReverseList, node.kmer);
     }
     
-    public void set(PositionWritable nodeId, KmerListWritable FFList, KmerListWritable FRList,
+    public void set(PositionListWritable nodeId, KmerListWritable FFList, KmerListWritable FRList,
             KmerListWritable RFList, KmerListWritable RRList, KmerBytesWritable kmer) {
         this.nodeId.set(nodeId);
         this.forwardForwardList.set(FFList);
@@ -72,14 +72,6 @@
         reverseReverseList.reset();
         kmer.reset(kmerSize);
     }
-    
-    public PositionWritable getNodeId() {
-        return nodeId;
-    }
-
-    public void setNodeId(PositionWritable nodeId) {
-        this.nodeId = nodeId;
-    }
 
     public KmerBytesWritable getKmer() {
         return kmer;
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixDriver.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixDriver.java
index 2f463a4..3723ed9 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixDriver.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixDriver.java
@@ -10,14 +10,12 @@
 import org.apache.hadoop.mapred.JobConf;
 import org.apache.hadoop.mapred.SequenceFileOutputFormat;
 import org.apache.hadoop.mapred.TextInputFormat;
+import org.apache.hadoop.mapred.TextOutputFormat;
 import org.kohsuke.args4j.CmdLineParser;
 import org.kohsuke.args4j.Option;
 
-import edu.uci.ics.genomix.hadoop.graphbuilding.GenomixCombiner;
-import edu.uci.ics.genomix.hadoop.graphbuilding.GenomixMapper;
-import edu.uci.ics.genomix.hadoop.graphbuilding.GenomixReducer;
-import edu.uci.ics.genomix.hadoop.oldtype.KmerBytesWritable;
-import edu.uci.ics.genomix.hadoop.oldtype.KmerCountValue;
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable;
 
 
 @SuppressWarnings("deprecation")
@@ -40,23 +38,33 @@
         public int readLength;
     }
     
-    public void run(String inputPath, String outputPath, int numReducers, int sizeKmer, int readLength) throws IOException{
+    public void run(String inputPath, String outputPath, int numReducers, int sizeKmer, int readLength,
+            boolean seqOutput, String defaultConfPath) throws IOException{
         JobConf conf = new JobConf(GenomixDriver.class);
         conf.setInt("sizeKmer", sizeKmer);
         conf.setInt("readLength", readLength);
+        if (defaultConfPath != null) {
+            conf.addResource(new Path(defaultConfPath));
+        }
 
         conf.setJobName("Genomix Graph Building");
         conf.setMapperClass(GenomixMapper.class);
         conf.setReducerClass(GenomixReducer.class);
-        conf.setCombinerClass(GenomixCombiner.class);
 
         conf.setMapOutputKeyClass(KmerBytesWritable.class);
-        conf.setMapOutputValueClass(KmerCountValue.class);
-
+        conf.setMapOutputValueClass(NodeWritable.class);
+        
+        //InputFormat and OutputFormat for Reducer
         conf.setInputFormat(TextInputFormat.class);
-        conf.setOutputFormat(SequenceFileOutputFormat.class);
+        if (seqOutput == true)
+            conf.setOutputFormat(SequenceFileOutputFormat.class);
+        else
+            conf.setOutputFormat(TextOutputFormat.class);
+        
+        //Output Key/Value Class
         conf.setOutputKeyClass(KmerBytesWritable.class);
-        conf.setOutputValueClass(KmerCountValue.class);
+        conf.setOutputValueClass(NodeWritable.class);
+        
         FileInputFormat.setInputPaths(conf, new Path(inputPath));
         FileOutputFormat.setOutputPath(conf, new Path(outputPath));
         conf.setNumReduceTasks(numReducers);
@@ -71,6 +79,7 @@
         CmdLineParser parser = new CmdLineParser(options);
         parser.parseArgument(args);
         GenomixDriver driver = new GenomixDriver();
-        driver.run(options.inputPath, options.outputPath, options.numReducers, options.sizeKmer, options.readLength);
+        driver.run(options.inputPath, options.outputPath, options.numReducers, options.sizeKmer, 
+                options.readLength, true, null);
     }
 }
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java
index 3316d62..8c9cfc8 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java
@@ -13,7 +13,6 @@
 import org.apache.hadoop.mapred.Reporter;
 
 import edu.uci.ics.genomix.type.KmerBytesWritable;
-import edu.uci.ics.genomix.type.KmerBytesWritableFactory;
 import edu.uci.ics.genomix.type.KmerListWritable;
 import edu.uci.ics.genomix.type.NodeWritable;
 import edu.uci.ics.genomix.type.PositionWritable;
@@ -36,9 +35,9 @@
     private KmerBytesWritable nextReverseKmer;
     private NodeWritable outputNode;
     private PositionWritable nodeId;
-    private KmerListWritable kmerList;
+    private KmerListWritable edgeListForPreKmer;
+    private KmerListWritable edgeListForNextKmer;
     
-    private KmerBytesWritableFactory kmerFactory;
     private KmerDir preKmerDir;
     private KmerDir curKmerDir;
     private KmerDir nextKmerDir;
@@ -56,8 +55,8 @@
         nextReverseKmer = new KmerBytesWritable(KMER_SIZE);
         outputNode = new NodeWritable();
         nodeId = new PositionWritable();
-        kmerList = new KmerListWritable();
-        kmerFactory = new KmerBytesWritableFactory(KMER_SIZE);
+        edgeListForPreKmer = new KmerListWritable();
+        edgeListForNextKmer = new KmerListWritable();
         preKmerDir = KmerDir.FORWARD;
         curKmerDir = KmerDir.FORWARD;
         nextKmerDir = KmerDir.FORWARD;
@@ -85,8 +84,8 @@
             
             /** first kmer **/
             curForwardKmer.setByRead(array, 0);
-            curReverseKmer.set(kmerFactory.reverse(curForwardKmer));
-            curKmerDir = curForwardKmer.compareTo(curReverseKmer) >= 0 ? KmerDir.FORWARD : KmerDir.REVERSE;
+            curReverseKmer.setByReadReverse(array, 0);
+            curKmerDir = curForwardKmer.compareTo(curReverseKmer) <= 0 ? KmerDir.FORWARD : KmerDir.REVERSE;
             setNextKmer(array[KMER_SIZE]);
             //set value.nodeId
             nodeId.set(mateId, readID, 1);
@@ -129,28 +128,28 @@
     		case FORWARD:
     			switch(preKmerDir){
     				case FORWARD:
-    					kmerList.reset();
-    					kmerList.append(preForwardKmer);
-    					outputNode.setRRList(kmerList);
+    				    edgeListForPreKmer.reset();
+    				    edgeListForPreKmer.append(preForwardKmer);
+    					outputNode.setRRList(edgeListForPreKmer);
     					break;
     				case REVERSE:
-    					kmerList.reset();
-    					kmerList.append(preReverseKmer);
-    					outputNode.setRFList(kmerList);
+    				    edgeListForPreKmer.reset();
+    				    edgeListForPreKmer.append(preReverseKmer);
+    					outputNode.setRFList(edgeListForPreKmer);
     					break;
     			}
     			break;
     		case REVERSE:
     			switch(preKmerDir){
     				case FORWARD:
-    					kmerList.reset();
-    					kmerList.append(nextForwardKmer);
-    					outputNode.setFRList(kmerList);
+    				    edgeListForPreKmer.reset();
+    				    edgeListForPreKmer.append(preForwardKmer);
+    					outputNode.setFRList(edgeListForPreKmer);
     					break;
     				case REVERSE:
-    					kmerList.reset();
-    					kmerList.append(nextReverseKmer);
-    					outputNode.setFFList(kmerList);
+    				    edgeListForPreKmer.reset();
+    				    edgeListForPreKmer.append(preReverseKmer);
+    					outputNode.setFFList(edgeListForPreKmer);
     					break;
     			}
     			break;
@@ -162,28 +161,28 @@
     		case FORWARD:
     			switch(nextKmerDir){
     				case FORWARD:
-    					kmerList.reset();
-    					kmerList.append(nextForwardKmer);
-    					outputNode.setFFList(kmerList);
+    					edgeListForNextKmer.reset();
+    					edgeListForNextKmer.append(nextForwardKmer);
+    					outputNode.setFFList(edgeListForNextKmer);
     					break;
     				case REVERSE:
-    					kmerList.reset();
-    					kmerList.append(nextReverseKmer);
-    					outputNode.setFRList(kmerList);
+    					edgeListForNextKmer.reset();
+    					edgeListForNextKmer.append(nextReverseKmer);
+    					outputNode.setFRList(edgeListForNextKmer);
     					break;
     			}
     			break;
     		case REVERSE:
     			switch(nextKmerDir){
     				case FORWARD:
-    					kmerList.reset();
-    					kmerList.append(nextForwardKmer);
-    					outputNode.setRFList(kmerList);
+    					edgeListForNextKmer.reset();
+    					edgeListForNextKmer.append(nextForwardKmer);
+    					outputNode.setRFList(edgeListForNextKmer);
     					break;
     				case REVERSE:
-    					kmerList.reset();
-    					kmerList.append(nextReverseKmer);
-    					outputNode.setRRList(kmerList);
+    					edgeListForNextKmer.reset();
+    					edgeListForNextKmer.append(nextReverseKmer);
+    					outputNode.setRRList(edgeListForNextKmer);
     					break;
     			}
     			break;
@@ -194,18 +193,16 @@
     public void setPreKmer(byte preChar){
         preForwardKmer.set(curForwardKmer);
         preForwardKmer.shiftKmerWithPreChar(preChar);
-        preReverseKmer.set(preForwardKmer);
-        preReverseKmer.set(kmerFactory.reverse(nextForwardKmer));
-        preKmerDir = preForwardKmer.compareTo(preReverseKmer) >= 0 ? KmerDir.FORWARD : KmerDir.REVERSE;
+        preReverseKmer.setByReadReverse(preForwardKmer.toString().getBytes(), preForwardKmer.getOffset());
+        preKmerDir = preForwardKmer.compareTo(preReverseKmer) <= 0 ? KmerDir.FORWARD : KmerDir.REVERSE;
     }
     
     //set nextKmer by shifting curKmer with nextChar
     public void setNextKmer(byte nextChar){
         nextForwardKmer.set(curForwardKmer);
         nextForwardKmer.shiftKmerWithNextChar(nextChar);
-        nextReverseKmer.set(nextForwardKmer);
-        nextReverseKmer.set(kmerFactory.reverse(nextForwardKmer));
-        nextKmerDir = nextForwardKmer.compareTo(nextReverseKmer) >= 0 ? KmerDir.FORWARD : KmerDir.REVERSE;
+        nextReverseKmer.setByReadReverse(nextForwardKmer.toString().getBytes(), nextForwardKmer.getOffset());
+        nextKmerDir = nextForwardKmer.compareTo(nextReverseKmer) <= 0 ? KmerDir.FORWARD : KmerDir.REVERSE;
     }
     
     //old curKmer becomes current preKmer
@@ -231,5 +228,5 @@
     		output.collect(curReverseKmer, outputNode);
     		break;
     }
-    }
+   }
 }
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java
index a710eca..d53e3bf 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java
@@ -14,13 +14,22 @@
 @SuppressWarnings("deprecation")
 public class GenomixReducer extends MapReduceBase implements
 	Reducer<KmerBytesWritable, NodeWritable, KmerBytesWritable, NodeWritable>{
-
+    
+    private NodeWritable outputNode = new NodeWritable();
+    
 	@Override
 	public void reduce(KmerBytesWritable key, Iterator<NodeWritable> values,
 			OutputCollector<KmerBytesWritable, NodeWritable> output,
 			Reporter reporter) throws IOException {
-		// TODO Auto-generated method stub
+		outputNode.reset(GenomixMapper.KMER_SIZE);
 		
+		//copy first item to outputNode
+		if(values.hasNext())
+		    outputNode.set(values.next());
+		while (values.hasNext()) {
+		    NodeWritable tmpNode = values.next();
+		    outputNode.getFFList().appendList(tmpNode.getFFList());
+		}
 	}
 
 }
diff --git a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTest.java b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTest.java
index d3d0357..b756839 100644
--- a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTest.java
+++ b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTest.java
@@ -12,17 +12,19 @@
 import org.apache.hadoop.hdfs.MiniDFSCluster;
 import org.apache.hadoop.mapred.JobConf;
 import org.apache.hadoop.mapred.MiniMRCluster;
+import org.junit.Test;
 
+@SuppressWarnings("deprecation")
 public class GraphBuildingTest {
 
     private JobConf conf = new JobConf();
-    private static final String ACTUAL_RESULT_DIR = "actual1";
+    private static final String ACTUAL_RESULT_DIR = "actual";
     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 = "/result1";
-    private static final String EXPECTED_PATH = "expected/";
-    private static final int COUNT_REDUCER = 2;
+    private static final String RESULT_PATH = "/result";
+    
+//    private static final int COUNT_REDUCER = 2;
     private static final int SIZE_KMER = 5;
     private static final int READ_LENGTH = 8;
     
@@ -30,13 +32,21 @@
     private MiniMRCluster mrCluster;
     private FileSystem dfs;
     
+    @Test
     public void test() throws Exception {
         FileUtils.forceMkdir(new File(ACTUAL_RESULT_DIR));
         FileUtils.cleanDirectory(new File(ACTUAL_RESULT_DIR));
         startHadoop();
+        TestMapKmerToNode();
         cleanupHadoop();
     }
     
+    public void TestMapKmerToNode() throws Exception {
+        GenomixDriver driver = new GenomixDriver();
+        driver.run(HDFS_PATH, RESULT_PATH, 0, SIZE_KMER, READ_LENGTH, false, HADOOP_CONF_PATH);
+        dumpResult();
+    }
+    
     private void startHadoop() throws IOException {
         FileSystem lfs = FileSystem.getLocal(new Configuration());
         lfs.delete(new Path("build"), true);
@@ -60,5 +70,10 @@
         mrCluster.shutdown();
         dfsCluster.shutdown();
     }
-
+    
+    private void dumpResult() throws IOException {
+        Path src = new Path(RESULT_PATH);
+        Path dest = new Path(ACTUAL_RESULT_DIR);
+        dfs.copyToLocalFile(src, dest);
+    }
 }
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java
index 3084722..3650553 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java
@@ -24,7 +24,7 @@
 import org.apache.hadoop.io.LongWritable;
 import org.apache.hadoop.io.Text;
 
-import edu.uci.ics.genomix.type.IntermediateNodeWritable;
+import edu.uci.ics.genomix.oldtype.IntermediateNodeWritable;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.genomix.type.KmerListWritable;
 import edu.uci.ics.genomix.type.PositionWritable;
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/job/JobGenCheckReader.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/job/JobGenCheckReader.java
index c4e7063..6026ac1 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/job/JobGenCheckReader.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/job/JobGenCheckReader.java
@@ -20,8 +20,8 @@
 
 import edu.uci.ics.genomix.hyracks.newgraph.dataflow.ReadsKeyValueParserFactory;
 import edu.uci.ics.genomix.hyracks.job.GenomixJobConf;
+import edu.uci.ics.genomix.oldtype.IntermediateNodeWritable;
 import edu.uci.ics.genomix.oldtype.PositionWritable;
-import edu.uci.ics.genomix.type.IntermediateNodeWritable;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.genomix.type.KmerListWritable;
 import edu.uci.ics.hyracks.api.client.NodeControllerInfo;