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 bc61c91..ec62d40 100644
--- a/src/main/java/net/onrc/onos/core/packet/ARP.java
+++ b/src/main/java/net/onrc/onos/core/packet/ARP.java
@@ -24,14 +24,14 @@
  * @author David Erickson (daviderickson@cs.stanford.edu)
  */
 public class ARP extends BasePacket {
-    public static short HW_TYPE_ETHERNET = 0x1;
+    public static final short HW_TYPE_ETHERNET = 0x1;
 
-    public static short PROTO_TYPE_IP = 0x800;
+    public static final short PROTO_TYPE_IP = 0x800;
 
-    public static short OP_REQUEST = 0x1;
-    public static short OP_REPLY = 0x2;
-    public static short OP_RARP_REQUEST = 0x3;
-    public static short OP_RARP_REPLY = 0x4;
+    public static final short OP_REQUEST = 0x1;
+    public static final short OP_REPLY = 0x2;
+    public static final short OP_RARP_REQUEST = 0x3;
+    public static final short OP_RARP_REPLY = 0x4;
 
     protected short hardwareType;
     protected short protocolType;
diff --git a/src/main/java/net/onrc/onos/core/packet/BSN.java b/src/main/java/net/onrc/onos/core/packet/BSN.java
index dedabd5..0de2bca 100644
--- a/src/main/java/net/onrc/onos/core/packet/BSN.java
+++ b/src/main/java/net/onrc/onos/core/packet/BSN.java
@@ -31,12 +31,12 @@
     public static final short BSN_VERSION_CURRENT = 0x0;
     public static final short BSN_TYPE_PROBE = 0x1;
     public static final short BSN_TYPE_BDDP = 0x2;
-    public static Map<Short, Class<? extends IPacket>> typeClassMap;
+    public static final Map<Short, Class<? extends IPacket>> TYPE_CLASS_MAP;
 
     static {
-        typeClassMap = new HashMap<Short, Class<? extends IPacket>>();
-        typeClassMap.put(BSN_TYPE_PROBE, BSNPROBE.class);
-        typeClassMap.put(BSN_TYPE_BDDP, LLDP.class);
+        TYPE_CLASS_MAP = new HashMap<Short, Class<? extends IPacket>>();
+        TYPE_CLASS_MAP.put(BSN_TYPE_PROBE, BSNPROBE.class);
+        TYPE_CLASS_MAP.put(BSN_TYPE_BDDP, LLDP.class);
     }
 
     protected short type;
@@ -112,8 +112,8 @@
         }
 
         IPacket payload;
