diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisController.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisController.java
index fc10019..2b4cde0 100644
--- a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisController.java
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisController.java
@@ -16,9 +16,11 @@
 package org.onosproject.isis.controller;
 
 import com.fasterxml.jackson.databind.JsonNode;
+import org.onosproject.isis.controller.topology.IsisLinkListener;
 import org.onosproject.isis.controller.topology.IsisRouterListener;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * Representation of an ISIS controller.
@@ -52,4 +54,32 @@
      * @return list of process instances
      */
     List<IsisProcess> allConfiguredProcesses();
+
+    /**
+     * Registers a listener for ISIS message events.
+     *
+     * @param listener the listener to notify
+     */
+    void addLinkListener(IsisLinkListener listener);
+
+    /**
+     * Unregisters a link listener.
+     *
+     * @param listener the listener to unregister
+     */
+    void removeLinkListener(IsisLinkListener listener);
+
+    /**
+     * Gets the list of listeners registered for router events.
+     *
+     * @return list of listeners
+     */
+    Set<IsisRouterListener> listener();
+
+    /**
+     * Gets the list of listeners registered for link events.
+     *
+     * @return list of listeners
+     */
+    Set<IsisLinkListener> linkListener();
 }
\ No newline at end of file
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisInterface.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisInterface.java
index 3f775cc..d80c208 100644
--- a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisInterface.java
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisInterface.java
@@ -318,4 +318,4 @@
      * Removes all the neighbors.
      */
     void removeNeighbors();
-}
+}
\ No newline at end of file
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLsdb.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLsdb.java
old mode 100644
new mode 100755
index c9e1586..2fdac6c
--- a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLsdb.java
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLsdb.java
@@ -122,4 +122,11 @@
      * @param l2LspSeqNo link state sequence number
      */
     void setL2LspSeqNo(int l2LspSeqNo);
+    /**
+     * Removes topology information when neighbor down.
+     *
+     * @param neighbor ISIS neighbor instance
+     * @param isisInterface ISIS interface instance
+     */
+    void removeTopology(IsisNeighbor neighbor, IsisInterface isisInterface);
 }
\ No newline at end of file
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLsdbAge.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLsdbAge.java
index 314f9f8..e58aeef 100644
--- a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLsdbAge.java
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLsdbAge.java
@@ -69,4 +69,4 @@
      * @param lspWrapper LSP wrapper instance
      */
     void removeLspFromBin(LspWrapper lspWrapper);
-}
+}
\ No newline at end of file
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLspBin.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLspBin.java
index 0964aae..c5ced26 100644
--- a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLspBin.java
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisLspBin.java
@@ -44,4 +44,4 @@
      * @param lspWrapper LSP wrapper instance
      */
     void removeIsisLsp(String lspKey, LspWrapper lspWrapper);
-}
+}
\ No newline at end of file
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisNetworkType.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisNetworkType.java
index 083e6d9..d4a5dc5 100644
--- a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisNetworkType.java
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/IsisNetworkType.java
@@ -43,7 +43,6 @@
 
     private int value;
 
-
     /**
      * Creates an instance of ISIS network type.
      *
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/LspWrapper.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/LspWrapper.java
index a4615f7..2f667c7 100644
--- a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/LspWrapper.java
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/LspWrapper.java
@@ -124,4 +124,4 @@
      * @param lspProcessing "refreshLsp" or "maxageLsp" based on LSP to process
      */
     void setLspProcessing(String lspProcessing);
