Merge branch 'master' of ssh://gerrit.onlab.us:29418/onos-next
diff --git a/net/api/pom.xml b/core/api/pom.xml
similarity index 95%
rename from net/api/pom.xml
rename to core/api/pom.xml
index d542a97..3fd8a01 100644
--- a/net/api/pom.xml
+++ b/core/api/pom.xml
@@ -6,7 +6,7 @@
 
     <parent>
         <groupId>org.onlab.onos</groupId>
-        <artifactId>onos-net</artifactId>
+        <artifactId>onos-core</artifactId>
         <version>1.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
diff --git a/net/api/src/main/java/org/onlab/onos/GreetService.java b/core/api/src/main/java/org/onlab/onos/GreetService.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/GreetService.java
rename to core/api/src/main/java/org/onlab/onos/GreetService.java
diff --git a/net/api/src/main/java/org/onlab/onos/event/AbstractEvent.java b/core/api/src/main/java/org/onlab/onos/event/AbstractEvent.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/event/AbstractEvent.java
rename to core/api/src/main/java/org/onlab/onos/event/AbstractEvent.java
diff --git a/net/api/src/main/java/org/onlab/onos/event/AbstractListenerRegistry.java b/core/api/src/main/java/org/onlab/onos/event/AbstractListenerRegistry.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/event/AbstractListenerRegistry.java
rename to core/api/src/main/java/org/onlab/onos/event/AbstractListenerRegistry.java
diff --git a/net/api/src/main/java/org/onlab/onos/event/DefaultEventSinkRegistry.java b/core/api/src/main/java/org/onlab/onos/event/DefaultEventSinkRegistry.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/event/DefaultEventSinkRegistry.java
rename to core/api/src/main/java/org/onlab/onos/event/DefaultEventSinkRegistry.java
diff --git a/net/api/src/main/java/org/onlab/onos/event/Event.java b/core/api/src/main/java/org/onlab/onos/event/Event.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/event/Event.java
rename to core/api/src/main/java/org/onlab/onos/event/Event.java
diff --git a/net/api/src/main/java/org/onlab/onos/event/EventDeliveryService.java b/core/api/src/main/java/org/onlab/onos/event/EventDeliveryService.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/event/EventDeliveryService.java
rename to core/api/src/main/java/org/onlab/onos/event/EventDeliveryService.java
diff --git a/net/api/src/main/java/org/onlab/onos/event/EventDispatcher.java b/core/api/src/main/java/org/onlab/onos/event/EventDispatcher.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/event/EventDispatcher.java
rename to core/api/src/main/java/org/onlab/onos/event/EventDispatcher.java
diff --git a/net/api/src/main/java/org/onlab/onos/event/EventListener.java b/core/api/src/main/java/org/onlab/onos/event/EventListener.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/event/EventListener.java
rename to core/api/src/main/java/org/onlab/onos/event/EventListener.java
diff --git a/net/api/src/main/java/org/onlab/onos/event/EventSink.java b/core/api/src/main/java/org/onlab/onos/event/EventSink.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/event/EventSink.java
rename to core/api/src/main/java/org/onlab/onos/event/EventSink.java
diff --git a/net/api/src/main/java/org/onlab/onos/event/EventSinkRegistry.java b/core/api/src/main/java/org/onlab/onos/event/EventSinkRegistry.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/event/EventSinkRegistry.java
rename to core/api/src/main/java/org/onlab/onos/event/EventSinkRegistry.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/AbstractElement.java b/core/api/src/main/java/org/onlab/onos/net/AbstractElement.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/AbstractElement.java
rename to core/api/src/main/java/org/onlab/onos/net/AbstractElement.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/AbstractModel.java b/core/api/src/main/java/org/onlab/onos/net/AbstractModel.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/AbstractModel.java
rename to core/api/src/main/java/org/onlab/onos/net/AbstractModel.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/ConnectPoint.java b/core/api/src/main/java/org/onlab/onos/net/ConnectPoint.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/ConnectPoint.java
rename to core/api/src/main/java/org/onlab/onos/net/ConnectPoint.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/DefaultDevice.java b/core/api/src/main/java/org/onlab/onos/net/DefaultDevice.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/DefaultDevice.java
rename to core/api/src/main/java/org/onlab/onos/net/DefaultDevice.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/DefaultEdgeLink.java b/core/api/src/main/java/org/onlab/onos/net/DefaultEdgeLink.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/DefaultEdgeLink.java
rename to core/api/src/main/java/org/onlab/onos/net/DefaultEdgeLink.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/DefaultLink.java b/core/api/src/main/java/org/onlab/onos/net/DefaultLink.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/DefaultLink.java
rename to core/api/src/main/java/org/onlab/onos/net/DefaultLink.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/DefaultPort.java b/core/api/src/main/java/org/onlab/onos/net/DefaultPort.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/DefaultPort.java
rename to core/api/src/main/java/org/onlab/onos/net/DefaultPort.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/Description.java b/core/api/src/main/java/org/onlab/onos/net/Description.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/Description.java
rename to core/api/src/main/java/org/onlab/onos/net/Description.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/Device.java b/core/api/src/main/java/org/onlab/onos/net/Device.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/Device.java
rename to core/api/src/main/java/org/onlab/onos/net/Device.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/DeviceId.java b/core/api/src/main/java/org/onlab/onos/net/DeviceId.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/DeviceId.java
rename to core/api/src/main/java/org/onlab/onos/net/DeviceId.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/EdgeLink.java b/core/api/src/main/java/org/onlab/onos/net/EdgeLink.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/EdgeLink.java
rename to core/api/src/main/java/org/onlab/onos/net/EdgeLink.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/Element.java b/core/api/src/main/java/org/onlab/onos/net/Element.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/Element.java
rename to core/api/src/main/java/org/onlab/onos/net/Element.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/ElementId.java b/core/api/src/main/java/org/onlab/onos/net/ElementId.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/ElementId.java
rename to core/api/src/main/java/org/onlab/onos/net/ElementId.java
diff --git a/core/api/src/main/java/org/onlab/onos/net/Host.java b/core/api/src/main/java/org/onlab/onos/net/Host.java
new file mode 100644
index 0000000..d66566d
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/Host.java
@@ -0,0 +1,44 @@
+package org.onlab.onos.net;
+
+import org.onlab.packet.IPv4;
+import org.onlab.packet.MACAddress;
+
+import java.util.Set;
+
+/**
+ * Abstraction of an end-station host on the network, essentially a NIC.
+ */
+public interface Host extends Element {
+
+    /**
+     * Host identification.
+     *
+     * @return host id
+     */
+    HostId id();
+
+    /**
+     * Returns the host MAC address.
+     *
+     * @return mac address
+     */
+    MACAddress mac();
+
+    /**
+     * Returns set of IP addresses currently bound to the host MAC address.
+     *
+     * @return set of IP addresses; empty if no IP address is bound
+     */
+    Set<IPv4> ipAddresses();
+
+    /**
+     * Returns the most recent host location where the host attaches to the
+     * network edge.
+     *
+     * @return host location
+     */
+    HostLocation location();
+
+    // TODO: explore capturing list of recent locations to aid in mobility
+
+}
diff --git a/core/api/src/main/java/org/onlab/onos/net/HostId.java b/core/api/src/main/java/org/onlab/onos/net/HostId.java
new file mode 100644
index 0000000..1c1f2d7
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/HostId.java
@@ -0,0 +1,50 @@
+package org.onlab.onos.net;
+
+import org.onlab.packet.MACAddress;
+
+import java.net.URI;
+
+/**
+ * Immutable representation of a host identity.
+ */
+public final class HostId extends ElementId {
+
+    // Public construction is prohibited
+    private HostId(URI uri) {
+        super(uri);
+    }
+
+    /**
+     * Creates a device id using the supplied URI.
+     *
+     * @param uri device URI
+     * @return host identifier
+     */
+    public static HostId hostId(URI uri) {
+        return new HostId(uri);
+    }
+
+    /**
+     * Creates a device id using the supplied URI string.
+     *
+     * @param string device URI string
+     * @return host identifier
+     */
+    public static HostId hostId(String string) {
+        return hostId(URI.create(string));
+    }
+
+    /**
+     * Creates a device id using the supplied MAC &amp; VLAN ID.
+     *
+     * @param mac    mac address
+     * @param vlanId vlan identifier
+     * @return host identifier
+     */
+    // FIXME: replace vlanId long with a rich data-type, e.g. VLanId or something like that
+    public static HostId hostId(MACAddress mac, long vlanId) {
+        // FIXME: use more efficient means of encoding
+        return hostId("nic" + ":" + mac + "/" + vlanId);
+    }
+
+}
diff --git a/net/api/src/main/java/org/onlab/onos/net/HostLocation.java b/core/api/src/main/java/org/onlab/onos/net/HostLocation.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/HostLocation.java
rename to core/api/src/main/java/org/onlab/onos/net/HostLocation.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/Link.java b/core/api/src/main/java/org/onlab/onos/net/Link.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/Link.java
rename to core/api/src/main/java/org/onlab/onos/net/Link.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/MastershipRole.java b/core/api/src/main/java/org/onlab/onos/net/MastershipRole.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/MastershipRole.java
rename to core/api/src/main/java/org/onlab/onos/net/MastershipRole.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/Path.java b/core/api/src/main/java/org/onlab/onos/net/Path.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/Path.java
rename to core/api/src/main/java/org/onlab/onos/net/Path.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/Port.java b/core/api/src/main/java/org/onlab/onos/net/Port.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/Port.java
rename to core/api/src/main/java/org/onlab/onos/net/Port.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/PortNumber.java b/core/api/src/main/java/org/onlab/onos/net/PortNumber.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/PortNumber.java
rename to core/api/src/main/java/org/onlab/onos/net/PortNumber.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/Provided.java b/core/api/src/main/java/org/onlab/onos/net/Provided.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/Provided.java
rename to core/api/src/main/java/org/onlab/onos/net/Provided.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DefaultDeviceDescription.java b/core/api/src/main/java/org/onlab/onos/net/device/DefaultDeviceDescription.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/device/DefaultDeviceDescription.java
rename to core/api/src/main/java/org/onlab/onos/net/device/DefaultDeviceDescription.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DefaultPortDescription.java b/core/api/src/main/java/org/onlab/onos/net/device/DefaultPortDescription.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/device/DefaultPortDescription.java
rename to core/api/src/main/java/org/onlab/onos/net/device/DefaultPortDescription.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DeviceAdminService.java b/core/api/src/main/java/org/onlab/onos/net/device/DeviceAdminService.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/device/DeviceAdminService.java
rename to core/api/src/main/java/org/onlab/onos/net/device/DeviceAdminService.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DeviceDescription.java b/core/api/src/main/java/org/onlab/onos/net/device/DeviceDescription.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/device/DeviceDescription.java
rename to core/api/src/main/java/org/onlab/onos/net/device/DeviceDescription.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DeviceEvent.java b/core/api/src/main/java/org/onlab/onos/net/device/DeviceEvent.java
similarity index 98%
rename from net/api/src/main/java/org/onlab/onos/net/device/DeviceEvent.java
rename to core/api/src/main/java/org/onlab/onos/net/device/DeviceEvent.java
index 10b3b19..0a33777 100644
--- a/net/api/src/main/java/org/onlab/onos/net/device/DeviceEvent.java
+++ b/core/api/src/main/java/org/onlab/onos/net/device/DeviceEvent.java
@@ -105,7 +105,7 @@
      *
      * @return port subject or null if the event is not port specific.
      */
