diff --git a/api/pom.xml b/api/pom.xml
index fccf301..3ee690d 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -22,7 +22,7 @@
     <parent>
         <artifactId>olt</artifactId>
         <groupId>org.opencord</groupId>
-        <version>1.5.0-SNAPSHOT</version>
+        <version>2.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/app/pom.xml b/app/pom.xml
index e685ea4..4db6b3e 100644
--- a/app/pom.xml
+++ b/app/pom.xml
@@ -20,7 +20,7 @@
     <parent>
         <groupId>org.opencord</groupId>
         <artifactId>olt</artifactId>
-        <version>1.5.0-SNAPSHOT</version>
+        <version>2.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
diff --git a/app/src/main/java/org/opencord/olt/impl/Olt.java b/app/src/main/java/org/opencord/olt/impl/Olt.java
index 9fe561b..33206e9 100644
--- a/app/src/main/java/org/opencord/olt/impl/Olt.java
+++ b/app/src/main/java/org/opencord/olt/impl/Olt.java
@@ -127,9 +127,13 @@
             label = "Default VLAN RG<->ONU traffic")
     private int defaultVlan = DEFAULT_VLAN;
 
-    @Property(name = "enableDhcpIgmpOnProvisioning", boolValue = false,
-            label = "Create the DHCP and IGMP Flow rules when a subscriber is provisioned")
-    protected boolean enableDhcpIgmpOnProvisioning = false;
+    @Property(name = "enableDhcpOnProvisioning", boolValue = true,
+            label = "Create the DHCP Flow rules when a subscriber is provisioned")
+    protected boolean enableDhcpOnProvisioning = false;
+
+    @Property(name = "enableIgmpOnProvisioning", boolValue = false,
+            label = "Create IGMP Flow rules when a subscriber is provisioned")
+    protected boolean enableIgmpOnProvisioning = false;
 
     private final DeviceListener deviceListener = new InternalDeviceListener();
 
@@ -212,10 +216,16 @@
             String s = get(properties, "defaultVlan");
             defaultVlan = isNullOrEmpty(s) ? DEFAULT_VLAN : Integer.parseInt(s.trim());
 
-            Boolean o = Tools.isPropertyEnabled(properties, "enableDhcpIgmpOnProvisioning");
+            Boolean o = Tools.isPropertyEnabled(properties, "enableDhcpOnProvisioning");
             if (o != null) {
-                enableDhcpIgmpOnProvisioning = o;
+                enableDhcpOnProvisioning = o;
             }
+
+            Boolean p = Tools.isPropertyEnabled(properties, "enableIgmpOnProvisioning");
+            if (p != null) {
+                enableIgmpOnProvisioning = p;
+            }
+
         } catch (Exception e) {
             defaultVlan = DEFAULT_VLAN;
         }
@@ -232,14 +242,14 @@
             throw new IllegalArgumentException("Missing OLT configuration for device");
         }
 
-        if (enableDhcpIgmpOnProvisioning) {
+        if (enableDhcpOnProvisioning) {
             processDhcpFilteringObjectives(olt.deviceId(), port.port(), true);
         }
 
         provisionVlans(olt.deviceId(), olt.uplink(), port.port(), vlan, olt.vlan(),
                 olt.defaultVlan());
 
-        if (enableDhcpIgmpOnProvisioning) {
+        if (enableIgmpOnProvisioning) {
             processIgmpFilteringObjectives(olt.deviceId(), port.port(), true);
         }
     }
@@ -260,14 +270,14 @@
             return;
         }
 
-        if (enableDhcpIgmpOnProvisioning) {
+        if (enableDhcpOnProvisioning) {
             processDhcpFilteringObjectives(olt.deviceId(), port.port(), false);
         }
 
         unprovisionSubscriber(olt.deviceId(), olt.uplink(), port.port(), subscriberVlan,
                               olt.vlan(), olt.defaultVlan());
 
-        if (enableDhcpIgmpOnProvisioning) {
+        if (enableIgmpOnProvisioning) {
             processIgmpFilteringObjectives(olt.deviceId(), port.port(), false);
         }
     }
@@ -481,7 +491,7 @@
                 .withMeta(DefaultTrafficTreatment.builder()
                                   .setOutput(PortNumber.CONTROLLER).build())
                 .fromApp(appId)
-                .withPriority(1000)
+                .withPriority(10000)
                 .add(new ObjectiveContext() {
                     @Override
                     public void onSuccess(Objective objective) {
@@ -515,7 +525,7 @@
                 .withMeta(DefaultTrafficTreatment.builder()
                                   .setOutput(PortNumber.CONTROLLER).build())
                 .fromApp(appId)
-                .withPriority(1000)
+                .withPriority(10000)
                 .add(new ObjectiveContext() {
                     @Override
                     public void onSuccess(Objective objective) {
diff --git a/kafka/pom.xml b/kafka/pom.xml
index a6dfb77..2fc1aef 100644
--- a/kafka/pom.xml
+++ b/kafka/pom.xml
@@ -20,7 +20,7 @@
     <parent>
         <groupId>org.opencord</groupId>
         <artifactId>olt</artifactId>
-        <version>1.5.0-SNAPSHOT</version>
+        <version>2.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
diff --git a/pom.xml b/pom.xml
index 6f93924..75e1f53 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
 
     <groupId>org.opencord</groupId>
     <artifactId>olt</artifactId>
-    <version>1.5.0-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <properties>
