diff --git a/src/main/java/net/onrc/onos/core/datastore/ObjectDoesntExistException.java b/src/main/java/net/onrc/onos/core/datastore/ObjectDoesntExistException.java
index 354cd9c..9228f61 100644
--- a/src/main/java/net/onrc/onos/core/datastore/ObjectDoesntExistException.java
+++ b/src/main/java/net/onrc/onos/core/datastore/ObjectDoesntExistException.java
@@ -14,12 +14,12 @@
 
     public ObjectDoesntExistException(final IKVTableID tableID,
                                       final byte[] key, final Throwable cause) {
-        super(ByteArrayUtil.toHexStringBuffer(key, ":")
+        super(ByteArrayUtil.toHexStringBuilder(key, ":")
                 + " did not exist on table:" + tableID, cause);
     }
 
     public ObjectDoesntExistException(final IKVTableID tableID, final byte[] key) {
-        super(ByteArrayUtil.toHexStringBuffer(key, ":")
+        super(ByteArrayUtil.toHexStringBuilder(key, ":")
                 + " did not exist on table:" + tableID);
     }
 }
diff --git a/src/main/java/net/onrc/onos/core/datastore/ObjectExistsException.java b/src/main/java/net/onrc/onos/core/datastore/ObjectExistsException.java
index 08be74f..13f7240 100644
--- a/src/main/java/net/onrc/onos/core/datastore/ObjectExistsException.java
+++ b/src/main/java/net/onrc/onos/core/datastore/ObjectExistsException.java
@@ -14,12 +14,12 @@
 
     public ObjectExistsException(final IKVTableID tableID, final byte[] key,
                                  final Throwable cause) {
-        super(ByteArrayUtil.toHexStringBuffer(key, ":")
+        super(ByteArrayUtil.toHexStringBuilder(key, ":")
                 + " already exist on table:" + tableID, cause);
     }
 
     public ObjectExistsException(final IKVTableID tableID, final byte[] key) {
-        super(ByteArrayUtil.toHexStringBuffer(key, ":")
+        super(ByteArrayUtil.toHexStringBuilder(key, ":")
                 + " already exist on table:" + tableID);
     }
 }
diff --git a/src/main/java/net/onrc/onos/core/datastore/WrongVersionException.java b/src/main/java/net/onrc/onos/core/datastore/WrongVersionException.java
index 4fd0529..005905e 100644
--- a/src/main/java/net/onrc/onos/core/datastore/WrongVersionException.java
+++ b/src/main/java/net/onrc/onos/core/datastore/WrongVersionException.java
@@ -16,14 +16,14 @@
                                  final long expectedVersion, final Throwable cause) {
         // It will be best if {@code cause} has actual version encountered, but
         // doesn't currently.
-        super(ByteArrayUtil.toHexStringBuffer(key, ":") + " on table:"
+        super(ByteArrayUtil.toHexStringBuilder(key, ":") + " on table:"
                 + tableID + " was expected to be version:" + expectedVersion,
                 cause);
     }
 
     public WrongVersionException(final IKVTableID tableID, final byte[] key,
                                  final long expectedVersion, final long encounteredVersion) {
-        super(ByteArrayUtil.toHexStringBuffer(key, ":") + " on table:"
+        super(ByteArrayUtil.toHexStringBuilder(key, ":") + " on table:"
                 + tableID + " was expected to be version:" + expectedVersion
                 + " but found:" + encounteredVersion);
     }
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 4b6e8a1..f45483c 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
@@ -342,9 +342,9 @@
     }
 
     private String getCounterName(final IKVTableID tableId, final byte[] key) {
-        StringBuffer buf = new StringBuffer(tableId.getTableName());
+        StringBuilder buf = new StringBuilder(tableId.getTableName());
         buf.append('@');
-        ByteArrayUtil.toHexStringBuffer(key, ":", buf);
+        ByteArrayUtil.toHexStringBuilder(key, ":", buf);
         return buf.toString();
     }
 
diff --git a/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZMultiEntryOperation.java b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZMultiEntryOperation.java
index 99db3cc..58df13b 100644
--- a/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZMultiEntryOperation.java
+++ b/src/main/java/net/onrc/onos/core/datastore/hazelcast/HZMultiEntryOperation.java
@@ -161,7 +161,7 @@
     @Override
     public String toString() {
         return "[HZMultiEntryOperation table=" + table + ", key="
-                + ByteArrayUtil.toHexStringBuffer(key, ":") + ", operation=" + operation
+                + ByteArrayUtil.toHexStringBuilder(key, ":") + ", operation=" + operation
                 + ", status=" + status + ", writeValue=" + writeValue + "]";
     }
 }
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 9a9141e..aea77fc 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
@@ -409,11 +409,11 @@
                         op.entry.setVersion(removedVersion);
                         op.status = STATUS.SUCCESS;
                     } catch (JRamCloud.ObjectDoesntExistException | JRamCloud.WrongVersionException e) {
-                        log.error("Failed to remove key:" + ByteArrayUtil.toHexStringBuffer(op.entry.getKey(), "") + " from tableID:" + op.tableId, e);
+                        log.error("Failed to remove key:" + ByteArrayUtil.toHexStringBuilder(op.entry.getKey(), "") + " from tableID:" + op.tableId, e);
                         failExists = true;
                         op.status = STATUS.FAILED;
                     } catch (JRamCloud.RejectRulesException e) {
-                        log.error("Failed to remove key:" + ByteArrayUtil.toHexStringBuffer(op.entry.getKey(), "") + " from tableID:" + op.tableId, e);
+                        log.error("Failed to remove key:" + ByteArrayUtil.toHexStringBuilder(op.entry.getKey(), "") + " from tableID:" + op.tableId, e);
                         failExists = true;
                         op.status = STATUS.FAILED;
                     }
