diff --git a/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java b/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java
index 24cb087..99cc731 100644
--- a/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java
+++ b/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java
@@ -86,7 +86,7 @@
     private static final ProviderId PID = new ProviderId("of", "org.onosproject.dhcp", true);
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private final NetworkConfigListener cfgListener = new InternalConfigListener();
+    private final InternalConfigListener cfgListener = new InternalConfigListener();
 
     private final Set<ConfigFactory> factories = ImmutableSet.of(
             new ConfigFactory<ApplicationId, DhcpConfig>(APP_SUBJECT_FACTORY,
@@ -163,8 +163,11 @@
 
         cfgService.addListener(cfgListener);
         factories.forEach(cfgService::registerConfigFactory);
+        cfgListener.reconfigureNetwork(cfgService.getConfig(appId, DhcpConfig.class));
+        cfgListener.reconfigureStore(cfgService.getConfig(appId, DhcpStoreConfig.class));
+
         hostProviderService = hostProviderRegistry.register(hostProvider);
-        packetService.addProcessor(processor, PacketProcessor.observer(1));
+        packetService.addProcessor(processor, PacketProcessor.director(1));
         requestPackets();
         log.info("Started");
     }
@@ -394,7 +397,7 @@
                 TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder();
                 ConnectPoint sourcePoint = context.inPacket().receivedFrom();
                 builder.setOutput(sourcePoint.port());
-
+                context.block();
                 packetService.emit(new DefaultOutboundPacket(sourcePoint.deviceId(),
                         builder.build(), ByteBuffer.wrap(reply.serialize())));
             }
@@ -407,7 +410,6 @@
          * @param dhcpPayload the extracted DHCP payload
          */
         private void processDHCPPacket(PacketContext context, DHCP dhcpPayload) {
-
             Ethernet packet = context.inPacket().parsed();
             boolean flagIfRequestedIP = false;
             boolean flagIfServerIP = false;
@@ -483,7 +485,6 @@
                         }
                     }
                 } else if (incomingPacketType == DHCPPacketType.DHCPRELEASE.getValue()) {
-
                     dhcpStore.releaseIP(clientMAC);
                 }
             }
@@ -540,7 +541,6 @@
 
         @Override
         public void process(PacketContext context) {
-
             Ethernet packet = context.inPacket().parsed();
             if (packet == null) {
                 return;
@@ -581,7 +581,9 @@
          * @param cfg configuration object
          */
         private void reconfigureNetwork(DhcpConfig cfg) {
-
+            if (cfg == null) {
+                return;
+            }
             if (cfg.ip() != null) {
                 myIP = cfg.ip();
             }
@@ -620,6 +622,9 @@
          * @param cfg configuration object
          */
         private void reconfigureStore(DhcpStoreConfig cfg) {
+            if (cfg == null) {
+                return;
+            }
 
             if (cfg.defaultTimeout() != null) {
                 dhcpStore.setDefaultTimeoutForPurge(Integer.valueOf(cfg.defaultTimeout()));
diff --git a/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpStoreConfig.java b/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpStoreConfig.java
index 0059e7e..db4672d 100644
--- a/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpStoreConfig.java
+++ b/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DhcpStoreConfig.java
@@ -24,6 +24,8 @@
  */
 public class DhcpStoreConfig extends Config<ApplicationId> {
 
+    // FIXME: combine with the other config and properly type the values
+
     public static final String TIMER_DELAY = "delay";
     public static final String DEFAULT_TIMEOUT = "timeout";
     public static final String START_IP = "startip";
diff --git a/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java b/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java
index 6e29216..d415d0d 100644
--- a/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java
+++ b/apps/dhcp/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java
@@ -175,7 +175,7 @@
         if (allocationMap.containsKey(macID)) {
             assignmentInfo = allocationMap.get(macID).value();
             if ((assignmentInfo.ipAddress().toInt() == ipAddr.toInt()) &&
-                    (ipAddr.toInt() > startIPRange.toInt()) && (ipAddr.toInt() < endIPRange.toInt())) {
+                    (ipAddr.toInt() >= startIPRange.toInt()) && (ipAddr.toInt() <= endIPRange.toInt())) {
 
                 assignmentInfo = IpAssignment.builder()
                         .ipAddress(ipAddr)
