diff --git a/utils/misc/src/main/java/org/onlab/packet/ARP.java b/utils/misc/src/main/java/org/onlab/packet/ARP.java
index dc3c07f..5ea0cad 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ARP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ARP.java
@@ -14,18 +14,17 @@
  * limitations under the License.
  */
 
-
-
 package org.onlab.packet;
 
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 
-import static org.onlab.packet.PacketUtils.*;
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static org.onlab.packet.PacketUtils.checkHeaderLength;
+import static org.onlab.packet.PacketUtils.checkInput;
 
 /**
- *
- *
+ * Representation of an ARP Packet.
  */
 public class ARP extends BasePacket {
     public static final short HW_TYPE_ETHERNET = 0x1;
@@ -341,27 +340,6 @@
         return true;
     }
 
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.lang.Object#toString()
-     */
-    @Override
-    public String toString() {
-        return "ARP [hardwareType=" + this.hardwareType + ", protocolType="
-                + this.protocolType + ", hardwareAddressLength="
-                + this.hardwareAddressLength + ", protocolAddressLength="
-                + this.protocolAddressLength + ", opCode=" + this.opCode
-                + ", senderHardwareAddress="
-                + Arrays.toString(this.senderHardwareAddress)
-                + ", senderProtocolAddress="
-                + Arrays.toString(this.senderProtocolAddress)
-                + ", targetHardwareAddress="
-                + Arrays.toString(this.targetHardwareAddress)
-                + ", targetProtocolAddress="
-                + Arrays.toString(this.targetProtocolAddress) + "]";
-    }
-
     /**
      * Builds an ARP reply based on a request.
      *
@@ -436,4 +414,18 @@
         };
     }
 
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("hardwareType", Short.toString(hardwareType))
+                .add("protocolType", Short.toString(protocolType))
+                .add("hardwareAddressLength", Byte.toString(hardwareAddressLength))
+                .add("protocolAddressLength", Byte.toString(protocolAddressLength))
+                .add("opCode", Short.toString(opCode))
+                .add("senderHardwareAddress", Arrays.toString(senderHardwareAddress))
+                .add("senderProtocolAddress", Arrays.toString(senderProtocolAddress))
+                .add("targetHardwareAddress", Arrays.toString(targetHardwareAddress))
+                .add("targetProtocolAddress", Arrays.toString(targetProtocolAddress))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/BasePacket.java b/utils/misc/src/main/java/org/onlab/packet/BasePacket.java
index 4aece66..d138028 100644
--- a/utils/misc/src/main/java/org/onlab/packet/BasePacket.java
+++ b/utils/misc/src/main/java/org/onlab/packet/BasePacket.java
@@ -14,48 +14,32 @@
  * limitations under the License.
  */
 
