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 c8f7e63..88ae57d 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
@@ -4,12 +4,9 @@
 import java.io.IOException;
 
 import org.apache.hadoop.fs.FSDataOutputStream;
-import org.apache.hadoop.io.BytesWritable;
-import org.apache.hadoop.io.SequenceFile;
-import org.apache.hadoop.io.SequenceFile.CompressionType;
-import org.apache.hadoop.io.SequenceFile.Writer;
 import org.apache.hadoop.mapred.JobConf;
 
+import edu.uci.ics.genomix.dataflow.util.NonSyncWriter;
 import edu.uci.ics.genomix.type.KmerCountValue;
 import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
 import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
@@ -33,7 +30,8 @@
 		}
 
 		ConfFactory cf;
-		Writer writer = null;
+		//Writer writer = null;
+		NonSyncWriter writer = null;
 
 		KmerCountValue reEnterCount = new KmerCountValue();
 		/**
@@ -44,9 +42,10 @@
 				throws HyracksDataException {
 			try {
 				if (writer == null) {
-					writer = SequenceFile.createWriter(cf.getConf(),
-							(FSDataOutputStream) output, BytesWritable.class,
-							BytesWritable.class, CompressionType.NONE, null);
+					writer = new NonSyncWriter((FSDataOutputStream) output);
+//					writer = SequenceFile.createWriter(cf.getConf(),
+//							(FSDataOutputStream) output, BytesWritable.class,
+//							BytesWritable.class, CompressionType.NONE, null);
 				}
 				byte[] kmer = tuple.getFieldData(0);
 				int keyStart = tuple.getFieldStart(0);
diff --git a/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/dataflow/util/NonSyncWriter.java b/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/dataflow/util/NonSyncWriter.java
new file mode 100644
index 0000000..24c4113
--- /dev/null
+++ b/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/dataflow/util/NonSyncWriter.java
@@ -0,0 +1,26 @@
+package edu.uci.ics.genomix.dataflow.util;
+
+import java.io.IOException;
+
+import org.apache.hadoop.fs.FSDataOutputStream;
+import org.apache.hadoop.io.SequenceFile.ValueBytes;
+
+public class NonSyncWriter {
+	private FSDataOutputStream out;
+
+	public NonSyncWriter(FSDataOutputStream output) {
+		out = output;
+	}
+
+	public void appendRaw(byte[] keyData, int keyOffset, int keyLength,
+			ValueBytes val) throws IOException {
+		out.writeInt(keyLength + val.getSize()); // total record length
+
+		out.writeInt(keyLength); // key portion length
+
+		out.write(keyData, keyOffset, keyLength); // key
+
+		val.writeUncompressedBytes(out); // value
+	}
+
+}
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 7dd310c..8957d39 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
@@ -104,6 +104,14 @@
 		}
 		return strKmer.toString();
 	}
+	
+	public static int getByteNumFromK(int k){
+		int x = k/4;
+		if (k%4 !=0){
+			x+=1;
+		}
+		return x;
+	}
 
 	/**
 	 * Compress Kmer into bytes array AATAG will compress as [0 0 0 G][A T A A]
@@ -116,7 +124,7 @@
 	 * @return initialed kmer array
 	 */
 	public static byte[] CompressKmer(int k, byte[] array, int start) {
-		final int byteNum = (byte) Math.ceil((double) k / 4.0);
+		final int byteNum = getByteNumFromK(k);
 		byte[] bytes = new byte[byteNum];
 
 		byte l = 0;
