add back old version of Kmer to support genomix-pregelix
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
index b2af5ee..6c02468 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
@@ -1,9 +1,5 @@
 package edu.uci.ics.genomix.type;
 
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-
 import org.apache.hadoop.io.WritableComparator;
 
 public class VKmerBytesWritable extends KmerBytesWritable {
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/old/Kmer.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/old/Kmer.java
new file mode 100644
index 0000000..ee806cc
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/old/Kmer.java
@@ -0,0 +1,285 @@
+package edu.uci.ics.genomix.type.old;
+
+@Deprecated
+public class Kmer {
+    
+    public final static byte[] GENE_SYMBOL = { 'A', 'C', 'G', 'T' };
+
+    public final static class GENE_CODE {
+
+        /**
+         * make sure this 4 ids equal to the sequence id of char in
+         * {@GENE_SYMBOL}
+         */
+        public static final byte A = 0;
+        public static final byte C = 1;
+        public static final byte G = 2;
+        public static final byte T = 3;
+
+        public static byte getCodeFromSymbol(byte ch) {
+            byte r = 0;
+            switch (ch) {
+            case 'A':
+            case 'a':
+                r = A;
+                break;
+            case 'C':
+            case 'c':
+                r = C;
+                break;
+            case 'G':
+            case 'g':
+                r = G;
+                break;
+            case 'T':
+            case 't':
+                r = T;
+                break;
+            }
+            return r;
+        }
+
+        public static byte getSymbolFromCode(byte code) {
+            if (code > 3) {
+                return '!';
+            }
+            return GENE_SYMBOL[code];
+        }
+
+        public static byte getAdjBit(byte t) {
+            byte r = 0;
+            switch (t) {
+            case 'A':
+            case 'a':
+                r = 1 << A;
+                break;
+            case 'C':
+            case 'c':
+                r = 1 << C;
+                break;
+            case 'G':
+            case 'g':
+                r = 1 << G;
+                break;
+            case 'T':
+            case 't':
+                r = 1 << T;
+                break;
+            }
+            return r;
+        }
+
+        /** 
+         * It works for path merge. 
+         * Merge the kmer by his next, we need to make sure the @{t} is a single neighbor.
+         * @param t the neighbor code in BitMap
+         * @return the genecode 
+         */
+        public static byte getGeneCodeFromBitMap(byte t) {
+            switch (t) {
+            case 1 << A:
+                return A;
+            case 1 << C:
+                return C;
+            case 1 << G:
+                return G;
+            case 1 << T:
+                return T;
+            }
+            return -1;
+        }
+
+        public static byte mergePreNextAdj(byte pre, byte next) {
+            return (byte) (pre << 4 | (next & 0x0f));
+        }
+
+        public static String getSymbolFromBitMap(byte code) {
+            int left = (code >> 4) & 0x0F;
+            int right = code & 0x0F;
+            StringBuilder str = new StringBuilder();
+            for (int i = A; i <= T; i++) {
+                if ((left & (1 << i)) != 0) {
+                    str.append((char) GENE_SYMBOL[i]);
+                }
+            }
+            str.append('|');
+            for (int i = A; i <= T; i++) {
+                if ((right & (1 << i)) != 0) {
+                    str.append((char) GENE_SYMBOL[i]);
+                }
+            }
+            return str.toString();
+        }
+    }
+
+    public static String recoverKmerFrom(int k, byte[] keyData, int keyStart,
+            int keyLength) {
+        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.append((char) GENE_SYMBOL[(currentbyte >> ((geneCount % 4) * 2)) & 0x03]);
+        }
+        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 [0x000G, 0xATAA]
+     * 
+     * @param kmer
+     * @param input
+     *            array
+     * @param start
+     *            position
+     * @return initialed kmer array
+     */
+    public static byte[] compressKmer(int k, byte[] array, int start) {
+        final int byteNum = getByteNumFromK(k);
+        byte[] bytes = new byte[byteNum];
+
+        byte l = 0;
+        int bytecount = 0;
+        int bcount = byteNum - 1;
+        for (int i = start; i < start + k; i++) {
+            byte code = GENE_CODE.getCodeFromSymbol(array[i]);
+            l |= (byte) (code << bytecount);
+            bytecount += 2;
+            if (bytecount == 8) {
+                bytes[bcount--] = l;
+                l = 0;
+                bytecount = 0;
+            }
+        }
+        if (bcount >= 0) {
+            bytes[0] = l;
+        }
+        return bytes;
+    }
+
+    /**
+     * Shift Kmer to accept new input
+     * 
+     * @param kmer
+     * @param bytes
+     *            Kmer Array
+     * @param c
+     *            Input new gene character
+     * @return the shiftout gene, in gene code format
+     */
+    public static byte moveKmer(int k, byte[] kmer, byte c) {
+        int byteNum = kmer.length;
+        byte output = (byte) (kmer[byteNum - 1] & 0x03);
+        for (int i = byteNum - 1; i > 0; i--) {
+            byte in = (byte) (kmer[i - 1] & 0x03);
+            kmer[i] = (byte) (((kmer[i] >>> 2) & 0x3f) | (in << 6));
+        }
+        int pos = ((k - 1) % 4) << 1;
+        byte code = (byte) (GENE_CODE.getCodeFromSymbol(c) << pos);
+        kmer[0] = (byte) (((kmer[0] >>> 2) & 0x3f) | code);
+        return (byte) (1 << output);
+    }
+
+    public static byte reverseKmerByte(byte k) {
+        int x = (((k >> 2) & 0x33) | ((k << 2) & 0xcc));
+        return (byte) (((x >> 4) & 0x0f) | ((x << 4) & 0xf0));
+    }
+
+    public static byte[] reverseKmer(int k, byte[] kmer) {
+        byte[] reverseKmer = new byte[kmer.length];
+
+        int curPosAtKmer = ((k - 1) % 4) << 1;
+        int curByteAtKmer = 0;
+
+        int curPosAtReverse = 0;
+        int curByteAtReverse = reverseKmer.length - 1;
+        reverseKmer[curByteAtReverse] = 0;
+        for (int i = 0; i < k; i++) {
+            byte gene = (byte) ((kmer[curByteAtKmer] >> curPosAtKmer) & 0x03);
+            reverseKmer[curByteAtReverse] |= gene << curPosAtReverse;
+            curPosAtReverse += 2;
+            if (curPosAtReverse >= 8) {
+                curPosAtReverse = 0;
+                reverseKmer[--curByteAtReverse] = 0;
+            }
+            curPosAtKmer -= 2;
+            if (curPosAtKmer < 0) {
+                curPosAtKmer = 6;
+                curByteAtKmer++;
+            }
+        }
+
+        return reverseKmer;
+    }
+
+    /**
+     * Compress Reversed Kmer into bytes array AATAG will compress as
+     * [0x000A,0xATAG]
+     * 
+     * @param kmer
+     * @param input
+     *            array
+     * @param start
+     *            position
+     * @return initialed kmer array
+     */
+    public static byte[] compressKmerReverse(int k, byte[] array, int start) {
+        final int byteNum = getByteNumFromK(k);
+        byte[] bytes = new byte[byteNum];
+
+        byte l = 0;
+        int bytecount = 0;
+        int bcount = byteNum - 1;
+        for (int i = start + k - 1; i >= 0; i--) {
+            byte code = GENE_CODE.getCodeFromSymbol(array[i]);
+            l |= (byte) (code << bytecount);
+            bytecount += 2;
+            if (bytecount == 8) {
+                bytes[bcount--] = l;
+                l = 0;
+                bytecount = 0;
+            }
+        }
+        if (bcount >= 0) {
+            bytes[0] = l;
+        }
+        return bytes;
+    }
+
+    /**
+     * Shift Kmer to accept new input
+     * 
+     * @param kmer
+     * @param bytes
+     *            Kmer Array
+     * @param c
+     *            Input new gene character
+     * @return the shiftout gene, in gene code format
+     */
+    public static byte moveKmerReverse(int k, byte[] kmer, byte c) {
+        int pos = ((k - 1) % 4) << 1;
+        byte output = (byte) ((kmer[0] >> pos) & 0x03);
+        for (int i = 0; i < kmer.length - 1; i++) {
+            byte in = (byte) ((kmer[i + 1] >> 6) & 0x03);
+            kmer[i] = (byte) ((kmer[i] << 2) | in);
+        }
+        // (k%4) * 2
+        if (k % 4 != 0) {
+            kmer[0] &= (1 << ((k % 4) << 1)) - 1;
+        }
+        kmer[kmer.length - 1] = (byte) ((kmer[kmer.length - 1] << 2) | GENE_CODE
+                .getCodeFromSymbol(c));
+        return (byte) (1 << output);
+    }
+
+}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/old/KmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/old/KmerBytesWritable.java
new file mode 100644
index 0000000..dd76427
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/old/KmerBytesWritable.java
@@ -0,0 +1,138 @@
+package edu.uci.ics.genomix.type.old;
+
+import java.io.IOException;
+import java.io.DataInput;
+import java.io.DataOutput;
+import org.apache.hadoop.io.BinaryComparable;
+import org.apache.hadoop.io.WritableComparable;
+import org.apache.hadoop.io.WritableComparator;
+
+@Deprecated
+public class KmerBytesWritable extends BinaryComparable implements
+        WritableComparable<BinaryComparable> {
+    private static final int LENGTH_BYTES = 4;
+    private static final byte[] EMPTY_BYTES = {};
+    private byte size;
+    private byte[] bytes;
+
+    public KmerBytesWritable() {
+        this(EMPTY_BYTES);
+    }
+
+    public KmerBytesWritable(byte[] bytes) {
+        this.bytes = bytes;
+        this.size = (byte) bytes.length;
+    }
+
+    @Override
+    public byte[] getBytes() {
+        return bytes;
+    }
+
+    @Deprecated
+    public byte[] get() {
+        return getBytes();
+    }
+
+    @Override
+    public int getLength() {
+        return (int) size;
+    }
+
+    @Deprecated
+    public int getSize() {
+        return getLength();
+    }
+
+    public void setSize(byte size) {
+        if ((int) size > getCapacity()) {
+            setCapacity((byte) (size * 3 / 2));
+        }
+        this.size = size;
+    }
+
+    public int getCapacity() {
+        return bytes.length;
+    }
+
+    public void setCapacity(byte new_cap) {
+        if (new_cap != getCapacity()) {
+            byte[] new_data = new byte[new_cap];
+            if (new_cap < size) {
+                size = new_cap;
+            }
+            if (size != 0) {
+                System.arraycopy(bytes, 0, new_data, 0, size);
+            }
+            bytes = new_data;
+        }
+    }
+
+    public void set(KmerBytesWritable newData) {
+        set(newData.bytes, (byte) 0, newData.size);
+    }
+
+    public void set(byte[] newData, byte offset, byte length) {
+        setSize((byte) 0);
+        setSize(length);
+        System.arraycopy(newData, offset, bytes, 0, size);
+    }
+
+    public void readFields(DataInput in) throws IOException {
+        setSize((byte) 0); // clear the old data
+        setSize(in.readByte());
+        in.readFully(bytes, 0, size);
+    }
+
+    @Override
+    public void write(DataOutput out) throws IOException {
+        out.writeByte(size);
+        out.write(bytes, 0, size);
+    }
+
+    @Override
+    public int hashCode() {
+        return super.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object right_obj) {
+        if (right_obj instanceof KmerBytesWritable)
+            return super.equals(right_obj);
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        StringBuffer sb = new StringBuffer(3 * size);
+        for (int idx = 0; idx < (int) size; idx++) {
+            // if not the first, put a blank separator in
+            if (idx != 0) {
+                sb.append(' ');
+            }
+            String num = Integer.toHexString(0xff & bytes[idx]);
+            // if it is only one digit, add a leading 0.
+            if (num.length() < 2) {
+                sb.append('0');
+            }
+            sb.append(num);
+        }
+        return sb.toString();
+    }
+
+    public static class Comparator extends WritableComparator {
+        public Comparator() {
+            super(KmerBytesWritable.class);
+        }
+
+        public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
+            return compareBytes(b1, s1 + LENGTH_BYTES, l1 - LENGTH_BYTES, b2,
+                    s2 + LENGTH_BYTES, l2 - LENGTH_BYTES);
+        }
+    }
+
+    static { // register this comparator
+        WritableComparator.define(KmerBytesWritable.class, new Comparator());
+    }
+
+}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/old/KmerUtil.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/old/KmerUtil.java
new file mode 100644
index 0000000..7e9d2f3
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/old/KmerUtil.java
@@ -0,0 +1,223 @@
+package edu.uci.ics.genomix.type.old;
+
+import java.util.Arrays;
+
+@Deprecated
+public class KmerUtil {
+
+    public static int countNumberOfBitSet(int i) {
+        int c = 0;
+        for (; i != 0; c++) {
+            i &= i - 1;
+        }
+        return c;
+    }
+
+    public static int inDegree(byte bitmap) {
+        return countNumberOfBitSet((bitmap >> 4) & 0x0f);
+    }
+
+    public static int outDegree(byte bitmap) {
+        return countNumberOfBitSet(bitmap & 0x0f);
+    }
+
+    /**
+     * Get last kmer from kmer-chain. 
+     * e.g. kmerChain is AAGCTA, if k =5, it will
+     * return AGCTA
+     * @param k
+     * @param kInChain
+     * @param kmerChain
+     * @return LastKmer bytes array
+     */
+    public static byte[] getLastKmerFromChain(int k, int kInChain,
+            byte[] kmerChain, int offset, int length) {
+        if (k > kInChain) {
+            return null;
+        }
+        if (k == kInChain) {
+            return kmerChain.clone();
+        }
+        int byteNum = Kmer.getByteNumFromK(k);
+        byte[] kmer = new byte[byteNum];
+
+        /** from end to start */
+        int byteInChain = length - 1 - (kInChain - k) / 4;
+        int posInByteOfChain = ((kInChain - k) % 4) << 1; // *2
+        int byteInKmer = byteNum - 1;
+        for (; byteInKmer >= 0 && byteInChain > 0; byteInKmer--, byteInChain--) {
+            kmer[byteInKmer] = (byte) ((0xff & kmerChain[offset + byteInChain]) >> posInByteOfChain);
+            kmer[byteInKmer] |= ((kmerChain[offset + byteInChain - 1] << (8 - posInByteOfChain)));
+        }
+
+        /** last kmer byte */
+        if (byteInKmer == 0) {
+            kmer[0] = (byte) ((kmerChain[offset] & 0xff) >> posInByteOfChain);
+        }
+        return kmer;
+    }
+
+    /**
+     * Get first kmer from kmer-chain e.g. kmerChain is AAGCTA, if k=5, it will
+     * return AAGCT
+     * 
+     * @param k
+     * @param kInChain
+     * @param kmerChain
+     * @return FirstKmer bytes array
+     */
+    public static byte[] getFirstKmerFromChain(int k, int kInChain,
+            byte[] kmerChain, int offset, int length) {
+        if (k > kInChain) {
+            return null;
+        }
+        if (k == kInChain) {
+            return kmerChain.clone();
+        }
+        int byteNum = Kmer.getByteNumFromK(k);
+        byte[] kmer = new byte[byteNum];
+
+        int i = 1;
+        for (; i < kmer.length; i++) {
+            kmer[kmer.length - i] = kmerChain[offset + length - i];
+        }
+        int posInByteOfChain = (k % 4) << 1; // *2
+        if (posInByteOfChain == 0) {
+            kmer[0] = kmerChain[offset + length - i];
+        } else {
+            kmer[0] = (byte) (kmerChain[offset + length - i] & ((1 << posInByteOfChain) - 1));
+        }
+        return kmer;
+    }
+
+    /**
+     * Merge kmer with next neighbor in gene-code format.
+     * The k of new kmer will increase by 1
+     * e.g. AAGCT merge with A => AAGCTA
+     * @param k :input k of kmer
+     * @param kmer : input bytes of kmer
+     * @param nextCode: next neighbor in gene-code format
+     * @return the merged Kmer, this K of this Kmer is k+1
+     */
+    public static byte[] mergeKmerWithNextCode(int k, byte[] kmer, int offset, int length, byte nextCode) {
+        int byteNum = length;
+        if (k % 4 == 0) {
+            byteNum++;
+        }
+        byte[] mergedKmer = new byte[byteNum];
+        for (int i = 1; i <= length; i++) {
+            mergedKmer[mergedKmer.length - i] = kmer[offset + length - i];
+        }
+        if (mergedKmer.length > length) {
+            mergedKmer[0] = (byte) (nextCode & 0x3);
+        } else {
+            mergedKmer[0] = (byte) (kmer[offset] | ((nextCode & 0x3) << ((k % 4) << 1)));
+        }
+        return mergedKmer;
+    }
+
+    /**
+     * Merge kmer with previous neighbor in gene-code format.
+     * The k of new kmer will increase by 1
+     * e.g. AAGCT merge with A => AAAGCT
+     * @param k :input k of kmer
+     * @param kmer : input bytes of kmer
+     * @param preCode: next neighbor in gene-code format
+     * @return the merged Kmer,this K of this Kmer is k+1
+     */
+    public static byte[] mergeKmerWithPreCode(int k, byte[] kmer, int offset, int length, byte preCode) {
+        int byteNum = length;
+        byte[] mergedKmer = null;
+        int byteInMergedKmer = 0;
+        if (k % 4 == 0) {
+            byteNum++;
+            mergedKmer = new byte[byteNum];
+            mergedKmer[0] = (byte) ((kmer[offset] >> 6) & 0x3);
+            byteInMergedKmer++;
+        } else {
+            mergedKmer = new byte[byteNum];
+        }
+        for (int i = 0; i < length - 1; i++, byteInMergedKmer++) {
+            mergedKmer[byteInMergedKmer] = (byte) ((kmer[offset + i] << 2) | ((kmer[offset + i + 1] >> 6) & 0x3));
+        }
+        mergedKmer[byteInMergedKmer] = (byte) ((kmer[offset + length - 1] << 2) | (preCode & 0x3));
+        return mergedKmer;
+    }
+
+    /**
+     * Merge two kmer to one kmer
+     * e.g. ACTA + ACCGT => ACTAACCGT
+     * @param preK : previous k of kmer
+     * @param kmerPre : bytes array of previous kmer
+     * @param nextK : next k of kmer
+     * @param kmerNext : bytes array of next kmer
+     * @return merged kmer, the new k is @preK + @nextK
+     */
+    public static byte[] mergeTwoKmer(int preK, byte[] kmerPre, int offsetPre, int lengthPre, int nextK,
+            byte[] kmerNext, int offsetNext, int lengthNext) {
+        int byteNum = Kmer.getByteNumFromK(preK + nextK);
+        byte[] mergedKmer = new byte[byteNum];
+        int i = 1;
+        for (; i <= lengthPre; i++) {
+            mergedKmer[byteNum - i] = kmerPre[offsetPre + lengthPre - i];
+        }
+        if ( i > 1){
+            i--;
+        }
+        if (preK % 4 == 0) {
+            for (int j = 1; j <= lengthNext; j++) {
+                mergedKmer[byteNum - i - j] = kmerNext[offsetNext + lengthNext - j];
+            }
+        } else {
+            int posNeedToMove = ((preK % 4) << 1);
+            mergedKmer[byteNum - i] |= kmerNext[offsetNext + lengthNext - 1] << posNeedToMove;
+            for (int j = 1; j < lengthNext; j++) {
+                mergedKmer[byteNum - i - j] = (byte) (((kmerNext[offsetNext + lengthNext
+                        - j] & 0xff) >> (8 - posNeedToMove)) | (kmerNext[offsetNext + lengthNext
+                        - j - 1] << posNeedToMove));
+            }
+            if ( (nextK % 4) * 2 + posNeedToMove > 8) {
+                mergedKmer[0] = (byte) (kmerNext[offsetNext] >> (8 - posNeedToMove));
+            }
+        }
+        return mergedKmer;
+    }
+    
+    /**
+     * Safely shifted the kmer forward without change the input kmer
+     * e.g. AGCGC shift with T => GCGCT
+     * @param k: kmer length
+     * @param kmer: input kmer
+     * @param afterCode: input genecode 
+     * @return new created kmer that shifted by afterCode, the K will not change
+     */
+    public static byte[] shiftKmerWithNextCode(int k, final byte[] kmer, int offset, int length, byte afterCode){
+        byte[] shifted = Arrays.copyOfRange(kmer, offset, offset+length);
+        Kmer.moveKmer(k, shifted, Kmer.GENE_CODE.getSymbolFromCode(afterCode));
+        return shifted;
+    }
+    
+    /**
+     * Safely shifted the kmer backward without change the input kmer
+     * e.g. AGCGC shift with T => TAGCG
+     * @param k: kmer length
+     * @param kmer: input kmer
+     * @param preCode: input genecode 
+     * @return new created kmer that shifted by preCode, the K will not change
+     */
+    public static byte[] shiftKmerWithPreCode(int k, final byte[] kmer, int offset, int length, byte preCode){
+        byte[] shifted = Arrays.copyOfRange(kmer, offset, offset+length);
+        Kmer.moveKmerReverse(k, shifted, Kmer.GENE_CODE.getSymbolFromCode(preCode));
+        return shifted;
+    }
+
+    public static byte getGeneCodeAtPosition(int pos, int k, final byte[] kmer,
+            int offset, int length) {
+        if (pos >= k) {
+            return -1;
+        }
+        int posByte = pos / 4;
+        int shift = (pos  % 4) << 1;
+        return (byte) ((kmer[offset + length - 1 - posByte] >> shift) & 0x3);
+    }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/GraphVertexOperation.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/GraphVertexOperation.java
index 6a5299b..553de45 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/GraphVertexOperation.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/GraphVertexOperation.java
@@ -2,8 +2,8 @@
 
 import org.apache.hadoop.io.BytesWritable;
 
-import edu.uci.ics.genomix.type.Kmer;
-import edu.uci.ics.genomix.type.KmerUtil;
+import edu.uci.ics.genomix.type.old.Kmer;
+import edu.uci.ics.genomix.type.old.KmerUtil;
 
 public class GraphVertexOperation {
 	
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java
index bd368cb..88c5c35 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java
@@ -14,8 +14,8 @@
 import edu.uci.ics.genomix.pregelix.io.ValueStateWritable;
 import edu.uci.ics.genomix.pregelix.type.Message;
 import edu.uci.ics.genomix.pregelix.type.State;
-import edu.uci.ics.genomix.type.Kmer;
-import edu.uci.ics.genomix.type.KmerUtil;
+import edu.uci.ics.genomix.type.old.Kmer;
+import edu.uci.ics.genomix.type.old.KmerUtil;
 
 /*
  * vertexId: BytesWritable
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/MergeGraphVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/MergeGraphVertex.java
index 067b70d..ec45019 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/MergeGraphVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/MergeGraphVertex.java
@@ -5,8 +5,8 @@
 import org.apache.hadoop.io.BytesWritable;
 import org.apache.hadoop.io.NullWritable;
 
-import edu.uci.ics.genomix.type.Kmer;
-import edu.uci.ics.genomix.type.KmerUtil;
+import edu.uci.ics.genomix.type.old.Kmer;
+import edu.uci.ics.genomix.type.old.KmerUtil;
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
 import edu.uci.ics.genomix.pregelix.client.Client;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphOutputFormat.java
index 9cea793..865a787 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphOutputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphOutputFormat.java
@@ -13,7 +13,7 @@
 import edu.uci.ics.pregelix.api.io.VertexWriter;
 import edu.uci.ics.genomix.pregelix.io.ValueStateWritable;
 import edu.uci.ics.genomix.pregelix.type.State;
-import edu.uci.ics.genomix.type.Kmer;
+import edu.uci.ics.genomix.type.old.Kmer;
 
 public class LogAlgorithmForMergeGraphOutputFormat extends 
 	BinaryVertexOutputFormat<BytesWritable, ValueStateWritable, NullWritable> {
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ValueStateWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ValueStateWritable.java
index f101d7f..ffc1d38 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ValueStateWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ValueStateWritable.java
@@ -5,7 +5,7 @@
 import org.apache.hadoop.io.WritableComparable;
 
 import edu.uci.ics.genomix.pregelix.type.State;
-import edu.uci.ics.genomix.type.Kmer;
+import edu.uci.ics.genomix.type.old.Kmer;
 
 
 public class ValueStateWritable implements WritableComparable<ValueStateWritable> {
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/DataLoadLogFormatter.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/DataLoadLogFormatter.java
index f5ddfc6..7e56a66 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/DataLoadLogFormatter.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/DataLoadLogFormatter.java
@@ -6,7 +6,7 @@
 
 import org.apache.hadoop.io.BytesWritable;
 
-import edu.uci.ics.genomix.type.Kmer;
+import edu.uci.ics.genomix.type.old.Kmer;
 import edu.uci.ics.genomix.type.KmerCountValue;
 
 public class DataLoadLogFormatter extends Formatter{
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java
index e0d241a..3af9b6f 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java
@@ -5,7 +5,7 @@
 import edu.uci.ics.genomix.pregelix.io.LogAlgorithmMessageWritable;
 import edu.uci.ics.genomix.pregelix.type.Message;
 import edu.uci.ics.genomix.pregelix.type.State;
-import edu.uci.ics.genomix.type.Kmer;
+import edu.uci.ics.genomix.type.old.Kmer;
 
 public class LogAlgorithmLogFormatter extends Formatter {
 	//
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/NaiveAlgorithmLogFormatter.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/NaiveAlgorithmLogFormatter.java
index ef0d96f..c337a16 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/NaiveAlgorithmLogFormatter.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/NaiveAlgorithmLogFormatter.java
@@ -3,7 +3,7 @@
 import java.util.logging.*;
 
 import edu.uci.ics.genomix.pregelix.io.MessageWritable;
-import edu.uci.ics.genomix.type.Kmer;
+import edu.uci.ics.genomix.type.old.Kmer;
 
 public class NaiveAlgorithmLogFormatter extends Formatter {
 	//
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/CombineSequenceFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/CombineSequenceFile.java
index 8924302..d9f0efe 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/CombineSequenceFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/CombineSequenceFile.java
@@ -9,7 +9,7 @@
 import org.apache.hadoop.io.SequenceFile;
 import org.apache.hadoop.io.SequenceFile.CompressionType;
 
-import edu.uci.ics.genomix.type.Kmer;
+import edu.uci.ics.genomix.type.old.Kmer;
 import edu.uci.ics.genomix.type.KmerCountValue;
 
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
index a054ede..18214a8 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
@@ -11,7 +11,7 @@
 import org.apache.hadoop.io.SequenceFile;
 
 import edu.uci.ics.genomix.pregelix.io.ValueStateWritable;
-import edu.uci.ics.genomix.type.Kmer;
+import edu.uci.ics.genomix.type.old.Kmer;
 
 public class GenerateTextFile {