-}
+}
\ No newline at end of file
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/DeviceInformation.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/DeviceInformation.java
new file mode 100644
index 0000000..7f8947f
--- /dev/null
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/DeviceInformation.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.isis.controller.topology;
+
+import org.onlab.packet.Ip4Address;
+
+/**
+ * Representation of an ISIS device information.
+ */
+public interface DeviceInformation {
+
+    /**
+     * Gets system id.
+     *
+     * @return system id
+     */
+    String systemId();
+
+    /**
+     * Sets system id.
+     *
+     * @param systemId system id
+     */
+    void setSystemId(String systemId);
+
+    /**
+     * Gets interface ids.
+     *
+     * @return interface ids
+     */
+    Ip4Address interfaceId();
+
+    /**
+     * Sets interface id.
+     *
+     * @param interfaceId interface id
+     */
+    void setInterfaceId(Ip4Address interfaceId);
+
+    /**
+     * Gets area id.
+     *
+     * @return area id
+     */
+    String areaId();
+
+    /**
+     * Sets area id.
+     *
+     * @param areaId area id
+     */
+    void setAreaId(String areaId);
+
+    /**
+     * Gets device information is already created or not.
+     *
+     * @return true if device information is already created else false
+     */
+    boolean isAlreadyCreated();
+
+    /**
+     * Sets device information is already created or not.
+     *
+     * @param alreadyCreated true if device information is already created else false
+     */
+    void setAlreadyCreated(boolean alreadyCreated);
+
+    /**
+     * Gets device is dis or not.
+     *
+     * @return true if device is dis else false
+     */
+    boolean isDis();
+
+    /**
+     * Sets device is dis or not.
+     *
+     * @param dis true if device is dr else false
+     */
+    void setDis(boolean dis);
+
+    /**
+     * Gets neighbor id.
+     *
+     * @return neighbor id
+     */
+    String neighborId();
+
+    /**
+     * Sets neighbor id.
+     *
+     * @param neighborId neighbor id
+     */
+    void setNeighborId(String neighborId);
+}
\ No newline at end of file
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisAgent.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisAgent.java
new file mode 100644
index 0000000..7207fd4
--- /dev/null
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisAgent.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.isis.controller.topology;
+
+/**
+ * Representation of an ISIS agent.
+ * It is responsible for keeping track of the current set of routers
+ * connected to the system.
+ */
+public interface IsisAgent {
+    /**
+     * Adds a router that has just connected to the system.
+     *
+     * @param isisRouter the router id to add
+     * @return true if added, false otherwise
+     */
+    boolean addConnectedRouter(IsisRouter isisRouter);
+
+    /**
+     * Removes the router which got disconnected from the system.
+     *
+     * @param isisRouter the router id to remove
+     */
+    void removeConnectedRouter(IsisRouter isisRouter);
+
+    /**
+     * Notifies that got a packet of link from network and need do processing.
+     *
+     * @param isisLink  link instance
+     */
+    void addLink(IsisLink isisLink);
+
+    /**
+     * Notifies that got a packet of link from network and need do processing.
+     *
+     * @param isisLink  link instance
+     */
+    void deleteLink(IsisLink isisLink);
+}
\ No newline at end of file
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisLink.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisLink.java
index 1760106..7a70cc3 100644
--- a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisLink.java
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisLink.java
@@ -15,9 +15,7 @@
  */
 package org.onosproject.isis.controller.topology;
 
-import org.onlab.packet.IpAddress;
-
-import java.util.List;
+import org.onlab.packet.Ip4Address;
 
 /**
  * Abstraction of an ISIS Link.
@@ -25,58 +23,72 @@
 public interface IsisLink {
 
     /**
-     * Returns IP address of the Router.
+     * Returns the remote system ID.
      *
-     * @return IP address of router
+     * @return remote system ID
      */
-    IpAddress remoteRouterId();
+    String remoteSystemId();
 
     /**
-     * Returns the area ID for this device.
+     * Returns the local system ID.
      *
-     * @return the area ID
+     * @return local system ID
      */
-    int areaIdOfInterface();
+    String localSystemId();
 
     /**
      * Returns IP address of the interface.
      *
      * @return IP address of the interface
      */
-    IpAddress interfaceIp();
+    Ip4Address interfaceIp();
 
     /**
-     * Returns the list of link TED details.
+     * Returns IP address of the neighbor.
      *
-     * @return linkTed list of link TED
+     * @return IP address of the neighbor
      */
-    List<IsisLinkTed> linkTed();
+    Ip4Address neighborIp();
 
     /**
-     * Sets IP address of the router.
+     * Returns the link TED details.
      *
-     * @param routerIp router's IP address
+     * @return linkTed link TED
      */
-    void setRouterIp(IpAddress routerIp);
+    IsisLinkTed linkTed();
 
     /**
-     * Sets the area ID for this device.
+     * Sets remote system ID.
      *
-     * @param areaIdOfInterface area ID
+     * @param remoteSystemId remote system ID
      */
-    void setAreaIdOfInterface(int areaIdOfInterface);
+    void setRemoteSystemId(String remoteSystemId);
+
+    /**
+     * Sets local system ID.
+     *
+     * @param localSystemId remote system ID
+     */
+    void setLocalSystemId(String localSystemId);
 
     /**
      * Sets IP address of the interface.
      *
      * @param interfaceIp IP address of the interface
      */