-
-
 package org.onlab.packet;
 
 /**
- *
- *
+ * Base packet class.
  */
 public abstract class BasePacket implements IPacket {
+
     protected IPacket parent;
     protected IPacket payload;
 
-    /**
-     * @return the parent
-     */
     @Override
     public IPacket getParent() {
         return this.parent;
     }
 
-    /**
-     * @param parent
-     *            the parent to set
-     */
     @Override
     public IPacket setParent(final IPacket parent) {
         this.parent = parent;
         return this;
     }
 
-    /**
-     * @return the payload
-     */
     @Override
     public IPacket getPayload() {
         return this.payload;
     }
 
-    /**
-     * @param payload
-     *            the payload to set
-     */
     @Override
     public IPacket setPayload(final IPacket payload) {
         this.payload = payload;
@@ -69,11 +53,6 @@
         }
     }
 
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.lang.Object#hashCode()
-     */
     @Override
     public int hashCode() {
         final int prime = 6733;
@@ -83,11 +62,6 @@
         return result;
     }
 
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.lang.Object#equals(java.lang.Object)
-     */
     @Override
     public boolean equals(final Object obj) {
         if (this == obj) {
diff --git a/utils/misc/src/main/java/org/onlab/packet/DHCP.java b/utils/misc/src/main/java/org/onlab/packet/DHCP.java
index de5b43f..491185d 100644
--- a/utils/misc/src/main/java/org/onlab/packet/DHCP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/DHCP.java
@@ -21,14 +21,16 @@
 import java.io.UnsupportedEncodingException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.ListIterator;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static org.onlab.packet.PacketUtils.checkInput;
+import static com.google.common.base.MoreObjects.toStringHelper;
 
 /**
- *
+ * Representation of an DHCP Packet.
  */
 public class DHCP extends BasePacket {
     /**
@@ -629,4 +631,25 @@
             return dhcp;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("opCode", Byte.toString(opCode))
+                .add("hardwareType", Byte.toString(hardwareType))
+                .add("hardwareAddressLength", Byte.toString(hardwareAddressLength))
+                .add("hops", Byte.toString(hops))
+                .add("transactionId", Integer.toString(transactionId))
+                .add("seconds", Short.toString(seconds))
+                .add("flags", Short.toString(flags))
+                .add("clientIPAddress", Integer.toString(clientIPAddress))
+                .add("yourIPAddress", Integer.toString(yourIPAddress))
+                .add("serverIPAddress", Integer.toString(serverIPAddress))
+                .add("gatewayIPAddress", Integer.toString(gatewayIPAddress))
+                .add("clientHardwareAddress", Arrays.toString(clientHardwareAddress))
+                .add("serverName", serverName)
+                .add("bootFileName", bootFileName)
+                .toString();
+        // TODO: need to handle options
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/DHCPOption.java b/utils/misc/src/main/java/org/onlab/packet/DHCPOption.java
index 1b6c670..cedd670 100644
--- a/utils/misc/src/main/java/org/onlab/packet/DHCPOption.java
+++ b/utils/misc/src/main/java/org/onlab/packet/DHCPOption.java
@@ -14,14 +14,12 @@
  * limitations under the License.
  */
 
-
-
 package org.onlab.packet;
 
 import java.util.Arrays;
 
 /**
- *
+ * Representation of DHCPOption field.
  */
 public class DHCPOption {
     protected byte code;
@@ -36,8 +34,7 @@
     }
 
     /**
-     * @param code
-     *            the code to set
+     * @param code the code to set
      * @return this
      */
     public DHCPOption setCode(final byte code) {
@@ -53,8 +50,7 @@
     }
 
     /**
-     * @param length
-     *            the length to set
+     * @param length the length to set
      * @return this
      */
     public DHCPOption setLength(final byte length) {
@@ -70,8 +66,7 @@
     }
 
     /**
-     * @param data
-     *            the data to set
+     * @param data the data to set
      * @return this
      */
     public DHCPOption setData(final byte[] data) {
diff --git a/utils/misc/src/main/java/org/onlab/packet/Data.java b/utils/misc/src/main/java/org/onlab/packet/Data.java
index 79abcba..714d237 100644
--- a/utils/misc/src/main/java/org/onlab/packet/Data.java
+++ b/utils/misc/src/main/java/org/onlab/packet/Data.java
@@ -20,6 +20,7 @@
 
 import java.util.Arrays;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.*;
 
 /**
@@ -129,4 +130,10 @@
         };
     }
 
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("data", Arrays.toString(data))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/EAP.java b/utils/misc/src/main/java/org/onlab/packet/EAP.java
index 516938a..8450e59 100644
--- a/utils/misc/src/main/java/org/onlab/packet/EAP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/EAP.java
@@ -19,7 +19,9 @@
 package org.onlab.packet;
 
 import java.nio.ByteBuffer;
+import java.util.Arrays;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkHeaderLength;
 import static org.onlab.packet.PacketUtils.checkInput;
 
@@ -54,7 +56,6 @@
     protected byte type;
     protected byte[] data;
 
-
     /**
      * Gets the EAP code.
      *
@@ -261,4 +262,15 @@
         result = prime * result + this.type;
         return result;
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("code", Byte.toString(code))
+                .add("identifier", Byte.toString(identifier))
+                .add("length", Short.toString(length))
+                .add("type", Byte.toString(type))
+                .add("data", Arrays.toString(data))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/EAPOL.java b/utils/misc/src/main/java/org/onlab/packet/EAPOL.java
index 1820cc3..3849caa 100644
--- a/utils/misc/src/main/java/org/onlab/packet/EAPOL.java
+++ b/utils/misc/src/main/java/org/onlab/packet/EAPOL.java
@@ -20,6 +20,7 @@
 
 import java.nio.ByteBuffer;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkHeaderLength;
 import static org.onlab.packet.PacketUtils.checkInput;
 
@@ -195,5 +196,14 @@
 
         return this;
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("version", Byte.toString(version))
+                .add("eapolType", Byte.toString(eapolType))
+                .add("packetLength", Short.toString(packetLength))
+                .toString();
+    }
 }
 
diff --git a/utils/misc/src/main/java/org/onlab/packet/Ethernet.java b/utils/misc/src/main/java/org/onlab/packet/Ethernet.java
index 9ab5cab..ab33e80 100644
--- a/utils/misc/src/main/java/org/onlab/packet/Ethernet.java
+++ b/utils/misc/src/main/java/org/onlab/packet/Ethernet.java
@@ -34,7 +34,7 @@
 import static org.onlab.packet.PacketUtils.checkInput;
 
 /**
- *
+ * Ethernet Packet.
  */
 public class Ethernet extends BasePacket {
     private static final String HEXES = "0123456789ABCDEF";
@@ -714,5 +714,4 @@
             return eth;
         };
     }
-
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/ICMP.java b/utils/misc/src/main/java/org/onlab/packet/ICMP.java
index d07a9ba..4c23fff 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ICMP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ICMP.java
@@ -15,16 +15,15 @@
  */
 
 
-
 package org.onlab.packet;
 
 import java.nio.ByteBuffer;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.*;
 
 /**
  * Implements ICMP packet format.
- *
  */
 public class ICMP extends BasePacket {
     protected byte icmpType;
@@ -45,8 +44,7 @@
     }
 
     /**
-     * @param icmpType
-     *            to set
+     * @param icmpType to set
      * @return this
      */
     public ICMP setIcmpType(final byte icmpType) {
@@ -62,8 +60,7 @@
     }
 
     /**
-     * @param icmpCode
-     *            code to set
+     * @param icmpCode code to set
      * @return this
      */
     public ICMP setIcmpCode(final byte icmpCode) {
@@ -79,8 +76,7 @@
     }
 
     /**
-     * @param checksum
-     *            the checksum to set
+     * @param checksum the checksum to set
      * @return this
      */
     public ICMP setChecksum(final short checksum) {
@@ -220,4 +216,13 @@
             return icmp;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("icmpType", Byte.toString(icmpType))
+                .add("icmpCode", Byte.toString(icmpCode))
+                .add("checksum", Short.toString(checksum))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/ICMP6.java b/utils/misc/src/main/java/org/onlab/packet/ICMP6.java
index c898130..45b7a62 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ICMP6.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ICMP6.java
@@ -29,6 +29,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkInput;
 
 /**
@@ -363,4 +364,13 @@
             return icmp6;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("icmpType", Byte.toString(icmpType))
+                .add("icmpCode", Byte.toString(icmpCode))
+                .add("checksum", Short.toString(checksum))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/IGMP.java b/utils/misc/src/main/java/org/onlab/packet/IGMP.java
index 254f132..594b79d 100644
--- a/utils/misc/src/main/java/org/onlab/packet/IGMP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/IGMP.java
@@ -15,16 +15,19 @@
  */
 package org.onlab.packet;
 
+import org.slf4j.Logger;
+
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.slf4j.Logger;
+import java.util.Arrays;
 
-import static org.slf4j.LoggerFactory.getLogger;
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.onlab.packet.PacketUtils.checkInput;
+import static org.slf4j.LoggerFactory.getLogger;
 
 
 /**
@@ -332,4 +335,15 @@
         result = prime * result + this.groups.hashCode();
         return result;
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("igmpType", Byte.toString(igmpType))
+                .add("resField", Byte.toString(resField))
+                .add("checksum", Short.toString(checksum))
+                .add("unsupportTypeData", Arrays.toString(unsupportTypeData))
+                .toString();
+        // TODO: need to handle groups
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/IGMPGroup.java b/utils/misc/src/main/java/org/onlab/packet/IGMPGroup.java
index 70ff556..8be75d4 100644
--- a/utils/misc/src/main/java/org/onlab/packet/IGMPGroup.java
+++ b/utils/misc/src/main/java/org/onlab/packet/IGMPGroup.java
@@ -95,4 +95,18 @@
      * @return The serialized message
      */
     public abstract byte[] serialize(ByteBuffer bb);
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append("[");
+        sb.append("auxInfo= ");
+        sb.append(auxInfo);
+        sb.append("gaddr= ");
+        sb.append(gaddr);
+        sb.append("sources= ");
+        sb.append(sources.toString());
+        sb.append("]");
+        return sb.toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/IPacket.java b/utils/misc/src/main/java/org/onlab/packet/IPacket.java
index 64e6ac3..2391ad9 100644
--- a/utils/misc/src/main/java/org/onlab/packet/IPacket.java
+++ b/utils/misc/src/main/java/org/onlab/packet/IPacket.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2014 Open Networking Laboratory
+ * Copyright 2015 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.
@@ -14,21 +14,22 @@
  * limitations under the License.
  */
 
-
-
 package org.onlab.packet;
 
 /**
- *
+ * Packet Interface.
  */
 public interface IPacket {
+
     /**
+     * Obtain the packet payload.
      *
      * @return the payload
      */
     IPacket getPayload();
 
     /**
+     * Assign the packet payload.
      *
      * @param packet new payload
      * @return self
@@ -36,12 +37,14 @@
     IPacket setPayload(IPacket packet);
 
     /**
+     * Obtain the parent packet.
      *
      * @return parent packet
      */
     IPacket getParent();
 
     /**
+     * Configure a new parent packet.
      *
      * @param packet new parent
      * @return self
@@ -49,7 +52,7 @@
     IPacket setParent(IPacket packet);
 
     /**
-     * Reset any checksums as needed, and call resetChecksum on all parents.
+     * Reset any checksum as needed, and call resetChecksum on all parents.
      */
     void resetChecksum();
 
@@ -62,7 +65,7 @@
     byte[] serialize();
 
     /**
-     * Deserializes this packet layer and all possible payloads.
+     * Deserialize this packet layer and all possible payloads.
      *
      * NOTE: This method has been deprecated and will be removed in a future
      * release. It is now recommended to use the Deserializer function provided
diff --git a/utils/misc/src/main/java/org/onlab/packet/IPv4.java b/utils/misc/src/main/java/org/onlab/packet/IPv4.java
index a5c5f4f..9d31fd6 100644
--- a/utils/misc/src/main/java/org/onlab/packet/IPv4.java
+++ b/utils/misc/src/main/java/org/onlab/packet/IPv4.java
@@ -25,10 +25,11 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.*;
 
 /**
- *
+ * Implements IPv4 packet format.
  */
 public class IPv4 extends BasePacket {
     public static final byte PROTOCOL_ICMP = 0x1;
@@ -730,4 +731,24 @@
             return ipv4;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("version", Byte.toString(version))
+                .add("headerLength", Byte.toString(headerLength))
+                .add("diffServ", Byte.toString(diffServ))
+                .add("totalLength", Short.toString(totalLength))
+                .add("identification", Short.toString(identification))
+                .add("flags", Byte.toString(flags))
+                .add("fragmentOffset", Short.toString(fragmentOffset))
+                .add("ttl", Byte.toString(ttl))
+                .add("protocol", Byte.toString(protocol))
+                .add("checksum", Short.toString(checksum))
+                .add("sourceAddress", Integer.toString(sourceAddress))
+                .add("destinationAddress", Integer.toString(destinationAddress))
+                .add("options", Arrays.toString(options))
+                .add("isTruncated", Boolean.toString(isTruncated))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/IPv6.java b/utils/misc/src/main/java/org/onlab/packet/IPv6.java
index 2e59632..ca8c319 100644
--- a/utils/misc/src/main/java/org/onlab/packet/IPv6.java
+++ b/utils/misc/src/main/java/org/onlab/packet/IPv6.java
@@ -31,6 +31,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkInput;
 
 /**
@@ -381,4 +382,18 @@
             return ipv6;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("version", Byte.toString(version))
+                .add("trafficClass", Byte.toString(trafficClass))
+                .add("flowLabel", Integer.toString(flowLabel))
+                .add("payloadLength", Short.toString(payloadLength))
+                .add("nextHeader", Byte.toString(nextHeader))
+                .add("hopLimit", Byte.toString(hopLimit))
+                .add("sourceAddress", Arrays.toString(sourceAddress))
+                .add("destinationAddress", Arrays.toString(destinationAddress))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/LLC.java b/utils/misc/src/main/java/org/onlab/packet/LLC.java
index 78b4f3f..bd2739f 100644
--- a/utils/misc/src/main/java/org/onlab/packet/LLC.java
+++ b/utils/misc/src/main/java/org/onlab/packet/LLC.java
@@ -20,13 +20,12 @@
 
 import java.nio.ByteBuffer;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.*;
 
 /**
  * This class represents an Link Local Control header that is used in Ethernet
  * 802.3.
- *
- *
  */
 public class LLC extends BasePacket {
 
@@ -99,4 +98,13 @@
             return llc;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("dsap", Byte.toString(dsap))
+                .add("ssap", Byte.toString(ssap))
+                .add("ctrl", Byte.toString(ctrl))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/LLDP.java b/utils/misc/src/main/java/org/onlab/packet/LLDP.java
index ae9d717..fe0d419 100644
--- a/utils/misc/src/main/java/org/onlab/packet/LLDP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/LLDP.java
@@ -20,13 +20,15 @@
 package org.onlab.packet;
 
 import java.nio.ByteBuffer;
+import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.*;
 
 /**
- *
+ * Representation of an LLDP Packet.
  */
 public class LLDP extends BasePacket {
     public static final byte CHASSIS_TLV_TYPE = 1;
@@ -59,8 +61,7 @@
     }
 
     /**
-     * @param chassis
-     *            the chassisId to set
+     * @param chassis the chassisId to set
      * @return this
      */
     public LLDP setChassisId(final LLDPTLV chassis) {
@@ -76,8 +77,7 @@
     }
 
     /**
-     * @param portId
-     *            the portId to set
+     * @param portId the portId to set
      * @return this
      */
     public LLDP setPortId(final LLDPTLV portId) {
@@ -93,8 +93,7 @@
     }
 
     /**
-     * @param ttl
-     *            the ttl to set
+     * @param ttl the ttl to set
      * @return this
      */
     public LLDP setTtl(final LLDPTLV ttl) {
@@ -110,8 +109,7 @@
     }
 
     /**
-     * @param optionalTLVList
-     *            the optionalTLVList to set
+     * @param optionalTLVList the optionalTLVList to set
      * @return this
      */
     public LLDP setOptionalTLVList(final List<LLDPTLV> optionalTLVList) {
@@ -162,22 +160,22 @@
                 break;
             }
             switch (tlv.getType()) {
-            case 0x0:
-                // can throw this one away, its just an end delimiter
-                break;
-            case 0x1:
-                this.chassisId = tlv;
-                break;
-            case 0x2:
-                this.portId = tlv;
-                break;
-            case 0x3:
-                this.ttl = tlv;
-                break;
+                case 0x0:
+                    // can throw this one away, its just an end delimiter
+                    break;
+                case 0x1:
+                    this.chassisId = tlv;
+                    break;
+                case 0x2:
+                    this.portId = tlv;
+                    break;
+                case 0x3:
+                    this.ttl = tlv;
+                    break;
 
-            default:
-                this.optionalTLVList.add(tlv);
-                break;
+                default:
+                    this.optionalTLVList.add(tlv);
+                    break;
             }
         } while (tlv.getType() != 0 && bb.hasRemaining());
         return this;
@@ -273,21 +271,21 @@
                     break;
                 }
                 switch (tlv.getType()) {
-                case 0x0:
-                    // can throw this one away, it's just an end delimiter
-                    break;
-                case 0x1:
-                    lldp.chassisId = tlv;
-                    break;
-                case 0x2:
-                    lldp.portId = tlv;
-                    break;
-                case 0x3:
-                    lldp.ttl = tlv;
-                    break;
-                default:
-                    lldp.optionalTLVList.add(tlv);
-                    break;
+                    case 0x0:
+                        // can throw this one away, it's just an end delimiter
+                        break;
+                    case 0x1:
+                        lldp.chassisId = tlv;
+                        break;
+                    case 0x2:
+                        lldp.portId = tlv;
+                        break;
+                    case 0x3:
+                        lldp.ttl = tlv;
+                        break;
+                    default:
+                        lldp.optionalTLVList.add(tlv);
+                        break;
                 }
 
                 currentIndex += tlv.getLength();
@@ -297,4 +295,15 @@
         };
     }
 
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("chassisId", Arrays.toString(chassisId.getValue()))
+                .add("portId", Arrays.toString(portId.getValue()))
+                .add("ttl", Arrays.toString(ttl.getValue()))
+                .add("ethType", Short.toString(ethType))
+                .toString();
+
+        // TODO: need to handle optionalTLVList
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/LLDPTLV.java b/utils/misc/src/main/java/org/onlab/packet/LLDPTLV.java
index 77efe1b..1c51456 100644
--- a/utils/misc/src/main/java/org/onlab/packet/LLDPTLV.java
+++ b/utils/misc/src/main/java/org/onlab/packet/LLDPTLV.java
@@ -30,6 +30,20 @@
     protected short length;
     protected byte[] value;
 
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append("[");
+        sb.append("type= ");
+        sb.append(type);
+        sb.append("length= ");
+        sb.append(length);
+        sb.append("value= ");
+        sb.append(Arrays.toString(value));
+        sb.append("]");
+        return sb.toString();
+    }
+
     /**
      * @return the type
      */
diff --git a/utils/misc/src/main/java/org/onlab/packet/MPLS.java b/utils/misc/src/main/java/org/onlab/packet/MPLS.java
index 71c5803..0b918d4 100644
--- a/utils/misc/src/main/java/org/onlab/packet/MPLS.java
+++ b/utils/misc/src/main/java/org/onlab/packet/MPLS.java
@@ -19,8 +19,12 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkInput;
 
+/**
+ * Representation of an MPLS Packet.
+ */
 public class MPLS extends BasePacket {
     public static final int HEADER_LENGTH = 4;
 
@@ -159,4 +163,14 @@
             return mpls;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("label", Integer.toString(label))
+                .add("bos", Byte.toString(bos))
+                .add("ttl", Byte.toString(ttl))
+                .add("protocol", Byte.toString(protocol))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/ONOSLLDP.java b/utils/misc/src/main/java/org/onlab/packet/ONOSLLDP.java
index 5b3902a..4d5d58b 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ONOSLLDP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ONOSLLDP.java
@@ -177,9 +177,4 @@
         }
         return null;
     }
-
-
-
-
-
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/PIM.java b/utils/misc/src/main/java/org/onlab/packet/PIM.java
index e6ef0ae..3787510 100755
--- a/utils/misc/src/main/java/org/onlab/packet/PIM.java
+++ b/utils/misc/src/main/java/org/onlab/packet/PIM.java
@@ -22,6 +22,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkInput;
 
 /**
@@ -296,4 +297,14 @@
             return pim;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("version", Byte.toString(version))
+                .add("type", Byte.toString(type))
+                .add("reserved", Byte.toString(reserved))
+                .add("checksum", Short.toString(reserved))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/RADIUS.java b/utils/misc/src/main/java/org/onlab/packet/RADIUS.java
index 297fee7..de0cb39 100644
--- a/utils/misc/src/main/java/org/onlab/packet/RADIUS.java
+++ b/utils/misc/src/main/java/org/onlab/packet/RADIUS.java
@@ -30,6 +30,7 @@
 import java.util.Arrays;
 import java.util.List;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkHeaderLength;
 import static org.onlab.packet.PacketUtils.checkInput;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -68,7 +69,7 @@
     /**
      * Constructs a RADIUS packet with the given code and identifier.
      *
-     * @param code code
+     * @param code       code
      * @param identifier identifier
      */
     public RADIUS(byte code, byte identifier) {
@@ -313,7 +314,7 @@
      * Sets an attribute in the RADIUS packet.
      *
      * @param attrType the type field of the attribute to set
-     * @param value value to be set
+     * @param value    value to be set
      * @return reference to the attribute object
      */
     public RADIUSAttribute setAttribute(byte attrType, byte[] value) {
@@ -328,7 +329,7 @@
      * Updates an attribute in the RADIUS packet.
      *
      * @param attrType the type field of the attribute to update
-     * @param value the value to update to
+     * @param value    the value to update to
      * @return reference to the attribute object
      */
     public RADIUSAttribute updateAttribute(byte attrType, byte[] value) {
@@ -420,4 +421,15 @@
         return this;
     }
 
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("code", Byte.toString(code))
+                .add("identifier", Byte.toString(identifier))
+                .add("length", Short.toString(length))
+                .add("authenticator", Arrays.toString(authenticator))
+                .toString();
+
+        // TODO: need to handle attributes
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/RADIUSAttribute.java b/utils/misc/src/main/java/org/onlab/packet/RADIUSAttribute.java
index 9687e37..45f22855 100644
--- a/utils/misc/src/main/java/org/onlab/packet/RADIUSAttribute.java
+++ b/utils/misc/src/main/java/org/onlab/packet/RADIUSAttribute.java
@@ -18,6 +18,8 @@
 
 package org.onlab.packet;
 
+import java.util.Arrays;
+
 /**
  * An attribute in a RADIUS packet.
  */
@@ -139,4 +141,17 @@
         return this;
     }
 
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append("[");
+        sb.append("type= ");
+        sb.append(type);
+        sb.append("length= ");
+        sb.append(length);
+        sb.append("value= ");
+        sb.append(Arrays.toString(value));
+        sb.append("]");
+        return sb.toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/TCP.java b/utils/misc/src/main/java/org/onlab/packet/TCP.java
index e089f27..6f9f6df 100644
--- a/utils/misc/src/main/java/org/onlab/packet/TCP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/TCP.java
@@ -21,6 +21,7 @@
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.*;
 
 /**
@@ -459,4 +460,20 @@
             return tcp;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("sourcePort", Integer.toString(sourcePort))
+                .add("destinationPort", Integer.toString(destinationPort))
+                .add("sequence", Integer.toString(sequence))
+                .add("acknowledge", Integer.toString(acknowledge))
+                .add("dataOffset", Byte.toString(dataOffset))
+                .add("flags", Short.toString(flags))
+                .add("windowSize", Short.toString(windowSize))
+                .add("checksum", Short.toString(checksum))
+                .add("urgentPointer", Short.toString(urgentPointer))
+                .add("options", Arrays.toString(options))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/UDP.java b/utils/misc/src/main/java/org/onlab/packet/UDP.java
index a30c9a9..25221fa 100644
--- a/utils/misc/src/main/java/org/onlab/packet/UDP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/UDP.java
@@ -22,6 +22,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.*;
 
 /**
@@ -303,4 +304,14 @@
             return udp;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("sourcePort", Integer.toString(sourcePort))
+                .add("destinationPort", Integer.toString(destinationPort))
+                .add("length", Short.toString(length))
+                .add("checksum", Short.toString(checksum))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/ipv6/Authentication.java b/utils/misc/src/main/java/org/onlab/packet/ipv6/Authentication.java
index ec04a81..5af4d92 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ipv6/Authentication.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ipv6/Authentication.java
@@ -26,6 +26,7 @@
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkInput;
 
 /**
@@ -297,4 +298,15 @@
             return authentication;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("nextHeader", Byte.toString(nextHeader))
+                .add("payloadLength", Byte.toString(payloadLength))
+                .add("securityParamIndex", Integer.toString(securityParamIndex))
+                .add("sequence", Integer.toString(sequence))
+                .add("integrityCheck", Arrays.toString(integrityCheck))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/ipv6/BaseOptions.java b/utils/misc/src/main/java/org/onlab/packet/ipv6/BaseOptions.java
index f57b756..6c323ae 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ipv6/BaseOptions.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ipv6/BaseOptions.java
@@ -26,6 +26,7 @@
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkHeaderLength;
 import static org.onlab.packet.PacketUtils.checkInput;
 
@@ -257,4 +258,14 @@
             return baseOptions;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("nextHeader", Byte.toString(nextHeader))
+                .add("headerExtLength", Byte.toString(headerExtLength))
+                .add("options", Arrays.toString(options))
+                .add("type", Short.toString(type))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/ipv6/EncapSecurityPayload.java b/utils/misc/src/main/java/org/onlab/packet/ipv6/EncapSecurityPayload.java
index e46a126..13c0545 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ipv6/EncapSecurityPayload.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ipv6/EncapSecurityPayload.java
@@ -24,6 +24,7 @@
 
 import java.nio.ByteBuffer;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkInput;
 
 /**
@@ -185,4 +186,12 @@
             return encapSecurityPayload;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("securityParamIndex", Integer.toString(securityParamIndex))
+                .add("sequence", Integer.toString(sequence))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/ipv6/Fragment.java b/utils/misc/src/main/java/org/onlab/packet/ipv6/Fragment.java
index 68015d3..9fb1529 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ipv6/Fragment.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ipv6/Fragment.java
@@ -25,6 +25,7 @@
 
 import java.nio.ByteBuffer;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkInput;
 
 /**
@@ -250,4 +251,14 @@
             return fragment;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("nextHeader", Byte.toString(nextHeader))
+                .add("fragmentOffset", Short.toString(fragmentOffset))
+                .add("moreFragment", Byte.toString(moreFragment))
+                .add("identification", Integer.toString(identification))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/ipv6/Routing.java b/utils/misc/src/main/java/org/onlab/packet/ipv6/Routing.java
index d7d204a..5a7ae45 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ipv6/Routing.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ipv6/Routing.java
@@ -26,6 +26,7 @@
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkHeaderLength;
 import static org.onlab.packet.PacketUtils.checkInput;
 
@@ -288,4 +289,15 @@
             return routing;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("nextHeader", Byte.toString(nextHeader))
+                .add("headerExtLength", Byte.toString(headerExtLength))
+                .add("routingType", Byte.toString(routingType))
+                .add("segmentsLeft", Byte.toString(segmentsLeft))
+                .add("routingData", Arrays.toString(routingData))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/ndp/NeighborAdvertisement.java b/utils/misc/src/main/java/org/onlab/packet/ndp/NeighborAdvertisement.java
index 99fa0dd..ed02d87 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ndp/NeighborAdvertisement.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ndp/NeighborAdvertisement.java
@@ -24,6 +24,7 @@
 import java.util.Arrays;
 import java.util.List;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkInput;
 
 /**
@@ -275,4 +276,14 @@
             return neighborAdvertisement;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("routerFlag", Byte.toString(routerFlag))
+                .add("solicitedFlag", Byte.toString(solicitedFlag))
+                .add("overrideFlag", Byte.toString(overrideFlag))
+                .add("targetAddress", Arrays.toString(targetAddress))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/ndp/NeighborDiscoveryOptions.java b/utils/misc/src/main/java/org/onlab/packet/ndp/NeighborDiscoveryOptions.java
index 00a2606..18c0143 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ndp/NeighborDiscoveryOptions.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ndp/NeighborDiscoveryOptions.java
@@ -25,6 +25,7 @@
 import java.util.Arrays;
 import java.util.List;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkInput;
 
 /**
@@ -117,6 +118,18 @@
         private int optionWireLength() {
             return 8 * optionLengthField();
         }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder();
+            sb.append("[");
+            sb.append("type= ");
+            sb.append(type);
+            sb.append("data= ");
+            sb.append(data);
+            sb.append("]");
+            return sb.toString();
+        }
     }
 
     /**
@@ -278,4 +291,11 @@
             return ndo;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .toString();
+        // TODO: need to handle options
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/ndp/NeighborSolicitation.java b/utils/misc/src/main/java/org/onlab/packet/ndp/NeighborSolicitation.java
index 77c119a..ce3b7b7 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ndp/NeighborSolicitation.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ndp/NeighborSolicitation.java
@@ -24,6 +24,7 @@
 import java.util.Arrays;
 import java.util.List;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkInput;
 
 /**
@@ -189,4 +190,12 @@
             return neighborSolicitation;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("targetAddress", Arrays.toString(targetAddress))
+                .toString();
+        // TODO: need to handle options
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/ndp/Redirect.java b/utils/misc/src/main/java/org/onlab/packet/ndp/Redirect.java
index 51256d4..2d2e061 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ndp/Redirect.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ndp/Redirect.java
@@ -24,6 +24,7 @@
 import java.util.Arrays;
 import java.util.List;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkInput;
 
 /**
@@ -222,4 +223,12 @@
             return redirect;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("targetAddress", Arrays.toString(targetAddress))
+                .add("destinationAddress", Arrays.toString(destinationAddress))
+                .toString();
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/ndp/RouterAdvertisement.java b/utils/misc/src/main/java/org/onlab/packet/ndp/RouterAdvertisement.java
index 597fc9f..43f4f38 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ndp/RouterAdvertisement.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ndp/RouterAdvertisement.java
@@ -22,6 +22,7 @@
 import java.nio.ByteBuffer;
 import java.util.List;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkInput;
 
 /**
@@ -322,4 +323,17 @@
             return routerAdvertisement;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("currentHopLimit", Byte.toString(currentHopLimit))
+                .add("mFlag", Byte.toString(mFlag))
+                .add("oFlag", Byte.toString(oFlag))
+                .add("routerLifetime", Short.toString(routerLifetime))
+                .add("reachableTime", Integer.toString(reachableTime))
+                .add("retransmitTimer", Integer.toString(retransmitTimer))
+                .toString();
+        // TODO: need to handle optionis
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/ndp/RouterSolicitation.java b/utils/misc/src/main/java/org/onlab/packet/ndp/RouterSolicitation.java
index e279a40..20b6673 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ndp/RouterSolicitation.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ndp/RouterSolicitation.java
@@ -22,6 +22,7 @@
 import java.nio.ByteBuffer;
 import java.util.List;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkInput;
 
 /**
@@ -152,4 +153,11 @@
             return routerSolicitation;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .toString();
+        // TODO: need to handle options
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/pim/PIMHello.java b/utils/misc/src/main/java/org/onlab/packet/pim/PIMHello.java
index 9ad3fdb..4d42f32 100644
--- a/utils/misc/src/main/java/org/onlab/packet/pim/PIMHello.java
+++ b/utils/misc/src/main/java/org/onlab/packet/pim/PIMHello.java
@@ -23,6 +23,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkInput;
 
 public class PIMHello extends BasePacket {
@@ -115,4 +116,13 @@
             return hello;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("nbrIpAddress", nbrIpAddress.toString())
+                .add("priorityPresent", Boolean.toString(priorityPresent))
+                .toString();
+        // TODO: need to handle options
+    }
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/pim/PIMJoinPrune.java b/utils/misc/src/main/java/org/onlab/packet/pim/PIMJoinPrune.java
index 9653115..45fe287 100644
--- a/utils/misc/src/main/java/org/onlab/packet/pim/PIMJoinPrune.java
+++ b/utils/misc/src/main/java/org/onlab/packet/pim/PIMJoinPrune.java
@@ -23,6 +23,7 @@
 import java.nio.ByteBuffer;
 import java.util.HashMap;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onlab.packet.PacketUtils.checkInput;
 
 public class PIMJoinPrune extends BasePacket {
@@ -268,4 +269,13 @@
             return jp;
         };
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(getClass())
+                .add("upstreamAddr", upstreamAddr.toString())
+                .add("holdTime", Short.toString(holdTime))
+                .toString();
+        // TODO: need to handle joinPrunes
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/ArpTest.java b/utils/misc/src/test/java/org/onlab/packet/ArpTest.java
index 6224624..c057176 100644
--- a/utils/misc/src/test/java/org/onlab/packet/ArpTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/ArpTest.java
@@ -16,6 +16,7 @@
 
 package org.onlab.packet;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -45,7 +46,7 @@
     @Before
     public void setUp() {
         ByteBuffer bb = ByteBuffer.allocate(ARP.INITIAL_HEADER_LENGTH +
-                        2 * hwAddressLength + 2 * protoAddressLength);
+                2 * hwAddressLength + 2 * protoAddressLength);
         bb.putShort(ARP.HW_TYPE_ETHERNET);
         bb.putShort(ARP.PROTO_TYPE_IP);
         bb.put(hwAddressLength);
@@ -70,6 +71,9 @@
         PacketTestUtils.testDeserializeTruncated(deserializer, byteHeader);
     }
 
+    /**
+     * Tests deserialize and getters.
+     */
     @Test
     public void testDeserialize() throws Exception {
         ARP arp = deserializer.deserialize(byteHeader, 0, byteHeader.length);
@@ -85,4 +89,19 @@
         assertTrue(Arrays.equals(targetMac.toBytes(), arp.getTargetHardwareAddress()));
         assertTrue(Arrays.equals(targetIp.toOctets(), arp.getTargetProtocolAddress()));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringArp() throws Exception {
+        ARP arp = deserializer.deserialize(byteHeader, 0, byteHeader.length);
+        String str = arp.toString();
+        assertTrue(StringUtils.contains(str, "hardwareAddressLength=" + hwAddressLength));
+        assertTrue(StringUtils.contains(str, "protocolAddressLength=" + protoAddressLength));
+        assertTrue(StringUtils.contains(str, "senderHardwareAddress=" + Arrays.toString(srcMac.toBytes())));
+        assertTrue(StringUtils.contains(str, "senderProtocolAddress=" + Arrays.toString(srcIp.toOctets())));
+        assertTrue(StringUtils.contains(str, "targetHardwareAddress=" + Arrays.toString(targetMac.toBytes())));
+        assertTrue(StringUtils.contains(str, "targetProtocolAddress=" + Arrays.toString(targetIp.toOctets())));
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/DhcpTest.java b/utils/misc/src/test/java/org/onlab/packet/DhcpTest.java
index aac8141..085adf9 100644
--- a/utils/misc/src/test/java/org/onlab/packet/DhcpTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/DhcpTest.java
@@ -17,6 +17,7 @@
 package org.onlab.packet;
 
 import com.google.common.base.Charsets;
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -111,6 +112,9 @@
         PacketTestUtils.testDeserializeTruncated(deserializer, byteHeader);
     }
 
+    /**
+     * Tests deserialize and getters.
+     */
     @Test
     public void testDeserialize() throws Exception {
         DHCP dhcp = deserializer.deserialize(byteHeader, 0, byteHeader.length);
@@ -134,4 +138,28 @@
         assertEquals(hostNameOption, dhcp.options.get(0));
     }
 
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringDhcp() throws Exception {
+        DHCP dhcp = deserializer.deserialize(byteHeader, 0, byteHeader.length);
+        String str = dhcp.toString();
+
+        assertTrue(StringUtils.contains(str, "opCode=" + opCode));
+        assertTrue(StringUtils.contains(str, "hardwareType=" + hardwareType));
+        assertTrue(StringUtils.contains(str, "hardwareAddressLength=" + hardwareAddressLength));
+        assertTrue(StringUtils.contains(str, "hops=" + hops));
+        assertTrue(StringUtils.contains(str, "transactionId=" + transactionId));
+        assertTrue(StringUtils.contains(str, "seconds=" + seconds));
+        assertTrue(StringUtils.contains(str, "flags=" + flags));
+        assertTrue(StringUtils.contains(str, "clientIPAddress=" + clientIpAddress));
+        assertTrue(StringUtils.contains(str, "yourIPAddress=" + yourIpAddress));
+        assertTrue(StringUtils.contains(str, "serverIPAddress=" + serverIpAddress));
+        assertTrue(StringUtils.contains(str, "gatewayIPAddress=" + gatewayIpAddress));
+        assertTrue(StringUtils.contains(str, "clientHardwareAddress=" + Arrays.toString(clientHardwareAddress)));
+        assertTrue(StringUtils.contains(str, "serverName=" + serverName));
+        assertTrue(StringUtils.contains(str, "bootFileName=" + bootFileName));
+        // TODO: add option unit test
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/ICMP6Test.java b/utils/misc/src/test/java/org/onlab/packet/ICMP6Test.java
index 39ddc24..8616b48 100644
--- a/utils/misc/src/test/java/org/onlab/packet/ICMP6Test.java
+++ b/utils/misc/src/test/java/org/onlab/packet/ICMP6Test.java
@@ -18,6 +18,7 @@
 
 package org.onlab.packet;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -107,4 +108,17 @@
         assertTrue(icmp61.equals(icmp61));
         assertFalse(icmp61.equals(icmp62));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringIcmp6() throws Exception {
+        ICMP6 icmp6 = ICMP6.deserializer().deserialize(bytePacket, 0, bytePacket.length);
+        String str = icmp6.toString();
+
+        assertTrue(StringUtils.contains(str, "icmpType=" + ICMP6.ECHO_REQUEST));
+        assertTrue(StringUtils.contains(str, "icmpCode=" + (byte) 0x00));
+        assertTrue(StringUtils.contains(str, "checksum=" + (short) 0x82bc));
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/ICMPTest.java b/utils/misc/src/test/java/org/onlab/packet/ICMPTest.java
index 8514aa5..e836dc4 100644
--- a/utils/misc/src/test/java/org/onlab/packet/ICMPTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/ICMPTest.java
@@ -16,12 +16,14 @@
 
 package org.onlab.packet;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Before;
 import org.junit.Test;
 
 import java.nio.ByteBuffer;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 /**
  * Unit tests for the ICMP class.
@@ -59,6 +61,9 @@
         PacketTestUtils.testDeserializeTruncated(deserializer, headerBytes);
     }
 
+    /**
+     * Tests deserialize and getters.
+     */
     @Test
     public void testDeserialize() throws Exception {
         ICMP icmp = deserializer.deserialize(headerBytes, 0, headerBytes.length);
@@ -67,4 +72,17 @@
         assertEquals(icmpCode, icmp.getIcmpCode());
         assertEquals(checksum, icmp.getChecksum());
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringIcmp() throws Exception {
+        ICMP icmp = deserializer.deserialize(headerBytes, 0, headerBytes.length);
+        String str = icmp.toString();
+
+        assertTrue(StringUtils.contains(str, "icmpType=" + icmpType));
+        assertTrue(StringUtils.contains(str, "icmpCode=" + icmpCode));
+        assertTrue(StringUtils.contains(str, "checksum=" + checksum));
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/IGMPTest.java b/utils/misc/src/test/java/org/onlab/packet/IGMPTest.java
index a25f721..7634bbf 100644
--- a/utils/misc/src/test/java/org/onlab/packet/IGMPTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/IGMPTest.java
@@ -93,4 +93,12 @@
         IGMP igmp = deserializer.deserialize(data, 0, data.length);
         assertTrue(igmp.equals(igmpMembership));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringIgmp() throws Exception {
+        // TODO: add toString unit test
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/IPv4Test.java b/utils/misc/src/test/java/org/onlab/packet/IPv4Test.java
index 1bacf2a..8412701 100644
--- a/utils/misc/src/test/java/org/onlab/packet/IPv4Test.java
+++ b/utils/misc/src/test/java/org/onlab/packet/IPv4Test.java
@@ -16,6 +16,7 @@
 
 package org.onlab.packet;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -78,6 +79,9 @@
         PacketTestUtils.testDeserializeTruncated(deserializer, headerBytes);
     }
 
+    /**
+     * Tests deserialize and getters.
+     */
     @Test
     public void testDeserialize() throws Exception {
         IPv4 ipv4 = deserializer.deserialize(headerBytes, 0, headerBytes.length);
@@ -96,4 +100,26 @@
         assertEquals(destinationAddress, ipv4.getDestinationAddress());
         assertTrue(ipv4.isTruncated());
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringIPv4() throws Exception {
+        IPv4 ipv4 = deserializer.deserialize(headerBytes, 0, headerBytes.length);
+        String str = ipv4.toString();
+
+        assertTrue(StringUtils.contains(str, "version=" + version));
+        assertTrue(StringUtils.contains(str, "headerLength=" + headerLength));
+        assertTrue(StringUtils.contains(str, "diffServ=" + diffServ));
+        assertTrue(StringUtils.contains(str, "totalLength=" + totalLength));
+        assertTrue(StringUtils.contains(str, "identification=" + identification));
+        assertTrue(StringUtils.contains(str, "flags=" + flags));
+        assertTrue(StringUtils.contains(str, "fragmentOffset=" + fragmentOffset));
+        assertTrue(StringUtils.contains(str, "ttl=" + ttl));
+        assertTrue(StringUtils.contains(str, "protocol=" + protocol));
+        assertTrue(StringUtils.contains(str, "checksum=" + checksum));
+        assertTrue(StringUtils.contains(str, "sourceAddress=" + sourceAddress));
+        assertTrue(StringUtils.contains(str, "destinationAddress=" + destinationAddress));
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/IPv6Test.java b/utils/misc/src/test/java/org/onlab/packet/IPv6Test.java
index 720a4d2..84e2644 100644
--- a/utils/misc/src/test/java/org/onlab/packet/IPv6Test.java
+++ b/utils/misc/src/test/java/org/onlab/packet/IPv6Test.java
@@ -18,6 +18,7 @@
 
 package org.onlab.packet;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -151,4 +152,20 @@
         assertTrue(packet1.equals(packet1));
         assertFalse(packet1.equals(packet2));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringIPv6() throws Exception {
+        IPv6 ipv6 = deserializer.deserialize(bytePacket, 0, bytePacket.length);
+        String str = ipv6.toString();
+
+        assertTrue(StringUtils.contains(str, "version=" + (byte) 6));
+        assertTrue(StringUtils.contains(str, "trafficClass=" + (byte) 0x93));
+        assertTrue(StringUtils.contains(str, "flowLabel=" + 0x13579));
+        assertTrue(StringUtils.contains(str, "nextHeader=" + IPv6.PROTOCOL_UDP));
+        assertTrue(StringUtils.contains(str, "hopLimit=" + (byte) 32));
+        // TODO: test IPv6 source and destination address
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/LLCTest.java b/utils/misc/src/test/java/org/onlab/packet/LLCTest.java
index 39bb72f..8154148 100644
--- a/utils/misc/src/test/java/org/onlab/packet/LLCTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/LLCTest.java
@@ -16,12 +16,14 @@
 
 package org.onlab.packet;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Before;
 import org.junit.Test;
 
 import java.nio.ByteBuffer;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 /**
  * Unit tests for LLC class.
@@ -59,6 +61,9 @@
         PacketTestUtils.testDeserializeTruncated(deserializer, bytes);
     }
 
+    /**
+     * Tests deserialize and getters.
+     */
     @Test
     public void testDeserialize() throws Exception {
         LLC llc = deserializer.deserialize(bytes, 0, bytes.length);
@@ -67,4 +72,17 @@
         assertEquals(ssap, llc.getSsap());
         assertEquals(ctrl, llc.getCtrl());
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringLLC() throws Exception {
+        LLC llc = deserializer.deserialize(bytes, 0, bytes.length);
+        String str = llc.toString();
+
+        assertTrue(StringUtils.contains(str, "dsap=" + dsap));
+        assertTrue(StringUtils.contains(str, "ssap=" + ssap));
+        assertTrue(StringUtils.contains(str, "ctrl=" + ctrl));
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/LLDPTest.java b/utils/misc/src/test/java/org/onlab/packet/LLDPTest.java
index 95b0b04..154dee7 100644
--- a/utils/misc/src/test/java/org/onlab/packet/LLDPTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/LLDPTest.java
@@ -89,6 +89,9 @@
         PacketTestUtils.testDeserializeTruncated(deserializer, bytes);
     }
 
+    /**
+     * Tests deserialize and getters.
+     */
     @Test
     public void testDeserialize() throws Exception {
         LLDP lldp = deserializer.deserialize(bytes, 0, bytes.length);
@@ -112,4 +115,15 @@
         assertEquals(optionalTlvSize, optionalTlv.getLength());
         assertTrue(Arrays.equals(optionalTlvValue, optionalTlv.getValue()));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringLLDP() throws Exception {
+        LLDP lldp = deserializer.deserialize(bytes, 0, bytes.length);
+        String str = lldp.toString();
+
+        // TODO: need to add LLDP toString unit test
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/MplsTest.java b/utils/misc/src/test/java/org/onlab/packet/MplsTest.java
index 2ab8ff9..b08b2e9 100644
--- a/utils/misc/src/test/java/org/onlab/packet/MplsTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/MplsTest.java
@@ -16,6 +16,7 @@
 
 package org.onlab.packet;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -23,6 +24,7 @@
 import java.util.HashMap;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 /**
  * Unit tests for MPLS class.
@@ -62,6 +64,9 @@
         PacketTestUtils.testDeserializeTruncated(deserializer, bytes);
     }
 
+    /**
+     * Tests deserialize and getters.
+     */
     @Test
     public void testDeserialize() throws Exception {
         MPLS mpls = deserializer.deserialize(bytes, 0, bytes.length);
@@ -71,4 +76,18 @@
         assertEquals(ttl, mpls.ttl);
         assertEquals(protocol, mpls.protocol);
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringMpls() throws Exception {
+        MPLS mpls = deserializer.deserialize(bytes, 0, bytes.length);
+        String str = mpls.toString();
+
+        assertTrue(StringUtils.contains(str, "label=" + label));
+        assertTrue(StringUtils.contains(str, "bos=" + bos));
+        assertTrue(StringUtils.contains(str, "ttl=" + ttl));
+        assertTrue(StringUtils.contains(str, "protocol=" + protocol));
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/PacketTestUtils.java b/utils/misc/src/test/java/org/onlab/packet/PacketTestUtils.java
index 209b1d2..3fcd6b5 100644
--- a/utils/misc/src/test/java/org/onlab/packet/PacketTestUtils.java
+++ b/utils/misc/src/test/java/org/onlab/packet/PacketTestUtils.java
@@ -61,7 +61,7 @@
      * deserialize the packet.
      *
      * @param deserializer deserializer function to test
-     * @param header byte array of a full-size packet
+     * @param header       byte array of a full-size packet
      */
     public static void testDeserializeTruncated(Deserializer deserializer,
                                                 byte[] header) {
@@ -82,9 +82,9 @@
      * DeserializationException is not thrown by the deserializer function.
      *
      * @param deserializer deserializer function to test
-     * @param bytes input byte array
-     * @param offset input offset
-     * @param length input length
+     * @param bytes        input byte array
+     * @param offset       input offset
+     * @param length       input length
      */
     public static void expectDeserializationException(Deserializer deserializer,
                                                       byte[] bytes, int offset, int length) {
diff --git a/utils/misc/src/test/java/org/onlab/packet/TCPTest.java b/utils/misc/src/test/java/org/onlab/packet/TCPTest.java
index faab5c2..1d6814b 100644
--- a/utils/misc/src/test/java/org/onlab/packet/TCPTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/TCPTest.java
@@ -18,6 +18,7 @@
 
 package org.onlab.packet;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -160,4 +161,23 @@
         assertTrue(tcp1.equals(tcp1));
         assertFalse(tcp1.equals(tcp2));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringTcp() throws Exception {
+        TCP tcp = deserializer.deserialize(bytePacketTCP4, 0, bytePacketTCP4.length);
+        String str = tcp.toString();
+
+        assertTrue(StringUtils.contains(str, "sourcePort=" + 0x50));
+        assertTrue(StringUtils.contains(str, "destinationPort=" + 0x60));
+        assertTrue(StringUtils.contains(str, "sequence=" + 0x10));
+        assertTrue(StringUtils.contains(str, "acknowledge=" + 0x20));
+        assertTrue(StringUtils.contains(str, "dataOffset=" + (byte) 0x5));
+        assertTrue(StringUtils.contains(str, "flags=" + (short) 0x2));
+        assertTrue(StringUtils.contains(str, "windowSize=" + (short) 0x1000));
+        assertTrue(StringUtils.contains(str, "checksum=" + (short) 0x1bae));
+        assertTrue(StringUtils.contains(str, "urgentPointer=" + (short) 0x1));
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/UDPTest.java b/utils/misc/src/test/java/org/onlab/packet/UDPTest.java
index ba453f6..4b83897 100644
--- a/utils/misc/src/test/java/org/onlab/packet/UDPTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/UDPTest.java
@@ -18,6 +18,7 @@
 
 package org.onlab.packet;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -131,4 +132,18 @@
         assertTrue(udp1.equals(udp1));
         assertFalse(udp1.equals(udp2));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringUdp() throws Exception {
+        UDP udp = deserializer.deserialize(bytePacketUDP4, 0, bytePacketUDP4.length);
+        String str = udp.toString();
+
+        assertTrue(StringUtils.contains(str, "sourcePort=" + 0x50));
+        assertTrue(StringUtils.contains(str, "destinationPort=" + 0x60));
+        assertTrue(StringUtils.contains(str, "length=" + (short) 8));
+        assertTrue(StringUtils.contains(str, "checksum=" + (short) 0x7bda));
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/ipv6/AuthenticationTest.java b/utils/misc/src/test/java/org/onlab/packet/ipv6/AuthenticationTest.java
index 39ab910..5ca7ea4 100644
--- a/utils/misc/src/test/java/org/onlab/packet/ipv6/AuthenticationTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/ipv6/AuthenticationTest.java
@@ -16,6 +16,7 @@
 
 package org.onlab.packet.ipv6;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -23,11 +24,10 @@
 import org.onlab.packet.Deserializer;
 import org.onlab.packet.UDP;
 
+import java.util.Arrays;
+
 import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 /**
  * Tests for class {@link Authentication}.
@@ -118,4 +118,19 @@
         assertTrue(auth1.equals(auth1));
         assertFalse(auth1.equals(auth2));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringAuthentication() throws Exception {
+        Authentication auth = deserializer.deserialize(bytePacket, 0, bytePacket.length);
+        String str = auth.toString();
+
+        assertTrue(StringUtils.contains(str, "nextHeader=" + (byte) 0x11));
+        assertTrue(StringUtils.contains(str, "payloadLength=" + (byte) 0x02));
+        assertTrue(StringUtils.contains(str, "securityParamIndex=" + 0x13572468));
+        assertTrue(StringUtils.contains(str, "sequence=" + 0xffff00));
+        assertTrue(StringUtils.contains(str, "integrityCheck=" + Arrays.toString(icv)));
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/ipv6/BaseOptionsTest.java b/utils/misc/src/test/java/org/onlab/packet/ipv6/BaseOptionsTest.java
index bb91e9e..17ada1e 100644
--- a/utils/misc/src/test/java/org/onlab/packet/ipv6/BaseOptionsTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/ipv6/BaseOptionsTest.java
@@ -16,6 +16,7 @@
 
 package org.onlab.packet.ipv6;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -24,11 +25,10 @@
 import org.onlab.packet.IPv6;
 import org.onlab.packet.UDP;
 
+import java.util.Arrays;
+
 import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 /**
  * Tests for class {@link BaseOptions}.
@@ -112,4 +112,17 @@
         assertTrue(baseopt1.equals(baseopt1));
         assertFalse(baseopt1.equals(baseopt2));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringBaseOptions() throws Exception {
+        BaseOptions baseopt = deserializer.deserialize(bytePacket, 0, bytePacket.length);
+        String str = baseopt.toString();
+
+        assertTrue(StringUtils.contains(str, "nextHeader=" + (byte) 0x11));
+        assertTrue(StringUtils.contains(str, "headerExtLength=" + (byte) 0x00));
+        assertTrue(StringUtils.contains(str, "options=" + Arrays.toString(options)));
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/ipv6/EncapSecurityPayloadTest.java b/utils/misc/src/test/java/org/onlab/packet/ipv6/EncapSecurityPayloadTest.java
index e0e9919..d8e2f34 100644
--- a/utils/misc/src/test/java/org/onlab/packet/ipv6/EncapSecurityPayloadTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/ipv6/EncapSecurityPayloadTest.java
@@ -16,6 +16,7 @@
 
 package org.onlab.packet.ipv6;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -101,4 +102,16 @@
         assertTrue(esp1.equals(esp1));
         assertFalse(esp1.equals(esp2));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringESP() throws Exception {
+        EncapSecurityPayload esp = deserializer.deserialize(bytePacket, 0, bytePacket.length);
+        String str = esp.toString();
+
+        assertTrue(StringUtils.contains(str, "securityParamIndex=" + 0x13572468));
+        assertTrue(StringUtils.contains(str, "sequence=" + 0xffff00));
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/ipv6/FragmentTest.java b/utils/misc/src/test/java/org/onlab/packet/ipv6/FragmentTest.java
index f2d5e48..7e5dc15 100644
--- a/utils/misc/src/test/java/org/onlab/packet/ipv6/FragmentTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/ipv6/FragmentTest.java
@@ -16,6 +16,7 @@
 
 package org.onlab.packet.ipv6;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -110,4 +111,18 @@
         assertTrue(frag1.equals(frag1));
         assertFalse(frag1.equals(frag2));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringFragment() throws Exception {
+        Fragment frag = deserializer.deserialize(bytePacket, 0, bytePacket.length);
+        String str = frag.toString();
+
+        assertTrue(StringUtils.contains(str, "nextHeader=" + (byte) 0x11));
+        assertTrue(StringUtils.contains(str, "fragmentOffset=" + (short) 0x1f));
+        assertTrue(StringUtils.contains(str, "moreFragment=" + (byte) 1));
+        assertTrue(StringUtils.contains(str, "identification=" + 0x1357));
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/ipv6/RoutingTest.java b/utils/misc/src/test/java/org/onlab/packet/ipv6/RoutingTest.java
index a03bacc..293c9d7 100644
--- a/utils/misc/src/test/java/org/onlab/packet/ipv6/RoutingTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/ipv6/RoutingTest.java
@@ -16,6 +16,7 @@
 
 package org.onlab.packet.ipv6;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -24,11 +25,10 @@
 import org.onlab.packet.Deserializer;
 import org.onlab.packet.UDP;
 
+import java.util.Arrays;
+
 import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 /**
  * Tests for class {@link Routing}.
@@ -125,4 +125,19 @@
         assertTrue(routing1.equals(routing1));
         assertFalse(routing1.equals(routing2));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringRouting() throws Exception {
+        Routing routing = deserializer.deserialize(bytePacket, 0, bytePacket.length);
+        String str = routing.toString();
+
+        assertTrue(StringUtils.contains(str, "nextHeader=" + (byte) 0x11));
+        assertTrue(StringUtils.contains(str, "headerExtLength=" + (byte) 0x02));
+        assertTrue(StringUtils.contains(str, "routingType=" + (byte) 0x00));
+        assertTrue(StringUtils.contains(str, "segmentsLeft=" + (byte) 0x03));
+        assertTrue(StringUtils.contains(str, "routingData=" + Arrays.toString(routingData)));
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/ndp/NeighborAdvertisementTest.java b/utils/misc/src/test/java/org/onlab/packet/ndp/NeighborAdvertisementTest.java
index d537251..6b03ca9 100644
--- a/utils/misc/src/test/java/org/onlab/packet/ndp/NeighborAdvertisementTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/ndp/NeighborAdvertisementTest.java
@@ -15,6 +15,7 @@
  */
 package org.onlab.packet.ndp;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.onlab.packet.DeserializationException;
@@ -25,10 +26,7 @@
 import java.nio.ByteBuffer;
 
 import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 /**
  * Tests for class {@link NeighborAdvertisement}.
@@ -137,4 +135,18 @@
         assertTrue(na1.equals(na1));
         assertFalse(na1.equals(na2));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringNA() throws Exception {
+        NeighborAdvertisement na = deserializer.deserialize(bytePacket, 0, bytePacket.length);
+        String str = na.toString();
+
+        assertTrue(StringUtils.contains(str, "routerFlag=" + (byte) 1));
+        assertTrue(StringUtils.contains(str, "solicitedFlag=" + (byte) 1));
+        assertTrue(StringUtils.contains(str, "overrideFlag=" + (byte) 1));
+        // TODO: need to handle TARGET_ADDRESS
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/ndp/NeighborSolicitationTest.java b/utils/misc/src/test/java/org/onlab/packet/ndp/NeighborSolicitationTest.java
index 03e57f5e..6f8c9da 100644
--- a/utils/misc/src/test/java/org/onlab/packet/ndp/NeighborSolicitationTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/ndp/NeighborSolicitationTest.java
@@ -25,10 +25,7 @@
 import java.nio.ByteBuffer;
 
 import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 /**
  * Tests for class {@link NeighborSolicitation}.
@@ -131,4 +128,15 @@
         assertTrue(ns1.equals(ns1));
         assertFalse(ns1.equals(ns2));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringNS() throws Exception {
+        NeighborSolicitation ns = deserializer.deserialize(bytePacket, 0, bytePacket.length);
+        String str = ns.toString();
+
+        // TODO: need to handle TARGET_ADDRESS and Options
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/ndp/RedirectTest.java b/utils/misc/src/test/java/org/onlab/packet/ndp/RedirectTest.java
index 3115714..e70da7c 100644
--- a/utils/misc/src/test/java/org/onlab/packet/ndp/RedirectTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/ndp/RedirectTest.java
@@ -144,4 +144,15 @@
         assertTrue(rd1.equals(rd1));
         assertFalse(rd1.equals(rd2));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringRedirect() throws Exception {
+        Redirect rd = deserializer.deserialize(bytePacket, 0, bytePacket.length);
+        String str = rd.toString();
+
+        // TODO: need to handle TARGET_ADDRESS and DESTINATION_ADDRESS
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/ndp/RouterAdvertisementTest.java b/utils/misc/src/test/java/org/onlab/packet/ndp/RouterAdvertisementTest.java
index ede1574..014f36e 100644
--- a/utils/misc/src/test/java/org/onlab/packet/ndp/RouterAdvertisementTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/ndp/RouterAdvertisementTest.java
@@ -15,6 +15,7 @@
  */
 package org.onlab.packet.ndp;
 
+import org.apache.commons.lang3.StringUtils;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.onlab.packet.DeserializationException;
@@ -137,4 +138,22 @@
         assertTrue(ra1.equals(ra1));
         assertFalse(ra1.equals(ra2));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringRA() throws Exception {
+        RouterAdvertisement ra = deserializer.deserialize(bytePacket, 0, bytePacket.length);
+        String str = ra.toString();
+
+        assertTrue(StringUtils.contains(str, "currentHopLimit=" + (byte) 3));
+        assertTrue(StringUtils.contains(str, "mFlag=" + (byte) 1));
+        assertTrue(StringUtils.contains(str, "oFlag=" + (byte) 1));
+        assertTrue(StringUtils.contains(str, "routerLifetime=" + (short) 0x258));
+        assertTrue(StringUtils.contains(str, "reachableTime=" + 0x3e8));
+        assertTrue(StringUtils.contains(str, "retransmitTimer=" + 0x1f4));
+
+        // TODO: need to handle options
+    }
 }
diff --git a/utils/misc/src/test/java/org/onlab/packet/ndp/RouterSolicitationTest.java b/utils/misc/src/test/java/org/onlab/packet/ndp/RouterSolicitationTest.java
index e3b5686..b562f38 100644
--- a/utils/misc/src/test/java/org/onlab/packet/ndp/RouterSolicitationTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/ndp/RouterSolicitationTest.java
@@ -24,10 +24,7 @@
 import java.nio.ByteBuffer;
 
 import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 /**
  * Tests for class {@link RouterSolicitation}.
@@ -111,4 +108,15 @@
         assertTrue(rs1.equals(rs1));
         assertFalse(rs1.equals(rs2));
     }
+
+    /**
+     * Tests toString.
+     */
+    @Test
+    public void testToStringRS() throws Exception {
+        RouterSolicitation rs = deserializer.deserialize(bytePacket, 0, bytePacket.length);
+        String str = rs.toString();
+
+        // TODO: need to handle Options
+    }
 }