-    Port port() {
+    public Port port() {
         return port;
     }
 
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DeviceListener.java b/core/api/src/main/java/org/onlab/onos/net/device/DeviceListener.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/device/DeviceListener.java
rename to core/api/src/main/java/org/onlab/onos/net/device/DeviceListener.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DeviceProvider.java b/core/api/src/main/java/org/onlab/onos/net/device/DeviceProvider.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/device/DeviceProvider.java
rename to core/api/src/main/java/org/onlab/onos/net/device/DeviceProvider.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DeviceProviderRegistry.java b/core/api/src/main/java/org/onlab/onos/net/device/DeviceProviderRegistry.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/device/DeviceProviderRegistry.java
rename to core/api/src/main/java/org/onlab/onos/net/device/DeviceProviderRegistry.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DeviceProviderService.java b/core/api/src/main/java/org/onlab/onos/net/device/DeviceProviderService.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/device/DeviceProviderService.java
rename to core/api/src/main/java/org/onlab/onos/net/device/DeviceProviderService.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/DeviceService.java b/core/api/src/main/java/org/onlab/onos/net/device/DeviceService.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/device/DeviceService.java
rename to core/api/src/main/java/org/onlab/onos/net/device/DeviceService.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/device/PortDescription.java b/core/api/src/main/java/org/onlab/onos/net/device/PortDescription.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/device/PortDescription.java
rename to core/api/src/main/java/org/onlab/onos/net/device/PortDescription.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/flow/FlowDescription.java b/core/api/src/main/java/org/onlab/onos/net/flow/FlowDescription.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/flow/FlowDescription.java
rename to core/api/src/main/java/org/onlab/onos/net/flow/FlowDescription.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProvider.java b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProvider.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProvider.java
rename to core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProvider.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderRegistry.java b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderRegistry.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderRegistry.java
rename to core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderRegistry.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java
rename to core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/host/HostDescription.java b/core/api/src/main/java/org/onlab/onos/net/host/HostDescription.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/host/HostDescription.java
rename to core/api/src/main/java/org/onlab/onos/net/host/HostDescription.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/host/HostEvent.java b/core/api/src/main/java/org/onlab/onos/net/host/HostEvent.java
similarity index 91%
rename from net/api/src/main/java/org/onlab/onos/net/host/HostEvent.java
rename to core/api/src/main/java/org/onlab/onos/net/host/HostEvent.java
index b06e8b8..2adfb09 100644
--- a/net/api/src/main/java/org/onlab/onos/net/host/HostEvent.java
+++ b/core/api/src/main/java/org/onlab/onos/net/host/HostEvent.java
@@ -23,6 +23,11 @@
         HOST_REMOVED,
 
         /**
+         * Signifies that host data changed, e.g. IP address
+         */
+        HOST_UPDATED,
+
+        /**
          * Signifies that a host location has changed.
          */
         HOST_MOVED
diff --git a/net/api/src/main/java/org/onlab/onos/net/host/HostListener.java b/core/api/src/main/java/org/onlab/onos/net/host/HostListener.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/host/HostListener.java
rename to core/api/src/main/java/org/onlab/onos/net/host/HostListener.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/host/HostProvider.java b/core/api/src/main/java/org/onlab/onos/net/host/HostProvider.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/host/HostProvider.java
rename to core/api/src/main/java/org/onlab/onos/net/host/HostProvider.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/host/HostProviderRegistry.java b/core/api/src/main/java/org/onlab/onos/net/host/HostProviderRegistry.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/host/HostProviderRegistry.java
rename to core/api/src/main/java/org/onlab/onos/net/host/HostProviderRegistry.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/host/HostProviderService.java b/core/api/src/main/java/org/onlab/onos/net/host/HostProviderService.java
similarity index 68%
rename from net/api/src/main/java/org/onlab/onos/net/host/HostProviderService.java
rename to core/api/src/main/java/org/onlab/onos/net/host/HostProviderService.java
index 76c2aad..ed568e8 100644
--- a/net/api/src/main/java/org/onlab/onos/net/host/HostProviderService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/host/HostProviderService.java
@@ -1,5 +1,6 @@
 package org.onlab.onos.net.host;
 
+import org.onlab.onos.net.HostId;
 import org.onlab.onos.net.provider.ProviderService;
 
 /**
@@ -11,15 +12,16 @@
      * Notifies the core when a host has been detected on a network along with
      * information that identifies the hoot location.
      *
+     * @param hostId          id of the host that been detected
      * @param hostDescription description of host and its location
      */
-    void hostDetected(HostDescription hostDescription);
+    void hostDetected(HostId hostId, HostDescription hostDescription);
 
     /**
      * Notifies the core when a host is no longer detected on a network.
      *
-     * @param hostDescription description of host
+     * @param hostId id of the host that vanished
      */
-    void hostVanished(HostDescription hostDescription);
+    void hostVanished(HostId hostId);
 
 }