@@ -425,7 +425,7 @@
                         op.entry.setVersion(removedVersion);
                         op.status = STATUS.SUCCESS;
                     } else {
-                        log.error("Failed to remove key:{} from tableID:{}", ByteArrayUtil.toHexStringBuffer(op.entry.getKey(), ""), op.tableId);
+                        log.error("Failed to remove key:{} from tableID:{}", ByteArrayUtil.toHexStringBuilder(op.entry.getKey(), ""), op.tableId);
                         failExists = true;
                         op.status = STATUS.FAILED;
                     }
@@ -583,7 +583,7 @@
         final long version = create(tableId, key, valueBytes.array());
         if (log.isTraceEnabled()) {
             log.trace("Created counter {}-{}={}@{}",
-                    tableId, ByteArrayUtil.toHexStringBuffer(key, ":"),
+                    tableId, ByteArrayUtil.toHexStringBuilder(key, ":"),
                     initialValue, version);
         }
     }
@@ -599,7 +599,7 @@
         final long version = forceCreate(tableId, key, valueBytes.array());
         if (log.isTraceEnabled()) {
             log.trace("set counter {}-{}={}@{}",
-                    tableId, ByteArrayUtil.toHexStringBuffer(key, ":"),
+                    tableId, ByteArrayUtil.toHexStringBuilder(key, ":"),
                     value, version);
         }
     }
