diff --git a/src/main/java/net/onrc/onos/apps/bgproute/BgpRoute.java b/src/main/java/net/onrc/onos/apps/bgproute/BgpRoute.java
index 6969480..bb4c7d5 100644
--- a/src/main/java/net/onrc/onos/apps/bgproute/BgpRoute.java
+++ b/src/main/java/net/onrc/onos/apps/bgproute/BgpRoute.java
@@ -414,7 +414,7 @@
             if (rib != null && !rib.equals(update.getRibEntry())) {
                 // There was an existing nexthop for this prefix. This update supersedes that,
                 // so we need to remove the old flows for this prefix from the switches
-                _processDeletePrefix(prefix, rib);
+                executeDeletePrefix(prefix, rib);
             }
 
             if (update.getRibEntry().getNextHop().equals(
@@ -426,11 +426,11 @@
                 return;
             }
 
-            _processRibAdd(update);
+            executeRibAdd(update);
         }
     }
 
-    private void _processRibAdd(RibUpdate update) {
+    private void executeRibAdd(RibUpdate update) {
         Prefix prefix = update.getPrefix();
         RibEntry rib = update.getRibEntry();
 
@@ -598,12 +598,12 @@
                  * If no entry was removed, the <prefix, nexthop> wasn't there so
                  * it's probably already been removed and we don't need to do anything
                  */
-                _processDeletePrefix(prefix, update.getRibEntry());
+                executeDeletePrefix(prefix, update.getRibEntry());
             }
         }
     }
 
