diff --git a/genomix/genomix-data/pom.xml b/genomix/genomix-data/pom.xml
index 651beb6..0d99c4a 100644
--- a/genomix/genomix-data/pom.xml
+++ b/genomix/genomix-data/pom.xml
@@ -22,8 +22,9 @@
 				<artifactId>maven-compiler-plugin</artifactId>
 				<version>2.0.2</version>
 				<configuration>
-					<source>1.6</source>
-					<target>1.6</target>
+					<source>1.7</source>
+					<target>1.7</target>
+					<fork>true</fork>
 				</configuration>
 			</plugin>
 		</plugins>
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/normalizers/Integer64NormalizedKeyComputerFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/normalizers/Integer64NormalizedKeyComputerFactory.java
deleted file mode 100644
index e69de29..0000000
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/normalizers/Integer64NormalizedKeyComputerFactory.java
+++ /dev/null
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/normalizers/VLongNormalizedKeyComputerFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/normalizers/VLongNormalizedKeyComputerFactory.java
deleted file mode 100644
index 17ca8cb..0000000
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/normalizers/VLongNormalizedKeyComputerFactory.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package edu.uci.ics.genomix.data.normalizers;
-
-import edu.uci.ics.genomix.data.partition.KmerHashPartitioncomputerFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.INormalizedKeyComputer;
-import edu.uci.ics.hyracks.api.dataflow.value.INormalizedKeyComputerFactory;
-
-public class VLongNormalizedKeyComputerFactory implements
-		INormalizedKeyComputerFactory {
-	private static final long serialVersionUID = 8735044913496854551L;
-
-	@Override
-	public INormalizedKeyComputer createNormalizedKeyComputer() {
-		return new INormalizedKeyComputer() {
-			private static final int POSTIVE_LONG_MASK = (3 << 30);
-			private static final int NON_NEGATIVE_INT_MASK = (2 << 30);
-			private static final int NEGATIVE_LONG_MASK = (0 << 30);
-
-			/**
-			 * one kmer
-			 */
-			@Override
-			public int normalize(byte[] bytes, int start, int length) {
-				long value = KmerHashPartitioncomputerFactory.getLong(bytes, start);
-
-				int highValue = (int) (value >> 32);
-				if (highValue > 0) {
-					/** * larger than Integer.MAX */
-					int highNmk = getKey(highValue);
-					highNmk >>= 2;
-					highNmk |= POSTIVE_LONG_MASK;
-					return highNmk;
-				} else if (highValue == 0) {
-					/** * smaller than Integer.MAX but >=0 */
-					int lowNmk = (int) value;
-					lowNmk >>= 2;
-					lowNmk |= NON_NEGATIVE_INT_MASK;
-					return lowNmk;
-				} else {
-					/** * less than 0: have not optimized for that */
-					int highNmk = getKey(highValue);
-					highNmk >>= 2;
-					highNmk |= NEGATIVE_LONG_MASK;
-					return highNmk;
-				}
-			}
-
-			private int getKey(int value) {
-				return value ^ Integer.MIN_VALUE;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/serde/ByteSerializerDeserializer.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/ByteSerializerDeserializer.java
similarity index 95%
rename from genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/serde/ByteSerializerDeserializer.java
rename to genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/ByteSerializerDeserializer.java
index d88c0a0..98159c0 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/serde/ByteSerializerDeserializer.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/ByteSerializerDeserializer.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.genomix.data.serde;
+package edu.uci.ics.genomix.data.std.accessors;
 
 import java.io.DataInput;
 import java.io.DataOutput;
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/KmerBinaryHashFunctionFamily.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/KmerBinaryHashFunctionFamily.java
new file mode 100644
index 0000000..b34772d
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/KmerBinaryHashFunctionFamily.java
@@ -0,0 +1,21 @@
+package edu.uci.ics.genomix.data.std.accessors;
+
+import edu.uci.ics.hyracks.api.dataflow.value.IBinaryHashFunction;
+import edu.uci.ics.hyracks.api.dataflow.value.IBinaryHashFunctionFamily;
+
+public class KmerBinaryHashFunctionFamily implements IBinaryHashFunctionFamily {
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public IBinaryHashFunction createBinaryHashFunction(final int seed) {
+
+		return new IBinaryHashFunction() {
+
+			@Override
+			public int hash(byte[] bytes, int offset, int length) {
+				return KmerHashPartitioncomputerFactory.hashBytes(bytes,
+						offset, length);
+			}
+		};
+	}
+}
\ No newline at end of file
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/partition/KmerHashPartitioncomputerFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/KmerHashPartitioncomputerFactory.java
similarity index 70%
rename from genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/partition/KmerHashPartitioncomputerFactory.java
rename to genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/KmerHashPartitioncomputerFactory.java
index ce60917..d136ef3 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/partition/KmerHashPartitioncomputerFactory.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/KmerHashPartitioncomputerFactory.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.genomix.data.partition;
+package edu.uci.ics.genomix.data.std.accessors;
 
 import java.nio.ByteBuffer;
 
@@ -19,14 +19,6 @@
 		return hash;
 	}
 	
-	public static long getLong(byte[] bytes, int offset) {
-        return (((long) (bytes[offset] & 0xff)) << 56) + (((long) (bytes[offset + 1] & 0xff)) << 48)
-                + (((long) (bytes[offset + 2] & 0xff)) << 40) + (((long) (bytes[offset + 3] & 0xff)) << 32)
-                + (((long) (bytes[offset + 4] & 0xff)) << 24) + (((long) (bytes[offset + 5] & 0xff)) << 16)
-                + (((long) (bytes[offset + 6] & 0xff)) << 8) + (((long) (bytes[offset + 7] & 0xff)) << 0);
-    }
-
-
 	@Override
 	public ITuplePartitionComputer createPartitioner() {
 		return new ITuplePartitionComputer() {
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/KmerNormarlizedComputerFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/KmerNormarlizedComputerFactory.java
new file mode 100644
index 0000000..1ca90c2
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/KmerNormarlizedComputerFactory.java
@@ -0,0 +1,23 @@
+package edu.uci.ics.genomix.data.std.accessors;
+
+import edu.uci.ics.genomix.data.std.primitive.KmerPointable;
+import edu.uci.ics.hyracks.api.dataflow.value.INormalizedKeyComputer;
+import edu.uci.ics.hyracks.api.dataflow.value.INormalizedKeyComputerFactory;
+
+public class KmerNormarlizedComputerFactory implements
+		INormalizedKeyComputerFactory {
+	private static final long serialVersionUID = 8735044913496854551L;
+
+	@Override
+	public INormalizedKeyComputer createNormalizedKeyComputer() {
+		return new INormalizedKeyComputer() {
+			/**
+			 * read one int from Kmer, make sure this int is consistent whith Kmer compartor 
+			 */
+			@Override
+			public int normalize(byte[] bytes, int start, int length) {
+				return KmerPointable.getIntReverse(bytes, start, length);
+			}
+		};
+	}
+}
\ No newline at end of file
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/LongBinaryHashFunctionFamily.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/LongBinaryHashFunctionFamily.java
deleted file mode 100644
index e69de29..0000000
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/LongBinaryHashFunctionFamily.java
+++ /dev/null
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/LongHashFunctionFamily.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/LongHashFunctionFamily.java
deleted file mode 100644
index e69de29..0000000
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/LongHashFunctionFamily.java
+++ /dev/null
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/MurmurHash3BinaryHashFunctionFamily.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/MurmurHash3BinaryHashFunctionFamily.java
deleted file mode 100644
index e69de29..0000000
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/MurmurHash3BinaryHashFunctionFamily.java
+++ /dev/null
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/VLongBinaryHashFunctionFamily.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/VLongBinaryHashFunctionFamily.java
deleted file mode 100644
index 7ead93e..0000000
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/accessors/VLongBinaryHashFunctionFamily.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package edu.uci.ics.genomix.data.std.accessors;
-
-import edu.uci.ics.genomix.data.std.primitive.VLongKmerPointable;
-import edu.uci.ics.hyracks.api.dataflow.value.IBinaryHashFunction;
-import edu.uci.ics.hyracks.api.dataflow.value.IBinaryHashFunctionFamily;
-import edu.uci.ics.hyracks.data.std.api.IHashable;
-
-public class VLongBinaryHashFunctionFamily implements IBinaryHashFunctionFamily {
-	private static final long serialVersionUID = 1L;
-
-	@Override
-	public IBinaryHashFunction createBinaryHashFunction(final int seed) {
-
-		return new IBinaryHashFunction() {
-			private VLongKmerPointable p = new VLongKmerPointable();
-
-			@Override
-			public int hash(byte[] bytes, int offset, int length) {
-				if (length + offset >= bytes.length)
-					throw new IllegalStateException("out of bound");
-				p.set(bytes, offset, length);
-				int hash = Math.abs( p.hash() * (seed + 1));
-				if (hash < 0) {
-					hash = Math.abs(hash + 1);
-				}
-				return hash;
-			}
-		};
-	}
-}
\ No newline at end of file
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/primitive/KmerPointable.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/primitive/KmerPointable.java
new file mode 100644
index 0000000..7864830
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/primitive/KmerPointable.java
@@ -0,0 +1,131 @@
+package edu.uci.ics.genomix.data.std.primitive;
+
+import edu.uci.ics.genomix.data.std.accessors.KmerHashPartitioncomputerFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
+import edu.uci.ics.hyracks.data.std.api.AbstractPointable;
+import edu.uci.ics.hyracks.data.std.api.IComparable;
+import edu.uci.ics.hyracks.data.std.api.IHashable;
+import edu.uci.ics.hyracks.data.std.api.INumeric;
+import edu.uci.ics.hyracks.data.std.api.IPointable;
+import edu.uci.ics.hyracks.data.std.api.IPointableFactory;
+
+public final class KmerPointable extends AbstractPointable implements
+		IHashable, IComparable, INumeric {
+	public static final ITypeTraits TYPE_TRAITS = new ITypeTraits() {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		public boolean isFixedLength() {
+			return false;
+		}
+
+		@Override
+		public int getFixedLength() {
+			return -1;
+		}
+	};
+
+	public static final IPointableFactory FACTORY = new IPointableFactory() {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		public IPointable createPointable() {
+			return new KmerPointable();
+		}
+
+		@Override
+		public ITypeTraits getTypeTraits() {
+			return TYPE_TRAITS;
+		}
+	};
+
+	public static short getShortReverse(byte[] bytes, int offset, int length) {
+		if (length < 2) {
+			return (short) (bytes[offset]);
+		}
+		return (short) (((bytes[offset + length - 1] & 0xff) << 8) + (bytes[offset
+				+ length - 2] & 0xff));
+	}
+
+	public static int getIntReverse(byte[] bytes, int offset, int length) {
+		if (length < 4) {
+			return getShortReverse(bytes, offset, length);
+		}
+		return ((bytes[offset + length - 1] & 0xff) << 24)
+				+ ((bytes[offset + length - 2] & 0xff) << 16)
+				+ ((bytes[offset + length - 3] & 0xff) << 8)
+				+ ((bytes[offset + length - 4] & 0xff) << 0);
+	}
+
+	public static long getLongReverse(byte[] bytes, int offset, int length) {
+		if (length < 8) {
+			return getIntReverse(bytes, offset, length);
+		}
+		return (((long) (bytes[offset + length - 1] & 0xff)) << 56)
+				+ (((long) (bytes[offset + length - 2] & 0xff)) << 48)
+				+ (((long) (bytes[offset + length - 3] & 0xff)) << 40)
+				+ (((long) (bytes[offset + length - 4] & 0xff)) << 32)
+				+ (((long) (bytes[offset + length - 5] & 0xff)) << 24)
+				+ (((long) (bytes[offset + length - 6] & 0xff)) << 16)
+				+ (((long) (bytes[offset + length - 7] & 0xff)) << 8)
+				+ (((long) (bytes[offset + length - 8] & 0xff)) << 0);
+	}
+
+	@Override
+	public int compareTo(IPointable pointer) {
+		return compareTo(pointer.getByteArray(), pointer.getStartOffset(),
+				pointer.getLength());
+	}
+
+	@Override
+	public int compareTo(byte[] bytes, int offset, int length) {
+
+		if (this.length != length) {
+			return this.length - length;
+		}
+
+		for (int i = length - 1; i >= 0; i--) {
+			if (this.bytes[this.start + i] < bytes[offset + i]) {
+				return -1;
+			} else if (this.bytes[this.start + i] > bytes[offset + i]) {
+				return 1;
+			}
+		}
+		return 0;
+	}
+
+	@Override
+	public int hash() {
+		return KmerHashPartitioncomputerFactory.hashBytes(bytes, start, length);
+	}
+
+	@Override
+	public byte byteValue() {
+		return bytes[start + length - 1];
+	}
+
+	@Override
+	public short shortValue() {
+		return getShortReverse(bytes, start, length);
+	}
+
+	@Override
+	public int intValue() {
+		return getIntReverse(bytes, start, length);
+	}
+
+	@Override
+	public long longValue() {
+		return getLongReverse(bytes, start, length);
+	}
+
+	@Override
+	public float floatValue() {
+		return Float.intBitsToFloat(intValue());
+	}
+
+	@Override
+	public double doubleValue() {
+		return Double.longBitsToDouble(longValue());
+	}
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/primitive/VLongKmerPointable.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/primitive/VLongKmerPointable.java
deleted file mode 100644
index cb71310..0000000
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/primitive/VLongKmerPointable.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package edu.uci.ics.genomix.data.std.primitive;
-
-import edu.uci.ics.genomix.data.partition.KmerHashPartitioncomputerFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
-import edu.uci.ics.hyracks.data.std.api.AbstractPointable;
-import edu.uci.ics.hyracks.data.std.api.IComparable;
-import edu.uci.ics.hyracks.data.std.api.IHashable;
-import edu.uci.ics.hyracks.data.std.api.INumeric;
-import edu.uci.ics.hyracks.data.std.api.IPointable;
-import edu.uci.ics.hyracks.data.std.api.IPointableFactory;
-
-public final class VLongKmerPointable extends AbstractPointable implements
-		IHashable, IComparable, INumeric {
-	public static final ITypeTraits TYPE_TRAITS = new ITypeTraits() {
-		private static final long serialVersionUID = 1L;
-
-		@Override
-		public boolean isFixedLength() {
-			return false;
-		}
-
-		@Override
-		public int getFixedLength() {
-			return -1;
-		}
-	};
-
-	public static final IPointableFactory FACTORY = new IPointableFactory() {
-		private static final long serialVersionUID = 1L;
-
-		@Override
-		public IPointable createPointable() {
-			return new VLongKmerPointable();
-		}
-
-		@Override
-		public ITypeTraits getTypeTraits() {
-			return TYPE_TRAITS;
-		}
-	};
-
-
-	public long getLong() {
-		return KmerHashPartitioncomputerFactory.getLong(bytes, start);
-	}
-
-	@Override
-	public int compareTo(IPointable pointer) {
-		return compareTo(pointer.getByteArray(), pointer.getStartOffset(),
-				pointer.getLength());
-	}
-
-	@Override
-	public int compareTo(byte[] bytes, int start, int length) {
-
-		if (this.length != length) {
-			return this.length - length;
-		}
-
-		for (int i = 0; i < length; i++) {
-			if (this.bytes[this.start + i] < bytes[start + i]) {
-				return -1;
-			} else if (this.bytes[this.start + i] > bytes[start + i]) {
-				return 1;
-			}
-		}
-		return 0;
-	}
-
-	@Override
-	public int hash() {// BKDRHash
-		int hash = 1;
-		for (int i = start + 1; i <= start + length; i++)
-			hash = (31 * hash) + (int) bytes[i];
-		if (hash < 0) {
-			hash = -(hash + 1);
-		}
-		return hash;
-	}
-
-	@Override
-	public byte byteValue() {
-		return (byte) bytes[start + 1];
-	}
-
-	@Override
-	public short shortValue() {
-
-		return (short) ((bytes[start + 2] & 0xff) << 8 + bytes[start + 1] & 0xff);
-	}
-
-	@Override
-	public int intValue() {
-		return (int) ((bytes[start + 4] & 0xff) << 24 + (bytes[start + 3] & 0xff) << 16 + (bytes[start + 2] & 0xff) << 8 + bytes[start + 1] & 0xff);
-	}
-
-	@Override
-	public long longValue() {
-		return getLong();
-	}
-
-	@Override
-	public float floatValue() {
-		return getLong();
-	}
-
-	@Override
-	public double doubleValue() {
-		return getLong();
-	}
-}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/primitive/VLongPointable.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/primitive/VLongPointable.java
deleted file mode 100644
index e69de29..0000000
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/data/std/primitive/VLongPointable.java
+++ /dev/null
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/FileScanDescriptor.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/FileScanDescriptor.java
deleted file mode 100644
index e69de29..0000000
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/FileScanDescriptor.java
+++ /dev/null
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/PrinterOperatorDescriptor.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/PrinterOperatorDescriptor.java
deleted file mode 100644
index e69de29..0000000
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/PrinterOperatorDescriptor.java
+++ /dev/null
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/ReadsKeyValueParserFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/ReadsKeyValueParserFactory.java
index fe22251..5764d3f 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/ReadsKeyValueParserFactory.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/ReadsKeyValueParserFactory.java
@@ -7,7 +7,7 @@
 import org.apache.hadoop.io.LongWritable;
 import org.apache.hadoop.io.Text;
 
-import edu.uci.ics.genomix.data.serde.ByteSerializerDeserializer;
+import edu.uci.ics.genomix.data.std.accessors.ByteSerializerDeserializer;
 import edu.uci.ics.genomix.type.Kmer;
 import edu.uci.ics.genomix.type.Kmer.GENE_CODE;
 import edu.uci.ics.hyracks.api.comm.IFrameWriter;
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/Tester.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/Tester.java
deleted file mode 100644
index e69de29..0000000
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/Tester.java
+++ /dev/null
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/aggregators/DistributedMergeLmerAggregateFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/aggregators/DistributedMergeLmerAggregateFactory.java
index 00f4256..98a0cd9 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/aggregators/DistributedMergeLmerAggregateFactory.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/aggregators/DistributedMergeLmerAggregateFactory.java
@@ -3,7 +3,7 @@
 import java.io.DataOutput;
 import java.io.IOException;
 
-import edu.uci.ics.genomix.data.serde.ByteSerializerDeserializer;
+import edu.uci.ics.genomix.data.std.accessors.ByteSerializerDeserializer;
 import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
 import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
 import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/aggregators/MergeKmerAggregateFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/aggregators/MergeKmerAggregateFactory.java
index 32c50bb..08ff462 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/aggregators/MergeKmerAggregateFactory.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/aggregators/MergeKmerAggregateFactory.java
@@ -3,7 +3,7 @@
 import java.io.DataOutput;
 import java.io.IOException;
 
-import edu.uci.ics.genomix.data.serde.ByteSerializerDeserializer;
+import edu.uci.ics.genomix.data.std.accessors.ByteSerializerDeserializer;
 import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
 import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
 import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/util/NonSyncWriter.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/util/NonSyncWriter.java
deleted file mode 100644
index 24c4113..0000000
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/dataflow/util/NonSyncWriter.java
+++ /dev/null
@@ -1,26 +0,0 @@
-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-hyracks/src/main/java/edu/uci/ics/genomix/job/JobGenBrujinGraph.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/job/JobGenBrujinGraph.java
index 7c4dcf0..c4a6300 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/job/JobGenBrujinGraph.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/job/JobGenBrujinGraph.java
@@ -7,11 +7,11 @@
 import org.apache.hadoop.mapred.InputSplit;
 import org.apache.hadoop.mapred.JobConf;
 
-import edu.uci.ics.genomix.data.normalizers.VLongNormalizedKeyComputerFactory;
-import edu.uci.ics.genomix.data.partition.KmerHashPartitioncomputerFactory;
-import edu.uci.ics.genomix.data.serde.ByteSerializerDeserializer;
-import edu.uci.ics.genomix.data.std.accessors.VLongBinaryHashFunctionFamily;
-import edu.uci.ics.genomix.data.std.primitive.VLongKmerPointable;
+import edu.uci.ics.genomix.data.std.accessors.ByteSerializerDeserializer;
+import edu.uci.ics.genomix.data.std.accessors.KmerHashPartitioncomputerFactory;
+import edu.uci.ics.genomix.data.std.accessors.KmerNormarlizedComputerFactory;
+import edu.uci.ics.genomix.data.std.accessors.KmerBinaryHashFunctionFamily;
+import edu.uci.ics.genomix.data.std.primitive.KmerPointable;
 import edu.uci.ics.genomix.dataflow.ConnectorPolicyAssignmentPolicy;
 import edu.uci.ics.genomix.dataflow.KMerSequenceWriterFactory;
 import edu.uci.ics.genomix.dataflow.KMerTextWriterFactory;
@@ -110,8 +110,8 @@
 				keyFields,
 				frameLimits,
 				new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory
-						.of(VLongKmerPointable.FACTORY) },
-				new VLongNormalizedKeyComputerFactory(),
+						.of(KmerPointable.FACTORY) },
+				new KmerNormarlizedComputerFactory(),
 				aggeragater,
 				new DistributedMergeLmerAggregateFactory(),
 				combineOutputRec,
@@ -119,7 +119,7 @@
 						new FieldHashPartitionComputerFactory(
 								keyFields,
 								new IBinaryHashFunctionFactory[] { PointableBinaryHashFunctionFactory
-										.of(VLongKmerPointable.FACTORY) }),
+										.of(KmerPointable.FACTORY) }),
 						tableSize), true);
 	}
 
