diff --git a/core/api/src/main/java/org/onlab/onos/store/service/VersionedValue.java b/core/api/src/main/java/org/onlab/onos/store/service/VersionedValue.java
index 72c5bcd..9a78252 100644
--- a/core/api/src/main/java/org/onlab/onos/store/service/VersionedValue.java
+++ b/core/api/src/main/java/org/onlab/onos/store/service/VersionedValue.java
@@ -2,6 +2,8 @@
 
 import java.util.Arrays;
 
+import org.onlab.util.ByteArraySizeHashPrinter;
+
 import com.google.common.base.MoreObjects;
 
 /**
@@ -64,7 +66,7 @@
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
                 .add("version", version)
-                .add("value", value != null ? "[" + value.length + " bytes]" : value)
+                .add("value", ByteArraySizeHashPrinter.orNull(value))
                 .toString();
     }
 }
diff --git a/core/api/src/main/java/org/onlab/onos/store/service/WriteRequest.java b/core/api/src/main/java/org/onlab/onos/store/service/WriteRequest.java
index 3800a83..d687fa5 100644
--- a/core/api/src/main/java/org/onlab/onos/store/service/WriteRequest.java
+++ b/core/api/src/main/java/org/onlab/onos/store/service/WriteRequest.java
@@ -6,6 +6,8 @@
 
 import java.util.Objects;
 
+import org.onlab.util.ByteArraySizeHashPrinter;
+
 import com.google.common.base.MoreObjects;
 
 /**
@@ -185,13 +187,13 @@
 
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
+         return MoreObjects.toStringHelper(getClass())
                 .add("type", type)
                 .add("tableName", tableName)
                 .add("key", key)
-                .add("newValue", newValue != null ? "[" + newValue.length + " bytes]" : newValue)
+                .add("newValue", ByteArraySizeHashPrinter.orNull(newValue))
                 .add("previousVersion", previousVersion)
-                .add("oldValue", oldValue != null ? "[" + oldValue.length + " bytes]" : oldValue)
+                .add("oldValue", ByteArraySizeHashPrinter.orNull(oldValue))
                 .toString();
     }
 
diff --git a/utils/misc/src/main/java/org/onlab/util/ByteArraySizeHashPrinter.java b/utils/misc/src/main/java/org/onlab/util/ByteArraySizeHashPrinter.java
new file mode 100644
index 0000000..cc39ce2
--- /dev/null
+++ b/utils/misc/src/main/java/org/onlab/util/ByteArraySizeHashPrinter.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2014 Open Networking Laboratory
+ *
+ * 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 at
+ *
+ *     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 org.onlab.util;
+
+import java.util.Arrays;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.base.MoreObjects.ToStringHelper;
+
+/**
+ * Helper to print byte[] length and hashCode.
+ */
+public final class ByteArraySizeHashPrinter {
+
+    private final byte[] bytes;
+
+    /**
+     * Returns ByteArraySizeHashPrinter wrapping given byte[].
+     *
+     * @param bytes bytes to wrap around
+     * @return ByteArraySizeHashPrinter
+     */
+    public static ByteArraySizeHashPrinter of(byte[] bytes) {
+        return new ByteArraySizeHashPrinter(bytes);
+    }
+
+    /**
+     * Returns ByteArraySizeHashPrinter wrapping given byte[].
+     *
+     * @param bytes bytes to wrap around
+     * @return null if {@code bytes == null}, ByteArraySizeHashPrinter otherwise
+     */
+    public static ByteArraySizeHashPrinter orNull(byte[] bytes) {
+        if (bytes == null) {
+            return null;
+        }
+        return new ByteArraySizeHashPrinter(bytes);
+    }
+
+    public ByteArraySizeHashPrinter(byte[] bytes) {
+        this.bytes = bytes;
+    }
+
+    @Override
+    public String toString() {
+        ToStringHelper helper = MoreObjects.toStringHelper("byte[]");
+        if (bytes != null) {
+            helper.add("length", bytes.length)
+                  .add("hash", Arrays.hashCode(bytes));
+        } else {
+            helper.addValue(bytes);
+        }
+        return helper.toString();
+    }
+}
diff --git a/utils/misc/src/test/java/org/onlab/util/ByteArraySizeHashPrinterTest.java b/utils/misc/src/test/java/org/onlab/util/ByteArraySizeHashPrinterTest.java
new file mode 100644
index 0000000..e3a5e94
--- /dev/null
+++ b/utils/misc/src/test/java/org/onlab/util/ByteArraySizeHashPrinterTest.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2014 Open Networking Laboratory
+ *
+ * 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 at
+ *
+ *     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 org.onlab.util;
+
+import static org.junit.Assert.*;
+
+import java.util.Arrays;
+
+import org.junit.Test;
+
+/**
+ * Test cases for byte[] pretty printer.
+ */
+public class ByteArraySizeHashPrinterTest {
+
+    /**
+     * Test method for {@link org.onlab.util.ByteArraySizeHashPrinter#toString()}.
+     */
+    @Test
+    public void testToStringNull() {
+        final byte[] none = null;
+
+        assertEquals("byte[]{null}", String.valueOf(ByteArraySizeHashPrinter.of(none)));
+        assertNull(ByteArraySizeHashPrinter.orNull(none));
+    }
+
+    /**
+     * Test method for {@link org.onlab.util.ByteArraySizeHashPrinter#toString()}.
+     */
+    @Test
+    public void testToString() {
+        final byte[] some = new byte[] {2, 5, 0, 1 };
+        final String expected = "byte[]{length=" + some.length + ", hash=" + Arrays.hashCode(some) + "}";
+
+        assertEquals(expected, String.valueOf(ByteArraySizeHashPrinter.of(some)));
+        assertNotNull(ByteArraySizeHashPrinter.orNull(some));
+    }
+
+}
