diff --git a/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java b/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java
index 1fe10a5..cb52c94 100644
--- a/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java
+++ b/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java
@@ -181,19 +181,12 @@
     @Override
     public void requestPackets(TrafficSelector selector, PacketPriority priority,
                                ApplicationId appId) {
-        this.requestPackets(selector, priority, appId, false);
-    }
-
-    @Override
-    public void requestPackets(TrafficSelector selector, PacketPriority priority,
-                               ApplicationId appId, boolean copy) {
         checkPermission(PACKET_READ);
         checkNotNull(selector, ERROR_NULL_SELECTOR);
         checkNotNull(appId, ERROR_NULL_APP_ID);
 
         PacketRequest request = new DefaultPacketRequest(selector, priority, appId,
-                localNodeId, Optional.empty(), copy);
-
+                                                         localNodeId, Optional.empty());
         store.requestPackets(request);
     }
 
@@ -210,23 +203,19 @@
                                          localNodeId, deviceId);
 
         store.requestPackets(request);
+
     }
 
     @Override
     public void cancelPackets(TrafficSelector selector, PacketPriority priority,
                               ApplicationId appId) {
-        this.cancelPackets(selector, priority, appId, false);
-    }
-
-    @Override
-    public void cancelPackets(TrafficSelector selector, PacketPriority priority,
-                              ApplicationId appId, boolean copy) {
         checkPermission(PACKET_READ);
         checkNotNull(selector, ERROR_NULL_SELECTOR);
         checkNotNull(appId, ERROR_NULL_APP_ID);
 
+
         PacketRequest request = new DefaultPacketRequest(selector, priority, appId,
-                localNodeId, Optional.empty(), copy);
+                                                         localNodeId, Optional.empty());
         store.cancelPackets(request);
     }
 
@@ -333,18 +322,17 @@
     }
 
     private DefaultForwardingObjective.Builder createBuilder(PacketRequest request) {
-        TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();
-        tBuilder.punt();
-        if (!request.copy()) {
-            tBuilder.wipeDeferred();
-        }
+        TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+                .punt()
+                .wipeDeferred()
+                .build();
 
         return DefaultForwardingObjective.builder()
                 .withPriority(request.priority().priorityValue())
                 .withSelector(request.selector())
                 .fromApp(appId)
                 .withFlag(ForwardingObjective.Flag.VERSATILE)
-                .withTreatment(tBuilder.build())
+                .withTreatment(treatment)
                 .makePermanent();
     }
 
