diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowEventHandler.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowEventHandler.java
index 0a6cd76..debb5b1 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowEventHandler.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowEventHandler.java
@@ -107,7 +107,7 @@
 	    flowEntryEvents.add(eventEntry);
 	}
 
-	// Process the events (if any)
+	// Process the initial events (if any)
 	processEvents();
 
 	//
@@ -170,6 +170,9 @@
 	for (EventEntry<FlowPath> eventEntry : flowPathEvents) {
 	    FlowPath flowPath = eventEntry.eventData();
 
+	    log.debug("Flow Event: {} {}", eventEntry.eventType(),
+		      flowPath.toString());
+
 	    switch (eventEntry.eventType()) {
 	    case ENTRY_ADD: {
 		//
@@ -240,6 +243,10 @@
 	boolean isTopologyModified = false;
 	for (EventEntry<TopologyElement> eventEntry : topologyEvents) {
 	    TopologyElement topologyElement = eventEntry.eventData();
+
+	    log.debug("Topology Event: {} {}", eventEntry.eventType(),
+		      topologyElement.toString());
+
 	    switch (eventEntry.eventType()) {
 	    case ENTRY_ADD:
 		isTopologyModified |= topology.addTopologyElement(topologyElement);
@@ -462,7 +469,7 @@
 	    FlowEntry newFlowEntry =
 		newFlowEntriesMap.get(oldFlowEntry.dpid().value());
 	    if (newFlowEntry == null) {
-		// The old Flow Entry should be deleted
+		// The old Flow Entry should be deleted: not on the path
 		oldFlowEntry.setFlowEntryUserState(FlowEntryUserState.FE_USER_DELETE);
 		oldFlowEntry.setFlowEntrySwitchState(FlowEntrySwitchState.FE_SWITCH_NOT_UPDATED);
 		deletedFlowEntries.add(oldFlowEntry);
@@ -490,7 +497,7 @@
 
 	    if (oldFlowEntry != null) {
 		//
-		// The old Flow Entry should be deleted
+		// The old Flow Entry should be deleted: path diverges
 		//
 		oldFlowEntry.setFlowEntryUserState(FlowEntryUserState.FE_USER_DELETE);
 		oldFlowEntry.setFlowEntrySwitchState(FlowEntrySwitchState.FE_SWITCH_NOT_UPDATED);
@@ -545,8 +552,7 @@
 	// Note that the Flow Entries that will be deleted are added at
 	// the end.
 	//
-	for (FlowEntry flowEntry : deletedFlowEntries)
-	    finalFlowEntries.add(flowEntry);
+	finalFlowEntries.addAll(deletedFlowEntries);
 	flowPath.dataPath().setFlowEntries(finalFlowEntries);
 
 	return hasChanged;