@@ -616,7 +616,7 @@
         } catch (JRamCloud.ObjectDoesntExistException e) {
             log.warn("Counter {}-{} was not present",
                     tableId,
-                    ByteArrayUtil.toHexStringBuffer(key, ":"));
+                    ByteArrayUtil.toHexStringBuilder(key, ":"));
             try {
                 // creating counter initialized to 0
                 createCounter(rcTableId, key, 0L);
@@ -624,7 +624,7 @@
                 // someone concurrently created it
                 log.debug("Counter {}-{} seemed to be concurrently created.",
                         tableId,
-                        ByteArrayUtil.toHexStringBuffer(key, ":"));
+                        ByteArrayUtil.toHexStringBuilder(key, ":"));
             }
             try {
                 return rcClient.increment(rcTableId.getTableID(), key, incrementValue);
diff --git a/src/main/java/net/onrc/onos/core/datastore/topology/KVDevice.java b/src/main/java/net/onrc/onos/core/datastore/topology/KVDevice.java
index 9a6d550..5552f59 100644
--- a/src/main/java/net/onrc/onos/core/datastore/topology/KVDevice.java
+++ b/src/main/java/net/onrc/onos/core/datastore/topology/KVDevice.java
@@ -199,7 +199,7 @@
     public String toString() {
         // TODO output all properties?
         return "[" + this.getClass().getSimpleName()
-                + " " + ByteArrayUtil.toHexStringBuffer(mac, ":") + "]";
+                + " " + ByteArrayUtil.toHexStringBuilder(mac, ":") + "]";
     }
 
     public int getIp() {
diff --git a/src/main/java/net/onrc/onos/core/datastore/topology/KVPort.java b/src/main/java/net/onrc/onos/core/datastore/topology/KVPort.java
index 5721b78..c0894c1 100644
--- a/src/main/java/net/onrc/onos/core/datastore/topology/KVPort.java
+++ b/src/main/java/net/onrc/onos/core/datastore/topology/KVPort.java
@@ -68,14 +68,14 @@
         if (keyBuf.getChar() != 'S') {
             throw new IllegalArgumentException("Invalid Port key:" + keyBuf
                     + " "
-                    + ByteArrayUtil.toHexStringBuffer(keyBuf.array(), ":"));
+                    + ByteArrayUtil.toHexStringBuilder(keyBuf.array(), ":"));
         }
         long[] pair = new long[2];
         pair[0] = keyBuf.getLong();
         if (keyBuf.getChar() != 'P') {
             throw new IllegalArgumentException("Invalid Port key:" + keyBuf
                     + " "
-                    + ByteArrayUtil.toHexStringBuffer(keyBuf.array(), ":"));
+                    + ByteArrayUtil.toHexStringBuilder(keyBuf.array(), ":"));
         }
         pair[1] = keyBuf.getLong();
         return pair;
diff --git a/src/main/java/net/onrc/onos/core/datastore/utils/ByteArrayUtil.java b/src/main/java/net/onrc/onos/core/datastore/utils/ByteArrayUtil.java
index 96d0048..5c63df8 100644
--- a/src/main/java/net/onrc/onos/core/datastore/utils/ByteArrayUtil.java
+++ b/src/main/java/net/onrc/onos/core/datastore/utils/ByteArrayUtil.java
@@ -9,31 +9,31 @@
     }
 
     /**
-     * Returns a StringBuffer with each byte in {@code bytes}
+     * Returns a StringBuilder with each byte in {@code bytes}
      * converted to a String with {@link Integer#toHexString(int)},
      * separated by {@code sep}.
      *
      * @param bytes byte array to convert
      * @param sep   separator between each bytes
-     * @return {@code bytes} converted to a StringBuffer
+     * @return {@code bytes} converted to a StringBuilder
      */
-    public static StringBuffer toHexStringBuffer(final byte[] bytes,
+    public static StringBuilder toHexStringBuilder(final byte[] bytes,
                                                  final String sep) {
-        return toHexStringBuffer(bytes, sep, new StringBuffer());
+        return toHexStringBuilder(bytes, sep, new StringBuilder());
     }
 
     /**
-     * Returns a StringBuffer with each byte in {@code bytes}
+     * Returns a StringBuilder with each byte in {@code bytes}
      * converted to a String with {@link Integer#toHexString(int)},
      * separated by {@code sep}.
      *
      * @param bytes byte array to convert
      * @param sep   separator between each bytes
-     * @param buf   StringBuffer to append to.
+     * @param buf   StringBuilder to append to.
      * @return {@code buf}
      */
-    public static StringBuffer toHexStringBuffer(final byte[] bytes,
-                                                 final String sep, final StringBuffer buf) {
+    public static StringBuilder toHexStringBuilder(final byte[] bytes,
+                                                 final String sep, final StringBuilder buf) {
         if (bytes == null) {
             return buf;
         }
