diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/GraphCleanInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/GraphCleanInputFormat.java
index 4f1b474..641d1d8 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/GraphCleanInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/GraphCleanInputFormat.java
@@ -10,8 +10,8 @@
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.io.VertexReader;
 import edu.uci.ics.pregelix.api.util.BspUtils;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.api.io.binary.GraphCleanVertexInputFormat;
 import edu.uci.ics.genomix.pregelix.api.io.binary.GraphCleanVertexInputFormat.BinaryDataCleanVertexReader;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/InitialGraphCleanInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/InitialGraphCleanInputFormat.java
index e120c82..127f167 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/InitialGraphCleanInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/InitialGraphCleanInputFormat.java
@@ -12,9 +12,9 @@
 import edu.uci.ics.pregelix.api.util.BspUtils;
 import edu.uci.ics.genomix.type.NodeWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.api.io.binary.InitialGraphCleanVertexInputFormat;
 import edu.uci.ics.genomix.pregelix.api.io.binary.InitialGraphCleanVertexInputFormat.BinaryVertexReader;
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/AdjacencyListWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/AdjacencyListWritable.java
deleted file mode 100644
index 0611621..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/AdjacencyListWritable.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package edu.uci.ics.genomix.pregelix.io;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-
-import org.apache.hadoop.io.WritableComparable;
-
-import edu.uci.ics.genomix.type.EdgeListWritable;
-
-public class AdjacencyListWritable implements WritableComparable<AdjacencyListWritable>{
-    private EdgeListWritable forwardList;
-    private EdgeListWritable reverseList;
-    
-    public AdjacencyListWritable(){
-        forwardList = new EdgeListWritable();
-        reverseList = new EdgeListWritable();
-    }
-    
-    public AdjacencyListWritable(int kmerSize){
-        forwardList = new EdgeListWritable();
-        reverseList = new EdgeListWritable();
-    }
-
-    public void set(AdjacencyListWritable adjacencyList){
-        forwardList.setAsCopy(adjacencyList.getForwardList());
-        reverseList.setAsCopy(adjacencyList.getReverseList());
-    }
-    
-    public void reset(){
-        forwardList.reset();
-        reverseList.reset();
-    }
-    
-    public void reset(int kmerSize){
-        forwardList.reset();
-        reverseList.reset();
-    }
-    
-    public int getCountOfPosition(){
-    	return forwardList.getCountOfPosition() + reverseList.getCountOfPosition();
-    }
-
-    public EdgeListWritable getForwardList() {
-        return forwardList;
-    }
-
-    public void setForwardList(EdgeListWritable forwardList) {
-        this.forwardList.setAsCopy(forwardList);
-    }
-
-    public EdgeListWritable getReverseList() {
-        return reverseList;
-    }
-
-    public void setReverseList(EdgeListWritable reverseList) {
-        this.reverseList.setAsCopy(reverseList);
-    }
-
-    @Override
-    public void readFields(DataInput in) throws IOException {
-        forwardList.readFields(in);
-        reverseList.readFields(in);
-    }
-
-    @Override
-    public void write(DataOutput out) throws IOException {
-        forwardList.write(out);
-        reverseList.write(out);
-    }
-
-    @Override
-    public int compareTo(AdjacencyListWritable o) {
-        return 0;
-    }
-}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ArrayListWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ArrayListWritable.java
deleted file mode 100644
index 0d1b5d7..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ArrayListWritable.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package edu.uci.ics.genomix.pregelix.io;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.util.ArrayList;
-import org.apache.hadoop.io.Writable;
-
-/**
- * <p>
- * Class that represents an array list in Hadoop's data type system. It extends ArrayList class, 
- * hence supports all services provided by ArrayList.
- * Elements in the list must be homogeneous and must implement Hadoop's Writable interface. 
- * This class, combined with {@link Tuple}, allows the user to
- * define arbitrarily complex data structures.
- * </p>
- * 
- * @see Tuple
- * @param <E>
- *            type of list element
- */
-
-public class ArrayListWritable<E extends Writable> extends ArrayList<E> implements Writable{
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Creates an ArrayListWritable object.
-     */
-    public ArrayListWritable() {
-        super();
-    }
-    
-    /**
-     * Creates an ArrayListWritable object from a regular ArrayList.
-     */
-    public ArrayListWritable(ArrayList<E> array) {
-        super(array);
-    }
-
-    /**
-     * Deserializes the array.
-     * 
-     * @param in
-     *            source for raw byte representation
-     */
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    public void readFields(DataInput in) throws IOException {
-
-        this.clear();
-
-        int numFields = in.readInt();
-        if(numFields==0) return;
-        String className = in.readUTF();
-        E obj;
-        try {
-            Class c = Class.forName(className);
-            for (int i = 0; i < numFields; i++) {
-                obj = (E) c.newInstance();
-                obj.readFields(in);
-                this.add(obj);
-            }
-
-        } catch (ClassNotFoundException e) {
-            e.printStackTrace();
-        } catch (IllegalAccessException e) {
-            e.printStackTrace();
-        } catch (InstantiationException e) {
-            e.printStackTrace();
-        }
-    }
-    
-    /**
-     * Serializes this array.
-     * 
-     * @param out
-     *            where to write the raw byte representation
-     */
-    public void write(DataOutput out) throws IOException {
-        out.writeInt(this.size());
-        if(size()==0) return;
-        E obj=get(0);
-        
-        out.writeUTF(obj.getClass().getCanonicalName());
-
-        for (int i = 0; i < size(); i++) {
-            obj = get(i);
-            if (obj == null) {
-                throw new IOException("Cannot serialize null fields!");
-            }
-            obj.write(out);
-        }
-    }
-
-    /**
-     * Generates human-readable String representation of this ArrayList.
-     * 
-     * @return human-readable String representation of this ArrayList
-     */
-    public String toString() {
-        StringBuffer sb = new StringBuffer();
-        sb.append("[");
-        for (int i = 0; i < this.size(); i++) {
-            if (i != 0)
-                sb.append(", ");
-            sb.append(this.get(i));
-        }
-        sb.append("]");
-
-        return sb.toString();
-    }
-    
-}
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/BFSTraverseMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/BFSTraverseMessageWritable.java
deleted file mode 100644
index ba8ecbd..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/BFSTraverseMessageWritable.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package edu.uci.ics.genomix.pregelix.io;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.genomix.pregelix.type.EdgeDirs;
-import edu.uci.ics.genomix.type.VKmerBytesWritable;
-import edu.uci.ics.genomix.type.VKmerListWritable;
-
-public class BFSTraverseMessageWritable extends MessageWritable{
-    
-    private VKmerListWritable pathList; //use for BFSTravese
-    private ArrayListWritable<EdgeDirs> edgeDirsList;
-    private VKmerBytesWritable seekedVertexId; //use for BFSTravese
-    private long readId; //use for BFSTravese
-    private boolean srcFlip; //use for BFSTravese
-    private boolean destFlip; //use for BFSTravese
-    private boolean isTraverseMsg; //otherwise, it is final message for this path for adding readId to all path nodes 
-    
-    public BFSTraverseMessageWritable(){
-        super();
-        pathList = new VKmerListWritable();
-        edgeDirsList = new ArrayListWritable<EdgeDirs>();
-        seekedVertexId = new VKmerBytesWritable();
-        readId = 0;
-        srcFlip = false;
-        destFlip = false;
-        isTraverseMsg = true;
-    }
-    
-    public void reset(){
-        super.reset();
-        pathList.reset();
-        edgeDirsList.clear();
-        seekedVertexId.reset(0);
-        readId = 0;
-        srcFlip = false;
-        destFlip = false;
-        isTraverseMsg = true;
-    }
-    
-    public VKmerListWritable getPathList() {
-        return pathList;
-    }
-
-    public void setPathList(VKmerListWritable pathList) {
-        this.pathList = pathList;
-    }
-    
-    public ArrayListWritable<EdgeDirs> getEdgeDirsList() {
-        return edgeDirsList;
-    }
-
-    public void setEdgeDirsList(ArrayListWritable<EdgeDirs> edgeDirsList) {
-        this.edgeDirsList.clear();
-        this.edgeDirsList.addAll(edgeDirsList);
-    }
-
-    public VKmerBytesWritable getSeekedVertexId() {
-        return seekedVertexId;
-    }
-
-    public void setSeekedVertexId(VKmerBytesWritable seekedVertexId) {
-        this.seekedVertexId = seekedVertexId;
-    }
-    
-    public long getReadId() {
-        return readId;
-    }
-
-    public void setReadId(long readId) {
-        this.readId = readId;
-    }
-
-    public boolean isSrcFlip() {
-        return srcFlip;
-    }
-
-    public void setSrcFlip(boolean srcFlip) {
-        this.srcFlip = srcFlip;
-    }
-
-    public boolean isDestFlip() {
-        return destFlip;
-    }
-
-    public void setDestFlip(boolean destFlip) {
-        this.destFlip = destFlip;
-    }
-    
-    public boolean isTraverseMsg() {
-        return isTraverseMsg;
-    }
-
-    public void setTraverseMsg(boolean isTraverseMsg) {
-        this.isTraverseMsg = isTraverseMsg;
-    }
-    
-    @Override
-    public void readFields(DataInput in) throws IOException {
-        reset();
-        super.readFields(in);
-        pathList.readFields(in);
-        edgeDirsList.readFields(in);
-        seekedVertexId.readFields(in);
-        readId = in.readLong();
-        srcFlip = in.readBoolean();
-        destFlip = in.readBoolean();
-        isTraverseMsg = in.readBoolean();
-    }
-    
-    @Override
-    public void write(DataOutput out) throws IOException {
-        super.write(out);
-        pathList.write(out);
-        edgeDirsList.write(out);
-        seekedVertexId.write(out);
-        out.writeLong(readId);
-        out.writeBoolean(srcFlip);
-        out.writeBoolean(destFlip);
-        out.writeBoolean(isTraverseMsg);
-    }
-}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/BubbleMergeMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/BubbleMergeMessageWritable.java
deleted file mode 100644
index 8be703d..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/BubbleMergeMessageWritable.java
+++ /dev/null
@@ -1,187 +0,0 @@
-package edu.uci.ics.genomix.pregelix.io;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.util.Comparator;
-
-import edu.uci.ics.genomix.pregelix.type.MessageFlag;
-import edu.uci.ics.genomix.type.NodeWritable;
-import edu.uci.ics.genomix.type.VKmerBytesWritable;
-
-public class BubbleMergeMessageWritable extends MessageWritable{
-
-    public static class DirToMajor{
-        public static final byte FORWARD = 0;
-        public static final byte REVERSE = 1;
-    }
-    
-    private VKmerBytesWritable majorVertexId; //use for MergeBubble
-    private VKmerBytesWritable minorVertexId;
-    private NodeWritable node; //except kmer, other field should be updated when MergeBubble
-    private byte meToMajorDir;
-    private byte meToMinorDir;
-    private VKmerBytesWritable topCoverageVertexId;
-    private boolean isFlip;
-    
-    public BubbleMergeMessageWritable(){
-        super();
-        majorVertexId = new VKmerBytesWritable();
-        minorVertexId = new VKmerBytesWritable();
-        node = new NodeWritable();
-        meToMajorDir = 0;
-        meToMinorDir = 0;
-        topCoverageVertexId = new VKmerBytesWritable();
-        isFlip = false;
-    }
-    
-    public BubbleMergeMessageWritable(BubbleMergeMessageWritable msg){
-        set(msg);
-    }
-    
-    public void set(BubbleMergeMessageWritable msg){
-        this.setSourceVertexId(msg.getSourceVertexId());
-        this.setFlag(msg.getFlag());
-        this.setMajorVertexId(msg.getMajorVertexId());
-        this.setMinorVertexId(msg.getMinorVertexId());
-        this.setNode(msg.node);
-        this.setMeToMajorDir(msg.meToMajorDir);
-        this.setMeToMinorDir(msg.meToMinorDir);
-        this.setTopCoverageVertexId(msg.topCoverageVertexId);
-        this.setFlip(msg.isFlip());
-    }
-    
-    public void reset(){
-        super.reset();
-        majorVertexId.reset(0);
-        minorVertexId.reset(0);
-        node.reset();
-        meToMajorDir = 0;
-        meToMinorDir = 0;
-        topCoverageVertexId.reset(0);
-        isFlip = false;
-    }
-    
-    public byte getRelativeDirToMajor(){
-        switch(meToMajorDir){
-            case MessageFlag.DIR_FF:
-            case MessageFlag.DIR_RR:
-                return DirToMajor.FORWARD;
-            case MessageFlag.DIR_FR:
-            case MessageFlag.DIR_RF:
-                return DirToMajor.REVERSE;
-        }
-        return 0;
-    }
-    
-    public VKmerBytesWritable getMajorVertexId() {
-        return majorVertexId;
-    }
-
-    public void setMajorVertexId(VKmerBytesWritable majorVertexId) {
-        if(this.majorVertexId == null)
-            this.majorVertexId = new VKmerBytesWritable();
-        this.majorVertexId.setAsCopy(majorVertexId);
-    }
-    
-    
-    public VKmerBytesWritable getMinorVertexId() {
-        return minorVertexId;
-    }
-
-    public void setMinorVertexId(VKmerBytesWritable minorVertexId) {
-        if(this.minorVertexId == null)
-            this.minorVertexId = new VKmerBytesWritable();
-        this.minorVertexId.setAsCopy(minorVertexId);
-    }
-
-    public VKmerBytesWritable getTopCoverageVertexId() {
-        return topCoverageVertexId;
-    }
-
-    public void setTopCoverageVertexId(VKmerBytesWritable topCoverageVertexId) {
-        if(this.topCoverageVertexId == null)
-            this.topCoverageVertexId = new VKmerBytesWritable();
-        this.topCoverageVertexId.setAsCopy(topCoverageVertexId);
-    }
-    
-    public NodeWritable getNode() {
-        return node;
-    }
-
-    public void setNode(NodeWritable node) {
-        if(this.node == null)
-            this.node = new NodeWritable();
-        this.node.setAsCopy(node);
-    }
-    
-    public byte getMeToMajorDir() {
-        return meToMajorDir;
-    }
-
-    public void setMeToMajorDir(byte meToMajorDir) {
-        this.meToMajorDir = meToMajorDir;
-    }
-
-    public byte getMeToMinorDir() {
-        return meToMinorDir;
-    }
-
-    public void setMeToMinorDir(byte meToMinorDir) {
-        this.meToMinorDir = meToMinorDir;
-    }
-    
-    public boolean isFlip() {
-        return isFlip;
-    }
-
-    public void setFlip(boolean isFlip) {
-        this.isFlip = isFlip;
-    }
-    
-    @Override
-    public void readFields(DataInput in) throws IOException {
-        reset();
-        super.readFields(in);
-        majorVertexId.readFields(in);
-        minorVertexId.readFields(in);
-        node.readFields(in);
-        meToMajorDir = in.readByte();
-        meToMinorDir = in.readByte();
-        topCoverageVertexId.readFields(in);
-        isFlip = in.readBoolean();
-    }
-    
-    @Override
-    public void write(DataOutput out) throws IOException {
-        super.write(out);
-        majorVertexId.write(out);
-        minorVertexId.write(out);
-        node.write(out);
-        out.writeByte(meToMajorDir);
-        out.write(meToMinorDir);
-        topCoverageVertexId.write(out);
-        out.writeBoolean(isFlip);
-    }
-    
-    public static class SortByCoverage implements Comparator<BubbleMergeMessageWritable> {
-        @Override
-        public int compare(BubbleMergeMessageWritable left, BubbleMergeMessageWritable right) {
-            return -Float.compare(left.node.getAverageCoverage(), right.node.getAverageCoverage());
-        }
-    }
-    
-    public boolean isFlip(BubbleMergeMessageWritable other){
-        return this.getRelativeDirToMajor() != other.getRelativeDirToMajor();
-    }
-    
-    public float computeDissimilar(BubbleMergeMessageWritable other){
-        if(isFlip(other)){
-            String reverse = other.getNode().getInternalKmer().toString();
-            VKmerBytesWritable reverseKmer = new VKmerBytesWritable();
-            reverseKmer.setByReadReverse(reverse.length(), reverse.getBytes(), 0);
-            return this.getNode().getInternalKmer().fracDissimilar(reverseKmer);
-        } else
-            return this.getNode().getInternalKmer().fracDissimilar(other.getNode().getInternalKmer());
-    }
-}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ByteWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ByteWritable.java
deleted file mode 100644
index bc5cc74..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ByteWritable.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2009-2013 by The Regents of the University of California
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * you may obtain a copy of the License from
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package edu.uci.ics.genomix.pregelix.io;
-
-import edu.uci.ics.pregelix.api.io.WritableSizable;
-
-/**
- * Writable for Byte values.
- */
-public class ByteWritable extends org.apache.hadoop.io.ByteWritable implements WritableSizable {
-
-    public ByteWritable(byte value) {
-        super(value);
-    }
-
-    public ByteWritable() {
-        super();
-    }
-
-    public int sizeInBytes() {
-        return 1;
-    }
-}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/HashMapWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/HashMapWritable.java
deleted file mode 100644
index c4556c7..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/HashMapWritable.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package edu.uci.ics.genomix.pregelix.io;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashMap;
-
-import org.apache.hadoop.io.Writable;
-@SuppressWarnings("unchecked") 
-public class HashMapWritable<K extends Writable, V extends Writable> extends HashMap<K, V> implements
-        Writable {
-
-	/**
-     * 
-     */
-    private static final long serialVersionUID = 1L;
-
-    /**
-	 * Creates a HashMapWritable object.
-	 */
-	public HashMapWritable() {
-		super();
-	}
-	
-	/**
-	 * Creates a HashMapWritable object from a regular HashMap.
-	 */
-	public HashMapWritable(HashMap<K, V> map) {
-		super(map);
-	}
-
-	/**
-	 * Deserializes the array.
-	 * 
-	 * @param in
-	 *            source for raw byte representation
-	 */
-
-	@SuppressWarnings("rawtypes")
-    public void readFields(DataInput in) throws IOException {
-		
-		this.clear();
-
-		int numEntries = in.readInt();
-		if(numEntries==0) return;
-		
-		String keyClassName = in.readUTF();
-		String valueClassName = in.readUTF();
-		
-		K objK;
-		V objV;
-		try {
-			Class keyClass = Class.forName(keyClassName);
-			Class valueClass = Class.forName(valueClassName);
-			for (int i = 0; i < numEntries; i++) {
-				objK = (K) keyClass.newInstance();
-				objK.readFields(in);
-				objV = (V) valueClass.newInstance();
-				objV.readFields(in);
-				put(objK, objV);
-			}
-
-		} catch (ClassNotFoundException e) {
-			e.printStackTrace();
-		} catch (IllegalAccessException e) {
-			e.printStackTrace();
-		} catch (InstantiationException e) {
-			e.printStackTrace();
-		}
-		
-	}
-
-	/**
-	 * Serializes this array.
-	 * 
-	 * @param out
-	 *            where to write the raw byte representation
-	 */
-	public void write(DataOutput out) throws IOException {
-		// Write out the number of entries in the map
-	    out.writeInt(size());
-	    if(size()==0) return;
-	    
-	    // Write out the class names for keys and values
-	    // assuming that data is homogeneuos (i.e., all entries have same types)
-	    Set<Map.Entry<K, V>> entries = entrySet();
-	    Map.Entry<K, V> first = entries.iterator().next();
-	    K objK = first.getKey();
-	    V objV = first.getValue();
-	    out.writeUTF(objK.getClass().getCanonicalName());
-	    out.writeUTF(objV.getClass().getCanonicalName());
-
-	    // Then write out each key/value pair
-	    for (Map.Entry<K, V> e: entrySet()) {
-	      e.getKey().write(out);
-	      e.getValue().write(out);
-	    }
-	}
-
-}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/KmerListAndFlagListWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/KmerListAndFlagListWritable.java
index 0bc30f3..c9222a4 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/KmerListAndFlagListWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/KmerListAndFlagListWritable.java
@@ -7,6 +7,7 @@
 import org.apache.hadoop.io.BooleanWritable;
 import org.apache.hadoop.io.Writable;
 
