diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstallerTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstallerTest.java
index fdef627..e1e186a 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstallerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstallerTest.java
@@ -31,6 +31,7 @@
 import org.onosproject.net.flow.DefaultTrafficSelector;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.flow.FlowRule;
+import org.onosproject.net.flow.FlowRuleOperation;
 import org.onosproject.net.flow.FlowRuleOperations;
 import org.onosproject.net.flow.FlowRuleServiceAdapter;
 import org.onosproject.net.flow.TrafficSelector;
@@ -54,6 +55,8 @@
 import static org.easymock.EasyMock.mock;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
+import static org.onosproject.net.flow.FlowRuleOperation.Type.ADD;
+import static org.onosproject.net.flow.FlowRuleOperation.Type.REMOVE;
 
 /**
  * Tests for flow rule Intent installer.
@@ -61,14 +64,14 @@
 public class FlowRuleIntentInstallerTest extends AbstractIntentInstallerTest {
 
     private TestFlowRuleService flowRuleService;
-    private TestFlowRuleServiceNonDisruptive flowRuleServiceNonDisruptive;
+    private final TestFlowRuleServiceNonDisruptive flowRuleServiceNonDisruptive =
+            new TestFlowRuleServiceNonDisruptive();
     private FlowRuleIntentInstaller installer;
 
     @Before
     public void setup() {
         super.setup();
         flowRuleService = new TestFlowRuleService();
-        flowRuleServiceNonDisruptive = new TestFlowRuleServiceNonDisruptive();
         installer = new FlowRuleIntentInstaller();
         installer.flowRuleService = flowRuleService;
         installer.store = new SimpleIntentStore();
@@ -381,6 +384,14 @@
                 .makePermanent()
                 .build();
 
+        // We need to wait a bit in order to avoid
+        // race conditions and failing builds
+        synchronized (flowRuleServiceNonDisruptive) {
+            while (!verifyFlowRule(ADD, firstStageInstalledRule)) {
+                flowRuleServiceNonDisruptive.wait();
+            }
+        }
+
         assertTrue(flowRuleServiceNonDisruptive.flowRulesAdd.contains(firstStageInstalledRule));
 
         selector = DefaultTrafficSelector.builder()
@@ -399,6 +410,12 @@
                 .makePermanent()
                 .build();
 
+        synchronized (flowRuleServiceNonDisruptive) {
+            while (!verifyFlowRule(REMOVE, secondStageUninstalledRule)) {
+                flowRuleServiceNonDisruptive.wait();
+            }
+        }
+
         assertTrue(flowRuleServiceNonDisruptive.flowRulesRemove.contains(secondStageUninstalledRule));
 
         selector = DefaultTrafficSelector.builder()
@@ -417,6 +434,12 @@
                 .makePermanent()
                 .build();
 
+        synchronized (flowRuleServiceNonDisruptive) {
+            while (!verifyFlowRule(ADD, thirdStageInstalledRule)) {
+                flowRuleServiceNonDisruptive.wait();
+            }
+        }
+
         assertTrue(flowRuleServiceNonDisruptive.flowRulesAdd.contains(thirdStageInstalledRule));
 
         selector = DefaultTrafficSelector.builder()
@@ -435,12 +458,23 @@
                 .makePermanent()
                 .build();
 
+        synchronized (flowRuleServiceNonDisruptive) {
+            while (!verifyFlowRule(REMOVE, lastStageUninstalledRule)) {
+                flowRuleServiceNonDisruptive.wait();
+            }
+        }
+
         assertTrue(flowRuleServiceNonDisruptive.flowRulesRemove.contains(lastStageUninstalledRule));
 
         IntentOperationContext successContext = intentInstallCoordinator.successContext;
         assertEquals(successContext, operationContext);
     }
 
+    private boolean verifyFlowRule(FlowRuleOperation.Type type, FlowRule flowRule) {
+        return type == ADD ? flowRuleServiceNonDisruptive.flowRulesAdd.contains(flowRule) :
+                flowRuleServiceNonDisruptive.flowRulesRemove.contains(flowRule);
+    }
+
     /**
      * Generates FlowRuleIntents for test.
      *
@@ -734,6 +768,9 @@
         public void apply(FlowRuleOperations ops) {
             record(ops);
             ops.callback().onSuccess(ops);
+            synchronized (this) {
+                this.notify();
+            }
         }
     }
 
