diff --git a/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java b/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java
index 44653bd..069a85a 100644
--- a/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java
+++ b/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java
@@ -1533,7 +1533,6 @@
      * @param op the operation, ADD to install; REMOVE to uninstall rules
      */
     private void processIgnoreVlanRule(DeviceId deviceId, VlanId vlanId, Objective.Operation op) {
-        TrafficTreatment dropTreatment = DefaultTrafficTreatment.builder().wipeDeferred().build();
         AtomicInteger installedCount = new AtomicInteger(DHCP_SELECTORS.size());
         DHCP_SELECTORS.forEach(trafficSelector -> {
             TrafficSelector selector = DefaultTrafficSelector.builder(trafficSelector)
@@ -1544,7 +1543,7 @@
                     .withFlag(ForwardingObjective.Flag.VERSATILE)
                     .withSelector(selector)
                     .withPriority(IGNORE_CONTROL_PRIORITY)
-                    .withTreatment(dropTreatment)
+                    .withTreatment(DefaultTrafficTreatment.emptyTreatment())
                     .fromApp(appId);
 
 
diff --git a/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java b/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java
index 4023327..e7e56d0 100644
--- a/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java
+++ b/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java
@@ -1476,7 +1476,6 @@
      * @param op the operation, ADD to install; REMOVE to uninstall rules
      */
     private void processIgnoreVlanRule(DeviceId deviceId, VlanId vlanId, Objective.Operation op) {
-        TrafficTreatment dropTreatment = DefaultTrafficTreatment.builder().wipeDeferred().build();
         AtomicInteger installedCount = new AtomicInteger(DHCP_SELECTORS.size());
         DHCP_SELECTORS.forEach(trafficSelector -> {
             TrafficSelector selector = DefaultTrafficSelector.builder(trafficSelector)
@@ -1487,7 +1486,7 @@
                     .withFlag(ForwardingObjective.Flag.VERSATILE)
                     .withSelector(selector)
                     .withPriority(IGNORE_CONTROL_PRIORITY)
-                    .withTreatment(dropTreatment)
+                    .withTreatment(DefaultTrafficTreatment.emptyTreatment())
                     .fromApp(appId);
 
 
diff --git a/apps/dhcprelay/src/test/java/org/onosproject/dhcprelay/DhcpRelayManagerTest.java b/apps/dhcprelay/src/test/java/org/onosproject/dhcprelay/DhcpRelayManagerTest.java
index 91c7efe..74e1379 100644
--- a/apps/dhcprelay/src/test/java/org/onosproject/dhcprelay/DhcpRelayManagerTest.java
+++ b/apps/dhcprelay/src/test/java/org/onosproject/dhcprelay/DhcpRelayManagerTest.java
@@ -74,7 +74,6 @@
 import org.onosproject.net.flow.DefaultTrafficSelector;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.flowobjective.FlowObjectiveService;
 import org.onosproject.net.flowobjective.ForwardingObjective;
 import org.onosproject.net.flowobjective.Objective;
@@ -504,7 +503,6 @@
 
         assertTrue(objectivesFromDev1.containsAll(objectivesFromDev2));
         assertTrue(objectivesFromDev2.containsAll(objectivesFromDev1));
-        TrafficTreatment dropTreatment = DefaultTrafficTreatment.builder().wipeDeferred().build();
 
         for (int index = 0; index < objectivesFromDev1.size(); index++) {
             TrafficSelector selector =
@@ -513,7 +511,7 @@
                     .build();
             ForwardingObjective fwd = (ForwardingObjective) objectivesFromDev1.get(index);
             assertEquals(selector, fwd.selector());
-            assertEquals(dropTreatment, fwd.treatment());
+            assertEquals(DefaultTrafficTreatment.emptyTreatment(), fwd.treatment());
             assertEquals(IGNORE_CONTROL_PRIORITY, fwd.priority());
             assertEquals(ForwardingObjective.Flag.VERSATILE, fwd.flag());
             assertEquals(Objective.Operation.ADD, fwd.op());
@@ -552,7 +550,6 @@
 
         assertTrue(objectivesFromDev1.containsAll(objectivesFromDev2));
         assertTrue(objectivesFromDev2.containsAll(objectivesFromDev1));
-        TrafficTreatment dropTreatment = DefaultTrafficTreatment.builder().wipeDeferred().build();
 
         for (int index = 0; index < objectivesFromDev1.size(); index++) {
             TrafficSelector selector =
@@ -561,7 +558,7 @@
                     .build();
             ForwardingObjective fwd = (ForwardingObjective) objectivesFromDev1.get(index);
             assertEquals(selector, fwd.selector());
-            assertEquals(dropTreatment, fwd.treatment());
+            assertEquals(DefaultTrafficTreatment.emptyTreatment(), fwd.treatment());
             assertEquals(IGNORE_CONTROL_PRIORITY, fwd.priority());
             assertEquals(ForwardingObjective.Flag.VERSATILE, fwd.flag());
             assertEquals(Objective.Operation.REMOVE, fwd.op());
