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 d9a5e83..e6ef0ae 100755
--- a/utils/misc/src/main/java/org/onlab/packet/PIM.java
+++ b/utils/misc/src/main/java/org/onlab/packet/PIM.java
@@ -43,6 +43,9 @@
 
     public static final int PIM_HEADER_LEN = 4;
 
+    public static final byte ADDRESS_FAMILY_IP4 = 0x1;
+    public static final byte ADDRESS_FAMILY_IP6 = 0x2;
+
     public static final Map<Byte, Deserializer<? extends IPacket>> PROTOCOL_DESERIALIZER_MAP =
             new HashMap<>();
 
diff --git a/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrGroup.java b/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrGroup.java
index be4ab19..0db82af 100644
--- a/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrGroup.java
+++ b/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrGroup.java
@@ -17,9 +17,11 @@
 
 import org.onlab.packet.DeserializationException;
 import org.onlab.packet.Ip4Address;
+import org.onlab.packet.Ip6Address;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.IpPrefix;
-import org.onlab.packet.Ip6Address;
+import org.onlab.packet.PIM;
+
 
 import java.nio.ByteBuffer;
 
@@ -41,7 +43,7 @@
      * PIM Encoded Group Address.
      */
     public PIMAddrGroup() {
-        this.family = 4;
+        this.family = PIM.ADDRESS_FAMILY_IP4;
         this.encType = 0;
         this.reserved = 0;
         this.bBit = false;
@@ -83,7 +85,7 @@
     public void setAddr(IpPrefix pfx) {
         this.addr = pfx.address();
         this.masklen = (byte) pfx.prefixLength();
-        this.family = (byte) ((this.addr.isIp4()) ? 4 : 6);
+        this.family = (byte) ((this.addr.isIp4()) ? PIM.ADDRESS_FAMILY_IP4 : PIM.ADDRESS_FAMILY_IP6);
     }
 
     /**
@@ -181,9 +183,9 @@
         checkInput(bb.array(), bb.position(), bb.limit() - bb.position(), ENC_GROUP_IPV4_BYTE_LENGTH);
 
         this.family = bb.get();
-        if (family != 4 && family != 6) {
+        if (family != PIM.ADDRESS_FAMILY_IP4 && family != PIM.ADDRESS_FAMILY_IP6) {
             throw new DeserializationException("Illegal IP version number: " + family + "\n");
-        } else if (family == 6) {
+        } else if (family == PIM.ADDRESS_FAMILY_IP6) {
 
             // Check for one less by since we have already read the first byte of the packet.
             checkInput(bb.array(), bb.position(), bb.limit() - bb.position(), ENC_GROUP_IPV6_BYTE_LENGTH - 1);
@@ -201,9 +203,9 @@
         this.reserved |= 0x7d;
 
         this.masklen = bb.get();
-        if (this.family == 4) {
+        if (this.family == PIM.ADDRESS_FAMILY_IP4) {
             this.addr = IpAddress.valueOf(bb.getInt());
-        } else if (this.family == 6) {
+        } else if (this.family == PIM.ADDRESS_FAMILY_IP6) {
             this.addr = Ip6Address.valueOf(bb.array(), 2);
         }
         return this;
diff --git a/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrSource.java b/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrSource.java
index 2152640..762dad5 100644
--- a/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrSource.java
+++ b/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrSource.java
@@ -17,9 +17,10 @@
 
 import org.onlab.packet.DeserializationException;
 import org.onlab.packet.Ip4Address;
+import org.onlab.packet.Ip6Address;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.IpPrefix;
-import org.onlab.packet.Ip6Address;
+import org.onlab.packet.PIM;
 
 import java.nio.ByteBuffer;
 
@@ -66,7 +67,7 @@
     }
 
     private void init() {
-        this.family = 4;
+        this.family = PIM.ADDRESS_FAMILY_IP4;
         this.encType = 0;
         this.reserved = 0;
         this.sBit = true;
@@ -92,7 +93,7 @@
     public void setAddr(IpPrefix spfx) {
         this.addr = spfx.address();
         this.masklen = (byte) spfx.prefixLength();
-        this.family = (byte) ((this.addr.isIp4()) ? 4 : 6);
+        this.family = (byte) ((this.addr.isIp4()) ? PIM.ADDRESS_FAMILY_IP4 : PIM.ADDRESS_FAMILY_IP6);
     }
 
     /**
@@ -156,7 +157,7 @@
      */
     public int getByteSize() {
         int size = 4;
-        size += addr.isIp4() ? 4 : 16;
+        size += addr.isIp4() ? PIM.ADDRESS_FAMILY_IP4 : PIM.ADDRESS_FAMILY_IP6;
         return size;
     }
 
@@ -202,9 +203,9 @@
         checkInput(bb.array(), bb.position(), bb.limit() - bb.position(), ENC_SOURCE_IPV4_BYTE_LENGTH);
 
         this.family = bb.get();
-        if (family != 4 && family != 6) {
+        if (family != PIM.ADDRESS_FAMILY_IP4 && family != PIM.ADDRESS_FAMILY_IP6) {
             throw new DeserializationException("Illegal IP version number: " + family + "\n");
-        } else if (family == 6) {
+        } else if (family == PIM.ADDRESS_FAMILY_IP6) {
 
             // Check for one less by since we have already read the first byte of the packet.
             checkInput(bb.array(), bb.position(), bb.limit() - bb.position(), ENC_SOURCE_IPV6_BYTE_LENGTH - 1);
@@ -226,9 +227,9 @@
         this.reserved &= 0xf8;
 
         this.masklen = bb.get();
-        if (this.family == 4) {
+        if (this.family == PIM.ADDRESS_FAMILY_IP4) {
             this.addr = IpAddress.valueOf(bb.getInt());
-        } else if (this.family == 6) {
+        } else if (this.family == PIM.ADDRESS_FAMILY_IP6) {
             this.addr = Ip6Address.valueOf(bb.array(), 2);
         }
         return this;
diff --git a/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrUnicast.java b/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrUnicast.java
index a6ba389..3327a8e 100644
--- a/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrUnicast.java
+++ b/utils/misc/src/main/java/org/onlab/packet/pim/PIMAddrUnicast.java
@@ -15,10 +15,13 @@
  */
 package org.onlab.packet.pim;
 
+
+
 import org.onlab.packet.DeserializationException;
 import org.onlab.packet.Ip4Address;
-import org.onlab.packet.IpAddress;
 import org.onlab.packet.Ip6Address;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.PIM;
 
 import java.nio.ByteBuffer;
 
@@ -36,7 +39,7 @@
      * PIM Encoded Source Address.
      */
     public PIMAddrUnicast() {
-        this.family = 4;
+        this.family = PIM.ADDRESS_FAMILY_IP4;
         this.encType = 0;
     }
 
@@ -48,9 +51,9 @@
     public PIMAddrUnicast(String addr) {
         this.addr = IpAddress.valueOf(addr);
         if (this.addr.isIp4()) {
-            this.family = 4;
+            this.family = PIM.ADDRESS_FAMILY_IP4;
         } else {
-            this.family = 6;
+            this.family = PIM.ADDRESS_FAMILY_IP6;
         }
         this.encType = 0;
     }
@@ -63,9 +66,9 @@
     public void setAddr(IpAddress addr) {
         this.addr = addr;
         if (this.addr.isIp4()) {
-            this.family = 4;
+            this.family = PIM.ADDRESS_FAMILY_IP4;
         } else {
-            this.family = 6;
+            this.family = PIM.ADDRESS_FAMILY_IP6;
         }
     }
 
@@ -121,17 +124,17 @@
         this.family = bb.get();
 
         // If we have IPv6 we need to ensure we have adequate buffer space.
-        if (this.family != 4 && this.family != 6) {
+        if (this.family != PIM.ADDRESS_FAMILY_IP4 && this.family != PIM.ADDRESS_FAMILY_IP6) {
             throw new DeserializationException("Invalid address family: " + this.family);
-        } else if (this.family == 6) {
+        } else if (this.family == PIM.ADDRESS_FAMILY_IP6) {
             // Subtract -1 from ENC_UNICAST_IPv6 BYTE_LENGTH because we read one byte for family previously.
             checkInput(bb.array(), bb.position(), bb.limit() - bb.position(), ENC_UNICAST_IPV6_BYTE_LENGTH - 1);
         }
 
         this.encType = bb.get();
-        if (this.family == 4) {
+        if (this.family == PIM.ADDRESS_FAMILY_IP4) {
             this.addr = IpAddress.valueOf(bb.getInt());
-        } else if (this.family == 6) {
+        } else if (this.family == PIM.ADDRESS_FAMILY_IP6) {
             this.addr = Ip6Address.valueOf(bb.array(), 2);
         }
         return this;
