diff --git a/core/api/src/main/java/org/onosproject/net/packet/DefaultPacketRequest.java b/core/api/src/main/java/org/onosproject/net/packet/DefaultPacketRequest.java
index 605ab4b..3bddee4 100644
--- a/core/api/src/main/java/org/onosproject/net/packet/DefaultPacketRequest.java
+++ b/core/api/src/main/java/org/onosproject/net/packet/DefaultPacketRequest.java
@@ -19,9 +19,11 @@
 
 import org.onosproject.cluster.NodeId;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.net.DeviceId;
 import org.onosproject.net.flow.TrafficSelector;
 
 import java.util.Objects;
+import java.util.Optional;
 
 /**
  * Default implementation of a packet request.
@@ -31,22 +33,24 @@
     private final PacketPriority priority;
     private final ApplicationId appId;
     private final NodeId nodeId;
+    private final Optional<DeviceId> deviceId;
+
 
     /**
      * Creates a new packet request.
-     *
-     * @param selector  traffic selector
+     *  @param selector  traffic selector
      * @param priority  intercept priority
      * @param appId     application id
      * @param nodeId    identifier of node where request originated
+     * @param deviceId  device id
      */
     public DefaultPacketRequest(TrafficSelector selector, PacketPriority priority,
-                                ApplicationId appId,
-                                NodeId nodeId) {
+                                ApplicationId appId, NodeId nodeId, Optional<DeviceId> deviceId) {
         this.selector = selector;
         this.priority = priority;
         this.appId = appId;
         this.nodeId = nodeId;
+        this.deviceId = deviceId;
     }
 
     @Override
@@ -64,6 +68,10 @@
         return appId;
     }
 
+    public Optional<DeviceId> deviceId() {
+        return deviceId;
+    }
+
     @Override
     public NodeId nodeId() {
         return nodeId;
@@ -71,7 +79,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(selector, priority, appId, nodeId);
+        return Objects.hash(selector, priority, appId, nodeId, deviceId);
     }
 
     @Override
@@ -86,7 +94,8 @@
         return Objects.equals(this.selector, other.selector)
                 && Objects.equals(this.priority, other.priority)
                 && Objects.equals(this.appId, other.appId)
-                && Objects.equals(this.nodeId, other.nodeId);
+                && Objects.equals(this.nodeId, other.nodeId)
+                && Objects.equals(this.deviceId, other.deviceId);
     }
 
     @Override
@@ -95,6 +104,8 @@
                 .add("selector", selector)
                 .add("priority", priority)
                 .add("appId", appId)
-                .add("nodeId", nodeId).toString();
+                .add("nodeId", nodeId)
+                .add("applies to", deviceId.isPresent() ? deviceId.get() : "all")
+                .toString();
     }
 }
\ No newline at end of file
diff --git a/core/api/src/main/java/org/onosproject/net/packet/PacketRequest.java b/core/api/src/main/java/org/onosproject/net/packet/PacketRequest.java
index 32f7cd5..78fe501 100644
--- a/core/api/src/main/java/org/onosproject/net/packet/PacketRequest.java
+++ b/core/api/src/main/java/org/onosproject/net/packet/PacketRequest.java
@@ -17,8 +17,11 @@
 
 import org.onosproject.cluster.NodeId;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.net.DeviceId;
 import org.onosproject.net.flow.TrafficSelector;
 
+import java.util.Optional;
+
 /**
  * Represents a packet request made to devices.
  */
@@ -51,4 +54,12 @@
      * @return an node id
      */
     NodeId nodeId();
+
+    /**
+     * Obtains the optional device id.
+     *
+     * @return an optional containing a device id
+     */
+    Optional<DeviceId> deviceId();
+
 }
diff --git a/core/api/src/main/java/org/onosproject/net/packet/PacketService.java b/core/api/src/main/java/org/onosproject/net/packet/PacketService.java
index 2e7a1b9..d26956e 100644
--- a/core/api/src/main/java/org/onosproject/net/packet/PacketService.java
+++ b/core/api/src/main/java/org/onosproject/net/packet/PacketService.java
@@ -17,9 +17,11 @@
 
 import com.google.common.annotations.Beta;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.net.DeviceId;
 import org.onosproject.net.flow.TrafficSelector;
 
 import java.util.List;
+import java.util.Optional;
 
 /**
  * Service for intercepting data plane packets and for emitting synthetic
@@ -66,9 +68,25 @@
      * @param priority the priority of the rule
      * @param appId    the application ID of the requester
      */
+    @Deprecated
     void requestPackets(TrafficSelector selector, PacketPriority priority,
                         ApplicationId appId);
 