-    void setInterfaceIp(IpAddress interfaceIp);
+    void setInterfaceIp(Ip4Address interfaceIp);
 
     /**
-     * Sets the list of link TED.
+     * Sets IP address of the neighbor.
      *
-     * @param linkTed list of link TED
+     * @param neighborIp IP address of the neighbor
      */
-    void setLinkTed(List<IsisLinkTed> linkTed);
+    void setNeighborIp(Ip4Address neighborIp);
+
+    /**
+     * Sets the link TED information.
+     *
+     * @param linkTed link TED
+     */
+    void setLinkTed(IsisLinkTed linkTed);
 }
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisLinkListener.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisLinkListener.java
index b96d81c..3f7e484 100644
--- a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisLinkListener.java
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisLinkListener.java
@@ -23,16 +23,14 @@
     /**
      * Notifies that we got a link from network.
      *
-     * @param isisRouter  router instance
-     * @param isisLinkTed link TED information of router
+     * @param isisLink link instance
      */
-    void addLink(IsisRouter isisRouter, IsisLinkTed isisLinkTed);
+    void addLink(IsisLink isisLink);
 
     /**
      * Notifies that a link got removed from network.
      *
-     * @param isisRouter router instance
-     * @param isisLinkTed isis link ted infromation
+     * @param isisLink link instance
      */
-    void deleteLink(IsisRouter isisRouter, IsisLinkTed isisLinkTed);
+    void deleteLink(IsisLink isisLink);
 }
\ No newline at end of file
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisLinkTed.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisLinkTed.java
index 08014b8..25f3177 100644
--- a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisLinkTed.java
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisLinkTed.java
@@ -16,7 +16,6 @@
 package org.onosproject.isis.controller.topology;
 
 import org.onlab.packet.Ip4Address;
-import org.onlab.packet.Ip6Address;
 import org.onlab.util.Bandwidth;
 
 import java.util.List;
