diff --git a/api/pom.xml b/api/pom.xml
new file mode 100644
index 0000000..7f7bd54
--- /dev/null
+++ b/api/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2016-present Open Networking Foundation
+  ~
+  ~ 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.
+  -->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>olttopology</artifactId>
+        <groupId>org.opencord</groupId>
+        <version>1.0.1</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>olttopology-api</artifactId>
+    <packaging>bundle</packaging>
+
+    <url>http://opencord.org</url>
+
+    <description>OLT application API</description>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/api/src/main/java/org/opencord/olttopology/OltNeighborInfo.java b/api/src/main/java/org/opencord/olttopology/OltNeighborInfo.java
new file mode 100755
index 0000000..acc27dc
--- /dev/null
+++ b/api/src/main/java/org/opencord/olttopology/OltNeighborInfo.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * 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.opencord.olttopology;
+
+import org.onlab.packet.LLDPTLV;
+
+import org.onosproject.net.Port;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Information about an OLT's neighbor. An instance of this class stores
+ * information about an OLT and it's neighbour. The information contains
+ * which port of the OLT is connected to which port of the neighbor
+ */
+public class OltNeighborInfo {
+
+    private String neighborName;
+    private String neighborPort;
+    private String oltName;
+    private Port oltPort;
+
+    // Serial number of the OLT
+    private String oltSerialNo;
+
+    // The management IP address of the neighbor
+    private String mgmtAddr;
+
+    // The time when this entry was last updated
+    private Date lastUpdated;
+
+    // List of other optional TLVs that would have been received from the
+    // neighbor in the last LLDP message
+    private List<LLDPTLV> otherOptionalTlvs;
+
+    public OltNeighborInfo(String neighborName, String neighborPort,
+                           String oltName, Port oltPort, String oltSerialNo) {
+        this.neighborName = neighborName;
+        this.neighborPort = neighborPort;
+        this.oltName = oltName;
+        this.oltPort = oltPort;
+        this.oltSerialNo = oltSerialNo;
+        otherOptionalTlvs = new ArrayList<>();
+        updateTimeStamp();
+    }
+
+    public String neighborName() {
+        return neighborName;
+    }
+
+    public String neighborPort() {
+        return neighborPort;
+    }
+
+    public String oltName() {
+        return oltName;
+    }
+
+    public Port oltPort() {
+        return oltPort;
+    }
+
+    public String oltSerialNo() {
+        return oltSerialNo;
+    }
+
+    public Date getLastUpdated() {
+        return lastUpdated;
+    }
+
+    public void updateTimeStamp() {
+        lastUpdated = new Date();
+    }
+
+    public String mgmtAddr() {
+        return mgmtAddr;
+    }
+
+    public void setMgmtAddress(String neighborManagementAddress) {
+        mgmtAddr = neighborManagementAddress;
+    }
+
+    public void addOtherOptionalLldpTlvs(LLDPTLV lldptlv) {
+        otherOptionalTlvs.add(lldptlv);
+    }
+
+    public List<LLDPTLV> getOtherOptionalTlvs() {
+        return otherOptionalTlvs;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        OltNeighborInfo that = (OltNeighborInfo) o;
+        return Objects.equals(neighborName, that.neighborName) &&
+                Objects.equals(neighborPort, that.neighborPort) &&
+                Objects.equals(oltName, that.oltName) &&
+                Objects.equals(oltPort, that.oltPort) &&
+                Objects.equals(oltSerialNo, that.oltSerialNo) &&
+                Objects.equals(mgmtAddr, that.mgmtAddr) &&
+                Objects.equals(lastUpdated, that.lastUpdated);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(neighborName, neighborPort, oltName,
+                oltPort, oltSerialNo, mgmtAddr, lastUpdated);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        final StringBuilder buf = new StringBuilder();
+        buf.append('[');
+        buf.append("neighborName:");
+        buf.append(this.neighborName);
+        buf.append(",neighborPort:");
+        buf.append(this.neighborPort);
+        buf.append(",oltName:");
+        buf.append(this.oltName);
+        buf.append(",oltPort:");
+        buf.append((this.oltPort.annotations().value("portName").isEmpty()) ? "" :
+                this.oltPort.annotations().value("portName"));
+        buf.append(",oltSerialNo:");
+        buf.append(this.oltSerialNo);
+        buf.append(",neighbor_mgmt_address:");
+        buf.append(this.mgmtAddr);
+        buf.append(",lastUpdated:");
+        buf.append(this.lastUpdated);
+        buf.append(']');
+        return buf.toString();
+    }
+}
diff --git a/api/src/main/java/org/opencord/olttopology/OltTopologyInformationService.java b/api/src/main/java/org/opencord/olttopology/OltTopologyInformationService.java
new file mode 100644
index 0000000..9ce5a0d
--- /dev/null
+++ b/api/src/main/java/org/opencord/olttopology/OltTopologyInformationService.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2016-present Open Networking Foundation
+ *
+ * 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.opencord.olttopology;
+
+
+import org.onosproject.net.ConnectPoint;
+
+import java.util.Map;
+
+/**
+ * Service for configuring the OLT topology collection and for
+ * viewing the topology information.
+ */
+public interface OltTopologyInformationService {
+
+    /**
+     * Get a collection of OLT ports and their neighbors.
+     *
+     * @return OLT Connect points and it's neighbors
+     */
+    Map<ConnectPoint, OltNeighborInfo> getNeighbours();
+
+    /**
+     * Provision Timer for sending LLDP packets to OLT NNI Ports.
+     *
+     * @param timer Periodicity in minutes for sending out LLDP packet to OLT NNI ports.
+     */
+    void lldpPeriodicity(int timer);
+}
diff --git a/api/src/main/java/org/opencord/olttopology/package-info.java b/api/src/main/java/org/opencord/olttopology/package-info.java
new file mode 100644
index 0000000..31900e1
--- /dev/null
+++ b/api/src/main/java/org/opencord/olttopology/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Foundation
+ *
+ * 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.
+ */
+
+/**
+ * OltTopology application api.
+ */
+package org.opencord.olttopology;
