diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
index 17f1a11..7d1738e 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
@@ -25,6 +25,7 @@
 import org.apache.hadoop.io.WritableComparator;
 
 import edu.uci.ics.genomix.data.KmerUtil;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 
 /**
  * Variable kmer length byteswritable
@@ -503,6 +504,25 @@
         appendOneByteAtPosition(preKmer.kmerlength - initialKmerSize + k - 4 + 1, cacheByte, bytes, offset, size);
         clearLeadBit();
     }
+    
+    public void mergeWithKmerInDir(byte dir, int initialKmerSize, KmerBytesWritable kmer) {
+        switch(dir & DirectionFlag.DIR_MASK) {
+            case DirectionFlag.DIR_FF:
+                mergeWithFFKmer(initialKmerSize, kmer);
+                break;
+            case DirectionFlag.DIR_FR:
+                mergeWithFRKmer(initialKmerSize, kmer);
+                break;
+            case DirectionFlag.DIR_RF:
+                mergeWithRFKmer(initialKmerSize, kmer);
+                break;
+            case DirectionFlag.DIR_RR:
+                mergeWithRRKmer(initialKmerSize, kmer);
+                break;
+            default:
+                throw new RuntimeException("Direciotn not recognized: " + dir);
+        }
+    }
 
     public static void appendOneByteAtPosition(int k, byte onebyte, byte[] buffer, int start, int length) {
         int position = start + length - 1 - k / 4;
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/pmcommon/NodeWithFlagWritable.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/pmcommon/NodeWithFlagWritable.java
index a7e8157..3ed0e4e 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/pmcommon/NodeWithFlagWritable.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/pmcommon/NodeWithFlagWritable.java
@@ -38,7 +38,8 @@
         public static final byte EXTRA_FLAG = 1 << 6;
     }
 
-    public void setAsUpdateMessage(byte mergeDir, byte neighborDir, PositionWritable nodeToDelete, PositionWritable nodeToAdd) {
+    public void setAsUpdateMessage(byte mergeDir, byte neighborDir, PositionWritable nodeToDelete,
+            PositionWritable nodeToAdd) {
         byte neighborToMeDir = mirrorDirection(neighborDir);
         byte neighborToMergeDir = flipDirection(neighborToMeDir, mergeDir);
 
@@ -53,8 +54,6 @@
         node.getListFromDir(neighborToMergeDir).append(nodeToAdd);
     }
 
-
-
     /*
      * Returns the edge dir for B->A when the A->B edge is type @dir
      */
@@ -118,22 +117,7 @@
             // remove position and merge its position lists with node
             if (!updateNode.equals(NodeWritable.EMPTY_NODE)) {
                 // need to remove updateNode from the specified PositionList
-                switch (updateFlag & MessageFlag.DIR_MASK) {
-                    case MessageFlag.DIR_FF:
-                        node.getFFList().remove(updateNode.getNodeID());
-                        break;
-                    case MessageFlag.DIR_FR:
-                        node.getFRList().remove(updateNode.getNodeID());
-                        break;
-                    case MessageFlag.DIR_RF:
-                        node.getRFList().remove(updateNode.getNodeID());
-                        break;
-                    case MessageFlag.DIR_RR:
-                        node.getRRList().remove(updateNode.getNodeID());
-                        break;
-                    default:
-                        throw new IOException("Unrecognized direction in updateFlag: " + updateFlag);
-                }
+                node.getListFromDir(updateFlag).remove(updateNode.getNodeID());
             }
             // now merge positionlists from update and node
             node.getFFList().appendList(updateNode.getFFList());
@@ -142,13 +126,16 @@
             node.getRRList().appendList(updateNode.getRRList());
         } else if ((updateFlag & MessageFlag.MSG_UPDATE_MERGE) == MessageFlag.MSG_UPDATE_MERGE) {
             // this message wants to merge node with updateNode.
-            // the direction flag indicates how the merge should take place.
-            // TODO send update or remove edge that I merge with
+            // the direction flag indicates node's relationship with updateNode
+            node.getListFromDir(updateFlag).remove(updateNode.getNodeID()); // remove the node from my edges
+            node.getKmer().mergeWithKmerInDir(updateFlag, kmerSize, updateNode.getKmer()); // merge with its kmer
+
+            // merge my edges with the incoming node's edges, accounting for if the node flipped in 
+            // the merge and if it's my predecessor or successor
             switch (updateFlag & MessageFlag.DIR_MASK) {
                 case MessageFlag.DIR_FF:
-                    node.getKmer().mergeWithFFKmer(kmerSize, updateNode.getKmer());
                     node.getFFList().set(updateNode.getFFList());
-                    // TODO not just FF list here-- FR as well
+                    node.getFRList().set(updateNode.getFRList());
                     break;
                 case MessageFlag.DIR_FR:
                     // FIXME not sure if this should be reverse-complement or just reverse...
