diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/InstancePortManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/InstancePortManager.java
index 82413d4..ba90b7e 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/InstancePortManager.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/InstancePortManager.java
@@ -51,10 +51,13 @@
 
 import java.util.Objects;
 import java.util.Set;
+import java.util.concurrent.ExecutorService;
 import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
+import static java.util.concurrent.Executors.newSingleThreadExecutor;
+import static org.onlab.util.Tools.groupedThreads;
 import static org.onosproject.openstacknetworking.api.Constants.ANNOTATION_NETWORK_ID;
 import static org.onosproject.openstacknetworking.api.Constants.ANNOTATION_PORT_ID;
 import static org.onosproject.openstacknetworking.api.InstancePort.State.ACTIVE;
@@ -110,6 +113,8 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected OpenstackRouterService routerService;
 
+    private final ExecutorService eventExecutor = newSingleThreadExecutor(
+            groupedThreads(this.getClass().getSimpleName(), "event-handler"));
     private final InstancePortStoreDelegate
                             delegate = new InternalInstancePortStoreDelegate();
     private final InternalHostListener
@@ -308,22 +313,31 @@
 
             switch (event.type()) {
                 case HOST_UPDATED:
-                    updateInstancePort(instPort);
+                    eventExecutor.execute(() -> processHostUpdate(instPort));
                     break;
                 case HOST_ADDED:
-                    processHostAddition(instPort);
+                    eventExecutor.execute(() -> processHostAddition(instPort));
                     break;
                 case HOST_REMOVED:
-                    processHostRemoval(instPort);
+                    eventExecutor.execute(() -> processHostRemoval(instPort));
                     break;
                 case HOST_MOVED:
-                    processHostMove(event, instPort);
+                    eventExecutor.execute(() -> processHostMove(event, instPort));
                     break;
                 default:
                     break;
             }
         }
 
+        private void processHostUpdate(InstancePort instPort) {
+            InstancePort existingPort = instancePort(instPort.portId());
+            if (existingPort == null) {
+                createInstancePort(instPort);
+            } else {
+                updateInstancePort(instPort);
+            }
+        }
+
         private void processHostAddition(InstancePort instPort) {
             InstancePort existingPort = instancePort(instPort.portId());
             if (existingPort == null) {
