diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphReplicationInterface.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphReplicationInterface.java
deleted file mode 100644
index 6b77ece..0000000
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphReplicationInterface.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package net.onrc.onos.ofcontroller.networkgraph;
-
-/**
- * Interface to use to update Network Graph triggered by notification.
- *
- * Requested change by these methods will not be propagated down to DataStore
- */
-public interface NetworkGraphReplicationInterface {
-	public void putSwitchReplicationEvent(SwitchEvent switchEvent);
-	public void removeSwitchReplicationEvent(SwitchEvent switchEvent);
-	public void putPortReplicationEvent(PortEvent portEvent);
-	public void removePortReplicationEvent(PortEvent portEvent);
-	public void putLinkReplicationEvent(LinkEvent linkEvent);
-	public void removeLinkReplicationEvent(LinkEvent linkEvent);
-	public void putDeviceReplicationEvent(DeviceEvent deviceEvent);
-	public void removeDeviceReplicationEvent(DeviceEvent deviceEvent);
-}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyEvent.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyEvent.java
index 2892e0c..68da896 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyEvent.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyEvent.java
@@ -8,8 +8,6 @@
  * in a single transaction.
  */
 public class TopologyEvent {
-    public static final String NOBODY = "";
-    String originID = NOBODY;
     SwitchEvent switchEvent = null;		// Set for Switch event
     PortEvent portEvent = null;			// Set for Port event
     LinkEvent linkEvent = null;			// Set for Link event
@@ -26,9 +24,8 @@
      *
      * @param switchEvent the Switch event to use.
      */
-    TopologyEvent(SwitchEvent switchEvent, String originID) {
+    TopologyEvent(SwitchEvent switchEvent) {
 	this.switchEvent = switchEvent;
-	setOriginID(originID);
     }
 
     /**
@@ -36,9 +33,8 @@
      *
      * @param portEvent the Port event to use.
      */
-    TopologyEvent(PortEvent portEvent, String originID) {
+    TopologyEvent(PortEvent portEvent) {
 	this.portEvent = portEvent;
-	setOriginID(originID);
     }
 
     /**
@@ -46,9 +42,8 @@
      *
      * @param linkEvent the Link event to use.
      */
-    TopologyEvent(LinkEvent linkEvent, String originID) {
+    TopologyEvent(LinkEvent linkEvent) {
 	this.linkEvent = linkEvent;
-	setOriginID(originID);
     }
 
     /**
@@ -56,9 +51,8 @@
      *
      * @param deviceEvent the Device event to use.
      */
-    TopologyEvent(DeviceEvent deviceEvent, String originID) {
+    TopologyEvent(DeviceEvent deviceEvent) {
 	this.deviceEvent = deviceEvent;
-	setOriginID(originID);
     }
 
     /**
@@ -95,16 +89,4 @@
 	    return deviceEvent.getID();
 	return null;
     }
-
-    public String getOriginID() {
-	return originID;
-    }
-
-    void setOriginID(String originID) {
-	if (originID != null) {
-	    this.originID = originID;
-	} else {
-	    this.originID = NOBODY;
-	}
-    }
 }
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyManager.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyManager.java
index a01057b..f620614 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyManager.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/TopologyManager.java
@@ -39,8 +39,7 @@
  * re-ordering. e.g.) Link Add came in, but Switch was not there.
  *
  */
-public class TopologyManager implements NetworkGraphDiscoveryInterface,
-				NetworkGraphReplicationInterface {
+public class TopologyManager implements NetworkGraphDiscoveryInterface {
 
     private static final Logger log = LoggerFactory
 	    .getLogger(TopologyManager.class);
@@ -142,10 +141,6 @@
 	 */
 	private void processEvents(Collection<EventEntry<TopologyEvent>> events) {
 	    for (EventEntry<TopologyEvent> event : events) {
-		if (event.eventData().getOriginID().equals(registryService.getControllerId())) {
-		    // ignore event triggered by myself
-		    continue;
-		}
 		TopologyEvent topologyEvent = event.eventData();
 		switch (event.eventType()) {
 		case ENTRY_ADD:
@@ -251,8 +246,7 @@
     public void putSwitchDiscoveryEvent(SwitchEvent switchEvent) {
 	if (datastore.addSwitch(switchEvent)) {
 	    // Send out notification
-	    TopologyEvent topologyEvent =
-		new TopologyEvent(switchEvent, registryService.getControllerId());
+	    TopologyEvent topologyEvent = new TopologyEvent(switchEvent);
 	    eventChannel.addEntry(topologyEvent.getID(), topologyEvent);
 	}
     }
@@ -269,8 +263,7 @@
     public void putPortDiscoveryEvent(PortEvent portEvent) {
 	if (datastore.addPort(portEvent)) {
 	    // Send out notification
-	    TopologyEvent topologyEvent =
-		new TopologyEvent(portEvent, registryService.getControllerId());
+	    TopologyEvent topologyEvent = new TopologyEvent(portEvent);
 	}
     }
 
@@ -286,8 +279,7 @@
     public void putLinkDiscoveryEvent(LinkEvent linkEvent) {
 	if (datastore.addLink(linkEvent)) {
 	    // Send out notification
-	    TopologyEvent topologyEvent =
-		new TopologyEvent(linkEvent, registryService.getControllerId());
+	    TopologyEvent topologyEvent = new TopologyEvent(linkEvent);
 	    eventChannel.addEntry(topologyEvent.getID(), topologyEvent);
 	}
     }
@@ -304,9 +296,7 @@
     public void putDeviceDiscoveryEvent(DeviceEvent deviceEvent) {
 	if (datastore.addDevice(deviceEvent)) {
 	    // Send out notification
-	    TopologyEvent topologyEvent =
-		new TopologyEvent(deviceEvent,
-				  registryService.getControllerId());
+	    TopologyEvent topologyEvent = new TopologyEvent(deviceEvent);
 	    eventChannel.addEntry(topologyEvent.getID(), topologyEvent);
 	}
     }
@@ -319,6 +309,82 @@
 	}
     }
 
+    /* ************************************************
+     * Internal methods for processing the replication events
+     * ************************************************/
+
+    private void putSwitchReplicationEvent(SwitchEvent switchEvent) {
+	if (prepareForAddSwitchEvent(switchEvent)) {
+	    putSwitch(switchEvent);
+	}
+	// TODO handle invariant violation
+	// trigger instance local topology event handler
+	dispatchPutSwitchEvent(switchEvent);
+    }
+
+    private void removeSwitchReplicationEvent(SwitchEvent switchEvent) {
+	if (prepareForRemoveSwitchEvent(switchEvent)) {
+	    removeSwitch(switchEvent);
+	}
+	// TODO handle invariant violation
+	// trigger instance local topology event handler
+	dispatchRemoveSwitchEvent(switchEvent);
+    }
+
+    private void putPortReplicationEvent(PortEvent portEvent) {
+	if (prepareForAddPortEvent(portEvent)) {
+	    putPort(portEvent);
+	}
+	// TODO handle invariant violation
+	// trigger instance local topology event handler
+	dispatchPutPortEvent(portEvent);
+    }
+
+    private void removePortReplicationEvent(PortEvent portEvent) {
+	if (prepareForRemovePortEvent(portEvent)) {
+	    removePort(portEvent);
+	}
+	// TODO handle invariant violation
+	// trigger instance local topology event handler
+	dispatchRemovePortEvent(portEvent);
+    }
+
+    private void putLinkReplicationEvent(LinkEvent linkEvent) {
+	if (prepareForAddLinkEvent(linkEvent)) {
+	    putLink(linkEvent);
+	}
+	// TODO handle invariant violation
+	// trigger instance local topology event handler
+	dispatchPutLinkEvent(linkEvent);
+    }
+
+    private void removeLinkReplicationEvent(LinkEvent linkEvent) {
+	if (prepareForRemoveLinkEvent(linkEvent)) {
+	    removeLink(linkEvent);
+	}
+	// TODO handle invariant violation
+	// trigger instance local topology event handler
+	dispatchRemoveLinkEvent(linkEvent);
+    }
+
+    private void putDeviceReplicationEvent(DeviceEvent deviceEvent) {
+	if (prepareForAddDeviceEvent(deviceEvent)) {
+	    putDevice(deviceEvent);
+	}
+	// TODO handle invariant violation
+	// trigger instance local topology event handler
+	dispatchPutDeviceEvent(deviceEvent);
+    }
+
+    private void removeDeviceReplicationEvent(DeviceEvent deviceEvent) {
+	if (prepareForRemoveDeviceEvent(deviceEvent)) {
+	    removeDevice(deviceEvent);
+	}
+	// TODO handle invariant violation
+	// trigger instance local topology event handler
+	dispatchRemoveDeviceEvent(deviceEvent);
+    }
+
     /* *****************
      * Internal methods to maintain invariants of the network graph
      * *****************/
@@ -543,90 +609,6 @@
 	return true;
     }
 
-    /* ******************************
-     * NetworkGraphReplicationInterface methods
-     * ******************************/
-
-    @Override
-    public void putSwitchReplicationEvent(SwitchEvent switchEvent) {
-	if (prepareForAddSwitchEvent(switchEvent)) {
-	    putSwitch(switchEvent);
-	}
-	// TODO handle invariant violation
-	// trigger instance local topology event handler
-	dispatchPutSwitchEvent(switchEvent);
-    }
-
-    @Override
-    public void removeSwitchReplicationEvent(SwitchEvent switchEvent) {
-	if (prepareForRemoveSwitchEvent(switchEvent)) {
-	    removeSwitch(switchEvent);
-	}
-	// TODO handle invariant violation
-	// trigger instance local topology event handler
-	dispatchRemoveSwitchEvent(switchEvent);
-    }
-
-    @Override
-    public void putPortReplicationEvent(PortEvent portEvent) {
-	if (prepareForAddPortEvent(portEvent)) {
-	    putPort(portEvent);
-	}
-	// TODO handle invariant violation
-	// trigger instance local topology event handler
-	dispatchPutPortEvent(portEvent);
-    }
-
-    @Override
-    public void removePortReplicationEvent(PortEvent portEvent) {
-	if (prepareForRemovePortEvent(portEvent)) {
-	    removePort(portEvent);
-	}
-	// TODO handle invariant violation
-	// trigger instance local topology event handler
-	dispatchRemovePortEvent(portEvent);
-    }
-
-    @Override
-    public void putLinkReplicationEvent(LinkEvent linkEvent) {
-	if (prepareForAddLinkEvent(linkEvent)) {
-	    putLink(linkEvent);
-	}
-	// TODO handle invariant violation
-	// trigger instance local topology event handler
-	dispatchPutLinkEvent(linkEvent);
-    }
-
-    @Override
-    public void removeLinkReplicationEvent(LinkEvent linkEvent) {
-	if (prepareForRemoveLinkEvent(linkEvent)) {
-	    removeLink(linkEvent);
-	}
-	// TODO handle invariant violation
-	// trigger instance local topology event handler
-	dispatchRemoveLinkEvent(linkEvent);
-    }
-
-    @Override
-    public void putDeviceReplicationEvent(DeviceEvent deviceEvent) {
-	if (prepareForAddDeviceEvent(deviceEvent)) {
-	    putDevice(deviceEvent);
-	}
-	// TODO handle invariant violation
-	// trigger instance local topology event handler
-	dispatchPutDeviceEvent(deviceEvent);
-    }
-
-    @Override
-    public void removeDeviceReplicationEvent(DeviceEvent deviceEvent) {
-	if (prepareForRemoveDeviceEvent(deviceEvent)) {
-	    removeDevice(deviceEvent);
-	}
-	// TODO handle invariant violation
-	// trigger instance local topology event handler
-	dispatchRemoveDeviceEvent(deviceEvent);
-    }
-
     /* ************************************************
      * Internal In-memory object mutation methods.
      * ************************************************/