+import edu.uci.ics.genomix.pregelix.io.common.ArrayListWritable;
 import edu.uci.ics.genomix.type.VKmerListWritable;
 
 public class KmerListAndFlagListWritable implements Writable{
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/LinkedListWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/LinkedListWritable.java
deleted file mode 100644
index 13a5f39..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/LinkedListWritable.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package edu.uci.ics.genomix.pregelix.io;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.util.LinkedList;
-
-import org.apache.hadoop.io.Writable;
-
-/**
- * <p>
- * Class that represents an array list in Hadoop's data type system. It extends ArrayList class, 
- * hence supports all services provided by ArrayList.
- * Elements in the list must be homogeneous and must implement Hadoop's Writable interface. 
- * This class, combined with {@link Tuple}, allows the user to
- * define arbitrarily complex data structures.
- * </p>
- * 
- * @see Tuple
- * @param <E>
- *            type of list element
- */
-
-public class LinkedListWritable<E extends Writable> extends LinkedList<E> implements Writable{
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Creates an ArrayListWritable object.
-     */
-    public LinkedListWritable() {
-        super();
-    }
-    
-    /**
-     * Creates an ArrayListWritable object from a regular ArrayList.
-     */
-    public LinkedListWritable(LinkedList<E> array) {
-        super(array);
-    }
-
-    /**
-     * Deserializes the array.
-     * 
-     * @param in
-     *            source for raw byte representation
-     */
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    public void readFields(DataInput in) throws IOException {
-
-        this.clear();
-
-        int numFields = in.readInt();
-        if(numFields==0) return;
-        String className = in.readUTF();
-        E obj;
-        try {
-            Class c = Class.forName(className);
-            for (int i = 0; i < numFields; i++) {
-                obj = (E) c.newInstance();
-                obj.readFields(in);
-                this.add(obj);
-            }
-
-        } catch (ClassNotFoundException e) {
-            e.printStackTrace();
-        } catch (IllegalAccessException e) {
-            e.printStackTrace();
-        } catch (InstantiationException e) {
-            e.printStackTrace();
-        }
-    }
-    
-    /**
-     * Serializes this array.
-     * 
-     * @param out
-     *            where to write the raw byte representation
-     */
-    public void write(DataOutput out) throws IOException {
-        out.writeInt(this.size());
-        if(size()==0) return;
-        E obj=get(0);
-        
-        out.writeUTF(obj.getClass().getCanonicalName());
-
-        for (int i = 0; i < size(); i++) {
-            obj = get(i);
-            if (obj == null) {
-                throw new IOException("Cannot serialize null fields!");
-            }
-            obj.write(out);
-        }
-    }
-
-    /**
-     * Generates human-readable String representation of this ArrayList.
-     * 
-     * @return human-readable String representation of this ArrayList
-     */
-    public String toString() {
-        StringBuffer sb = new StringBuffer();
-        sb.append("[");
-        for (int i = 0; i < this.size(); i++) {
-            if (i != 0)
-                sb.append(", ");
-            sb.append(this.get(i));
-        }
-        sb.append("]");
-
-        return sb.toString();
-    }
-    
-}
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MessageWritable.java
deleted file mode 100644
index ab62877..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MessageWritable.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package edu.uci.ics.genomix.pregelix.io;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-
-import org.apache.hadoop.io.Writable;
-
-import edu.uci.ics.genomix.type.VKmerBytesWritable;
-import edu.uci.ics.pregelix.api.io.WritableSizable;
-
-public class MessageWritable implements Writable, WritableSizable {
-    
-    private VKmerBytesWritable sourceVertexId; // stores srcNode id
-    private byte flag; // stores message type
-    
-    public MessageWritable(){
-        sourceVertexId = new VKmerBytesWritable();
-        flag = 0;
-    }
-    
-    public void reset(){
-        sourceVertexId.reset(0);
-        flag = 0;
-    }
-    
-    @Override
-    public String toString(){
-        StringBuilder sbuilder = new StringBuilder();
-        sbuilder.append('{');
-        sbuilder.append(sourceVertexId.toString());
-        sbuilder.append('}');
-        return sbuilder.toString();
-    }
-    
-    public VKmerBytesWritable getSourceVertexId() {
-        return sourceVertexId;
-    }
-
-    public void setSourceVertexId(VKmerBytesWritable sourceVertexId) {
-        this.sourceVertexId.setAsCopy(sourceVertexId);
-    }
-
-    public byte getFlag() {
-        return flag;
-    }
-
-    public void setFlag(byte flag) {
-        this.flag = flag;
-    }
-
-
-    @Override
-    public void readFields(DataInput in) throws IOException {
-        reset();
-        sourceVertexId.readFields(in);
-        flag = in.readByte();
-    }
-
-    @Override
-    public void write(DataOutput out) throws IOException {
-        sourceVertexId.write(out);
-        out.writeByte(flag);
-    }
-
-    @Override
-    public int sizeInBytes() {
-        // TODO Auto-generated method stub
-        return 0;
-    }
-
-}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/PathMergeMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/PathMergeMessageWritable.java
deleted file mode 100644
index 77d2bcd..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/PathMergeMessageWritable.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package edu.uci.ics.genomix.pregelix.io;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.genomix.type.EdgeListWritable;
-import edu.uci.ics.genomix.type.EdgeWritable;
-import edu.uci.ics.genomix.type.NodeWritable;
-import edu.uci.ics.genomix.type.PositionListWritable;
-import edu.uci.ics.genomix.type.VKmerBytesWritable;
-import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
-
-public class PathMergeMessageWritable extends MessageWritable{
-    
-    private NodeWritable node;
-    private boolean isFlip; // use for path merge
-    private boolean updateMsg; // use for distinguish updateMsg or mergeMsg
-
-    public PathMergeMessageWritable(){
-        super();
-        node = new NodeWritable();
-        isFlip = false;
-        updateMsg = false;
-    }
-    
-    public void reset(){
-        super.reset();
-        node.reset();
-        isFlip = false;
-        updateMsg = false;
-    }   
-    
-    public VKmerBytesWritable getInternalKmer() {
-        return node.getInternalKmer();
-    }
-
-    public void setInternalKmer(VKmerBytesWritable internalKmer) {
-        this.node.setInternalKmer(internalKmer);
-    }
-    
-    public EdgeListWritable getEdgeList(byte dir) {
-        return node.getEdgeList((byte) (dir & DirectionFlag.DIR_MASK));
-    }
-    
-    public EdgeWritable getNeighborEdge(){
-        for(byte d : DirectionFlag.values){
-            if(!getEdgeList(d).isEmpty())
-                return getEdgeList(d).get(0);
-        }
-        return null;
-    }
-
-    public void setEdgeList(byte dir, EdgeListWritable edgeList) {
-        this.node.setEdgeList((byte) (dir & DirectionFlag.DIR_MASK), edgeList);
-    }
-    
-    public PositionListWritable getStartReads() {
-        return this.node.getStartReads();
-    }
-
-    public void setStartReads(PositionListWritable startReads) {
-        this.node.setStartReads(startReads);
-    }
-
-    public PositionListWritable getEndReads() {
-        return this.node.getEndReads();
-    }
-
-    public void setEndReads(PositionListWritable endReads) {
-        this.node.setEndReads(endReads);
-    }
-    
-    public void setAvgCoverage(float coverage) {
-        this.node.setAvgCoverage(coverage);
-    }
-
-    public float getAvgCoverage() {
-        return this.node.getAvgCoverage();
-    }
-
-    public boolean isFlip() {
-        return isFlip;
-    }
-
-    public void setFlip(boolean isFlip) {
-        this.isFlip = isFlip;
-    }
-
-    public boolean isUpdateMsg() {
-        return updateMsg;
-    }
-
-    public void setUpdateMsg(boolean updateMsg) {
-        this.updateMsg = updateMsg;
-    }
-    
-    public NodeWritable getNode() {
-        return node;
-    }
-
-    public void setNode(NodeWritable node) {
-        this.node.setAsCopy(node);
-    }
-
-    @Override
-    public void readFields(DataInput in) throws IOException {
-        reset();
-        super.readFields(in);
-        node.readFields(in);
-        isFlip = in.readBoolean();
-        updateMsg = in.readBoolean();
-    }
-
-    @Override
-    public void write(DataOutput out) throws IOException {
-        super.write(out);
-        node.write(out);
-        out.writeBoolean(isFlip);
-        out.writeBoolean(updateMsg);
-    }
-}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/SplitRepeatMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/SplitRepeatMessageWritable.java
deleted file mode 100644
index bff2ff1..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/SplitRepeatMessageWritable.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package edu.uci.ics.genomix.pregelix.io;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.genomix.type.EdgeWritable;
-
-public class SplitRepeatMessageWritable extends MessageWritable {
-    
-    private EdgeWritable createdEdge;
-    private EdgeWritable deletedEdge;
-    
-    public SplitRepeatMessageWritable(){
-        super();
-        createdEdge = new EdgeWritable();
-        deletedEdge = new EdgeWritable();
-    }
-    
-    public void reset(){
-        super.reset();
-        createdEdge.reset();
-        deletedEdge.reset();
-    }
-
-    public EdgeWritable getCreatedEdge() {
-        return createdEdge;
-    }
-
-    public void setCreatedEdge(EdgeWritable createdEdge) {
-        this.createdEdge.setAsCopy(createdEdge);
-    }
-    
-    public EdgeWritable getDeletedEdge() {
-        return deletedEdge;
-    }
-
-    public void setDeletedEdge(EdgeWritable deletedEdge) {
-        this.deletedEdge.setAsCopy(deletedEdge);
-    }
-
-    @Override
-    public void readFields(DataInput in) throws IOException {
-        reset();
-        super.readFields(in);
-        createdEdge.readFields(in);
-        deletedEdge.readFields(in);
-    }
-    
-    @Override
-    public void write(DataOutput out) throws IOException {
-        super.write(out);
-        createdEdge.write(out);
-        deletedEdge.write(out);
-    }
-}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VLongWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VLongWritable.java
deleted file mode 100644
index 1353915..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VLongWritable.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2009-2013 by The Regents of the University of California
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * you may obtain a copy of the License from
- * 
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package edu.uci.ics.genomix.pregelix.io;
-
-import java.io.DataInput;
-import java.io.DataInputStream;
-
-import org.apache.hadoop.io.WritableComparable;
-import org.apache.hadoop.io.WritableComparator;
-import org.apache.hadoop.io.WritableUtils;
-
-import edu.uci.ics.pregelix.api.io.WritableSizable;
-import edu.uci.ics.pregelix.api.util.ResetableByteArrayInputStream;
-
-/**
- * A WritableComparable for longs in a variable-length format. Such values take
- * between one and nine bytes. Smaller values take fewer bytes.
- * 
- * @see org.apache.hadoop.io.WritableUtils#readVLong(DataInput)
- */
-@SuppressWarnings("rawtypes")
-public class VLongWritable extends org.apache.hadoop.io.VLongWritable implements WritableSizable {
-
-    public VLongWritable() {
-    }
-
-    public VLongWritable(long value) {
-        set(value);
-    }
-
-    public int sizeInBytes() {
-        long i = get();
-        if (i >= -112 && i <= 127) {
-            return 1;
-        }
-
-        int len = -112;
-        if (i < 0) {
-            i ^= -1L; // take one's complement'
-            len = -120;
-        }
-
-        long tmp = i;
-        while (tmp != 0) {
-            tmp = tmp >> 8;
-            len--;
-        }
-
-        len = (len < -120) ? -(len + 120) : -(len + 112);
-        return len + 1;
-    }
-
-    /** A Comparator optimized for LongWritable. */
-    public static class Comparator extends WritableComparator {
-        private ResetableByteArrayInputStream bis = new ResetableByteArrayInputStream();
-        private DataInput dis = new DataInputStream(bis);
-
-        public Comparator() {
-            super(VLongWritable.class);
-        }
-
-        public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
-            try {
-                bis.setByteArray(b1, s1);
-                long thisValue = WritableUtils.readVLong(dis);
-                bis.setByteArray(b2, s2);
-                long thatValue = WritableUtils.readVLong(dis);
-                return (thisValue < thatValue ? -1 : (thisValue == thatValue ? 0 : 1));
-            } catch (Exception e) {
-                throw new IllegalStateException(e);
-            }
-        }
-    }
-
-    /** A decreasing Comparator optimized for LongWritable. */
-    public static class DecreasingComparator extends Comparator {
-        public int compare(WritableComparable a, WritableComparable b) {
-            return -super.compare(a, b);
-        }
-
-        public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
-            return -super.compare(b1, s1, l1, b2, s2, l2);
-        }
-    }
-
-    static { // register default comparator
-        WritableComparator.define(VLongWritable.class, new Comparator());
-    }
-
-}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
index 735866c..aad47fc 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
@@ -2,6 +2,10 @@
 
 import java.io.*;
 
