diff --git a/src/main/java/net/onrc/onos/core/packet/ARP.java b/src/main/java/net/onrc/onos/core/packet/ARP.java
index 3b315f3..3d11649 100644
--- a/src/main/java/net/onrc/onos/core/packet/ARP.java
+++ b/src/main/java/net/onrc/onos/core/packet/ARP.java
@@ -20,6 +20,8 @@
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 
+import org.apache.commons.lang.ArrayUtils;
+
 /**
  * @author David Erickson (daviderickson@cs.stanford.edu)
  */
@@ -122,21 +124,14 @@
      * @return the senderHardwareAddress
      */
     public byte[] getSenderHardwareAddress() {
-        if (this.senderHardwareAddress == null) {
-            return null;
-        }
-        return this.senderHardwareAddress.clone();
+        return ArrayUtils.clone(this.senderHardwareAddress);
     }
 
     /**
      * @param senderHardwareAddress the senderHardwareAddress to set
      */
     public ARP setSenderHardwareAddress(byte[] senderHardwareAddress) {
-        if (senderHardwareAddress == null) {
-            this.senderHardwareAddress = null;
-        } else {
-            this.senderHardwareAddress = senderHardwareAddress.clone();
-        }
+        this.senderHardwareAddress = ArrayUtils.clone(senderHardwareAddress);
         return this;
     }
 
@@ -144,21 +139,14 @@
      * @return the senderProtocolAddress
      */
     public byte[] getSenderProtocolAddress() {
-        if (this.senderProtocolAddress == null) {
-            return null;
-        }
-        return this.senderProtocolAddress.clone();
+        return ArrayUtils.clone(this.senderProtocolAddress);
     }
 
     /**
      * @param senderProtocolAddress the senderProtocolAddress to set
      */
     public ARP setSenderProtocolAddress(byte[] senderProtocolAddress) {
-        if (senderProtocolAddress == null) {
-            this.senderProtocolAddress = null;
-        } else {
-            this.senderProtocolAddress = senderProtocolAddress.clone();
-        }
+        this.senderProtocolAddress = ArrayUtils.clone(senderProtocolAddress);
         return this;
     }
 
@@ -171,21 +159,14 @@
      * @return the targetHardwareAddress
      */
     public byte[] getTargetHardwareAddress() {
-        if (this.targetHardwareAddress == null) {
-            return null;
-        }
-        return this.targetHardwareAddress.clone();
+        return ArrayUtils.clone(this.targetHardwareAddress);
     }
 
     /**
      * @param targetHardwareAddress the targetHardwareAddress to set
      */
     public ARP setTargetHardwareAddress(byte[] targetHardwareAddress) {
-        if (targetHardwareAddress == null) {
-            this.targetHardwareAddress = null;
-        } else {
-            this.targetHardwareAddress = targetHardwareAddress.clone();
-        }
+        this.targetHardwareAddress = ArrayUtils.clone(targetHardwareAddress);
         return this;
     }
 
@@ -193,10 +174,7 @@
      * @return the targetProtocolAddress
      */
     public byte[] getTargetProtocolAddress() {
-        if (this.targetProtocolAddress == null) {
-            return null;
-        }
-        return this.targetProtocolAddress.clone();
+        return ArrayUtils.clone(this.targetProtocolAddress);
     }
 
     /**
@@ -220,11 +198,7 @@
      * @param targetProtocolAddress the targetProtocolAddress to set
      */
     public ARP setTargetProtocolAddress(byte[] targetProtocolAddress) {
-        if (targetProtocolAddress == null) {
-            this.targetProtocolAddress = null;
-        } else {
-            this.targetProtocolAddress = targetProtocolAddress.clone();
-        }
+        this.targetProtocolAddress = ArrayUtils.clone(targetProtocolAddress);
         return this;
     }
 