diff --git a/net/api/src/main/java/org/onlab/onos/net/host/HostService.java b/core/api/src/main/java/org/onlab/onos/net/host/HostService.java
similarity index 60%
rename from net/api/src/main/java/org/onlab/onos/net/host/HostService.java
rename to core/api/src/main/java/org/onlab/onos/net/host/HostService.java
index ed94522..9ffa58a 100644
--- a/net/api/src/main/java/org/onlab/onos/net/host/HostService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/host/HostService.java
@@ -2,8 +2,10 @@
 
 import org.onlab.onos.net.ConnectPoint;
 import org.onlab.onos.net.DeviceId;
-import org.onlab.onos.net.ElementId;
 import org.onlab.onos.net.Host;
+import org.onlab.onos.net.HostId;
+import org.onlab.packet.IPv4;
+import org.onlab.packet.MACAddress;
 
 import java.util.Set;
 
@@ -13,6 +15,13 @@
 public interface HostService {
 
     /**
+     * Returns the number of end-station hosts known to the system.
+     *
+     * @return number of end-station hosts
+     */
+    public int getHostCount();
+
+    /**
      * Returns a collection of all end-station hosts.
      *
      * @return collection of hosts
@@ -25,12 +34,32 @@
      * @param hostId host identifier
      * @return host or null if one with the given identifier is not known
      */
-    Host getHost(ElementId hostId); // TODO: change to HostId
+    Host getHost(HostId hostId);
 
-    // TODO: determine which ones make sense or which we care to support
-    // Set<Host> getHostsByVlan(VlanId vlan);
-    // Set<Host> getHostsByMac(MacAddress mac);
-    // Set<Host> getHostsByIp(IpAddress ip);
+    /**
+     * Returns the set of hosts that belong to the specified VLAN.
+     *
+     * @param vlanId vlan identifier
+     * @return set of hosts in the given vlan id
+     */
+    // FIXME: change long to VLanId
+    Set<Host> getHostsByVlan(long vlanId);
+
+    /**
+     * Returns the set of hosts that have the specified MAC address.
+     *
+     * @param mac mac address
+     * @return set of hosts with the given mac
+     */
+    Set<Host> getHostsByMac(MACAddress mac);
+
+    /**
+     * Returns the set of hosts that have the specified IP address.
+     *
+     * @param ip ip address
+     * @return set of hosts with the given IP
+     */
+    Set<Host> getHostsByIp(IPv4 ip);
 
     /**
      * Returns the set of hosts whose most recent location is the specified
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/DefaultLinkDescription.java b/core/api/src/main/java/org/onlab/onos/net/link/DefaultLinkDescription.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/link/DefaultLinkDescription.java
rename to core/api/src/main/java/org/onlab/onos/net/link/DefaultLinkDescription.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/LinkAdminService.java b/core/api/src/main/java/org/onlab/onos/net/link/LinkAdminService.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/link/LinkAdminService.java
rename to core/api/src/main/java/org/onlab/onos/net/link/LinkAdminService.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/LinkDescription.java b/core/api/src/main/java/org/onlab/onos/net/link/LinkDescription.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/link/LinkDescription.java
rename to core/api/src/main/java/org/onlab/onos/net/link/LinkDescription.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/LinkEvent.java b/core/api/src/main/java/org/onlab/onos/net/link/LinkEvent.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/link/LinkEvent.java
rename to core/api/src/main/java/org/onlab/onos/net/link/LinkEvent.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/LinkListener.java b/core/api/src/main/java/org/onlab/onos/net/link/LinkListener.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/link/LinkListener.java
rename to core/api/src/main/java/org/onlab/onos/net/link/LinkListener.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/LinkProvider.java b/core/api/src/main/java/org/onlab/onos/net/link/LinkProvider.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/link/LinkProvider.java
rename to core/api/src/main/java/org/onlab/onos/net/link/LinkProvider.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/LinkProviderRegistry.java b/core/api/src/main/java/org/onlab/onos/net/link/LinkProviderRegistry.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/link/LinkProviderRegistry.java
rename to core/api/src/main/java/org/onlab/onos/net/link/LinkProviderRegistry.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/LinkProviderService.java b/core/api/src/main/java/org/onlab/onos/net/link/LinkProviderService.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/link/LinkProviderService.java
rename to core/api/src/main/java/org/onlab/onos/net/link/LinkProviderService.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/link/LinkService.java b/core/api/src/main/java/org/onlab/onos/net/link/LinkService.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/link/LinkService.java
rename to core/api/src/main/java/org/onlab/onos/net/link/LinkService.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/provider/AbstractProvider.java b/core/api/src/main/java/org/onlab/onos/net/provider/AbstractProvider.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/provider/AbstractProvider.java
rename to core/api/src/main/java/org/onlab/onos/net/provider/AbstractProvider.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/provider/AbstractProviderRegistry.java b/core/api/src/main/java/org/onlab/onos/net/provider/AbstractProviderRegistry.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/provider/AbstractProviderRegistry.java
rename to core/api/src/main/java/org/onlab/onos/net/provider/AbstractProviderRegistry.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/provider/AbstractProviderService.java b/core/api/src/main/java/org/onlab/onos/net/provider/AbstractProviderService.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/provider/AbstractProviderService.java
rename to core/api/src/main/java/org/onlab/onos/net/provider/AbstractProviderService.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/provider/Provider.java b/core/api/src/main/java/org/onlab/onos/net/provider/Provider.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/provider/Provider.java
rename to core/api/src/main/java/org/onlab/onos/net/provider/Provider.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/provider/ProviderId.java b/core/api/src/main/java/org/onlab/onos/net/provider/ProviderId.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/provider/ProviderId.java
rename to core/api/src/main/java/org/onlab/onos/net/provider/ProviderId.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/provider/ProviderRegistry.java b/core/api/src/main/java/org/onlab/onos/net/provider/ProviderRegistry.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/provider/ProviderRegistry.java
rename to core/api/src/main/java/org/onlab/onos/net/provider/ProviderRegistry.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/provider/ProviderService.java b/core/api/src/main/java/org/onlab/onos/net/provider/ProviderService.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/provider/ProviderService.java
rename to core/api/src/main/java/org/onlab/onos/net/provider/ProviderService.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/ClusterId.java b/core/api/src/main/java/org/onlab/onos/net/topology/ClusterId.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/topology/ClusterId.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/ClusterId.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/DefaultTopologyCluster.java b/core/api/src/main/java/org/onlab/onos/net/topology/DefaultTopologyCluster.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/topology/DefaultTopologyCluster.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/DefaultTopologyCluster.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java b/core/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/Topology.java b/core/api/src/main/java/org/onlab/onos/net/topology/Topology.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/topology/Topology.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/Topology.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyCluster.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyCluster.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/topology/TopologyCluster.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/TopologyCluster.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyDescription.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyDescription.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/topology/TopologyDescription.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/TopologyDescription.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyEvent.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyEvent.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/topology/TopologyEvent.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/TopologyEvent.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyListener.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyListener.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/topology/TopologyListener.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/TopologyListener.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyProvider.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyProvider.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/topology/TopologyProvider.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/TopologyProvider.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderRegistry.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderRegistry.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderRegistry.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderRegistry.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderService.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderService.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderService.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/TopologyProviderService.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java
similarity index 100%
rename from net/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java
rename to core/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java
diff --git a/net/api/src/main/javadoc/org/onlab/onos/event/package.html b/core/api/src/main/javadoc/org/onlab/onos/event/package.html
similarity index 100%
rename from net/api/src/main/javadoc/org/onlab/onos/event/package.html
rename to core/api/src/main/javadoc/org/onlab/onos/event/package.html
diff --git a/net/api/src/main/javadoc/org/onlab/onos/net/device/package.html b/core/api/src/main/javadoc/org/onlab/onos/net/device/package.html
similarity index 100%
rename from net/api/src/main/javadoc/org/onlab/onos/net/device/package.html
rename to core/api/src/main/javadoc/org/onlab/onos/net/device/package.html
diff --git a/net/api/src/main/javadoc/org/onlab/onos/net/flow/package.html b/core/api/src/main/javadoc/org/onlab/onos/net/flow/package.html
similarity index 100%
rename from net/api/src/main/javadoc/org/onlab/onos/net/flow/package.html
rename to core/api/src/main/javadoc/org/onlab/onos/net/flow/package.html
diff --git a/net/api/src/main/javadoc/org/onlab/onos/net/host/package.html b/core/api/src/main/javadoc/org/onlab/onos/net/host/package.html
similarity index 100%
rename from net/api/src/main/javadoc/org/onlab/onos/net/host/package.html
rename to core/api/src/main/javadoc/org/onlab/onos/net/host/package.html
diff --git a/net/api/src/main/javadoc/org/onlab/onos/net/link/package.html b/core/api/src/main/javadoc/org/onlab/onos/net/link/package.html
similarity index 100%
rename from net/api/src/main/javadoc/org/onlab/onos/net/link/package.html
rename to core/api/src/main/javadoc/org/onlab/onos/net/link/package.html
diff --git a/net/api/src/main/javadoc/org/onlab/onos/net/package.html b/core/api/src/main/javadoc/org/onlab/onos/net/package.html
similarity index 100%
rename from net/api/src/main/javadoc/org/onlab/onos/net/package.html
rename to core/api/src/main/javadoc/org/onlab/onos/net/package.html
diff --git a/net/api/src/main/javadoc/org/onlab/onos/net/provider/package.html b/core/api/src/main/javadoc/org/onlab/onos/net/provider/package.html
similarity index 100%
rename from net/api/src/main/javadoc/org/onlab/onos/net/provider/package.html
rename to core/api/src/main/javadoc/org/onlab/onos/net/provider/package.html
diff --git a/net/api/src/main/javadoc/org/onlab/onos/net/topology/package.html b/core/api/src/main/javadoc/org/onlab/onos/net/topology/package.html
similarity index 100%
rename from net/api/src/main/javadoc/org/onlab/onos/net/topology/package.html
rename to core/api/src/main/javadoc/org/onlab/onos/net/topology/package.html
diff --git a/net/api/src/main/javadoc/org/onlab/onos/package.html b/core/api/src/main/javadoc/org/onlab/onos/package.html
similarity index 100%
rename from net/api/src/main/javadoc/org/onlab/onos/package.html
rename to core/api/src/main/javadoc/org/onlab/onos/package.html
diff --git a/net/api/src/test/java/org/onlab/onos/event/AbstractEventTest.java b/core/api/src/test/java/org/onlab/onos/event/AbstractEventTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/event/AbstractEventTest.java
rename to core/api/src/test/java/org/onlab/onos/event/AbstractEventTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/event/AbstractListenerRegistryTest.java b/core/api/src/test/java/org/onlab/onos/event/AbstractListenerRegistryTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/event/AbstractListenerRegistryTest.java
rename to core/api/src/test/java/org/onlab/onos/event/AbstractListenerRegistryTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/event/BrokenListener.java b/core/api/src/test/java/org/onlab/onos/event/BrokenListener.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/event/BrokenListener.java
rename to core/api/src/test/java/org/onlab/onos/event/BrokenListener.java
diff --git a/net/api/src/test/java/org/onlab/onos/event/DefaultEventSinkRegistryTest.java b/core/api/src/test/java/org/onlab/onos/event/DefaultEventSinkRegistryTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/event/DefaultEventSinkRegistryTest.java
rename to core/api/src/test/java/org/onlab/onos/event/DefaultEventSinkRegistryTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/event/TestEvent.java b/core/api/src/test/java/org/onlab/onos/event/TestEvent.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/event/TestEvent.java
rename to core/api/src/test/java/org/onlab/onos/event/TestEvent.java
diff --git a/net/api/src/test/java/org/onlab/onos/event/TestListener.java b/core/api/src/test/java/org/onlab/onos/event/TestListener.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/event/TestListener.java
rename to core/api/src/test/java/org/onlab/onos/event/TestListener.java
diff --git a/net/api/src/test/java/org/onlab/onos/event/TestListenerRegistry.java b/core/api/src/test/java/org/onlab/onos/event/TestListenerRegistry.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/event/TestListenerRegistry.java
rename to core/api/src/test/java/org/onlab/onos/event/TestListenerRegistry.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/DefaultDeviceTest.java b/core/api/src/test/java/org/onlab/onos/net/DefaultDeviceTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/DefaultDeviceTest.java
rename to core/api/src/test/java/org/onlab/onos/net/DefaultDeviceTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/DefaultEdgeLinkTest.java b/core/api/src/test/java/org/onlab/onos/net/DefaultEdgeLinkTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/DefaultEdgeLinkTest.java
rename to core/api/src/test/java/org/onlab/onos/net/DefaultEdgeLinkTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/DefaultLinkTest.java b/core/api/src/test/java/org/onlab/onos/net/DefaultLinkTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/DefaultLinkTest.java
rename to core/api/src/test/java/org/onlab/onos/net/DefaultLinkTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/DefaultPortTest.java b/core/api/src/test/java/org/onlab/onos/net/DefaultPortTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/DefaultPortTest.java
rename to core/api/src/test/java/org/onlab/onos/net/DefaultPortTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/DeviceIdTest.java b/core/api/src/test/java/org/onlab/onos/net/DeviceIdTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/DeviceIdTest.java
rename to core/api/src/test/java/org/onlab/onos/net/DeviceIdTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/ElementIdTest.java b/core/api/src/test/java/org/onlab/onos/net/ElementIdTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/ElementIdTest.java
rename to core/api/src/test/java/org/onlab/onos/net/ElementIdTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/HostIdTest.java b/core/api/src/test/java/org/onlab/onos/net/HostIdTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/HostIdTest.java
rename to core/api/src/test/java/org/onlab/onos/net/HostIdTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/PortNumberTest.java b/core/api/src/test/java/org/onlab/onos/net/PortNumberTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/PortNumberTest.java
rename to core/api/src/test/java/org/onlab/onos/net/PortNumberTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/device/DefaultDeviceDescriptionTest.java b/core/api/src/test/java/org/onlab/onos/net/device/DefaultDeviceDescriptionTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/device/DefaultDeviceDescriptionTest.java
rename to core/api/src/test/java/org/onlab/onos/net/device/DefaultDeviceDescriptionTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/device/DeviceEventTest.java b/core/api/src/test/java/org/onlab/onos/net/device/DeviceEventTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/device/DeviceEventTest.java
rename to core/api/src/test/java/org/onlab/onos/net/device/DeviceEventTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/link/DefaultLinkDescriptionTest.java b/core/api/src/test/java/org/onlab/onos/net/link/DefaultLinkDescriptionTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/link/DefaultLinkDescriptionTest.java
rename to core/api/src/test/java/org/onlab/onos/net/link/DefaultLinkDescriptionTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/link/LinkEventTest.java b/core/api/src/test/java/org/onlab/onos/net/link/LinkEventTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/link/LinkEventTest.java
rename to core/api/src/test/java/org/onlab/onos/net/link/LinkEventTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/provider/AbstractProviderRegistryTest.java b/core/api/src/test/java/org/onlab/onos/net/provider/AbstractProviderRegistryTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/provider/AbstractProviderRegistryTest.java
rename to core/api/src/test/java/org/onlab/onos/net/provider/AbstractProviderRegistryTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/provider/AbstractProviderTest.java b/core/api/src/test/java/org/onlab/onos/net/provider/AbstractProviderTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/provider/AbstractProviderTest.java
rename to core/api/src/test/java/org/onlab/onos/net/provider/AbstractProviderTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/provider/ProviderIdTest.java b/core/api/src/test/java/org/onlab/onos/net/provider/ProviderIdTest.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/provider/ProviderIdTest.java
rename to core/api/src/test/java/org/onlab/onos/net/provider/ProviderIdTest.java
diff --git a/net/api/src/test/java/org/onlab/onos/net/provider/TestProvider.java b/core/api/src/test/java/org/onlab/onos/net/provider/TestProvider.java
similarity index 100%
rename from net/api/src/test/java/org/onlab/onos/net/provider/TestProvider.java
rename to core/api/src/test/java/org/onlab/onos/net/provider/TestProvider.java
diff --git a/net/pom.xml b/core/pom.xml
similarity index 93%
rename from net/pom.xml
rename to core/pom.xml
index fa146d9..13deec4 100644
--- a/net/pom.xml
+++ b/core/pom.xml
@@ -11,14 +11,14 @@
         <relativePath>../pom.xml</relativePath>
     </parent>
 
-    <artifactId>onos-net</artifactId>
+    <artifactId>onos-core</artifactId>
     <packaging>pom</packaging>
 
     <description>ONOS Core root project</description>
 
     <modules>
         <module>api</module>
-        <module>core</module>
+        <module>trivial</module>
     </modules>
 
     <dependencies>
diff --git a/net/core/pom.xml b/core/trivial/pom.xml
similarity index 73%
rename from net/core/pom.xml
rename to core/trivial/pom.xml
index 0ceaa17..1806ba4 100644
--- a/net/core/pom.xml
+++ b/core/trivial/pom.xml
@@ -6,19 +6,15 @@
 
     <parent>
         <groupId>org.onlab.onos</groupId>
-        <artifactId>onos-net</artifactId>
+        <artifactId>onos-core</artifactId>
         <version>1.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
-    <artifactId>onos-core</artifactId>
-    <packaging>pom</packaging>
+    <artifactId>onos-core-trivial</artifactId>
+    <packaging>bundle</packaging>
 
-    <description>ONOS network control core subsystems</description>
-
-    <modules>
-        <module>trivial</module>
-    </modules>
+    <description>ONOS network control trivial implementations of core subsystems</description>
 
     <dependencies>
         <dependency>
@@ -26,10 +22,6 @@
             <artifactId>onos-api</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.scr.annotations</artifactId>
         </dependency>
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/event/impl/SimpleEventDispatcher.java b/core/trivial/src/main/java/org/onlab/onos/event/impl/SimpleEventDispatcher.java
similarity index 100%
rename from net/core/trivial/src/main/java/org/onlab/onos/event/impl/SimpleEventDispatcher.java
rename to core/trivial/src/main/java/org/onlab/onos/event/impl/SimpleEventDispatcher.java
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/impl/GreetManager.java b/core/trivial/src/main/java/org/onlab/onos/impl/GreetManager.java
similarity index 100%
rename from net/core/trivial/src/main/java/org/onlab/onos/impl/GreetManager.java
rename to core/trivial/src/main/java/org/onlab/onos/impl/GreetManager.java
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/impl/SomeOtherComponent.java b/core/trivial/src/main/java/org/onlab/onos/impl/SomeOtherComponent.java
similarity index 100%
rename from net/core/trivial/src/main/java/org/onlab/onos/impl/SomeOtherComponent.java
rename to core/trivial/src/main/java/org/onlab/onos/impl/SomeOtherComponent.java
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/DefaultTopologyDescription.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/DefaultTopologyDescription.java
similarity index 100%
rename from net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/DefaultTopologyDescription.java
rename to core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/DefaultTopologyDescription.java
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
similarity index 93%
rename from net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
rename to core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
index 87a548e..c322b70 100644
--- a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
+++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
@@ -110,21 +110,6 @@
     }
 
     @Override
-    public void addListener(DeviceListener listener) {
-        listenerRegistry.addListener(listener);
-    }
-
-    @Override
-    public void removeListener(DeviceListener listener) {
-        listenerRegistry.removeListener(listener);
-    }
-
-    @Override
-    protected DeviceProviderService createProviderService(DeviceProvider provider) {
-        return new InternalDeviceProviderService(provider);
-    }
-
-    @Override
     public void setRole(DeviceId deviceId, MastershipRole newRole) {
         checkNotNull(deviceId, DEVICE_ID_NULL);
         checkNotNull(newRole, ROLE_NULL);
@@ -143,7 +128,25 @@
     public void removeDevice(DeviceId deviceId) {
         checkNotNull(deviceId, DEVICE_ID_NULL);
         DeviceEvent event = store.removeDevice(deviceId);
-        post(event);
+        if (event != null) {
+            log.info("Device {} administratively removed", deviceId);
+            post(event);
+        }
+    }
+
+    @Override
+    public void addListener(DeviceListener listener) {
+        listenerRegistry.addListener(listener);
+    }
+
+    @Override
+    public void removeListener(DeviceListener listener) {
+        listenerRegistry.removeListener(listener);
+    }
+
+    @Override
+    protected DeviceProviderService createProviderService(DeviceProvider provider) {
+        return new InternalDeviceProviderService(provider);
     }
 
     // Personalized device provider service issued to the supplied provider.
@@ -159,12 +162,12 @@
             checkNotNull(deviceId, DEVICE_ID_NULL);
             checkNotNull(deviceDescription, DEVICE_DESCRIPTION_NULL);
             checkValidity();
-            log.info("Device {} connected", deviceId);
             DeviceEvent event = store.createOrUpdateDevice(provider().id(),
                                                            deviceId, deviceDescription);
 
             // If there was a change of any kind, trigger role selection process.
             if (event != null) {
+                log.info("Device {} connected", deviceId);
                 Device device = event.subject();
                 provider().roleChanged(device, store.getRole(device.id()));
                 post(event);
@@ -175,9 +178,11 @@
         public void deviceDisconnected(DeviceId deviceId) {
             checkNotNull(deviceId, DEVICE_ID_NULL);
             checkValidity();
-            log.info("Device {} disconnected", deviceId);
             DeviceEvent event = store.markOffline(deviceId);
-            post(event);
+            if (event != null) {
+                log.info("Device {} disconnected", deviceId);
+                post(event);
+            }
         }
 
         @Override
@@ -185,7 +190,6 @@
             checkNotNull(deviceId, DEVICE_ID_NULL);
             checkNotNull(portDescriptions, "Port descriptions list cannot be null");
             checkValidity();
-            log.info("Device {} ports updated", deviceId);
             List<DeviceEvent> events = store.updatePorts(deviceId, portDescriptions);
             for (DeviceEvent event : events) {
                 post(event);
@@ -199,9 +203,10 @@
             checkValidity();
             DeviceEvent event = store.updatePortStatus(deviceId, portDescription);
             if (event != null) {
-                log.info("Device {} port status changed", deviceId);
+                log.info("Device {} port {} status changed", deviceId,
+                         event.port().number());
+                post(event);
             }
-            post(event);
         }
     }
 
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceStore.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceStore.java
similarity index 99%
rename from net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceStore.java
rename to core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceStore.java
index e219a63..6d16a61 100644
--- a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceStore.java
+++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceStore.java
@@ -28,8 +28,7 @@
 import static org.onlab.onos.net.device.DeviceEvent.Type.*;
 
 /**
- * Manages inventory of infrastructure devices using trivial in-memory
- * implementation.
+
  */
 class SimpleDeviceStore {
 
diff --git a/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleHostManager.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleHostManager.java
new file mode 100644
index 0000000..05557c5
--- /dev/null
+++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleHostManager.java
@@ -0,0 +1,166 @@
+package org.onlab.onos.net.trivial.impl;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.Service;
+import org.onlab.onos.event.AbstractListenerRegistry;
+import org.onlab.onos.event.EventDeliveryService;
+import org.onlab.onos.net.ConnectPoint;
+import org.onlab.onos.net.DeviceId;
+import org.onlab.onos.net.Host;
+import org.onlab.onos.net.HostId;
+import org.onlab.onos.net.host.HostDescription;
+import org.onlab.onos.net.host.HostEvent;
+import org.onlab.onos.net.host.HostListener;
+import org.onlab.onos.net.host.HostProvider;
+import org.onlab.onos.net.host.HostProviderRegistry;
+import org.onlab.onos.net.host.HostProviderService;
+import org.onlab.onos.net.host.HostService;
+import org.onlab.onos.net.provider.AbstractProviderRegistry;
+import org.onlab.onos.net.provider.AbstractProviderService;
+import org.onlab.packet.IPv4;
+import org.onlab.packet.MACAddress;
+import org.slf4j.Logger;
+
+import java.util.Set;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Provides basic implementation of the host SB &amp; NB APIs.
+ */
+@Component(immediate = true)
+@Service
+public class SimpleHostManager
+        extends AbstractProviderRegistry<HostProvider, HostProviderService>
+        implements HostService, HostProviderRegistry {
+
+    public static final String HOST_ID_NULL = "Host ID cannot be null";
+    private final Logger log = getLogger(getClass());
+
+    private final AbstractListenerRegistry<HostEvent, HostListener>
+            listenerRegistry = new AbstractListenerRegistry<>();
+
+    private final SimpleHostStore store = new SimpleHostStore();
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    private EventDeliveryService eventDispatcher;
+
+
+    @Activate
+    public void activate() {
+        eventDispatcher.addSink(HostEvent.class, listenerRegistry);
+        log.info("Started");
+    }
+
+    @Deactivate
+    public void deactivate() {
+        eventDispatcher.removeSink(HostEvent.class);
+        log.info("Stopped");
+    }
+
+    @Override
+    protected HostProviderService createProviderService(HostProvider provider) {
+        return new InternalHostProviderService(provider);
+    }
+
+    @Override
+    public int getHostCount() {
+        return store.getHostCount();
+    }
+
+    @Override
+    public Iterable<Host> getHosts() {
+        return store.getHosts();
+    }
+
+    @Override
+    public Host getHost(HostId hostId) {
+        checkNotNull(hostId, HOST_ID_NULL);
+        return store.getHost(hostId);
+    }
+
+    @Override
+    public Set<Host> getHostsByVlan(long vlanId) {
+        return store.getHosts(vlanId);
+    }
+
+    @Override
+    public Set<Host> getHostsByMac(MACAddress mac) {
+        checkNotNull(mac, "MAC address cannot be null");
+        return store.getHosts(mac);
+    }
+
+    @Override
+    public Set<Host> getHostsByIp(IPv4 ip) {
+        checkNotNull(ip, "IP address cannot be null");
+        return store.getHosts(ip);
+    }
+
+    @Override
+    public Set<Host> getConnectedHosts(ConnectPoint connectPoint) {
+        checkNotNull(connectPoint, "Connection point cannot be null");
+        return store.getConnectedHosts(connectPoint);
+    }
+
+    @Override
+    public Set<Host> getConnectedHosts(DeviceId deviceId) {
+        checkNotNull(deviceId, "Device ID cannot be null");
+        return store.getConnectedHosts(deviceId);
+    }
+
+    @Override
+    public void addListener(HostListener listener) {
+        listenerRegistry.addListener(listener);
+    }
+
+    @Override
+    public void removeListener(HostListener listener) {
+        listenerRegistry.removeListener(listener);
+    }
+
+    // Personalized host provider service issued to the supplied provider.
+    private class InternalHostProviderService
+            extends AbstractProviderService<HostProvider>
+            implements HostProviderService {
+
+        InternalHostProviderService(HostProvider provider) {
+            super(provider);
+        }
+
+        @Override
+        public void hostDetected(HostId hostId, HostDescription hostDescription) {
+            checkNotNull(hostId, HOST_ID_NULL);
+            checkValidity();
+            HostEvent event = store.createOrUpdateHost(provider().id(), hostId,
+                                                       hostDescription);
+            if (event != null) {
+                log.info("Host {} detected", hostId);
+                post(event);
+            }
+        }
+
+        @Override
+        public void hostVanished(HostId hostId) {
+            checkNotNull(hostId, HOST_ID_NULL);
+            checkValidity();
+            HostEvent event = store.removeHost(hostId);
+            if (event != null) {
+                log.info("Host {} vanished", hostId);
+                post(event);
+            }
+        }
+    }
+
+    // Posts the specified event to the local event dispatcher.
+    private void post(HostEvent event) {
+        if (event != null && eventDispatcher != null) {
+            eventDispatcher.post(event);
+        }
+    }
+
+}
diff --git a/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleHostStore.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleHostStore.java
new file mode 100644
index 0000000..127aad1
--- /dev/null
+++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleHostStore.java
@@ -0,0 +1,127 @@
+package org.onlab.onos.net.trivial.impl;
+
+import org.onlab.onos.net.ConnectPoint;
+import org.onlab.onos.net.DeviceId;
+import org.onlab.onos.net.Host;
+import org.onlab.onos.net.HostId;
+import org.onlab.onos.net.host.HostDescription;
+import org.onlab.onos.net.host.HostEvent;
+import org.onlab.onos.net.provider.ProviderId;
+import org.onlab.packet.IPv4;
+import org.onlab.packet.MACAddress;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Manages inventory of end-station hosts using trivial in-memory
+ * implementation.
+ */
+public class SimpleHostStore {
+
+    private final Map<HostId, Host> hosts = new ConcurrentHashMap<>();
+
+    /**
+     * Creates a new host or updates the existing one based on the specified
+     * description.
+     *
+     * @param providerId      provider identification
+     * @param hostId          host identification
+     * @param hostDescription host description data
+     * @return appropriate event or null if no change resulted
+     */
+    HostEvent createOrUpdateHost(ProviderId providerId, HostId hostId,
+                                 HostDescription hostDescription) {
+        return null;
+    }
+
+    /**
+     * Removes the specified host from the inventory.
+     *
+     * @param hostId host identification
+     * @return remove even or null if host was not found
+     */
+    HostEvent removeHost(HostId hostId) {
+        return null;
+    }
+
+    /**
+     * Returns the number of hosts in the store.
+     *
+     * @return host count
+     */
+    int getHostCount() {
+        return hosts.size();
+    }
+
+    /**
+     * Returns a collection of all hosts in the store.
+     *
+     * @return iterable collection of all hosts
+     */
+    Iterable<Host> getHosts() {
+        return null;
+    }
+
+    /**
+     * Returns the host with the specified identifer.
+     *
+     * @param hostId host identification
+     * @return host or null if not found
+     */
+    Host getHost(HostId hostId) {
+        return null;
+    }
+
+    /**
+     * Returns the set of all hosts within the specified VLAN.
+     *
+     * @param vlanId vlan id
+     * @return set of hosts in the vlan
+     */
+    Set<Host> getHosts(long vlanId) {
+        return null;
+    }
+
+    /**
+     * Returns the set of hosts with the specified MAC address.
+     *
+     * @param mac mac address
+     * @return set of hosts with the given mac
+     */
+    Set<Host> getHosts(MACAddress mac) {
+        return null;
+    }
+
+    /**
+     * Returns the set of hosts with the specified IP address.
+     *
+     * @param ip ip address
+     * @return set of hosts with the given IP
+     */
+    Set<Host> getHosts(IPv4 ip) {
+        return null;
+    }
+
+    /**
+     * Returns the set of hosts whose location falls on the given connection point.
+     *
+     * @param connectPoint connection point
+     * @return set of hosts
+     */
+    Set<Host> getConnectedHosts(ConnectPoint connectPoint) {
+        return null;
+    }
+
+    /**
+     * Returns the set of hosts whose location falls on the given device.
+     *
+     * @param deviceId infrastructure device identifier
+     * @return set of hosts
+     */
+    public Set<Host> getConnectedHosts(DeviceId deviceId) {
+        return null;
+    }
+
+}
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkManager.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkManager.java
similarity index 99%
rename from net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkManager.java
rename to core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkManager.java
index 88d0663..d900c5b 100644
--- a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkManager.java
+++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkManager.java
@@ -66,11 +66,6 @@
     }
 
     @Override
-    protected LinkProviderService createProviderService(LinkProvider provider) {
-        return new InternalLinkProviderService(provider);
-    }
-
-    @Override
     public int getLinkCount() {
         return store.getLinkCount();
     }
@@ -145,6 +140,11 @@
         listenerRegistry.removeListener(listener);
     }
 
