diff --git a/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/dataflow/KMerSequenceWriterFactory.java b/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/dataflow/KMerSequenceWriterFactory.java
index e25ce40..c8f7e63 100644
--- a/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/dataflow/KMerSequenceWriterFactory.java
+++ b/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/dataflow/KMerSequenceWriterFactory.java
@@ -35,6 +35,7 @@
 		ConfFactory cf;
 		Writer writer = null;
 
+		KmerCountValue reEnterCount = new KmerCountValue();
 		/**
 		 * assumption is that output never change source!
 		 */
@@ -50,8 +51,8 @@
 				byte[] kmer = tuple.getFieldData(0);
 				int keyStart = tuple.getFieldStart(0);
 				int keyLength = tuple.getFieldLength(0);
-				writer.appendRaw(kmer, keyStart, keyLength, new KmerCountValue(
-						tuple));
+				reEnterCount.reset(tuple);
+				writer.appendRaw(kmer, keyStart, keyLength, reEnterCount);
 			} catch (IOException e) {
 				throw new HyracksDataException(e);
 			}
diff --git a/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/driver/Driver.java b/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/driver/Driver.java
index f9b2736..e0bd786 100644
--- a/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/driver/Driver.java
+++ b/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/driver/Driver.java
@@ -7,10 +7,6 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.mapred.JobConf;
-import org.apache.hadoop.mapreduce.Job;
-import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
-import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 import org.apache.hadoop.util.GenericOptionsParser;
 
 import edu.uci.ics.genomix.job.GenomixJob;
diff --git a/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/type/Kmer.java b/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/type/Kmer.java
index 8517432..1fbcc22 100644
--- a/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/type/Kmer.java
+++ b/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/type/Kmer.java
@@ -75,34 +75,34 @@
 		public static String getSymbolFromBitMap(byte code) {
 			int left = (code >> 4) & 0x0F;
 			int right = code & 0x0F;
-			String str = new String();
+			StringBuilder str = new StringBuilder();
 			for (int i = A; i <= T; i++) {
 				if ((left & (1 << i)) != 0) {
-					str += (char)GENE_SYMBOL[i];
+					str.append((char)GENE_SYMBOL[i]);
 				}
 			}
-			str += '|';
+			str.append('|');
 			for (int i = A; i <= T; i++) {
 				if ((right & (1 << i)) != 0) {
-					str += (char)GENE_SYMBOL[i];
+					str.append((char)GENE_SYMBOL[i]);
 				}
 			}
-			return str;
+			return str.toString();
 		}
 	}
 
 	public static String recoverKmerFrom(int k, byte[] keyData, int keyStart,
 			int keyLength) {
-		String strKmer = new String();
+		StringBuilder strKmer = new StringBuilder();
 		int byteId = keyStart + keyLength - 1;
 		byte currentbyte = keyData[byteId];
 		for (int geneCount = 0; geneCount < k; geneCount++) {
 			if (geneCount % 4 == 0 && geneCount > 0) {
 				currentbyte = keyData[--byteId];
 			}
-			strKmer += (char) GENE_SYMBOL[(currentbyte >> ((geneCount % 4) * 2)) & 0x03];
+			strKmer.append((char) GENE_SYMBOL[(currentbyte >> ((geneCount % 4) * 2)) & 0x03]);
 		}
-		return strKmer;
+		return strKmer.toString();
 	}
 
 	/**
@@ -196,4 +196,5 @@
 		System.out.println(recoverKmerFrom(k, kmer, 0, kmer.length));
 
 	}
+
 }
diff --git a/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/type/KmerCountValue.java b/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/type/KmerCountValue.java
index e943798..6c29209 100644
--- a/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/type/KmerCountValue.java
+++ b/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/type/KmerCountValue.java
@@ -15,8 +15,12 @@
 	private byte count;
 
 	public KmerCountValue(ITupleReference tuple) {
-		adjBitMap = tuple.getFieldData(1)[tuple.getFieldStart(1)];
-		count = tuple.getFieldData(2)[tuple.getFieldStart(2)];
+		reset(tuple);
+	}
+	
+	public KmerCountValue() {
+		adjBitMap = 0;
+		count = 0;
 	}
 
 	@Override
@@ -55,4 +59,9 @@
 		return Kmer.GENE_CODE.getSymbolFromBitMap(adjBitMap) + '\t' + String.valueOf(count);
 	}
 
+	public void reset(ITupleReference tuple) {
+		adjBitMap = tuple.getFieldData(1)[tuple.getFieldStart(1)];
+		count = tuple.getFieldData(2)[tuple.getFieldStart(2)];
+	}
+
 }
\ No newline at end of file
