diff --git a/conf/checkstyle/sun_checks.xml b/conf/checkstyle/sun_checks.xml
index 3d0ccb1..68a55d0 100644
--- a/conf/checkstyle/sun_checks.xml
+++ b/conf/checkstyle/sun_checks.xml
@@ -121,11 +121,7 @@
         <module name="LocalVariableName"/>
 
         <module name="MemberName"/>
-
-        <module name="MethodName">
-          <property name="severity" value="warning"/>
-        </module>
-
+        <module name="MethodName"/>
         <module name="PackageName"/>
         <module name="ParameterName"/>
         <module name="StaticVariableName"/>
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;
             }
         }
diff --git a/src/test/java/net/onrc/onos/core/datastore/hazelcast/HZTableTest.java b/src/test/java/net/onrc/onos/core/datastore/hazelcast/HZTableTest.java
index 39e7e9f..913012d 100644
--- a/src/test/java/net/onrc/onos/core/datastore/hazelcast/HZTableTest.java
+++ b/src/test/java/net/onrc/onos/core/datastore/hazelcast/HZTableTest.java
@@ -93,7 +93,7 @@
 
     @Test
     public void testVERSION_NONEXISTENT() {
-        assertEquals(HZClient.VERSION_NONEXISTENT, table.VERSION_NONEXISTENT());
+        assertEquals(HZClient.VERSION_NONEXISTENT, table.getVersionNonexistant());
     }
 
     @Test
diff --git a/src/test/java/net/onrc/onos/core/datastore/topology/KVSwitchTest.java b/src/test/java/net/onrc/onos/core/datastore/topology/KVSwitchTest.java
index ba25903..a789f1c 100644
--- a/src/test/java/net/onrc/onos/core/datastore/topology/KVSwitchTest.java
+++ b/src/test/java/net/onrc/onos/core/datastore/topology/KVSwitchTest.java
@@ -40,7 +40,7 @@
         try {
             final KVSwitch sw = new KVSwitch(dpid);
             sw.read();
-            assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+            assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion());
             assertEquals(dpid, sw.getDpid());
             assertEquals(status, sw.getStatus());
             return sw;
@@ -67,7 +67,7 @@
             KVSwitch sw = new KVSwitch(dpid);
             sw.setStatus(STATUS.ACTIVE);
             sw.create();
-            assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+            assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion());
             expected.put(sw.getDpid(), sw);
         }
 
@@ -88,7 +88,7 @@
     public void testCreate() throws ObjectExistsException {
         sw1.setStatus(STATUS.ACTIVE);
         sw1.create();
-        assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
+        assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw1.getVersion());
 
         assertEquals(dpid1, sw1.getDpid());
         assertEquals(STATUS.ACTIVE, sw1.getStatus());
@@ -101,7 +101,7 @@
         // setup pre-existing Switch
         KVSwitch sw = new KVSwitch(dpid1);
         sw.forceCreate();
-        assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+        assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion());
         assertSwitchInDataStore(dpid1, STATUS.INACTIVE);
 
         sw1.setStatus(STATUS.ACTIVE);
@@ -114,13 +114,13 @@
         // setup pre-existing Switch
         KVSwitch sw = new KVSwitch(dpid1);
         sw.forceCreate();
-        assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+        assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion());
         assertSwitchInDataStore(dpid1, STATUS.INACTIVE);
 
 
         sw1.setStatus(STATUS.ACTIVE);
         sw1.forceCreate();
-        assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
+        assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw1.getVersion());
 
         assertEquals(dpid1, sw1.getDpid());
         assertEquals(STATUS.ACTIVE, sw1.getStatus());
@@ -133,11 +133,11 @@
         KVSwitch sw = new KVSwitch(dpid1);
         sw.setStatus(STATUS.ACTIVE);
         sw.forceCreate();
-        assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+        assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion());
         assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
 
         sw1.read();
-        assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
+        assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw1.getVersion());
         assertEquals(sw.getVersion(), sw1.getVersion());
         assertEquals(dpid1, sw1.getDpid());
         assertEquals(STATUS.ACTIVE, sw1.getStatus());
@@ -156,16 +156,16 @@
         KVSwitch sw = new KVSwitch(dpid1);
         sw.setStatus(STATUS.ACTIVE);
         sw.forceCreate();
-        assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+        assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion());
         assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
 
 
         sw1.read();
-        assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
+        assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw1.getVersion());
 
         sw1.setStatus(STATUS.INACTIVE);
         sw1.update();
-        assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
+        assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw1.getVersion());
         assertNotEquals(sw.getVersion(), sw1.getVersion());
         assertEquals(dpid1, sw1.getDpid());
         assertEquals(STATUS.INACTIVE, sw1.getStatus());
@@ -177,7 +177,7 @@
         KVSwitch sw = new KVSwitch(dpid1);
         sw.setStatus(STATUS.ACTIVE);
         sw.forceCreate();
-        assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+        assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion());
         assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
 
 
@@ -186,7 +186,7 @@
         } catch (ObjectDoesntExistException e) {
             fail("Failed reading switch to delete");
         }
-        assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
+        assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw1.getVersion());
         sw1.delete();
         assertSwitchNotInDataStore(dpid1);
     }
@@ -197,12 +197,12 @@
         KVSwitch sw = new KVSwitch(dpid1);
         sw.setStatus(STATUS.ACTIVE);
         sw.forceCreate();
-        assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw.getVersion());
+        assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion());
         assertSwitchInDataStore(dpid1, STATUS.ACTIVE);
 
 
         sw1.forceDelete();
-        assertNotEquals(DataStoreClient.getClient().VERSION_NONEXISTENT(), sw1.getVersion());
+        assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw1.getVersion());
     }
 
 }
diff --git a/src/test/java/net/onrc/onos/core/datastore/topology/KVTopologyTest.java b/src/test/java/net/onrc/onos/core/datastore/topology/KVTopologyTest.java
index d9c2478..ce647a4 100644
--- a/src/test/java/net/onrc/onos/core/datastore/topology/KVTopologyTest.java
+++ b/src/test/java/net/onrc/onos/core/datastore/topology/KVTopologyTest.java
@@ -34,7 +34,7 @@
 
 public class KVTopologyTest {
 
-    static final long VERSION_NONEXISTENT = DataStoreClient.getClient().VERSION_NONEXISTENT();
+    static final long VERSION_NONEXISTENT = DataStoreClient.getClient().getVersionNonexistant();
 
     private static final byte[] DEVICE2_MAC_SW2P2 = new byte[]{6, 5, 4, 3, 2, 1, 0};
 