diff --git a/src/main/java/net/onrc/onos/core/packet/BSNPROBE.java b/src/main/java/net/onrc/onos/core/packet/BSNPROBE.java
index 03e1666..1daccda 100644
--- a/src/main/java/net/onrc/onos/core/packet/BSNPROBE.java
+++ b/src/main/java/net/onrc/onos/core/packet/BSNPROBE.java
@@ -22,6 +22,7 @@
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 
+import org.apache.commons.lang.ArrayUtils;
 import org.openflow.util.HexString;
 
 /**
@@ -60,34 +61,20 @@
     }
 
     public byte[] getSrcMac() {
-        if (this.srcMac == null) {
-            return null;
-        }
-        return this.srcMac.clone();
+        return ArrayUtils.clone(this.srcMac);
     }
 
     public BSNPROBE setSrcMac(byte[] srcMac) {
-        if (srcMac == null) {
-            this.srcMac = null;
-        } else {
-            this.srcMac = srcMac.clone();
-        }
+        this.srcMac = ArrayUtils.clone(srcMac);
         return this;
     }
 
     public byte[] getDstMac() {
-        if (this.dstMac == null) {
-            return null;
-        }
-        return this.dstMac.clone();
+        return ArrayUtils.clone(this.dstMac);
     }
 
     public BSNPROBE setDstMac(byte[] dstMac) {
-        if (dstMac == null) {
-            this.dstMac = null;
-        } else {
-            this.dstMac = dstMac.clone();
-        }
+        this.dstMac = ArrayUtils.clone(dstMac);
         return this;
     }
 
diff --git a/src/main/java/net/onrc/onos/core/packet/DHCP.java b/src/main/java/net/onrc/onos/core/packet/DHCP.java
index 22d6c7a..82ba850 100644
--- a/src/main/java/net/onrc/onos/core/packet/DHCP.java
+++ b/src/main/java/net/onrc/onos/core/packet/DHCP.java
@@ -23,6 +23,8 @@
 import java.util.List;
 import java.util.ListIterator;
 
+import org.apache.commons.lang.ArrayUtils;
+
 /**
  * @author David Erickson (daviderickson@cs.stanford.edu)
  */
@@ -268,21 +270,14 @@
      * @return the clientHardwareAddress
      */
     public byte[] getClientHardwareAddress() {
-        if (this.clientHardwareAddress == null) {
-            return null;
-        }
-        return this.clientHardwareAddress.clone();
+        return ArrayUtils.clone(this.clientHardwareAddress);
     }
 
     /**
      * @param clientHardwareAddress the clientHardwareAddress to set
      */
     public DHCP setClientHardwareAddress(byte[] clientHardwareAddress) {
-        if (clientHardwareAddress == null) {
-            this.clientHardwareAddress = null;
-        } else {
-            this.clientHardwareAddress = clientHardwareAddress.clone();
-        }
+        this.clientHardwareAddress = ArrayUtils.clone(clientHardwareAddress);
         return this;
     }
 
diff --git a/src/main/java/net/onrc/onos/core/packet/DHCPOption.java b/src/main/java/net/onrc/onos/core/packet/DHCPOption.java
index d24541e..63e2741 100644
--- a/src/main/java/net/onrc/onos/core/packet/DHCPOption.java
+++ b/src/main/java/net/onrc/onos/core/packet/DHCPOption.java
@@ -19,6 +19,8 @@
 
 import java.util.Arrays;
 
+import org.apache.commons.lang.ArrayUtils;
+
 /**
  * @author David Erickson (daviderickson@cs.stanford.edu)
  */
@@ -61,21 +63,14 @@
      * @return the data
      */
     public byte[] getData() {
-        if (this.data == null) {
-            return null;
-        }
-        return this.data.clone();
+        return ArrayUtils.clone(this.data);
     }
 
     /**
      * @param data the data to set
      */
     public DHCPOption setData(byte[] data) {
-        if (data == null) {
-            this.data = null;
-        } else {
-            this.data = data.clone();
-        }
+        this.data = ArrayUtils.clone(data);
         return this;
     }
 
diff --git a/src/main/java/net/onrc/onos/core/packet/Data.java b/src/main/java/net/onrc/onos/core/packet/Data.java
index e79cf7b..f63306b 100644
--- a/src/main/java/net/onrc/onos/core/packet/Data.java
+++ b/src/main/java/net/onrc/onos/core/packet/Data.java
@@ -19,6 +19,8 @@
 
 import java.util.Arrays;
 
+import org.apache.commons.lang.ArrayUtils;
+
 /**
  * @author David Erickson (daviderickson@cs.stanford.edu)
  */