@@ -27,114 +26,100 @@
 public interface IsisLinkTed {
 
     /**
-     * Provides maximum bandwidth can be used on the link.
+     * Gets the administrative group.
      *
-     * @return maximum bandwidth
+     * @return administrative group
      */
-    Bandwidth maximumLink();
+    int administrativeGroup();
 
     /**
-     * Sets maximum band width.
+     * Sets the administrative group.
      *
-     * @param bandwidth maximum bandwidth
+     * @param administrativeGroup administrative group
      */
-    void setMaximumLink(Bandwidth bandwidth);
+    void setAdministrativeGroup(int administrativeGroup);
 
     /**
-     * Amount of bandwidth reservable on the link.
+     * Provides the IPv4 interface address.
+     *
+     * @return IPv4 interface address
+     */
+    Ip4Address ipv4InterfaceAddress();
+
+    /**
+     * Sets the IPv4 interface address.
+     *
+     * @param interfaceAddress IPv4 interface address
+     */
+    void setIpv4InterfaceAddress(Ip4Address interfaceAddress);
+
+    /**
+     * Provides the IPv4 neighbor address.
+     *
+     * @return IPv4 neighbor address
+     */
+    Ip4Address ipv4NeighborAddress();
+
+    /**
+     * Sets the IPv4 neighbor address.
+     *
+     * @param neighborAddress IPv4 neighbor address
+     */
+    void setIpv4NeighborAddress(Ip4Address neighborAddress);
+
+    /**
+     * Gets the maximum link bandwidth.
+     *
+     * @return maximum link bandwidth
+     */
+    Bandwidth maximumLinkBandwidth();
+
+    /**
+     * Sets the maximum link bandwidth.
+     *
+     * @param bandwidth maximum link bandwidth
+     */
+    void setMaximumLinkBandwidth(Bandwidth bandwidth);
+
+    /**
+     * Provides max bandwidth that can be reservable on the link.
+     *
+     * @return max bandwidth reservable
+     */
+    Bandwidth maximumReservableLinkBandwidth();
+
+    /**
+     * Sets max bandwidth that can be reservable on the link.
+     *
+     * @param bandwidth max bandwidth that can be reservable on the link
+     */
+    void setMaximumReservableLinkBandwidth(Bandwidth bandwidth);
+
+    /**
+     * Amount of bandwidth unreserved on the link.
      *
      * @return unreserved bandwidth
      */
-    List<Bandwidth> maxUnResBandwidth();
+    List<Bandwidth> unreservedBandwidth();
 
     /**
-     * Sets max bandwidth that is not reserved on the link.
+     * Sets the bandwidth unreserved on the link.
      *
-     * @param bandwidth max bandwidth that is not reserved on the link
+     * @param bandwidth bandwidth unreserved
      */
-    void setMaxUnResBandwidth(Bandwidth bandwidth);
-
-    /**
-     * Provides max bandwidth that can be reserved on the link.
-     *
-     * @return max bandwidth reserved
-     */
-    Bandwidth maxReserved();
-
-    /**
-     * Sets max bandwidth that can be reserved on the link.
-     *
-     * @param bandwidth max bandwidth that can be reserved on the link
-     */
-    void setMaxReserved(Bandwidth bandwidth);
+    void setUnreservedBandwidth(List<Bandwidth> bandwidth);
 
     /**
      * Provides Traffic Engineering metric for the link.
      *
-     * @return Traffic Engineering metric
+     * @return Traffic Engineering Default metric
      */
-    int teMetric();
+    long teDefaultMetric();
 
     /**
      * Sets Traffic Engineering metric for the link.
      *
-     * @param teMetric Traffic Engineering metric for the link
+     * @param teMetric Traffic Engineering Default metric for the link
      */
-    void setTeMetric(int teMetric);
-
-    /**
-     * Provides IPv4 router-Id of local node.
-     *
-     * @return IPv4 router-Id of local node
-     */
-    List<Ip4Address> ipv4LocRouterId();
-
-    /**
-     * Sets IPv4 router-Id of local node.
-     *
-     * @param routerIds IPv4 router-Id of local node
-     */
-    void setIpv4LocRouterId(List<Ip4Address> routerIds);
-
-    /**
-     * Provides IPv6 router-Id of local node.
-     *
-     * @return IPv6 router-Id of local node
-     */
-    List<Ip6Address> ipv6LocRouterId();
-
-    /**
-     * Sets IPv6 router-Id of local node.
-     *
-     * @param routerIds IPv6 router-Id of local node
-     */
-    void setIpv6LocRouterId(List<Ip6Address> routerIds);
-
-    /**
-     * Provides IPv4 router-Id of remote node.
-     *
-     * @return IPv4 router-Id of remote node
-     */
-    List<Ip4Address> ipv4RemRouterId();
-
-    /**
-     * Sets IPv4 router-Id of remote node.
-     *
-     * @param routerIds IPv4 router-Id of remote node
-     */
-    void setIpv4RemRouterId(List<Ip4Address> routerIds);
-
-    /**
-     * Provides IPv6 router-Id of remote node.
-     *
-     * @return IPv6 router-Id of remote node
-     */
-    List<Ip6Address> ipv6RemRouterId();
-
-    /**
-     * Sets IPv6 router-Id of remote node.
-     *
-     * @param routerIds IPv6 router-Id of remote node
-     */
-    void setIpv6RemRouterId(List<Ip6Address> routerIds);
+    void setTeDefaultMetric(long teMetric);
 }
