diff --git a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
index c75de3c..acef076 100644
--- a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
+++ b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
@@ -308,6 +308,7 @@
     final InternalClusterListener clusterListener = new InternalClusterListener();
     //Completable future for network configuration process to buffer config events handling during activation
     private CompletableFuture<Boolean> networkConfigCompletion = null;
+    private final Object networkConfigCompletionLock = new Object();
     private List<Event> queuedEvents = new CopyOnWriteArrayList<>();
 
     // Handles device, link, topology and network config events
@@ -531,14 +532,16 @@
         linkHandler.init();
         l2TunnelHandler.init();
 
-        networkConfigCompletion.whenComplete((value, ex) -> {
-            //setting to null for easier fall through
-            networkConfigCompletion = null;
-            //process all queued events
-            queuedEvents.forEach(event -> {
-                mainEventExecutor.execute(new InternalEventHandler(event));
+        synchronized (networkConfigCompletionLock) {
+            networkConfigCompletion.whenComplete((value, ex) -> {
+                //setting to null for easier fall through
+                networkConfigCompletion = null;
+                //process all queued events
+                queuedEvents.forEach(event -> {
+                    mainEventExecutor.execute(new InternalEventHandler(event));
+                });
             });
-        });
+        }
 
         log.info("Started");
     }
@@ -1717,30 +1720,32 @@
             // The completable future is needed because of the async behaviour of the configureNetwork,
             // listener registration and event arrival
             // Enables us to buffer the events and execute them when the configure network is done.
-            networkConfigCompletion = new CompletableFuture<>();
+            synchronized (networkConfigCompletionLock) {
+                networkConfigCompletion = new CompletableFuture<>();
 
-            // add a small delay to absorb multiple network config added notifications
-            if (!programmingScheduled.get()) {
-                log.info("Buffering config calls for {} secs", PROGRAM_DELAY);
-                programmingScheduled.set(true);
-                mainEventExecutor.schedule(new ConfigChange(), PROGRAM_DELAY, TimeUnit.SECONDS);
+                // add a small delay to absorb multiple network config added notifications
+                if (!programmingScheduled.get()) {
+                    log.info("Buffering config calls for {} secs", PROGRAM_DELAY);
+                    programmingScheduled.set(true);
+                    mainEventExecutor.schedule(new ConfigChange(), PROGRAM_DELAY, TimeUnit.SECONDS);
+                }
+
+                createOrUpdateDeviceConfiguration();
+
+                arpHandler = new ArpHandler(srManager);
+                icmpHandler = new IcmpHandler(srManager);
+                ipHandler = new IpHandler(srManager);
+                routingRulePopulator = new RoutingRulePopulator(srManager);
+                createOrUpdateDefaultRoutingHandler();
+
+                tunnelHandler = new TunnelHandler(linkService, deviceConfiguration,
+                    groupHandlerMap, tunnelStore);
+                policyHandler = new PolicyHandler(appId, deviceConfiguration,
+                    flowObjectiveService,
+                    tunnelHandler, policyStore);
+                networkConfigCompletion.complete(true);
             }
 
-            createOrUpdateDeviceConfiguration();
-
-            arpHandler = new ArpHandler(srManager);
-            icmpHandler = new IcmpHandler(srManager);
-            ipHandler = new IpHandler(srManager);
-            routingRulePopulator = new RoutingRulePopulator(srManager);
-            createOrUpdateDefaultRoutingHandler();
-
-            tunnelHandler = new TunnelHandler(linkService, deviceConfiguration,
-                                              groupHandlerMap, tunnelStore);
-            policyHandler = new PolicyHandler(appId, deviceConfiguration,
-                                              flowObjectiveService,
-                                              tunnelHandler, policyStore);
-            networkConfigCompletion.complete(true);
-
             mcastHandler.init();
 
         }