+
+    /**
+     * Requests that packets matching the given selector are punted from the
+     * dataplane to the controller. If a deviceId is specified then the
+     * packet request is only installed at the device represented by that
+     * deviceId.
+     *
+     * @param selector the traffic selector used to match packets
+     * @param priority the priority of the rule
+     * @param appId    the application ID of the requester
+     * @param deviceId an optional deviceId
+     */
+    void requestPackets(TrafficSelector selector, PacketPriority priority,
+                        ApplicationId appId, Optional<DeviceId> deviceId);
+
     /**
      * Cancels previous packet requests for packets matching the given
      * selector to be punted from the dataplane to the controller.
@@ -77,10 +95,26 @@
      * @param priority the priority of the rule
      * @param appId    the application ID of the requester
      */
+    @Deprecated
     void cancelPackets(TrafficSelector selector, PacketPriority priority,
                        ApplicationId appId);
 
     /**
+     * Cancels previous packet requests for packets matching the given
+     * selector to be punted from the dataplane to the controller. If a
+     * deviceId is specified then the packet request is only withdrawn from
+     * the device represented by that deviceId.
+     *
+     * @param selector the traffic selector used to match packets
+     * @param priority the priority of the rule
+     * @param appId    the application ID of the requester
+     * @param deviceId an optional deviceId
+     */
+    void cancelPackets(TrafficSelector selector, PacketPriority priority,
+                       ApplicationId appId, Optional<DeviceId> deviceId);
+
+
+    /**
      * Returns list of all existing requests ordered by priority.
      *
      * @return list of existing packet requests
diff --git a/core/api/src/test/java/org/onosproject/net/packet/DefaultPacketRequestTest.java b/core/api/src/test/java/org/onosproject/net/packet/DefaultPacketRequestTest.java
index a7d07e8..9b4df54 100644
--- a/core/api/src/test/java/org/onosproject/net/packet/DefaultPacketRequestTest.java
+++ b/core/api/src/test/java/org/onosproject/net/packet/DefaultPacketRequestTest.java
@@ -24,6 +24,8 @@
 
 import com.google.common.testing.EqualsTester;
 
+import java.util.Optional;
+
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
@@ -42,27 +44,27 @@
             new DefaultPacketRequest(DefaultTrafficSelector.emptySelector(),
                                      PacketPriority.CONTROL,
                                      NetTestTools.APP_ID,
-                                     NetTestTools.NODE_ID);
+                                     NetTestTools.NODE_ID, Optional.empty());
     private final DefaultPacketRequest sameAsacketRequest1 =
             new DefaultPacketRequest(DefaultTrafficSelector.emptySelector(),
                                      PacketPriority.CONTROL,
                                      NetTestTools.APP_ID,
-                                     NetTestTools.NODE_ID);
+                                     NetTestTools.NODE_ID, Optional.empty());
     private final DefaultPacketRequest packetRequest2 =
             new DefaultPacketRequest(selector,
                                      PacketPriority.CONTROL,
                                      NetTestTools.APP_ID,
-                                     NetTestTools.NODE_ID);
+                                     NetTestTools.NODE_ID, Optional.empty());
     private final DefaultPacketRequest packetRequest3 =
             new DefaultPacketRequest(DefaultTrafficSelector.emptySelector(),
                                      PacketPriority.REACTIVE,
                                      NetTestTools.APP_ID,
-                                     NetTestTools.NODE_ID);
+                                     NetTestTools.NODE_ID, Optional.empty());
     private final DefaultPacketRequest packetRequest4 =
             new DefaultPacketRequest(DefaultTrafficSelector.emptySelector(),
                                      PacketPriority.CONTROL,
                                      new DefaultApplicationId(1, "foo"),
-                                     new NodeId("node1"));
+                                     new NodeId("node1"), Optional.empty());
 
     /**
      * Tests the operation of the equals(), toAstring() and hashCode() methods.
diff --git a/core/api/src/test/java/org/onosproject/net/packet/PacketServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/packet/PacketServiceAdapter.java
index 2993ce6..c01dcc0 100644
--- a/core/api/src/test/java/org/onosproject/net/packet/PacketServiceAdapter.java
+++ b/core/api/src/test/java/org/onosproject/net/packet/PacketServiceAdapter.java
@@ -16,9 +16,11 @@
 package org.onosproject.net.packet;
 
 import org.onosproject.core.ApplicationId;
+import org.onosproject.net.DeviceId;
 import org.onosproject.net.flow.TrafficSelector;
 
 import java.util.List;
+import java.util.Optional;
 
 /**
  * Test adapter for packet service.
@@ -43,11 +45,25 @@
     }
 
     @Override
-    public void requestPackets(TrafficSelector selector, PacketPriority priority, ApplicationId appId) {
+    public void requestPackets(TrafficSelector selector, PacketPriority priority,
+                               ApplicationId appId) {
     }
 
     @Override
-    public void cancelPackets(TrafficSelector selector, PacketPriority priority, ApplicationId appId) {
+    public void requestPackets(TrafficSelector selector, PacketPriority priority,
+                               ApplicationId appId, Optional<DeviceId> deviceId) {
+
+    }
+
+    @Override
+    public void cancelPackets(TrafficSelector selector, PacketPriority priority,
+                              ApplicationId appId) {
+    }
+
+    @Override
+    public void cancelPackets(TrafficSelector selector, PacketPriority priority,
+                              ApplicationId appId, Optional<DeviceId> deviceId) {
+
     }
 
     @Override
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 79ac4b0..c0a2286 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
@@ -29,6 +29,7 @@
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.net.Device;
+import org.onosproject.net.DeviceId;
 import org.onosproject.net.device.DeviceEvent;
 import org.onosproject.net.device.DeviceListener;
 import org.onosproject.net.device.DeviceService;
@@ -60,6 +61,7 @@
 import org.slf4j.Logger;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -175,18 +177,49 @@
         checkNotNull(selector, "Selector cannot be null");
         checkNotNull(appId, "Application ID cannot be null");
 
-        PacketRequest request = new DefaultPacketRequest(selector, priority, appId, localNodeId);
+        PacketRequest request = new DefaultPacketRequest(selector, priority, appId,
+                                                         localNodeId, Optional.empty());
         store.requestPackets(request);
     }
 
     @Override
+    public void requestPackets(TrafficSelector selector, PacketPriority priority,
+                               ApplicationId appId, Optional<DeviceId> deviceId) {
+        checkPermission(PACKET_READ);
+        checkNotNull(selector, "Selector cannot be null");
+        checkNotNull(appId, "Application ID cannot be null");
+
+        PacketRequest request =
+                new DefaultPacketRequest(selector, priority, appId,
+                                         localNodeId, deviceId);
+
+        store.requestPackets(request);
+
+    }
+
+    @Override
     public void cancelPackets(TrafficSelector selector, PacketPriority priority,
                               ApplicationId appId) {
         checkPermission(PACKET_READ);
         checkNotNull(selector, "Selector cannot be null");
         checkNotNull(appId, "Application ID cannot be null");
 
-        PacketRequest request = new DefaultPacketRequest(selector, priority, appId, localNodeId);
+
+        PacketRequest request = new DefaultPacketRequest(selector, priority, appId,
+                                                         localNodeId, Optional.empty());
+        store.cancelPackets(request);
+    }
+
+    @Override
+    public void cancelPackets(TrafficSelector selector, PacketPriority priority,
+                              ApplicationId appId, Optional<DeviceId> deviceId) {
+        checkPermission(PACKET_READ);
+        checkNotNull(selector, "Selector cannot be null");
+        checkNotNull(appId, "Application ID cannot be null");
+
+        PacketRequest request = new DefaultPacketRequest(selector, priority,
+                                                         appId, localNodeId,
+                                                         deviceId);
         store.cancelPackets(request);
     }
 
@@ -203,7 +236,12 @@
     private void pushRulesToDevice(Device device) {
         log.debug("Pushing packet requests to device {}", device.id());
         for (PacketRequest request : store.existingRequests()) {
-            pushRule(device, request);
+            if (!request.deviceId().isPresent()) {
+                pushRule(device, request);
+            } else if (request.deviceId().get().equals(device.id())) {
+                pushRule(device, request);
+            }
+
         }
     }
 
@@ -332,6 +370,7 @@
 
     }
 
+
     /**
      * Internal callback from the packet store.
      */
@@ -343,12 +382,24 @@
 
         @Override
         public void requestPackets(PacketRequest request) {
-            pushToAllDevices(request);
+            DeviceId deviceid = request.deviceId().orElse(null);
+
+            if (deviceid != null) {
+                pushRule(deviceService.getDevice(deviceid), request);
+            } else {
+                pushToAllDevices(request);
+            }
         }
 
         @Override
         public void cancelPackets(PacketRequest request) {
-            removeFromAllDevices(request);
+            DeviceId deviceid = request.deviceId().orElse(null);
+
+            if (deviceid != null) {
+                removeRule(deviceService.getDevice(deviceid), request);
+            } else {
+                removeFromAllDevices(request);
+            }
         }
     }
 