\ No newline at end of file
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisRouter.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisRouter.java
index 56ad7da..40ed48a2a 100644
--- a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisRouter.java
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisRouter.java
@@ -23,11 +23,11 @@
 public interface IsisRouter {
 
     /**
-     * Returns IP address of the router.
+     * Returns system ID for the router.
      *
-     * @return IP address of the router
+     * @return system ID of the router
      */
-    Ip4Address routerIp();
+    String systemId();
 
     /**
      * Returns IP address of the interface.
@@ -37,9 +37,44 @@
     Ip4Address interfaceId();
 
     /**
-     * Sets IP address of the Router.
+     * Gets IP address of the interface.
      *
-     * @param routerIp IP address of the router
+     * @param interfaceId IP address of the interface
      */
-    void setRouterIp(Ip4Address routerIp);
+    void setInterfaceId(Ip4Address interfaceId);
+
+    /**
+     * Sets system ID of the Router.
+     *
+     * @param systemId system ID of the router
+     */
+    void setSystemId(String systemId);
+
+    /**
+     * Gets neighbours ID.
+     *
+     * @return neighbour ID
+     */
+    Ip4Address neighborRouterId();
+
+    /**
+     * Sets the neighbour Id.
+     *
+     * @param neighbourId neighbour Id
+     */
+    void setNeighborRouterId(Ip4Address neighbourId);
+
+    /**
+     * Gets if the router id DIS or not.
+     *
+     * @return true if the router is DIS else false
+     */
+    boolean isDis();
+
+    /**
+     * Sets if the router id DIS or not.
+     *
+     * @param dis true if the router is DIS else false
+     */
+    void setDis(boolean dis);
 }
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisRouterId.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisRouterId.java
new file mode 100644
index 0000000..a40d68b
--- /dev/null
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisRouterId.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.isis.controller.topology;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Objects;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+/**
+ * Represents an ISIS router id.
+ */
+public class IsisRouterId {
+
+    private static final String SCHEME = "l3";
+    private static final long UNKNOWN = 0;
+    private final String ipAddress;
+
+    /**
+     * Creates an instance of ISIS router id.
+     *
+     * @param ipAddress IP address of the router
+     */
+    public IsisRouterId(String ipAddress) {
+        this.ipAddress = ipAddress;
+    }
+
+    /**
+     * Creates an instance from ip address.
+     *
+     * @param ipAddress IP address
+     * @return ISIS router id instance
+     */
+    public static IsisRouterId isisRouterId(String ipAddress) {
+        return new IsisRouterId(ipAddress);
+    }
+
+    /**
+     * Creates ISIS router id instance from the URI.
+     *
+     * @param uri device URI
+     * @return ISIS router id instance
+     */
+    public static IsisRouterId isisRouterId(URI uri) {
+        checkArgument(uri.getScheme().equals(SCHEME), "Unsupported URI scheme");
+        return new IsisRouterId(uri.getSchemeSpecificPart());
+    }
+
+    /**
+     * Returns device URI from the given router id.
+     *
+     * @param isisRouterId router id instance
+     * @return device URI
+     */
+    public static URI uri(IsisRouterId isisRouterId) {
+        return uri(isisRouterId.ipAddress());
+    }
+
+    /**
+     * Returns device URI from the given IP address.
+     *
+     * @param ipAddress device IP address
+     * @return device URI
+     */
+    public static URI uri(String ipAddress) {
+        try {
+            return new URI(SCHEME, ipAddress, null);
+        } catch (URISyntaxException e) {
+            return null;
+        }
+    }
+
+    /**
+     * Returns the IP address.
+     *
+     * @return IP address
+     */
+    public String ipAddress() {
+        return ipAddress;
+    }
+
+    @Override
+    public String toString() {
+        return ipAddress;
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof IsisRouterId)) {
+            return false;
+        }
+
+        IsisRouterId otherIsisRouterId = (IsisRouterId) other;
+        return Objects.equals(ipAddress, otherIsisRouterId.ipAddress);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(ipAddress);
+    }
+}
\ No newline at end of file
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisRouterListener.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisRouterListener.java
index 82d6c61..56da9b5 100644
--- a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisRouterListener.java
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/IsisRouterListener.java
@@ -34,11 +34,4 @@
      * @param isisRouter ISIS router instance
      */
     void routerRemoved(IsisRouter isisRouter);
-
-    /**
-     * Notifies that the router has changed in some way.
-     *
-     * @param isisRouter ISIS router instance
-     */
-    void routerChanged(IsisRouter isisRouter);
 }