@@ -35,40 +37,26 @@
      * @param data
      */
     public Data(byte[] data) {
-        if (data == null) {
-            this.data = null;
-        } else {
-            this.data = data.clone();
-        }
+        this.data = ArrayUtils.clone(data);
     }
 
     /**
      * @return the data
      */
     public byte[] getData() {
-        if (this.data == null) {
-            return null;
-        }
-        return this.data.clone();
+        return ArrayUtils.clone(this.data);
     }
 
     /**
      * @param data the data to set
      */
     public Data setData(byte[] data) {
-        if (data == null) {
-            this.data = null;
-        } else {
-            this.data = data.clone();
-        }
+        this.data = ArrayUtils.clone(data);
         return this;
     }
 
     public byte[] serialize() {
-        if (this.data == null) {
-            return null;
-        }
-        return this.data.clone();
+        return ArrayUtils.clone(this.data);
     }
 
     @Override
diff --git a/src/main/java/net/onrc/onos/core/packet/IPv4.java b/src/main/java/net/onrc/onos/core/packet/IPv4.java
index fbb91ab..f105428 100644
--- a/src/main/java/net/onrc/onos/core/packet/IPv4.java
+++ b/src/main/java/net/onrc/onos/core/packet/IPv4.java
@@ -26,6 +26,8 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.commons.lang.ArrayUtils;
+
 /**
  * @author David Erickson (daviderickson@cs.stanford.edu)
  */
@@ -266,10 +268,7 @@
      * @return the options
      */
     public byte[] getOptions() {
-        if (this.options == null) {
-            return null;
-        }
-        return this.options.clone();
+        return ArrayUtils.clone(this.options);
     }
 
     /**
@@ -280,11 +279,7 @@
             throw new IllegalArgumentException(
                     "Options length must be a multiple of 4");
         }
-        if (options == null) {
-            this.options = null;
-        } else {
-            this.options = options.clone();
-        }
+        this.options = ArrayUtils.clone(options);
         return this;
     }
 
diff --git a/src/main/java/net/onrc/onos/core/packet/LLDPTLV.java b/src/main/java/net/onrc/onos/core/packet/LLDPTLV.java
index 8de0d8a..d41b088 100644
--- a/src/main/java/net/onrc/onos/core/packet/LLDPTLV.java
+++ b/src/main/java/net/onrc/onos/core/packet/LLDPTLV.java
@@ -20,6 +20,8 @@
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 
+import org.apache.commons.lang.ArrayUtils;
+
 /**
  * @author David Erickson (daviderickson@cs.stanford.edu)
  */
@@ -62,21 +64,14 @@
      * @return the value
      */
     public byte[] getValue() {
-        if (this.value == null) {
-            return null;
-        }
-        return this.value.clone();
+        return ArrayUtils.clone(this.value);
     }
 
     /**
      * @param value the value to set
      */
     public LLDPTLV setValue(byte[] value) {
-        if (value == null) {
-            this.value = null;
-        } else {
-            this.value = value.clone();
-        }
+        this.value = ArrayUtils.clone(value);
         return this;
     }
 
diff --git a/src/main/java/net/onrc/onos/core/packet/TCP.java b/src/main/java/net/onrc/onos/core/packet/TCP.java
index def194c..6b6c355 100644
--- a/src/main/java/net/onrc/onos/core/packet/TCP.java
+++ b/src/main/java/net/onrc/onos/core/packet/TCP.java
@@ -20,6 +20,8 @@
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 
+import org.apache.commons.lang.ArrayUtils;
+
 /**
  * @author shudong.zhou@bigswitch.com
  */
@@ -142,19 +144,15 @@
     }
 
     public byte[] getOptions() {
-        if (this.options == null) {
-            return null;
-        }
-        return this.options.clone();
+        return ArrayUtils.clone(this.options);
     }
 
     public TCP setOptions(final byte[] options) {
-        if (options == null) {
-            this.options = null;
+        this.options = ArrayUtils.clone(options);
+        if (this.options == null) {
             this.dataOffset = 0;
         } else {
-            this.options = options.clone();
-            this.dataOffset = (byte) ((20 + options.length + 3) >> 2);
+            this.dataOffset = (byte) ((20 + this.options.length + 3) >> 2);
         }
         return this;
     }
