diff --git a/apps/igmp/src/main/java/org/onosproject/igmp/IgmpSnoop.java b/apps/igmp/src/main/java/org/onosproject/igmp/IgmpSnoop.java
index b9aeafb..d7c10e8 100644
--- a/apps/igmp/src/main/java/org/onosproject/igmp/IgmpSnoop.java
+++ b/apps/igmp/src/main/java/org/onosproject/igmp/IgmpSnoop.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2015 Open Networking Laboratory
+ * Copyright 2015-2016 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.
@@ -97,11 +97,10 @@
 
     private static final int DEFAULT_QUERY_PERIOD_SECS = 60;
     private static final byte DEFAULT_IGMP_RESP_CODE = 100;
-    private static final String DEFAULT_MCAST_ADDR = "224.0.0.0/4";
 
     @Property(name = "multicastAddress",
             label = "Define the multicast base range to listen to")
-    private String multicastAddress = DEFAULT_MCAST_ADDR;
+    private String multicastAddress = IpPrefix.IPV4_MULTICAST_PREFIX.toString();
 
     @Property(name = "queryPeriod", intValue = DEFAULT_QUERY_PERIOD_SECS,
             label = "Delay in seconds between successive query runs")
@@ -243,6 +242,7 @@
     protected void modified(ComponentContext context) {
         Dictionary<?, ?> properties = context != null ? context.getProperties() : new Properties();
 
+        // TODO read multicastAddress from config
         String strQueryPeriod = Tools.get(properties, "queryPeriod");
         String strResponseCode = Tools.get(properties, "maxRespCode");
         try {
@@ -419,11 +419,11 @@
 
 
             if (ip.getProtocol() != IPv4.PROTOCOL_IGMP ||
-                    !IpPrefix.IPV4_MULTICAST_RANGE.contains(gaddr)) {
+                    !IpPrefix.IPV4_MULTICAST_PREFIX.contains(gaddr)) {
                 return;
             }
 
-            if (IpPrefix.IPV4_MULTICAST_RANGE.contains(saddr)) {
+            if (IpPrefix.IPV4_MULTICAST_PREFIX.contains(saddr)) {
                 log.debug("IGMP Picked up a packet with a multicast source address.");
                 return;
             }
diff --git a/apps/mfwd/src/main/java/org/onosproject/mfwd/impl/McastForwarding.java b/apps/mfwd/src/main/java/org/onosproject/mfwd/impl/McastForwarding.java
index f8856e6..9fc112f 100644
--- a/apps/mfwd/src/main/java/org/onosproject/mfwd/impl/McastForwarding.java
+++ b/apps/mfwd/src/main/java/org/onosproject/mfwd/impl/McastForwarding.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2015 Open Networking Laboratory
+ * Copyright 2015-2016 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.
@@ -67,7 +67,6 @@
 public class McastForwarding {
 
     private final Logger log = getLogger(getClass());
-    private final IpPrefix mcast = IpPrefix.valueOf("224.0.0.0/4");
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected PacketService packetService;
@@ -101,7 +100,7 @@
         // Build a traffic selector for all multicast traffic
         TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
         selector.matchEthType(Ethernet.TYPE_IPV4);
-        selector.matchIPDst(mcast);
+        selector.matchIPDst(IpPrefix.IPV4_MULTICAST_PREFIX);
 
         packetService.requestPackets(selector.build(), PacketPriority.REACTIVE, appId);
 
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
index 2dcdec7..810ff1c 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2015 Open Networking Laboratory
+ * Copyright 2015-2016 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.
@@ -25,7 +25,6 @@
 import org.onlab.osgi.ServiceDirectory;
 import org.onlab.packet.EthType;
 import org.onlab.packet.IPv4;
-import org.onlab.packet.IpPrefix;
 import org.onlab.packet.VlanId;
 import org.onlab.util.KryoNamespace;
 import org.onosproject.core.ApplicationId;
@@ -102,7 +101,8 @@
 
     private DeviceId deviceId;
     private ApplicationId appId;
-    private IpPrefix mcastPrefix = IpPrefix.valueOf("224.0.0.0/4");
+    // NOTE: OLT currently has some issue with cookie 0. Pick something larger
+    //       to avoid collision
     private AtomicLong counter = new AtomicLong(123);
 
     protected FlowObjectiveStore flowObjectiveStore;
@@ -348,7 +348,7 @@
             return false;
         }
 
-        return mcastPrefix.contains(ip.ip());
+        return ip.ip().isMulticast();
 
     }
 
diff --git a/utils/misc/src/main/java/org/onlab/packet/IpAddress.java b/utils/misc/src/main/java/org/onlab/packet/IpAddress.java
index 9545fa4..ab5cd02 100644
--- a/utils/misc/src/main/java/org/onlab/packet/IpAddress.java
+++ b/utils/misc/src/main/java/org/onlab/packet/IpAddress.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2014-2015 Open Networking Laboratory
+ * Copyright 2014-2016 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.
@@ -321,8 +321,8 @@
      */
     public boolean isMulticast() {
         return isIp4() ?
-                Ip4Prefix.IPV4_MULTICAST_RANGE.contains(this.getIp4Address()) :
-                Ip6Prefix.IPV6_MULTICAST_RANGE.contains(this.getIp6Address());
+                Ip4Prefix.IPV4_MULTICAST_PREFIX.contains(this.getIp4Address()) :
+                Ip6Prefix.IPV6_MULTICAST_PREFIX.contains(this.getIp6Address());
     }
 
     @Override
diff --git a/utils/misc/src/main/java/org/onlab/packet/IpPrefix.java b/utils/misc/src/main/java/org/onlab/packet/IpPrefix.java
index 7812045..ef3fbe0 100644
--- a/utils/misc/src/main/java/org/onlab/packet/IpPrefix.java
+++ b/utils/misc/src/main/java/org/onlab/packet/IpPrefix.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2014-2015 Open Networking Laboratory
+ * Copyright 2014-2016 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.
@@ -43,11 +43,11 @@
     /**
      * An IpPrefix that contains all IPv4 multicast addresses.
      */
-    public static final IpPrefix IPV4_MULTICAST_RANGE = IpPrefix.valueOf("224.0.0.0/4");
+    public static final IpPrefix IPV4_MULTICAST_PREFIX = IpPrefix.valueOf("224.0.0.0/4");
     /**
      * An IpPrefix that contains all IPv6 multicast addresses.
      */
-    public static final IpPrefix IPV6_MULTICAST_RANGE = IpPrefix.valueOf("ff00::/8");
+    public static final IpPrefix IPV6_MULTICAST_PREFIX = IpPrefix.valueOf("ff00::/8");
 
     private final IpAddress address;
     private final short prefixLength;
@@ -93,6 +93,17 @@
     }
 
     /**
+     * Check if this IP prefix is a multicast prefix.
+     *
+     * @return true if this prefix a multicast prefix
+     */
+    public boolean isMulticast() {
+        return isIp4() ?
+                IPV4_MULTICAST_PREFIX.contains(this.getIp4Prefix()) :
+                IPV6_MULTICAST_PREFIX.contains(this.getIp6Prefix());
+    }
+
+    /**
      * Returns the IP address value of the prefix.
      *
      * @return the IP address value of the prefix
diff --git a/utils/misc/src/test/java/org/onlab/packet/IpAddressTest.java b/utils/misc/src/test/java/org/onlab/packet/IpAddressTest.java
index 8505d10..43a9d5e 100644
--- a/utils/misc/src/test/java/org/onlab/packet/IpAddressTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/IpAddressTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2014-2015 Open Networking Laboratory
+ * Copyright 2014-2016 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.
diff --git a/utils/misc/src/test/java/org/onlab/packet/IpPrefixTest.java b/utils/misc/src/test/java/org/onlab/packet/IpPrefixTest.java
index 052a4cb..34e1e91 100644
--- a/utils/misc/src/test/java/org/onlab/packet/IpPrefixTest.java
+++ b/utils/misc/src/test/java/org/onlab/packet/IpPrefixTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2014-2015 Open Networking Laboratory
+ * Copyright 2014-2016 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.
@@ -97,6 +97,25 @@
     }
 
     /**
+     * Tests if the prefix is a multicast prefix.
+     */
+    @Test
+    public void testIsMulticast() {
+        IpPrefix v4Unicast = IpPrefix.valueOf("10.0.0.1/16");
+        IpPrefix v4Multicast = IpPrefix.valueOf("224.0.0.1/4");
+        IpPrefix v4Overlap = IpPrefix.valueOf("192.0.0.0/2");
+        IpPrefix v6Unicast = IpPrefix.valueOf("1000::1/8");
+        IpPrefix v6Multicast = IpPrefix.valueOf("ff02::1/8");
+        IpPrefix v6Overlap = IpPrefix.valueOf("ff00::1/4");
+        assertFalse(v4Unicast.isMulticast());
+        assertTrue(v4Multicast.isMulticast());
+        assertFalse(v4Overlap.isMulticast());
+        assertFalse(v6Unicast.isMulticast());
+        assertTrue(v6Multicast.isMulticast());
+        assertFalse(v6Overlap.isMulticast());
+    }
+
+    /**
      * Tests returning the IP address value and IP address prefix length of
      * an IPv4 prefix.
      */
