diff --git a/src/main/java/org/onosproject/cordvtn/CordVtn.java b/src/main/java/org/onosproject/cordvtn/CordVtn.java
index 1dc094b..4c0bf72 100644
--- a/src/main/java/org/onosproject/cordvtn/CordVtn.java
+++ b/src/main/java/org/onosproject/cordvtn/CordVtn.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.cordvtn;
 
+import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -23,11 +24,13 @@
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
 import org.onlab.packet.Ethernet;
+import org.onlab.packet.Ip4Address;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.VlanId;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
+import org.onosproject.dhcp.DhcpService;
 import org.onosproject.mastership.MastershipService;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DefaultAnnotations;
@@ -65,6 +68,7 @@
 import org.onosproject.openstackswitching.OpenstackSwitchingService;
 import org.slf4j.Logger;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
@@ -121,6 +125,9 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected OpenstackSwitchingService openstackService;
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected DhcpService dhcpService;
+
     private final ConfigFactory configFactory =
             new ConfigFactory(SubjectFactories.APP_SUBJECT_FACTORY, CordVtnConfig.class, "cordvtn") {
                 @Override
@@ -130,6 +137,7 @@
             };
 
     private static final String DEFAULT_TUNNEL = "vxlan";
+    private static final Ip4Address DEFAULT_DNS = Ip4Address.valueOf("8.8.8.8");
     private static final String SERVICE_ID = "serviceId";
     private static final String LOCATION_IP = "locationIp";
     private static final String OPENSTACK_VM_ID = "openstackVmId";
@@ -244,9 +252,13 @@
         if (host != null) {
             // Host is already known to the system, no HOST_ADDED event is triggered in this case.
             // It happens when the application is restarted.
-            // TODO check host description if it has all the information
-            serviceVmAdded(host);
-            return;
+            String vmId = host.annotations().value(OPENSTACK_VM_ID);
+            if (vmId != null && vmId.equals(vPort.deviceId())) {
+                serviceVmAdded(host);
+                return;
+            } else {
+                hostProvider.hostVanished(host.id());
+            }
         }
 
         Set<IpAddress> ip = Sets.newHashSet(vPort.fixedIps().values());
@@ -382,6 +394,26 @@
     }
 
     /**
+     * Registers static DHCP lease for a given host.
+     *
+     * @param host host
+     * @param service cord service
+     */
+    private void registerDhcpLease(Host host, CordService service) {
+        List<Ip4Address> options = Lists.newArrayList();
+        options.add(Ip4Address.makeMaskPrefix(service.serviceIpRange().prefixLength()));
+        options.add(service.serviceIp().getIp4Address());
+        options.add(service.serviceIp().getIp4Address());
+        options.add(DEFAULT_DNS);
+
+        log.debug("Set static DHCP mapping for {}", host.mac());
+        dhcpService.setStaticMapping(host.mac(),
+                                     host.ipAddresses().stream().findFirst().get().getIp4Address(),
+                                     true,
+                                     options);
+    }
+
+    /**
      * Handles VM detected situation.
      *
      * @param host host
@@ -420,6 +452,7 @@
         }
 
         ruleInstaller.populateBasicConnectionRules(host, getTunnelIp(host), vNet);
+        registerDhcpLease(host, service);
     }
 
     /**
@@ -428,6 +461,11 @@
      * @param host host
      */
     private void serviceVmRemoved(Host host) {
+        if (host.annotations().value(OPENSTACK_VM_ID) == null) {
+            // this host was not injected from CordVtn, just return
+            return;
+        }
+
         String vNetId = host.annotations().value(SERVICE_ID);
         OpenstackNetwork vNet = openstackService.network(host.annotations().value(SERVICE_ID));
         if (vNet == null) {
