diff --git a/core/api/src/main/java/org/onosproject/net/intent/IntentEvent.java b/core/api/src/main/java/org/onosproject/net/intent/IntentEvent.java
index b1571ad..3b7c6c6 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/IntentEvent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/IntentEvent.java
@@ -72,10 +72,26 @@
         super(type, intent);
     }
 
+    /**
+     * Creates an IntentEvent based on the state contained in the given intent
+     * data. Some states are not sent as external events, and these states will
+     * return null events.
+     *
+     * @param data the intent data to create an event for
+     * @return new intent event if the state is valid, otherwise null.
+     */
     public static IntentEvent getEvent(IntentData data) {
         return getEvent(data.state(), data.intent());
     }
 
+    /**
+     * Creates an IntentEvent based on the given state and intent. Some states
+     * are not sent as external events, and these states will return null events.
+     *
+     * @param state new state of the intent
+     * @param intent intent to put in event
+     * @return new intent event if the state is valid, otherwise null.
+     */
     public static IntentEvent getEvent(IntentState state, Intent intent) {
         Type type;
         switch (state) {
@@ -95,14 +111,13 @@
                 type = Type.FAILED;
                 break;
 
-            //fallthrough to default from here
+            // fallthrough to default from here
             case COMPILING:
             case INSTALLING:
             case RECOMPILING:
             case WITHDRAWING:
             default:
-                throw new IllegalArgumentException(
-                        "Intent event cannot have transient state: " + state);
+                return null;
         }
         return new IntentEvent(type, intent);
     }
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
index c78b5f9..6ddf58f 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
@@ -268,9 +268,8 @@
 
     @Override
     public void addPending(IntentData data) {
-        log.debug("new call to pending {}", data);
+        log.debug("new pending {} {} {}", data.key(), data.state(), data.version());
         if (data.version() == null) {
-            log.debug("updating timestamp");
             data.setVersion(new SystemClockTimestamp());
         }
         pending.put(data.key(), copyData(data));
@@ -293,16 +292,9 @@
         public void event(
                 EventuallyConsistentMapEvent<Key, IntentData> event) {
             if (event.type() == EventuallyConsistentMapEvent.Type.PUT) {
-                IntentEvent externalEvent;
                 IntentData intentData = event.value();
 
-                try {
-                    externalEvent = IntentEvent.getEvent(intentData.state(), intentData.intent());
-                } catch (IllegalArgumentException e) {
-                    externalEvent = null;
-                }
-
-                notifyDelegateIfNotNull(externalEvent);
+                notifyDelegateIfNotNull(IntentEvent.getEvent(intentData));
             }
         }
     }
@@ -322,12 +314,7 @@
                     }
                 }
 
-                try {
-                    notifyDelegate(IntentEvent.getEvent(event.value()));
-                } catch (IllegalArgumentException e) {
-                    //no-op
-                    log.trace("ignore this exception: {}", e);
-                }
+                notifyDelegateIfNotNull(IntentEvent.getEvent(event.value()));
             }
         }
     }
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/SimpleIntentStore.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/SimpleIntentStore.java
index 2bc5b63..8778e93 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/SimpleIntentStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/SimpleIntentStore.java
@@ -198,16 +198,17 @@
                     pending.remove(newData.key());
                 }
 
-                try {
-                    notifyDelegate(IntentEvent.getEvent(newData));
-                } catch (IllegalArgumentException e) {
-                    //no-op
-                    log.trace("ignore this exception: {}", e);
-                }
+                notifyDelegateIfNotNull(IntentEvent.getEvent(newData));
             }
         }
     }
 
+    private void notifyDelegateIfNotNull(IntentEvent event) {
+        if (event != null) {
+            notifyDelegate(event);
+        }
+    }
+
     @Override
     public void batchWrite(Iterable<IntentData> updates) {
         for (IntentData data : updates) {
@@ -241,7 +242,7 @@
                 pending.put(data.key(), data);
                 checkNotNull(delegate, "Store delegate is not set")
                         .process(data);
-                notifyDelegate(IntentEvent.getEvent(data));
+                notifyDelegateIfNotNull(IntentEvent.getEvent(data));
             } else {
                 log.debug("IntentData {} is older than existing: {}",
                           data, existingData);
