diff --git a/utils/misc/src/main/java/org/onlab/util/HexDump.java b/utils/misc/src/main/java/org/onlab/util/HexDump.java
index cfb7939..b40cf6e 100755
--- a/utils/misc/src/main/java/org/onlab/util/HexDump.java
+++ b/utils/misc/src/main/java/org/onlab/util/HexDump.java
@@ -34,24 +34,21 @@
      * @param buff buffer content to dump in hex format
      */
     public static void dump(ChannelBuffer buff) {
+        buff.markReaderIndex();
         try {
-            byte[] yTemp;
-            yTemp = buff.array();
-
-            int iStartIndex = buff.readerIndex();
-            int iEndIndex = buff.writerIndex();
             do {
                 StringBuilder sb = new StringBuilder();
-                for (int k = 0; (k < 16) && (iStartIndex < iEndIndex); ++k) {
+                for (int k = 0; (k < 16) && (buff.readableBytes() != 0); ++k) {
                     if (0 == k % 4) {
                         sb.append(String.format(" ")); // blank after 4 bytes
                     }
-                    sb.append(String.format("%02X ", yTemp[iStartIndex++]));
+                    sb.append(String.format("%02X ", buff.readByte()));
                 }
                 log.debug(sb.toString());
-            } while (iStartIndex < iEndIndex);
+            } while (buff.readableBytes() != 0);
         } catch (Exception e) {
             log.error("[HexDump] Invalid buffer: " + e.toString());
         }
+        buff.resetReaderIndex();
     }
 }
