diff --git a/src/main/java/net/onrc/onos/intent/runtime/PlanInstallModule.java b/src/main/java/net/onrc/onos/intent/runtime/PlanInstallModule.java
index b8bed85..293a33d 100644
--- a/src/main/java/net/onrc/onos/intent/runtime/PlanInstallModule.java
+++ b/src/main/java/net/onrc/onos/intent/runtime/PlanInstallModule.java
@@ -43,7 +43,7 @@
     private static final String PATH_INTENT_CHANNEL_NAME = "onos.pathintent";
     private static final String INTENT_STATE_EVENT_CHANNEL_NAME = "onos.pathintent_state";
 
-    
+
     @Override
     public void init(FloodlightModuleContext context)
 	    throws FloodlightModuleException {
@@ -59,27 +59,27 @@
 
     class EventListener extends Thread
     	implements IEventChannelListener<Long, IntentOperationList> {
-	
+
 	private BlockingQueue<IntentOperationList> intentQueue = new LinkedBlockingQueue<>();
 	private Long key = Long.valueOf(0);
-	
+
 	@Override
 	public void run() {
 	    while(true) {
 		try {
 		    IntentOperationList intents = intentQueue.take();
-		    //TODO: consider draining the remaining intent lists 
+		    //TODO: consider draining the remaining intent lists
 		    //      and processing in one big batch
 //		    List<IntentOperationList> remaining = new LinkedList<>();
 //		    intentQueue.drainTo(remaining);
-		    
+
 		    processIntents(intents);
 		} catch (InterruptedException e) {
 		    log.warn("Error taking from intent queue: {}", e.getMessage());
 		}
 	    }
 	}
-	
+
 	private void processIntents(IntentOperationList intents) {
 	    log("start_processIntents");
 	    log.debug("Processing OperationList {}", intents);
@@ -90,13 +90,13 @@
 	    log("begin_installPlan");
 	    boolean success = planInstall.installPlan(plan);
 	    log("end_installPlan");
-	    
+
 	    log("begin_sendInstallNotif");
 	    sendNotifications(intents, true, success);
 	    log("end_sendInstallNotif");
 	    log("finish");
 	}
-	
+
 	private void sendNotifications(IntentOperationList intents, boolean installed, boolean success) {
 	    IntentStateList states = new IntentStateList();
 	    for(IntentOperation i : intents) {
@@ -123,11 +123,23 @@
 		states.put(i.intent.getId(), newState);
 	    }
 	    intentStateChannel.addEntry(key, states);
-	    key += 1;
+	    // XXX: Send notifications using the same key every time
+	    // and receive them by entryAdded() and entryUpdated()
+	    // key += 1;
 	}
-	
+
 	@Override
 	public void entryAdded(IntentOperationList value) {
+	    entryUpdated(value);
+	}
+
+	@Override
+	public void entryRemoved(IntentOperationList value) {
+	    // This channel is a queue, so this method is not needed
+	}
+
+	@Override
+	public void entryUpdated(IntentOperationList value) {
 	    log("start_intentNotifRecv");
 	    log("begin_sendReceivedNotif");
 	    sendNotifications(value, false, false);
@@ -141,36 +153,26 @@
 		log.warn("Error putting to intent queue: {}", e.getMessage());
 	    }
 	}
-
-	@Override
-	public void entryRemoved(IntentOperationList value) {
-	    // This channel is a queue, so this method is not needed
-	}
-
-	@Override
-	public void entryUpdated(IntentOperationList value) {
-	    // This channel is a queue, so this method is not needed
-	}
     }
-    
+
     public static void log(String step) {
 	log.error("Time:{}, Step:{}", System.nanoTime(), step);
     }
-    
+
     @Override
     public void startUp(FloodlightModuleContext context) {
 	// start subscriber
-	datagridService.addListener(PATH_INTENT_CHANNEL_NAME, 
-				    	      eventListener, 
-				              Long.class, 
+	datagridService.addListener(PATH_INTENT_CHANNEL_NAME,
+				    	      eventListener,
+				              Long.class,
 				              IntentOperationList.class);
 	eventListener.start();
 	// start publisher
-	intentStateChannel = datagridService.createChannel(INTENT_STATE_EVENT_CHANNEL_NAME, 
-						Long.class, 
+	intentStateChannel = datagridService.createChannel(INTENT_STATE_EVENT_CHANNEL_NAME,
+						Long.class,
 						IntentStateList.class);
     }
-    
+
     @Override
     public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
 	Collection<Class<? extends IFloodlightService>> l =
@@ -181,7 +183,7 @@
 	l.add(IFlowPusherService.class);
 	return l;
     }
-    
+
     @Override
     public Collection<Class<? extends IFloodlightService>> getModuleServices() {
 	// no services, for now
