diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/HazelcastIntentStore.java b/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/HazelcastIntentStore.java
index 9b9e2d1..f09a968 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/HazelcastIntentStore.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/HazelcastIntentStore.java
@@ -20,6 +20,7 @@
 import com.google.common.base.Verify;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
 import com.hazelcast.core.EntryAdapter;
 import com.hazelcast.core.EntryEvent;
 import com.hazelcast.core.EntryListener;
@@ -171,15 +172,16 @@
     }
 
     @Override
-    public IntentEvent createIntent(Intent intent) {
+    public void createIntent(Intent intent) {
         Context timer = startTimer(createIntentTimer);
         try {
             Intent existing = intents.putIfAbsent(intent.id(), intent);
             if (existing != null) {
                 // duplicate, ignore
-                return null;
+                return;
             } else {
-                return this.setState(intent, IntentState.SUBMITTED);
+                this.setState(intent, IntentState.SUBMITTED);
+                return;
             }
         } finally {
             stopTimer(timer);
@@ -256,7 +258,7 @@
     }
 
     @Override
-    public IntentEvent setState(Intent intent, IntentState state) {
+    public void setState(Intent intent, IntentState state) {
         Context timer = startTimer(setStateTimer);
         try {
 
@@ -311,10 +313,10 @@
             final IntentState prevTransient = transientStates.put(id, state);
             log.debug("Transient State change: {} {}=>{}", id, prevTransient, state);
 
-            if (type == null) {
-                return null;
+            if (type != null) {
+                notifyDelegate(new IntentEvent(type, intent));
             }
-            return new IntentEvent(type, intent);
+            return;
         } finally {
             stopTimer(timer);
         }
@@ -358,6 +360,7 @@
         List<Operation> failed = new ArrayList<>();
 
         List<Pair<Operation, List<Future<?>>>> futures = new ArrayList<>(batch.operations().size());
+        List<IntentEvent> events = Lists.newArrayList();
 
         for (Operation op : batch.operations()) {
             switch (op.type()) {
@@ -434,6 +437,7 @@
                                  prevIntent, prevIntentState,
                                  intent, newIntentState);
                     }
+                    events.add(IntentEvent.getEvent(SUBMITTED, intent));
                 } catch (InterruptedException e) {
                     log.error("Batch write was interrupted while processing {}", op,  e);
                     failed.add(op);
@@ -487,6 +491,8 @@
                     if (PARKING.contains(newState)) {
                         transientStates.remove(intentId);
                     }
+                    events.add(IntentEvent.getEvent(newState, intent));
+
                     log.trace("{} - {} -> {}", intentId, prevIntentState, newState);
                     // TODO sanity check and log?
                 } catch (InterruptedException e) {
@@ -554,6 +560,9 @@
                 break;
             }
         }
+
+        notifyDelegate(events);
+
         return failed;
     }
 
@@ -571,6 +580,8 @@
                     log.debug("{} state updated remotely, removing transient state {}",
                               intentId, oldState);
                 }
+
+                notifyDelegate(IntentEvent.getEvent(event.getValue(), getIntent(intentId)));
             }
         }
     }
