diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/velvetgraphbuilding/DeepGraphBuildingMapper.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/velvetgraphbuilding/DeepGraphBuildingMapper.java
index 7f9e995..ccbabd7 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/velvetgraphbuilding/DeepGraphBuildingMapper.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/velvetgraphbuilding/DeepGraphBuildingMapper.java
@@ -32,10 +32,15 @@
     @Override
     public void map(KmerBytesWritable key, PositionListWritable value, OutputCollector<PositionWritable, PositionListAndKmerWritable> output,
             Reporter reporter) throws IOException {
+        if(key.toString().equals("AGAAG")) {
+            int y = 4;
+            int x = y;
+        }
         listPosZeroInRead.reset();
         listPosNonZeroInRead.reset();
         outputListAndKmer.reset();
-        for(int i = 0; i < value.getLength(); i++) {
+        System.out.println(value.getLength());
+        for(int i = 0; i < value.getCountOfPosition(); i++) {
             VertexID.set(value.getPosition(i));
             if(VertexID.getPosInRead() == 0) {
                 listPosZeroInRead.append(VertexID);
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/velvetgraphbuilding/GraphBuildingDriver.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/velvetgraphbuilding/GraphBuildingDriver.java
index 3bd1bf8..4726380 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/velvetgraphbuilding/GraphBuildingDriver.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/velvetgraphbuilding/GraphBuildingDriver.java
@@ -82,7 +82,8 @@
 
         FileInputFormat.setInputPaths(conf, new Path(inputPath));
         FileOutputFormat.setOutputPath(conf, new Path(inputPath + "-step1"));
-        conf.setNumReduceTasks(numReducers);
+        if(numReducers == 0)
+        conf.setNumReduceTasks(numReducers + 2);
 
         FileSystem dfs = FileSystem.get(conf);
         dfs.delete(new Path(inputPath + "-step1"), true);
@@ -100,26 +101,24 @@
         conf.setMapperClass(DeepGraphBuildingMapper.class);
         conf.setReducerClass(DeepGraphBuildingReducer.class);
 
-
         conf.setMapOutputKeyClass(PositionWritable.class);
         conf.setMapOutputValueClass(PositionListAndKmerWritable.class);
-            
 
         conf.setPartitionerClass(ReadIDPartitioner.class);
 
-        conf.setOutputKeyComparatorClass(PositionWritable.Comparator.class);
-        conf.setOutputValueGroupingComparator(PositionWritable.FirstComparator.class);
+ //       conf.setOutputKeyComparatorClass(PositionWritable.Comparator.class);
+ //       conf.setOutputValueGroupingComparator(PositionWritable.FirstComparator.class);
 
         conf.setInputFormat(SequenceFileInputFormat.class);
         if (seqOutput == true)
             conf.setOutputFormat(SequenceFileOutputFormat.class);
         else
             conf.setOutputFormat(TextOutputFormat.class);
-        if(numReducers != 0){
-        conf.setOutputKeyClass(NodeWritable.class);
-        conf.setOutputValueClass(NullWritable.class);
-        }
-        else {
+        
+        if (numReducers != 0) {
+            conf.setOutputKeyClass(NodeWritable.class);
+            conf.setOutputValueClass(NullWritable.class);
+        } else {
             conf.setOutputKeyClass(PositionWritable.class);
             conf.setOutputValueClass(PositionListAndKmerWritable.class);
         }
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/velvetgraphbuilding/PositionListAndKmerWritable.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/velvetgraphbuilding/PositionListAndKmerWritable.java
index fff3faf..9becd58 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/velvetgraphbuilding/PositionListAndKmerWritable.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/velvetgraphbuilding/PositionListAndKmerWritable.java
@@ -60,6 +60,7 @@
         this.vertexIDList.set(list);
         this.kmer.set(kmer);
     }
+    
     @Override
     public void readFields(DataInput in) throws IOException {
         this.countOfKmer = in.readInt();
@@ -78,4 +79,8 @@
     public int compareTo(PositionListAndKmerWritable o) {
         return 0;
     }
+    
+    public String toString() {
+        return vertexIDList.toString() + "\t" + kmer.toString();
+    }
 }