-    private void _processDeletePrefix(Prefix prefix, RibEntry ribEntry) {
+    private void executeDeletePrefix(Prefix prefix, RibEntry ribEntry) {
         deletePrefixFlows(prefix);
 
         log.debug("Deleting {} to {}", prefix, ribEntry.getNextHop());
@@ -1046,7 +1046,7 @@
                     // and the next hop is the same as our update. The prefix could
                     // have been removed while we were waiting for the ARP, or the
                     // next hop could have changed.
-                    _processRibAdd(update);
+                    executeRibAdd(update);
                 } else {
                     log.debug("Received ARP response, but {},{} is no longer in ptree",
                             update.getPrefix(), update.getRibEntry());
diff --git a/src/main/java/net/onrc/onos/apps/bgproute/Ptree.java b/src/main/java/net/onrc/onos/apps/bgproute/Ptree.java
index 3c51c90..0f7d4a0 100644
--- a/src/main/java/net/onrc/onos/apps/bgproute/Ptree.java
+++ b/src/main/java/net/onrc/onos/apps/bgproute/Ptree.java
@@ -19,7 +19,7 @@
 
     public Ptree(int maxKeyBits) {
         this.maxKeyBits = maxKeyBits;
-        maxKeyOctets = bit_to_octet(maxKeyBits);
+        maxKeyOctets = bitToOctet(maxKeyBits);
         //refCount = 0;
     }
 
@@ -37,14 +37,14 @@
 
         while (node != null
                 && node.keyBits <= keyBits
-                && key_match(node.key, node.keyBits, key, keyBits)) {
+                && keyMatch(node.key, node.keyBits, key, keyBits)) {
             if (node.keyBits == keyBits) {
                 return addReference(node);
             }
 
             match = node;
 
-            if (bit_check(key, node.keyBits)) {
+            if (bitCheck(key, node.keyBits)) {
                 node = node.right;
             } else {
                 node = node.left;
@@ -57,25 +57,25 @@
             add = new PtreeNode(key, keyBits, maxKeyOctets);
 
             if (match != null) {
-                node_link(match, add);
+                nodeLink(match, add);
             } else {
                 top = add;
             }
         } else {
-            add = node_common(node, key, keyBits);
+            add = nodeCommon(node, key, keyBits);
 
             if (match != null) {
-                node_link(match, add);
+                nodeLink(match, add);
             } else {
                 top = add;
             }
-            node_link(add, node);
+            nodeLink(add, node);
 
             if (add.keyBits != keyBits) {
                 match = add;
 
                 add = new PtreeNode(key, keyBits, maxKeyOctets);
-                node_link(match, add);
+                nodeLink(match, add);
             }
         }
 
@@ -91,12 +91,12 @@
 
         while (node != null
                 && node.keyBits <= keyBits
-                && key_match(node.key, node.keyBits, key, keyBits)) {
+                && keyMatch(node.key, node.keyBits, key, keyBits)) {
             if (node.keyBits == keyBits) {
                 return addReference(node);
             }
 
-            if (bit_check(key, node.keyBits)) {
+            if (bitCheck(key, node.keyBits)) {
                 node = node.right;
             } else {
                 node = node.left;
@@ -116,10 +116,10 @@
 
             while (node != null
                     && node.keyBits <= keyBits
-                    && key_match(node.key, node.keyBits, key, keyBits)) {
+                    && keyMatch(node.key, node.keyBits, key, keyBits)) {
                 matched = node;
 
-                if (bit_check(key, node.keyBits)) {
+                if (bitCheck(key, node.keyBits)) {
                     node = node.right;
                 } else {
                     node = node.left;
@@ -173,7 +173,7 @@
         return null;
     }
 
-    public static int bit_to_octet(int keyBits) {
+    public static int bitToOctet(int keyBits) {
         return Math.max((keyBits + 7) / 8, 1);
     }
 
@@ -187,11 +187,11 @@
             node.refCount--;
         }
         if (node.refCount == 0) {
-            node_remove(node);
+            nodeRemove(node);
         }
     }
 
-    private boolean key_match(byte[] key1, int key1Len, byte[] key2, int key2Len) {
+    private boolean keyMatch(byte[] key1, int key1Len, byte[] key2, int key2Len) {
         int offset;
         int shift;
 
@@ -217,7 +217,7 @@
         return true;
     }
 
-    private boolean bit_check(byte[] key, int keyBits) {
+    private boolean bitCheck(byte[] key, int keyBits) {
         int offset = keyBits / 8;
         int shift = 7 - (keyBits % 8);
         int bit = key[offset] & 0xff;
@@ -227,8 +227,8 @@
         return ((bit & 1) == 1);
     }
 
-    private void node_link(PtreeNode node, PtreeNode add) {
-        boolean bit = bit_check(add.key, node.keyBits);
+    private void nodeLink(PtreeNode node, PtreeNode add) {
+        boolean bit = bitCheck(add.key, node.keyBits);
 
         if (bit) {
             node.right = add;
@@ -238,7 +238,7 @@
         add.parent = node;
     }
 
-    private PtreeNode node_common(PtreeNode node, byte[] key, int keyBits) {
+    private PtreeNode nodeCommon(PtreeNode node, byte[] key, int keyBits) {
         int i;
         int limit = Math.min(node.keyBits, keyBits) / 8;
 
@@ -281,7 +281,7 @@
         return add;
     }
 
-    private void node_remove(PtreeNode node) {
+    private void nodeRemove(PtreeNode node) {
         PtreeNode child;
         PtreeNode parent;
 
@@ -312,7 +312,7 @@
         }
 
         if (parent != null && parent.refCount == 0) {
-            node_remove(parent);
+            nodeRemove(parent);
         }
     }
 }
diff --git a/src/main/java/net/onrc/onos/apps/bgproute/PtreeNode.java b/src/main/java/net/onrc/onos/apps/bgproute/PtreeNode.java
index 4d0b470..76c37d9 100644
--- a/src/main/java/net/onrc/onos/apps/bgproute/PtreeNode.java
+++ b/src/main/java/net/onrc/onos/apps/bgproute/PtreeNode.java
@@ -26,7 +26,7 @@
         this.keyBits = keyBits;
         log.debug("inside Ptreenode constructor key {} bits {}", key, keyBits);
 
-        int octet = Ptree.bit_to_octet(keyBits);
+        int octet = Ptree.bitToOctet(keyBits);
         for (int i = 0; i < maxKeyOctet; i++) {
             if (i < octet) {
                 if (key != null) {
diff --git a/src/main/java/net/onrc/onos/core/datastore/IKVClient.java b/src/main/java/net/onrc/onos/core/datastore/IKVClient.java
index 0fa1cbd..c2d9e35 100644
--- a/src/main/java/net/onrc/onos/core/datastore/IKVClient.java
+++ b/src/main/java/net/onrc/onos/core/datastore/IKVClient.java
@@ -161,6 +161,6 @@
      * Version number which represents that the object does not exist, or has
      * never been read the DB before.
      */
-    public long VERSION_NONEXISTENT();
+    public long getVersionNonexistant();
 
 }
diff --git a/src/main/java/net/onrc/onos/core/datastore/IKVTable.java b/src/main/java/net/onrc/onos/core/datastore/IKVTable.java
index 87fee25..9d0c8ee 100644
--- a/src/main/java/net/onrc/onos/core/datastore/IKVTable.java
+++ b/src/main/java/net/onrc/onos/core/datastore/IKVTable.java
@@ -10,7 +10,7 @@
      * Version number which represents that the object does not exist, or has
      * never been read the DB before.
      */
-    public long VERSION_NONEXISTENT();
+    public long getVersionNonexistant();
 
     /**
      * Interface for a class to represent an entry in Table.
@@ -98,7 +98,7 @@
      * Remove a Key-Value entry in table.
      *
      * @param key
-     * @return version of removed object or VERSION_NONEXISTENT, if it did not exist.
+     * @return version of removed object or non existant version if it did not exist.
      */
     public long forceDelete(byte[] key);
 
diff --git a/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZClient.java b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZClient.java
index 32ff15b..3bfe157 100644
--- a/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZClient.java
+++ b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZClient.java
@@ -335,7 +335,7 @@
     }
 
     @Override
-    public long VERSION_NONEXISTENT() {
+    public long getVersionNonexistant() {
         return VERSION_NONEXISTENT;
     }
 
diff --git a/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZTable.java b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZTable.java
index 7b97ec0..20501bb 100644
--- a/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZTable.java
+++ b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZTable.java
@@ -43,7 +43,7 @@
     }
 
     /**
-     * increment version, avoiding VERSION_NONEXISTENT.
+     * increment version, avoiding versionNonexistant.
      *
      * @param version
      * @return
@@ -320,7 +320,7 @@
     }
 
     @Override
-    public long VERSION_NONEXISTENT() {
+    public long getVersionNonexistant() {
         return HZClient.VERSION_NONEXISTENT;
     }
 }
diff --git a/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCClient.java b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCClient.java
index d2e1670..3644cfa 100644
--- a/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCClient.java
+++ b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCClient.java
@@ -566,7 +566,7 @@
     static final long VERSION_NONEXISTENT = JRamCloud.VERSION_NONEXISTENT;
 
     @Override
-    public long VERSION_NONEXISTENT() {
+    public long getVersionNonexistant() {
         return VERSION_NONEXISTENT;
     }
 }
diff --git a/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTable.java b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTable.java
index f7bafd5..3c78cf1 100644
--- a/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTable.java
+++ b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTable.java
@@ -127,7 +127,7 @@
     }
 
     @Override
-    public long VERSION_NONEXISTENT() {
+    public long getVersionNonexistant() {
         return RCClient.VERSION_NONEXISTENT;
     }
 
diff --git a/src/main/java/net/onrc/onos/core/datastore/utils/KVObject.java b/src/main/java/net/onrc/onos/core/datastore/utils/KVObject.java
index 568cfc7..618c31e 100644
--- a/src/main/java/net/onrc/onos/core/datastore/utils/KVObject.java
+++ b/src/main/java/net/onrc/onos/core/datastore/utils/KVObject.java
@@ -49,7 +49,7 @@
 
     /**
      * serialized value version stored on data store or
-     * {@link IKVTable.VERSION_NONEXISTENT()} if is a new object.
+     * {@link IKVTable.getVersionNonexistant()} if is a new object.
      */
     private long version;
 
@@ -59,7 +59,7 @@
     private Map<Object, Object> propertyMap;
 
     public KVObject(final IKVTable table, final byte[] key) {
-        this(table, key, null, table.VERSION_NONEXISTENT());
+        this(table, key, null, table.getVersionNonexistant());
     }
 
     public KVObject(final IKVTable table, final byte[] key, final byte[] value, final long version) {
@@ -324,7 +324,7 @@
                 }
             } else {
                 log.error("MultiRead error, skipping {}, {}", obj.getTable(), obj);
-                obj.version = obj.getTable().VERSION_NONEXISTENT();
+                obj.version = obj.getTable().getVersionNonexistant();
                 failExists = true;
             }
         }