+    @Override
+    protected LinkProviderService createProviderService(LinkProvider provider) {
+        return new InternalLinkProviderService(provider);
+    }
+
     // Personalized link provider service issued to the supplied provider.
     private class InternalLinkProviderService extends AbstractProviderService<LinkProvider>
     implements LinkProviderService {
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkStore.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkStore.java
similarity index 100%
rename from net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkStore.java
rename to core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkStore.java
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleTopologyManager.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleTopologyManager.java
similarity index 98%
rename from net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleTopologyManager.java
rename to core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleTopologyManager.java
index 1ea0638..1e95598 100644
--- a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleTopologyManager.java
+++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleTopologyManager.java
@@ -53,6 +53,8 @@
     private final AbstractListenerRegistry<TopologyEvent, TopologyListener>
             listenerRegistry = new AbstractListenerRegistry<>();
 
+    private final SimpleTopologyStore store = new SimpleTopologyStore();
+
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     private EventDeliveryService eventDispatcher;
 
diff --git a/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleTopologyStore.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleTopologyStore.java
new file mode 100644
index 0000000..1a54cad
--- /dev/null
+++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleTopologyStore.java
@@ -0,0 +1,8 @@
+package org.onlab.onos.net.trivial.impl;
+
+/**
+ * Manages inventory of topology snapshots using trivial in-memory
+ * implementation.
+ */
+public class SimpleTopologyStore {
+}
diff --git a/net/core/trivial/src/main/javadoc/org/onlab/onos/event/impl/package.html b/core/trivial/src/main/javadoc/org/onlab/onos/event/impl/package.html
similarity index 100%
rename from net/core/trivial/src/main/javadoc/org/onlab/onos/event/impl/package.html
rename to core/trivial/src/main/javadoc/org/onlab/onos/event/impl/package.html
diff --git a/net/core/trivial/src/main/javadoc/org/onlab/onos/impl/package.html b/core/trivial/src/main/javadoc/org/onlab/onos/impl/package.html
similarity index 100%
rename from net/core/trivial/src/main/javadoc/org/onlab/onos/impl/package.html
rename to core/trivial/src/main/javadoc/org/onlab/onos/impl/package.html
diff --git a/net/core/trivial/src/main/javadoc/org/onlab/onos/net/trivial/impl/package.html b/core/trivial/src/main/javadoc/org/onlab/onos/net/trivial/impl/package.html
similarity index 100%
rename from net/core/trivial/src/main/javadoc/org/onlab/onos/net/trivial/impl/package.html
rename to core/trivial/src/main/javadoc/org/onlab/onos/net/trivial/impl/package.html
diff --git a/net/core/trivial/src/test/java/org/onlab/onos/impl/GreetManagerTest.java b/core/trivial/src/test/java/org/onlab/onos/impl/GreetManagerTest.java
similarity index 100%
rename from net/core/trivial/src/test/java/org/onlab/onos/impl/GreetManagerTest.java
rename to core/trivial/src/test/java/org/onlab/onos/impl/GreetManagerTest.java
diff --git a/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java b/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java
similarity index 100%
rename from net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java
rename to core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java
diff --git a/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleLinkManagerTest.java b/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleLinkManagerTest.java
similarity index 100%
rename from net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleLinkManagerTest.java
rename to core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleLinkManagerTest.java
diff --git a/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/TestEventDispatcher.java b/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/TestEventDispatcher.java
similarity index 100%
rename from net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/TestEventDispatcher.java
rename to core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/TestEventDispatcher.java
diff --git a/net/api/src/main/java/org/onlab/onos/net/Host.java b/net/api/src/main/java/org/onlab/onos/net/Host.java
deleted file mode 100644
index 17eaf22..0000000
--- a/net/api/src/main/java/org/onlab/onos/net/Host.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.onlab.onos.net;
-
-/**
- * Abstraction of an end-station host on the network, essentially a NIC.
- */
-public interface Host extends Element {
-
-    // MAC, IP(s), optional VLAN ID
-
-
-    /**
-     * Returns the most recent host location where the host attaches to the
-     * network edge.
-     *
-     * @return host location
-     */
-    HostLocation location();
-
-    // list of recent locations?
-
-}
diff --git a/net/api/src/main/java/org/onlab/onos/net/HostId.java b/net/api/src/main/java/org/onlab/onos/net/HostId.java
deleted file mode 100644
index 3e274b3..0000000
--- a/net/api/src/main/java/org/onlab/onos/net/HostId.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.onlab.onos.net;
-
-import java.net.URI;
-
-/**
- * Immutable representation of a host identity.
- */
-public final class HostId extends ElementId {
-
-    // Public construction is prohibited
-    private HostId(URI uri) {
-        super(uri);
-    }
-
-    /**
-     * Creates a device id using the supplied URI.
-     *
-     * @param uri device URI
-     */
-    public static HostId hostId(URI uri) {
-        return new HostId(uri);
-    }
-
-    /**
-     * Creates a device id using the supplied URI string.
-     *
-     * @param string device URI string
-     */
-    public static HostId hostId(String string) {
-        return hostId(URI.create(string));
-    }
-
-}
diff --git a/net/core/trivial/pom.xml b/net/core/trivial/pom.xml
deleted file mode 100644
index d4998ba..0000000
--- a/net/core/trivial/pom.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<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/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.onlab.onos</groupId>
-        <artifactId>onos-core</artifactId>
-        <version>1.0.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>onos-core-trivial</artifactId>
-    <packaging>bundle</packaging>
-
-    <description>ONOS network control trivial implementations of core subsystems</description>
-
-</project>
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleHostManager.java b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleHostManager.java
deleted file mode 100644
index 17849b1..0000000
--- a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleHostManager.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.onlab.onos.net.trivial.impl;
-
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.Service;
-import org.onlab.onos.event.AbstractListenerRegistry;
-import org.onlab.onos.event.EventDeliveryService;
-import org.onlab.onos.net.host.HostDescription;
-import org.onlab.onos.net.host.HostEvent;
-import org.onlab.onos.net.host.HostListener;
-import org.onlab.onos.net.host.HostProvider;
-import org.onlab.onos.net.host.HostProviderRegistry;
-import org.onlab.onos.net.host.HostProviderService;
-import org.onlab.onos.net.provider.AbstractProviderRegistry;
-import org.onlab.onos.net.provider.AbstractProviderService;
-import org.slf4j.Logger;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Provides basic implementation of the host SB &amp; NB APIs.
- */
-@Component(immediate = true)
-@Service
-public class SimpleHostManager
-        extends AbstractProviderRegistry<HostProvider, HostProviderService>
-        implements HostProviderRegistry {
-
-    private final Logger log = getLogger(getClass());
-
-    private final AbstractListenerRegistry<HostEvent, HostListener>
-            listenerRegistry = new AbstractListenerRegistry<>();
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    private EventDeliveryService eventDispatcher;
-
-
-    @Activate
-    public void activate() {
-        eventDispatcher.addSink(HostEvent.class, listenerRegistry);
-        log.info("Started");
-    }
-
-    @Deactivate
-    public void deactivate() {
-        eventDispatcher.removeSink(HostEvent.class);
-        log.info("Stopped");
-    }
-
-    @Override
-    protected HostProviderService createProviderService(HostProvider provider) {
-        return new InternalHostProviderService(provider);
-    }
-
-    // Personalized host provider service issued to the supplied provider.
-    private class InternalHostProviderService extends AbstractProviderService<HostProvider>
-            implements HostProviderService {
-
-        InternalHostProviderService(HostProvider provider) {
-            super(provider);
-        }
-
-        @Override
-        public void hostDetected(HostDescription hostDescription) {
-            log.info("Host {} detected", hostDescription);
-        }
-
-        @Override
-        public void hostVanished(HostDescription hostDescription) {
-            log.info("Host {} vanished", hostDescription);
-        }
-    }
-}
diff --git a/pom.xml b/pom.xml
index 9fc49c8..3ec7f1c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
     <modules>
         <module>tools/build/conf</module>
         <module>utils</module>
-        <module>net</module>
+        <module>core</module>
         <module>web</module>
         <module>cli</module>
         <module>providers</module>
diff --git a/src/main/javadoc/doc-files/onos-tiers.png b/src/main/javadoc/doc-files/onos-tiers.png
new file mode 100644
index 0000000..bbacfc8
--- /dev/null
+++ b/src/main/javadoc/doc-files/onos-tiers.png
Binary files differ