@@ -137,9 +137,9 @@
 				recordSizeInBytes,
 				tableSize,
 				new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory
-						.of(VLongKmerPointable.FACTORY) },
-				new IBinaryHashFunctionFamily[] { new VLongBinaryHashFunctionFamily() },
-				hashfuncStartLevel, new VLongNormalizedKeyComputerFactory(),
+						.of(KmerPointable.FACTORY) },
+				new IBinaryHashFunctionFamily[] { new KmerBinaryHashFunctionFamily() },
+				hashfuncStartLevel, new KmerNormarlizedComputerFactory(),
 				new MergeKmerAggregateFactory(),
 				new DistributedMergeLmerAggregateFactory(), combineOutputRec,
 				true);
@@ -166,12 +166,12 @@
 					new KmerHashPartitioncomputerFactory(),
 					keyFields,
 					new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory
-							.of(VLongKmerPointable.FACTORY) });
+							.of(KmerPointable.FACTORY) });
 			crossGrouper = new PreclusteredGroupOperatorDescriptor(
 					jobSpec,
 					keyFields,
 					new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory
-							.of(VLongKmerPointable.FACTORY) },
+							.of(KmerPointable.FACTORY) },
 					new DistributedMergeLmerAggregateFactory(),
 					combineOutputRec);
 			break;
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/job/JobGenContigsGeneration.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/job/JobGenContigsGeneration.java
deleted file mode 100644
index e69de29..0000000
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/job/JobGenContigsGeneration.java
+++ /dev/null
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/job/JobGenGraphCleanning.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/job/JobGenGraphCleanning.java
deleted file mode 100644
index e69de29..0000000
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/job/JobGenGraphCleanning.java
+++ /dev/null
diff --git a/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/example/jobrun/JobRunTest.java b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/example/jobrun/JobRunTest.java
index 12ca9c9..3e80ab7 100644
--- a/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/example/jobrun/JobRunTest.java
+++ b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/example/jobrun/JobRunTest.java
@@ -118,8 +118,16 @@
 	}
 
 	@Test