-        if (typeClassMap.containsKey(this.type)) {
-            Class<? extends IPacket> clazz = typeClassMap.get(this.type);
+        if (TYPE_CLASS_MAP.containsKey(this.type)) {
+            Class<? extends IPacket> clazz = TYPE_CLASS_MAP.get(this.type);
             try {
                 payload = clazz.newInstance();
             } catch (Exception e) {
@@ -161,8 +161,8 @@
     public String toString() {
         StringBuffer sb = new StringBuffer("\n");
         sb.append("BSN packet");
-        if (typeClassMap.containsKey(this.type))
-            sb.append(" type: " + typeClassMap.get(this.type).getCanonicalName());
+        if (TYPE_CLASS_MAP.containsKey(this.type))
+            sb.append(" type: " + TYPE_CLASS_MAP.get(this.type).getCanonicalName());
         else
             sb.append(" type: " + this.type);
 
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 ee3052b..e414802 100644
--- a/src/main/java/net/onrc/onos/core/packet/DHCP.java
+++ b/src/main/java/net/onrc/onos/core/packet/DHCP.java
@@ -53,11 +53,11 @@
      * ------------------------------------------
      */
     // Header + magic without options
-    public static int MIN_HEADER_LENGTH = 240;
-    public static byte OPCODE_REQUEST = 0x1;
-    public static byte OPCODE_REPLY = 0x2;
+    public static final int MIN_HEADER_LENGTH = 240;
+    public static final byte OPCODE_REQUEST = 0x1;
+    public static final byte OPCODE_REPLY = 0x2;
 
-    public static byte HWTYPE_ETHERNET = 0x1;
+    public static final byte HWTYPE_ETHERNET = 0x1;
 
     public enum DHCPOptionCode {
         OptionCode_SubnetMask((byte) 1),
diff --git a/src/main/java/net/onrc/onos/core/packet/Ethernet.java b/src/main/java/net/onrc/onos/core/packet/Ethernet.java
index aad27a5..93ae2a6 100644
--- a/src/main/java/net/onrc/onos/core/packet/Ethernet.java
+++ b/src/main/java/net/onrc/onos/core/packet/Ethernet.java
@@ -38,15 +38,15 @@
     public static final short TYPE_BSN = (short) 0x8942;
     public static final short VLAN_UNTAGGED = (short) 0xffff;
     public static final short DATALAYER_ADDRESS_LENGTH = 6; // bytes
-    public static Map<Short, Class<? extends IPacket>> etherTypeClassMap;
+    public static final Map<Short, Class<? extends IPacket>> ETHER_TYPE_CLASS_MAP;
 
     static {
-        etherTypeClassMap = new HashMap<Short, Class<? extends IPacket>>();
-        etherTypeClassMap.put(TYPE_ARP, ARP.class);
-        etherTypeClassMap.put(TYPE_RARP, ARP.class);
-        etherTypeClassMap.put(TYPE_IPV4, IPv4.class);
-        etherTypeClassMap.put(TYPE_LLDP, LLDP.class);
-        etherTypeClassMap.put(TYPE_BSN, BSN.class);
+        ETHER_TYPE_CLASS_MAP = new HashMap<Short, Class<? extends IPacket>>();
+        ETHER_TYPE_CLASS_MAP.put(TYPE_ARP, ARP.class);
+        ETHER_TYPE_CLASS_MAP.put(TYPE_RARP, ARP.class);
+        ETHER_TYPE_CLASS_MAP.put(TYPE_IPV4, IPv4.class);
+        ETHER_TYPE_CLASS_MAP.put(TYPE_LLDP, LLDP.class);
+        ETHER_TYPE_CLASS_MAP.put(TYPE_BSN, BSN.class);
     }
 
     protected MACAddress destinationMACAddress;
@@ -260,8 +260,8 @@
         this.etherType = etherType;
 
         IPacket payload;
-        if (Ethernet.etherTypeClassMap.containsKey(this.etherType)) {
-            Class<? extends IPacket> clazz = Ethernet.etherTypeClassMap.get(this.etherType);
+        if (Ethernet.ETHER_TYPE_CLASS_MAP.containsKey(this.etherType)) {
+            Class<? extends IPacket> clazz = Ethernet.ETHER_TYPE_CLASS_MAP.get(this.etherType);
             try {
                 payload = clazz.newInstance();
             } catch (Exception e) {
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 1195c7c..f1efd7b 100644
--- a/src/main/java/net/onrc/onos/core/packet/IPv4.java
+++ b/src/main/java/net/onrc/onos/core/packet/IPv4.java
@@ -34,13 +34,13 @@
     public static final byte PROTOCOL_ICMP = 0x1;
     public static final byte PROTOCOL_TCP = 0x6;
     public static final byte PROTOCOL_UDP = 0x11;
-    public static Map<Byte, Class<? extends IPacket>> protocolClassMap;
+    public static final Map<Byte, Class<? extends IPacket>> PROTOCOL_CLASS_MAP;
 
     static {
-        protocolClassMap = new HashMap<Byte, Class<? extends IPacket>>();
-        protocolClassMap.put(PROTOCOL_ICMP, ICMP.class);
-        protocolClassMap.put(PROTOCOL_TCP, TCP.class);
-        protocolClassMap.put(PROTOCOL_UDP, UDP.class);
+        PROTOCOL_CLASS_MAP = new HashMap<Byte, Class<? extends IPacket>>();
+        PROTOCOL_CLASS_MAP.put(PROTOCOL_ICMP, ICMP.class);
+        PROTOCOL_CLASS_MAP.put(PROTOCOL_TCP, TCP.class);
+        PROTOCOL_CLASS_MAP.put(PROTOCOL_UDP, UDP.class);
     }
 
     protected byte version;
@@ -362,8 +362,8 @@
         }
 
         IPacket payload;
-        if (IPv4.protocolClassMap.containsKey(this.protocol)) {
-            Class<? extends IPacket> clazz = IPv4.protocolClassMap.get(this.protocol);
+        if (IPv4.PROTOCOL_CLASS_MAP.containsKey(this.protocol)) {
+            Class<? extends IPacket> clazz = IPv4.PROTOCOL_CLASS_MAP.get(this.protocol);
             try {
                 payload = clazz.newInstance();
             } catch (Exception e) {
diff --git a/src/main/java/net/onrc/onos/core/packet/UDP.java b/src/main/java/net/onrc/onos/core/packet/UDP.java
index 6b7cee6..f12f34f 100644
--- a/src/main/java/net/onrc/onos/core/packet/UDP.java
+++ b/src/main/java/net/onrc/onos/core/packet/UDP.java
@@ -25,17 +25,17 @@
  * @author David Erickson (daviderickson@cs.stanford.edu)
  */
 public class UDP extends BasePacket {
-    public static Map<Short, Class<? extends IPacket>> decodeMap;
-    public static short DHCP_SERVER_PORT = (short) 67;
-    public static short DHCP_CLIENT_PORT = (short) 68;
+    public static final short DHCP_SERVER_PORT = (short) 67;
+    public static final short DHCP_CLIENT_PORT = (short) 68;
+    public static final Map<Short, Class<? extends IPacket>> DECODE_MAP;
 
     static {
-        decodeMap = new HashMap<Short, Class<? extends IPacket>>();
+        DECODE_MAP = new HashMap<Short, Class<? extends IPacket>>();
         /*
          * Disable DHCP until the deserialize code is hardened to deal with garbage input
          */
-        UDP.decodeMap.put(DHCP_SERVER_PORT, DHCP.class);
-        UDP.decodeMap.put(DHCP_CLIENT_PORT, DHCP.class);
+        UDP.DECODE_MAP.put(DHCP_SERVER_PORT, DHCP.class);
+        UDP.DECODE_MAP.put(DHCP_CLIENT_PORT, DHCP.class);
 
     }
 
@@ -208,15 +208,15 @@
         this.length = bb.getShort();
         this.checksum = bb.getShort();
 
-        if (UDP.decodeMap.containsKey(this.destinationPort)) {
+        if (UDP.DECODE_MAP.containsKey(this.destinationPort)) {
             try {
-                this.payload = UDP.decodeMap.get(this.destinationPort).getConstructor().newInstance();
+                this.payload = UDP.DECODE_MAP.get(this.destinationPort).getConstructor().newInstance();
             } catch (Exception e) {
                 throw new RuntimeException("Failure instantiating class", e);
             }
-        } else if (UDP.decodeMap.containsKey(this.sourcePort)) {
+        } else if (UDP.DECODE_MAP.containsKey(this.sourcePort)) {
             try {
-                this.payload = UDP.decodeMap.get(this.sourcePort).getConstructor().newInstance();
+                this.payload = UDP.DECODE_MAP.get(this.sourcePort).getConstructor().newInstance();
             } catch (Exception e) {
                 throw new RuntimeException("Failure instantiating class", e);
             }
