diff --git a/apps/tenbi/topology/src/main/java/org/onosproject/tenbi/topology/impl/TeTopologyNbiManager.java b/apps/tenbi/topology/src/main/java/org/onosproject/tenbi/topology/impl/TeTopologyNbiManager.java
index a014a48..1cd53ad 100644
--- a/apps/tenbi/topology/src/main/java/org/onosproject/tenbi/topology/impl/TeTopologyNbiManager.java
+++ b/apps/tenbi/topology/src/main/java/org/onosproject/tenbi/topology/impl/TeTopologyNbiManager.java
@@ -15,8 +15,6 @@
  */
 package org.onosproject.tenbi.topology.impl;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -24,6 +22,8 @@
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
 import org.onosproject.event.AbstractListenerManager;
+import org.onosproject.tetopology.management.api.TeTopologyEvent;
+import org.onosproject.tetopology.management.api.TeTopologyListener;
 import org.onosproject.tetopology.management.api.TeTopologyService;
 import org.onosproject.teyang.api.OperationType;
 import org.onosproject.teyang.utils.topology.NetworkConverter;
@@ -34,30 +34,31 @@
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.Networks;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NetworksState;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.IetfNetworkTopology;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
-               .IetfNetworkTopologyOpParam;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
-               .IetfNetworkTopologyService;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
+        .rev20151208.IetfNetworkTopologyOpParam;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
+        .rev20151208.IetfNetworkTopologyService;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.IetfTeTopology;
 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.IetfTeTopologyOpParam;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-               .IetfTeTopologyService;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-               .ietftetopology.IetfTeTopologyEvent;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
-               .ietftetopology.IetfTeTopologyEventListener;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.IetfTeTopologyService;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
+        .IetfTeTopologyEvent;
+import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
+        .IetfTeTopologyEventListener;
 import org.onosproject.yms.ymsm.YmsService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 /**
  * The IETF TE Topology NBI Manager implementation.
  */
 @Component(immediate = true)
 @Service
 public class TeTopologyNbiManager
-    extends  AbstractListenerManager<IetfTeTopologyEvent, IetfTeTopologyEventListener>
-    implements IetfNetworkService, IetfNetworkTopologyService, IetfTeTopologyService {
+        extends AbstractListenerManager<IetfTeTopologyEvent, IetfTeTopologyEventListener>
+        implements IetfNetworkService, IetfNetworkTopologyService, IetfTeTopologyService {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
@@ -67,18 +68,40 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected YmsService ymsService;
 
+
+    /**
+     * Activation helper function.
+     */
+    private void activateBasics() {
+        eventDispatcher.addSink(IetfTeTopologyEvent.class, listenerRegistry);
+    }
+
+    /**
+     * Deactivation helper function.
+     */
+    private void deactivateBasics() {
+        eventDispatcher.removeSink(IetfTeTopologyEvent.class);
+    }
+
     @Activate
     protected void activate() {
+        activateBasics();
+
         // Register 3 services with YMS.
         ymsService.registerService(this, IetfNetworkService.class, null);
         ymsService.registerService(this, IetfNetworkTopologyService.class, null);
         ymsService.registerService(this, IetfTeTopologyService.class, null);
 
+        // Listens to TE Topology events
+        teTopologyService.addListener(new InternalTeTopologyListener());
+
         log.info("Started");
     }
 
     @Deactivate
     protected void deactivate() {
+        deactivateBasics();
+
         // Unregister 3 services.
         ymsService.unRegisterService(this, IetfNetworkService.class);
         ymsService.unRegisterService(this, IetfNetworkTopologyService.class);
@@ -89,8 +112,6 @@
 
     @Override
     public IetfNetwork getIetfNetwork(IetfNetworkOpParam ietfNetwork) {
-        log.info("getIetfNetwork: input {}", ietfNetwork);
-
         checkNotNull(ietfNetwork, "getIetfNetwork: ietfNetwork cannot be null");
 
         // Get the entire data tree from TE Subsystem core.
@@ -100,17 +121,18 @@
         Networks networks = NetworkConverter.teSubsystem2YangNetworks(teNetworks, OperationType.QUERY);
         NetworksState networkStates = NetworkConverter.teSubsystem2YangNetworkStates(teNetworks, OperationType.QUERY);
 
-        IetfNetworkOpParam.IetfNetworkBuilder builder =  new IetfNetworkOpParam.IetfNetworkBuilder();
+        IetfNetworkOpParam.IetfNetworkBuilder builder = new IetfNetworkOpParam.IetfNetworkBuilder();
         IetfNetwork newNetwork = builder.networks(networks)
-                                        .networksState(networkStates)
-                                        .yangIetfNetworkOpType(OnosYangOpType.NONE)
-                                        .build();
+                .networksState(networkStates)
+                .yangIetfNetworkOpType(OnosYangOpType.NONE)
+                .build();
 
         // processSubtreeFiltering() filters the entire data tree based on the
         // user's query and returns the filtered data.
-        return ietfNetwork.processSubtreeFiltering(
-                                                   (IetfNetworkOpParam) newNetwork,
-                                                   false);
+        IetfNetwork result = ietfNetwork.processSubtreeFiltering(
+                (IetfNetworkOpParam) newNetwork,
+                false);
+        return result;
     }
 
     @Override
@@ -143,7 +165,7 @@
     @Override
     public IetfNetworkTopology getIetfNetworkTopology(IetfNetworkTopologyOpParam ietfNetworkTopology) {
         // unused methods.
-       return ietfNetworkTopology;
+        return ietfNetworkTopology;
     }
 
     @Override
@@ -162,4 +184,11 @@
         // unused methods.
     }
 
+    private class InternalTeTopologyListener implements TeTopologyListener {
+        @Override
+        public void event(TeTopologyEvent event) {
+            IetfTeTopologyEvent yangEvent = NetworkConverter.teTopoEvent2YangIetfTeTopoEvent(event);
+            post(yangEvent);
+        }
+    }
 }