+	public void TestAll() throws Exception{
+		cleanUpReEntry();
+		TestExternalGroupby();
+		cleanUpReEntry();
+		TestPreClusterGroupby();
+		cleanUpReEntry();
+		TestHybridGroupby();
+	}
+	
 	public void TestExternalGroupby() throws Exception {
-		//cleanUpReEntry();
 		conf.set(GenomixJob.GROUPBY_TYPE, "external");
 		conf.set(GenomixJob.OUTPUT_FORMAT, "binary");
 		System.err.println("Testing ExternalGroupBy");
@@ -127,9 +135,7 @@
 		Assert.assertEquals(true, checkResults());
 	}
 
-	@Test
 	public void TestPreClusterGroupby() throws Exception {
-		cleanUpReEntry();
 		conf.set(GenomixJob.GROUPBY_TYPE, "precluster");
 		conf.set(GenomixJob.OUTPUT_FORMAT, "binary");
 		System.err.println("Testing PreClusterGroupBy");
@@ -137,9 +143,7 @@
 		Assert.assertEquals(true, checkResults());
 	}
 
-	@Test
 	public void TestHybridGroupby() throws Exception {
-		cleanUpReEntry();
 		conf.set(GenomixJob.GROUPBY_TYPE, "hybrid");
 		conf.set(GenomixJob.OUTPUT_FORMAT, "binary");
 		System.err.println("Testing HybridGroupBy");