\ No newline at end of file
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/LinkInformation.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/LinkInformation.java
new file mode 100644
index 0000000..9c30f4d
--- /dev/null
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/LinkInformation.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.isis.controller.topology;
+
+import org.onlab.packet.Ip4Address;
+
+/**
+ * Representation of an ISIS link information.
+ */
+public interface LinkInformation {
+
+    /**
+     * Gets link id.
+     *
+     * @return link id
+     */
+    String linkId();
+
+    /**
+     * Sets link id.
+     *
+     * @param linkId link id
+     */
+    void setLinkId(String linkId);
+
+    /**
+     * Gets whether link information is already created or not.
+     *
+     * @return true if link information is already created else false
+     */
+    boolean isAlreadyCreated();
+
+    /**
+     * Sets link information is already created or not.
+     *
+     * @param alreadyCreated true if link information is already created else false
+     */
+    void setAlreadyCreated(boolean alreadyCreated);
+
+
+    /**
+     * Returns link destination ID.
+     *
+     * @return link destination ID
+     */
+    String linkDestinationId();
+
+    /**
+     * Sets link destination id.
+     *
+     * @param linkDestinationId link destination id
+     */
+    void setLinkDestinationId(String linkDestinationId);
+
+    /**
+     * Gets link source id.
+     *
+     * @return link source id
+     */
+    String linkSourceId();
+
+    /**
+     * Sets link source id.
+     *
+     * @param linkSourceId link source id
+     */
+    void setLinkSourceId(String linkSourceId);
+
+    /**
+     * Gets interface ip address.
+     *
+     * @return interface ip address
+     */
+    Ip4Address interfaceIp();
+
+    /**
+     * Sets interface ip address.
+     *
+     * @param interfaceIp interface ip address
+     */
+    void setInterfaceIp(Ip4Address interfaceIp);
+
+    /**
+     * Gets neighbor ip address.
+     *
+     * @return neighbor ip address
+     */
+    Ip4Address neighborIp();
+
+    /**
+     * Sets neighbor ip address.
+     *
+     * @param neighborIp neighbor ip address
+     */
+    void setNeighborIp(Ip4Address neighborIp);
+}
\ No newline at end of file
diff --git a/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/TopologyForDeviceAndLink.java b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/TopologyForDeviceAndLink.java
new file mode 100644
index 0000000..4153efb
--- /dev/null
+++ b/protocols/isis/api/src/main/java/org/onosproject/isis/controller/topology/TopologyForDeviceAndLink.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.isis.controller.topology;
+
+import java.util.Map;
+
+/**
+ * Represents IP topology for ISIS device and link details.
+ */
+public interface TopologyForDeviceAndLink {
+
+    /**
+     * Gets the device information.
+     *
+     * @return device information
+     */
+    Map<String, DeviceInformation> deviceInformationMap();
+
+    /**
+     * Sets the device information.
+     *
+     * @param key                  system ID of the device as key
+     * @param deviceInformationMap device information instance
+     */
+    void setDeviceInformationMap(String key, DeviceInformation deviceInformationMap);
+
+    /**
+     * Gets the link information.
+     *
+     * @return link information
+     */
+    Map<String, LinkInformation> linkInformationMap();
+
+    /**
+     * Sets link information.
+     *
+     * @param key                system ID of the device as key
+     * @param linkInformationMap link information instance
+     */
+    void setLinkInformationMap(String key, LinkInformation linkInformationMap);
+
+    /**
+     * Removes link information.
+     *
+     * @param key key used to remove from map
+     */
+    void removeLinkInformationMap(String key);
+
+    /**
+     * Removes device information.
+     *
+     * @param key key used to remove from map
+     */
+    void removeDeviceInformationMap(String key);
+
+    /**
+     * Removes links from linkInformationMap.
+     *
+     * @param linkId ID
+     */
+    void removeLinks(String linkId);
+
+    /**
+     * Gets deviceInformation as map.
+     *
+     * @return deviceInformationMap to delete from core
+     */
+    Map<String, DeviceInformation> deviceInformationMapToDelete();
+
+    /**
+     * Sets deviceInformation as map.
+     *
+     * @param key                          key used to add in map
+     * @param deviceInformationMapToDelete device information to delete from map
+     */
+    void setDeviceInformationMapToDelete(String key, DeviceInformation deviceInformationMapToDelete);
+
+    /**
+     * Removes Device Information from deviceInformationMapToDelete.
+     *
+     * @param key key to remove from map
+     */
+    void removeDeviceInformationMapFromDeleteMap(String key);
+
+    /**
+     * Gets deviceInformation as map for Point-To-Point.
+     *
+     * @return deviceInformationMap
+     */
+    Map<String, DeviceInformation> deviceInformationMapForPointToPoint();
+
+    /**
+     * Sets deviceInformation as map for Point-To-Point..
+     *
+     * @param key                  key to add to map
+     * @param deviceInformationMap device information map
+     */
+    void setDeviceInformationMapForPointToPoint(String key, DeviceInformation deviceInformationMap);
+
+    /**
+     * Gets linkInformation as map for PointToPoint.
+     *
+     * @return linkInformationMap
+     */
+    Map<String, LinkInformation> linkInformationMapForPointToPoint();
+
+    /**
+     * Sets linkInformation as map for PointToPoint.
+     *
+     * @param key                key to add link information to map
+     * @param linkInformationMap link information to add
+     */
+    void setLinkInformationMapForPointToPoint(String key, LinkInformation linkInformationMap);
+}
\ No newline at end of file
