diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..9056fbf
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2014 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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         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>
+        <groupId>org.onosproject</groupId>
+        <artifactId>onos-apps</artifactId>
+        <version>1.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>onos-app-cordvtn</artifactId>
+    <packaging>bundle</packaging>
+
+    <description>Virtual tenant network service for CORD</description>
+
+    <properties>
+        <onos.app.name>org.onosproject.cordvtn</onos.app.name>
+    </properties>
+
+    <dependencies>
+    </dependencies>
+
+</project>
diff --git a/src/main/java/org/onosproject/cordvtn/CordVtnService.java b/src/main/java/org/onosproject/cordvtn/CordVtnService.java
new file mode 100644
index 0000000..1dee476
--- /dev/null
+++ b/src/main/java/org/onosproject/cordvtn/CordVtnService.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2014-2015 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.cordvtn;
+
+import java.util.List;
+
+/**
+ * Service for provisioning overlay virtual networks on compute nodes.
+ */
+public interface CordVtnService {
+    /**
+     * Adds new nodes to the service and processes initial setup.
+     *
+     * @param ovsdbNodes list of nodes
+     */
+    void addNodes(List<OvsdbNode> ovsdbNodes);
+
+    /**
+     * Deletes the nodes from the service and cleans up unnecessary configurations
+     * associated with the deleted nodes.
+     *
+     * @param ovsdbNodes list of nodes
+     */
+    void deleteNodes(List<OvsdbNode> ovsdbNodes);
+
+    /**
+     * Returns the number of the nodes known to the service.
+     *
+     * @return number of nodes
+     */
+    int getNodeCount();
+
+    /**
+     * Returns all nodes known to the service.
+     *
+     * @return list of nodes
+     */
+    List<OvsdbNode> getNodes();
+}
diff --git a/src/main/java/org/onosproject/cordvtn/OvsdbNode.java b/src/main/java/org/onosproject/cordvtn/OvsdbNode.java
new file mode 100644
index 0000000..75e61d7
--- /dev/null
+++ b/src/main/java/org/onosproject/cordvtn/OvsdbNode.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2014-2015 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.cordvtn;
+
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.TpPort;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.behaviour.BridgeConfig;
+import org.onosproject.net.behaviour.TunnelConfig;
+
+/**
+ * Representation of a node with ovsdb server.
+ */
+public interface OvsdbNode {
+    /**
+     * State of the ovsdb node.
+     */
+    enum State {
+        READY, CONNECTED, DISCONNECTED
+    }
+
+    /**
+     * Returns the IP address of ovsdb server.
+     *
+     * @return ip address
+     */
+    IpAddress ip();
+
+    /**
+     * Returns the port number of ovsdb server.
+     *
+     * @return port number
+     */
+    TpPort port();
+
+    /**
+     * Returns the state of the node.
+     *
+     * @return state of the node
+     */
+    State getState();
+
+    /**
+     * Sets the state of the node.
+     *
+     * @param state state of the node
+     */
+    void setState(State state);
+
+    /**
+     * Returns the device ID of the node.
+     *
+     * @return device id
+     */
+    DeviceId getDeviceId();
+
+    /**
+     * Sets the device id of the node.
+     *
+     * @param deviceId device identifier
+     */
+    void setDeviceId(DeviceId deviceId);
+
+    /**
+     * Returns the bridge configuration handler of the node.
+     *
+     * @return bridge config behavior instance
+     */
+    BridgeConfig getBridgeConfig();
+
+    /**
+     * Returns the tunnel configuration handler of the node.
+     *
+     * @return tunnel config behavior instance
+     */
+    TunnelConfig getTunnelConfig();
+}
