diff --git a/onos-app-dhcpserver/src/main/java/org/onosproject/dhcpserver/impl/DHCPManager.java b/onos-app-dhcpserver/src/main/java/org/onosproject/dhcpserver/impl/DHCPManager.java
index 520af42..2e9818c 100644
--- a/onos-app-dhcpserver/src/main/java/org/onosproject/dhcpserver/impl/DHCPManager.java
+++ b/onos-app-dhcpserver/src/main/java/org/onosproject/dhcpserver/impl/DHCPManager.java
@@ -22,6 +22,7 @@
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
+import org.onlab.packet.ARP;
 import org.onlab.packet.DHCP;
 import org.onlab.packet.DHCPOption;
 import org.onlab.packet.Ethernet;
@@ -132,10 +133,6 @@
 
     private static String domainServer = "10.0.0.2";
 
-    private static Ip4Address startIPRange = Ip4Address.valueOf("10.1.0.140");
-
-    private static Ip4Address endIPRange = Ip4Address.valueOf("10.1.0.160");
-
     @Activate
     protected void activate() {
         // start the dhcp server
@@ -143,9 +140,8 @@
 
         cfgService.addListener(cfgListener);
         factories.forEach(cfgService::registerConfigFactory);
-        packetService.addProcessor(processor, PacketProcessor.ADVISOR_MAX + 10);
+        packetService.addProcessor(processor, PacketProcessor.observer(1));
         requestPackets();
-        dhcpStore.populateIPPoolfromRange(startIPRange, endIPRange);
         log.info("Started");
     }
 
@@ -154,14 +150,7 @@
         cfgService.removeListener(cfgListener);
         factories.forEach(cfgService::unregisterConfigFactory);
         packetService.removeProcessor(processor);
-
-        TrafficSelector.Builder selectorServer = DefaultTrafficSelector.builder()
-                .matchEthType(Ethernet.TYPE_IPV4)
-                .matchIPProtocol(IPv4.PROTOCOL_UDP)
-                .matchUdpDst(UDP.DHCP_SERVER_PORT)
-                .matchUdpSrc(UDP.DHCP_CLIENT_PORT);
-
-        packetService.cancelPackets(selectorServer.build(), PacketPriority.CONTROL, appId);
+        cancelPackets();
         log.info("Stopped");
     }
 
@@ -175,9 +164,27 @@
                 .matchIPProtocol(IPv4.PROTOCOL_UDP)
                 .matchUdpDst(UDP.DHCP_SERVER_PORT)
                 .matchUdpSrc(UDP.DHCP_CLIENT_PORT);
+        packetService.requestPackets(selectorServer.build(), PacketPriority.CONTROL, appId);
 
-        packetService.requestPackets(selectorServer.build(),
-                PacketPriority.CONTROL, appId);
+        selectorServer = DefaultTrafficSelector.builder()
+                .matchEthType(Ethernet.TYPE_ARP);
+        packetService.requestPackets(selectorServer.build(), PacketPriority.CONTROL, appId);
+    }
+
+    /**
+     * Cancel requested packets in via packet service.
+     */
+    private void cancelPackets() {
+        TrafficSelector.Builder selectorServer = DefaultTrafficSelector.builder()
+                .matchEthType(Ethernet.TYPE_IPV4)
+                .matchIPProtocol(IPv4.PROTOCOL_UDP)
+                .matchUdpDst(UDP.DHCP_SERVER_PORT)
+                .matchUdpSrc(UDP.DHCP_CLIENT_PORT);
+        packetService.cancelPackets(selectorServer.build(), PacketPriority.CONTROL, appId);
+
+        selectorServer = DefaultTrafficSelector.builder()
+                .matchEthType(Ethernet.TYPE_ARP);
+        packetService.cancelPackets(selectorServer.build(), PacketPriority.CONTROL, appId);
     }
 
     @Override
@@ -454,15 +461,39 @@
             }
         }
 
+        /**
+         * Processes the ARP Payload and initiates a reply to the client.
+         *
+         * @param context context of the incoming message
+         * @param packet the ethernet payload
+         */
+        private void processARPPacket(PacketContext context, Ethernet packet) {
+
+            ARP arpPacket = (ARP) packet.getPayload();
+
+            ARP arpReply = (ARP) arpPacket.clone();
+            arpReply.setOpCode(ARP.OP_REPLY);
+
+            arpReply.setTargetProtocolAddress(arpPacket.getSenderProtocolAddress());
+            arpReply.setTargetHardwareAddress(arpPacket.getSenderHardwareAddress());
+            arpReply.setSenderProtocolAddress(arpPacket.getTargetProtocolAddress());
+            arpReply.setSenderHardwareAddress(myMAC.toBytes());
+
+            // Ethernet Frame.
+            Ethernet ethReply = new Ethernet();
+            ethReply.setSourceMACAddress(myMAC);
+            ethReply.setDestinationMACAddress(packet.getSourceMAC());
+            ethReply.setEtherType(Ethernet.TYPE_ARP);
+            ethReply.setVlanID(packet.getVlanID());
+
+            ethReply.setPayload(arpReply);
+            sendReply(context, ethReply);
+        }
+
+
         @Override
         public void process(PacketContext context) {
 
-            // Stop processing if the packet has been handled, since we
-            // can't do any more to it.
-            if (context.isHandled()) {
-                return;
-            }
-
             Ethernet packet = context.inPacket().parsed();
             if (packet == null) {
                 return;
@@ -482,6 +513,15 @@
                         processDHCPPacket(context, dhcpPayload);
                     }
                 }
+            } else if (packet.getEtherType() == Ethernet.TYPE_ARP) {
+                ARP arpPacket = (ARP) packet.getPayload();
+
+                if ((arpPacket.getOpCode() == ARP.OP_REQUEST) &&
+                        (Ip4Address.valueOf(arpPacket.getTargetProtocolAddress()).toString().equals(myIP))) {
+
+                    processARPPacket(context, packet);
+
+                }
             }
         }
     }
@@ -541,9 +581,8 @@
                 dhcpStore.setTimerDelay(Integer.valueOf(cfg.defaultTimeout()));
             }
             if ((cfg.startIP() != null) && (cfg.endIP() != null)) {
-                startIPRange = Ip4Address.valueOf(cfg.startIP());
-                endIPRange = Ip4Address.valueOf(cfg.endIP());
-                dhcpStore.populateIPPoolfromRange(startIPRange, endIPRange);
+                dhcpStore.populateIPPoolfromRange(Ip4Address.valueOf(cfg.startIP()),
+                                                    Ip4Address.valueOf(cfg.endIP()));
             }
         }
 
diff --git a/onos-app-dhcpserver/src/test/resources/dhcp-cfg.json b/onos-app-dhcpserver/src/test/resources/dhcp-cfg.json
index 21920d3..1818ca7 100644
--- a/onos-app-dhcpserver/src/test/resources/dhcp-cfg.json
+++ b/onos-app-dhcpserver/src/test/resources/dhcp-cfg.json
@@ -3,7 +3,7 @@
     "org.onosproject.dhcpserver" : {
       "dhcp" : {
         "ip": "10.0.0.1",
-        "mac": "1f:2f:3f:4f:5f:6f",
+        "mac": "1a:2b:3c:4e:5e:6f",
         "subnet": "255.0.0.0",
         "broadcast": "10.255.255.255",
         "router": "10.0.0.1",
