diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
index aa6fbb8..37804e1 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
@@ -12,19 +12,27 @@
 import net.floodlightcontroller.core.module.IFloodlightModule;
 import net.floodlightcontroller.core.module.IFloodlightService;
 import net.onrc.onos.api.packet.IPacketService;
+import net.onrc.onos.core.datastore.serializers.Topology;
 import net.onrc.onos.core.flowprogrammer.IFlowPusherService;
 import net.onrc.onos.core.main.config.IConfigInfoService;
 import net.onrc.onos.core.packet.ARP;
 import net.onrc.onos.core.topology.ITopologyService;
+import net.onrc.onos.core.topology.ITopologyListener;
+import net.onrc.onos.core.topology.MutableTopology;
+import net.onrc.onos.core.topology.TopologyEvents;
+import net.onrc.onos.core.topology.Switch;
 
 import org.projectfloodlight.openflow.types.IPv4Address;
+import org.projectfloodlight.openflow.util.HexString;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class SegmentRoutingManager implements IFloodlightModule {
+public class SegmentRoutingManager implements IFloodlightModule, ITopologyListener {
 
     private static final Logger log = LoggerFactory
             .getLogger(SegmentRoutingManager.class);
+    private ITopologyService topologyService;
+    private MutableTopology mutableTopology;
 
     private List<ArpEntry> arpEntries;
 
@@ -61,6 +69,9 @@
         ArpHandler aprHandler = new ArpHandler(context, this);
         IcmpHandler icmpHandler = new IcmpHandler(context, this);
         arpEntries = new ArrayList<ArpEntry>();
+        topologyService = context.getServiceImpl(ITopologyService.class);
+        mutableTopology = topologyService.getTopology();
+        topologyService.addListener(this, false);
 
     }
 
@@ -131,5 +142,26 @@
         }
 
     }
-
+    /**
+     * Topology events that have been generated.
+     *
+     * @param topologyEvents the generated Topology Events
+     * @see TopologyEvents
+     */
+    public void topologyEvents(TopologyEvents topologyEvents)
+    {
+    	/**
+    	 * Any Link update events, compute the ECMP path graph for all switch nodes
+    	 */
+    	if ((topologyEvents.getAddedLinkDataEntries() != null) ||
+    		(topologyEvents.getRemovedLinkDataEntries() != null))
+    	{
+    		Iterable<Switch> switches= mutableTopology.getSwitches();
+            for (Switch sw : switches) {
+            	ECMPShortestPathGraph ecmpSPG = new ECMPShortestPathGraph(sw);
+                log.debug("ECMPShortestPathGraph for switch {}",
+                		HexString.toHexString(sw.getDpid().value()));
+            }
+    	}
+    }
 }