+import edu.uci.ics.genomix.pregelix.io.common.AdjacencyListWritable;
+import edu.uci.ics.genomix.pregelix.io.common.ByteWritable;
+import edu.uci.ics.genomix.pregelix.io.common.HashMapWritable;
+import edu.uci.ics.genomix.pregelix.io.common.VLongWritable;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 import edu.uci.ics.genomix.type.EdgeListWritable;
 import edu.uci.ics.genomix.type.EdgeWritable;
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 065e181..ffcd982 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
@@ -2,7 +2,7 @@
 
 import java.util.logging.*;
 
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 
 public class LogAlgorithmLogFormatter extends Formatter {
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
index 0472ad7..e1dd5eb 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
@@ -14,13 +14,13 @@
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
-import edu.uci.ics.genomix.pregelix.io.ByteWritable;
-import edu.uci.ics.genomix.pregelix.io.HashMapWritable;
 import edu.uci.ics.genomix.config.GenomixJobConf;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
-import edu.uci.ics.genomix.pregelix.io.VLongWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.io.common.ByteWritable;
+import edu.uci.ics.genomix.pregelix.io.common.HashMapWritable;
+import edu.uci.ics.genomix.pregelix.io.common.VLongWritable;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.pregelix.operator.pathmerge.P4ForPathMergeVertex;
 import edu.uci.ics.genomix.pregelix.operator.removelowcoverage.RemoveLowCoverageVertex;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/aggregator/StatisticsAggregator.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/aggregator/StatisticsAggregator.java
index b006cb1..bd83ab5 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/aggregator/StatisticsAggregator.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/aggregator/StatisticsAggregator.java
@@ -2,11 +2,11 @@
 
 import org.apache.hadoop.io.NullWritable;
 
-import edu.uci.ics.genomix.pregelix.io.ByteWritable;
-import edu.uci.ics.genomix.pregelix.io.HashMapWritable;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
-import edu.uci.ics.genomix.pregelix.io.VLongWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.common.ByteWritable;
+import edu.uci.ics.genomix.pregelix.io.common.HashMapWritable;
+import edu.uci.ics.genomix.pregelix.io.common.VLongWritable;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
 import edu.uci.ics.pregelix.api.graph.GlobalAggregator;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeAddVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeAddVertex.java
index f46358d..adbc526 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeAddVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeAddVertex.java
@@ -15,8 +15,8 @@
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 
 /**
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeRemoveVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeRemoveVertex.java
index 869e369..3520914 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeRemoveVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeRemoveVertex.java
@@ -9,8 +9,8 @@
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.pregelix.type.StatisticsCounter;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleAddVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleAddVertex.java
index b4440d9..e446129 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleAddVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleAddVertex.java
@@ -15,8 +15,8 @@
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
 import edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 
 /**
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
index 175e686..42dd1e1 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
@@ -17,8 +17,8 @@
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
-import edu.uci.ics.genomix.pregelix.io.BubbleMergeMessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.message.BubbleMergeMessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
index a978cfd..b74eb43 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
@@ -2,10 +2,10 @@
 
 import java.io.IOException;
 
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
-import edu.uci.ics.genomix.pregelix.io.PathMergeMessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
+import edu.uci.ics.genomix.pregelix.io.message.PathMergeMessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 import edu.uci.ics.genomix.type.GeneCode;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/MapReduceVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/MapReduceVertex.java
index c949770..5a7bea4 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/MapReduceVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/MapReduceVertex.java
@@ -8,9 +8,9 @@
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
-import edu.uci.ics.genomix.pregelix.io.PathMergeMessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.io.message.PathMergeMessageWritable;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 import edu.uci.ics.genomix.type.VKmerListWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P1ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P1ForPathMergeVertex.java
index 03e7b63..d23912d 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P1ForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P1ForPathMergeVertex.java
@@ -10,9 +10,9 @@
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
-import edu.uci.ics.genomix.pregelix.io.PathMergeMessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.io.message.PathMergeMessageWritable;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 import edu.uci.ics.genomix.pregelix.util.VertexUtil;
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
index 8796fc8..d0ef40e 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
@@ -4,9 +4,9 @@
 import java.util.Iterator;
 
 import edu.uci.ics.genomix.pregelix.client.Client;
-import edu.uci.ics.genomix.pregelix.io.PathMergeMessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.io.message.PathMergeMessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
index 3f5ba86..042f102 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
@@ -9,9 +9,9 @@
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
-import edu.uci.ics.genomix.pregelix.io.PathMergeMessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.io.message.PathMergeMessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/removelowcoverage/RemoveLowCoverageVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/removelowcoverage/RemoveLowCoverageVertex.java
index 3c8addf..b7005f9 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/removelowcoverage/RemoveLowCoverageVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/removelowcoverage/RemoveLowCoverageVertex.java
@@ -10,8 +10,8 @@
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.pregelix.type.StatisticsCounter;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/BFSTraverseVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/BFSTraverseVertex.java
index d6dd7f4..4a905ad 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/BFSTraverseVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/BFSTraverseVertex.java
@@ -7,10 +7,10 @@
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
-import edu.uci.ics.genomix.pregelix.io.ArrayListWritable;
-import edu.uci.ics.genomix.pregelix.io.BFSTraverseMessageWritable;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.common.ArrayListWritable;
+import edu.uci.ics.genomix.pregelix.io.message.BFSTraverseMessageWritable;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.type.EdgeDirs;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/ScaffoldingAggregator.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/ScaffoldingAggregator.java
index 5523c46..f29d8be 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/ScaffoldingAggregator.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/ScaffoldingAggregator.java
@@ -2,11 +2,11 @@
 
 import org.apache.hadoop.io.NullWritable;
 
-import edu.uci.ics.genomix.pregelix.io.HashMapWritable;
 import edu.uci.ics.genomix.pregelix.io.KmerListAndFlagListWritable;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
-import edu.uci.ics.genomix.pregelix.io.VLongWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.common.HashMapWritable;
+import edu.uci.ics.genomix.pregelix.io.common.VLongWritable;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/ScaffoldingVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/ScaffoldingVertex.java
index 9a87e15..dfe76a9 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/ScaffoldingVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/ScaffoldingVertex.java
@@ -9,13 +9,13 @@
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
-import edu.uci.ics.genomix.pregelix.io.ArrayListWritable;
-import edu.uci.ics.genomix.pregelix.io.BFSTraverseMessageWritable;
-import edu.uci.ics.genomix.pregelix.io.HashMapWritable;
 import edu.uci.ics.genomix.pregelix.io.KmerListAndFlagListWritable;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
-import edu.uci.ics.genomix.pregelix.io.VLongWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.common.ArrayListWritable;
+import edu.uci.ics.genomix.pregelix.io.common.HashMapWritable;
+import edu.uci.ics.genomix.pregelix.io.common.VLongWritable;
+import edu.uci.ics.genomix.pregelix.io.message.BFSTraverseMessageWritable;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.pregelix.type.StatisticsCounter;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java
index bbe89c7..90aa571 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java
@@ -10,9 +10,9 @@
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
-import edu.uci.ics.genomix.pregelix.io.SplitRepeatMessageWritable;
 import edu.uci.ics.genomix.config.GenomixJobConf;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.message.SplitRepeatMessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.pregelix.type.StatisticsCounter;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipAddVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipAddVertex.java
index c1e5fc2..8b3ee23 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipAddVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipAddVertex.java
@@ -14,8 +14,8 @@
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 
 /*
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java
index d815146..eebaab1 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java
@@ -8,8 +8,8 @@
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.pregelix.type.StatisticsCounter;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/unrolltandemrepeat/UnrollTandemRepeat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/unrolltandemrepeat/UnrollTandemRepeat.java
index 2aa23da..36a2e54 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/unrolltandemrepeat/UnrollTandemRepeat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/unrolltandemrepeat/UnrollTandemRepeat.java
@@ -7,8 +7,8 @@
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.pregelix.type.StatisticsCounter;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
index e10fa7a..083b659 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
@@ -1,7 +1,7 @@
 package edu.uci.ics.genomix.pregelix.util;
 
-import edu.uci.ics.genomix.pregelix.io.AdjacencyListWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.common.AdjacencyListWritable;
 import edu.uci.ics.genomix.type.EdgeWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BasicSmallTestCase.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BasicSmallTestCase.java
index 7167e7c..87630fd 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BasicSmallTestCase.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BasicSmallTestCase.java
@@ -29,9 +29,9 @@
 import org.junit.Test;
 
 import edu.uci.ics.genomix.pregelix.graph.GenerateGraphViz;
-import edu.uci.ics.genomix.pregelix.io.ByteWritable;
-import edu.uci.ics.genomix.pregelix.io.HashMapWritable;
-import edu.uci.ics.genomix.pregelix.io.VLongWritable;
+import edu.uci.ics.genomix.pregelix.io.common.ByteWritable;
+import edu.uci.ics.genomix.pregelix.io.common.HashMapWritable;
+import edu.uci.ics.genomix.pregelix.io.common.VLongWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.sequencefile.GenerateTextFile;
 import edu.uci.ics.genomix.pregelix.type.StatisticsCounter;
