diff --git a/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/device/IpDeviceStore.java b/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/device/IpDeviceStore.java
new file mode 100644
index 0000000..db1dd42
--- /dev/null
+++ b/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/device/IpDeviceStore.java
@@ -0,0 +1,164 @@
+/*
+ * 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.iptopology.api.device;
+
+import org.onlab.packet.Ip4Address;
+import org.onlab.packet.Ip6Address;
+import org.onosproject.iptopology.api.DevicePrefix;
+import org.onosproject.iptopology.api.InterfaceIdentifier;
+import org.onosproject.iptopology.api.IpDevice;
+import org.onosproject.iptopology.api.DeviceIntf;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.provider.ProviderId;
+import org.onosproject.store.Store;
+
+import java.util.List;
+
+/**
+ * Manages inventory of ip devices; not intended for direct use.
+ */
+public interface IpDeviceStore extends Store<IpDeviceEvent, IpDeviceStoreDelegate> {
+
+    /**
+     * Returns the number of ip devices known to the system.
+     *
+     * @return number of ip devices
+     */
+    int getIpDeviceCount();
+
+    /**
+     * Returns an iterable collection of all ip devices known to the system.
+     *
+     * @return ip device collection
+     */
+    Iterable<IpDevice> getIpDevices();
+
+
+    /**
+     * Returns an ip device with the specified identifier.
+     *
+     * @param deviceId device identifier
+     * @return ip device
+     */
+    IpDevice getIpDevice(DeviceId deviceId);
+
+    /**
+     * Creates a new infrastructure ip device, or updates an existing one using
+     * the supplied device description.
+     *
+     * @param providerId        provider identifier
+     * @param deviceId          device identifier
+     * @param deviceDescription device description
+     * @return ready to send event describing what occurred; null if no change
+     */
+    IpDeviceEvent createOrUpdateIpDevice(ProviderId providerId, DeviceId deviceId,
+                                     IpDeviceDescription deviceDescription);
+
+    /**
+     * Administratively removes the specified ip device from the store.
+     *
+     * @param deviceId device to be removed
+     * @return null if no such ip device
+     */
+    IpDeviceEvent removeIpDevice(DeviceId deviceId);
+
+    /**
+     * Updates the interface of the specified ip device using the given
+     * list of interface descriptions. The list is assumed to be comprehensive.
+     *
+     * @param providerId            provider identifier
+     * @param deviceId              ip device identifier
+     * @param interfaceDescriptions list of interface descriptions
+     * @return ready to send events describing what occurred; empty list if no change
+     */
+    List<IpDeviceEvent> updateInterfaces(ProviderId providerId, DeviceId deviceId,
+                                  List<InterfaceDescription> interfaceDescriptions);
+
+    /**
+     * Administratively removes the specified interface from the store.
+     *
+     * @param deviceId device of the interfaces to be removed
+     * @param interfaceDescriptions list of interface descriptions
+     * @return ready to send events describing what occurred.
+     */
+    List<IpDeviceEvent> removeInterfaces(DeviceId deviceId, List<InterfaceDescription> interfaceDescriptions);
+
+    /**
+     * Returns the list of interfaces that belong to the specified device.
+     *
+     * @param deviceId device identifier
+     * @return list of device interfaces
+     */
+    List<DeviceIntf> getInterfaces(DeviceId deviceId);
+
+    /**
+     * Returns the specified device interface.
+     *
+     * @param deviceId    device identifier
+     * @param ipv4Address ipv4 address of the interface
+     * @return device interface
+     */
+    DeviceIntf getInterface(DeviceId deviceId, Ip4Address ipv4Address);
+
+    /**
+     * Returns the specified device interface.
+     *
+     * @param deviceId    device identifier
+     * @param ipv6Address ipv6 address of the interface
+     * @return device interface
+     */
+    DeviceIntf getInterface(DeviceId deviceId, Ip6Address ipv6Address);
+
+    /**
+     * Returns the specified device interface.
+     *
+     * @param deviceId    device identifier
+     * @param intfId      interface identifier of the interface
+     * @return device interface
+     */
+    DeviceIntf getInterface(DeviceId deviceId, InterfaceIdentifier intfId);
+
+    /**
+     * Updates the prefix information of the specified ip device using the given
+     * list of prefix descriptions. The list is assumed to be comprehensive.
+     *
+     * @param providerId           provider identifier
+     * @param deviceId             ip device identifier
+     * @param prefixDescriptions   list of prefix descriptions
+     * @return ready to send events describing what occurred; empty list if no change
+     */
+    List<IpDeviceEvent>  updatePrefixes(ProviderId providerId, DeviceId deviceId,
+                                        List<PrefixDescription> prefixDescriptions);
+
+    /**
+     * Administratively removes the specified prefix from the store.
+     *
+     * @param deviceId device of the prefix to be removed
+     * @param prefixDescriptions list of prefix descriptions
+     * @return ready to send events describing what occurred.
+     */
+    List<IpDeviceEvent> removePrefixes(DeviceId deviceId, List<PrefixDescription> prefixDescriptions);
+
+    /**
+     * Returns the list of prefixes that belong to the specified device.
+     *
+     * @param deviceId device identifier
+     * @return list of device prefixes
+     */
+    List<DevicePrefix> getPrefixes(DeviceId deviceId);
+
+}
+
