Cleaned up some of the host-related abstractions and filled in more of the host manager implementation.
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
index 17eaf22..d66566d 100644
--- a/core/api/src/main/java/org/onlab/onos/net/Host.java
+++ b/core/api/src/main/java/org/onlab/onos/net/Host.java
@@ -1,12 +1,35 @@
 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 {
 
-    // MAC, IP(s), optional VLAN ID
+    /**
+     * 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
@@ -16,6 +39,6 @@
      */
     HostLocation location();
 
-    // list of recent locations?
+    // 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
index 3e274b3..1c1f2d7 100644
--- a/core/api/src/main/java/org/onlab/onos/net/HostId.java
+++ b/core/api/src/main/java/org/onlab/onos/net/HostId.java
@@ -1,5 +1,7 @@
 package org.onlab.onos.net;
 
+import org.onlab.packet.MACAddress;
+
 import java.net.URI;
 
 /**
@@ -16,6 +18,7 @@
      * 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);
@@ -25,9 +28,23 @@
      * 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/core/api/src/main/java/org/onlab/onos/net/host/HostEvent.java b/core/api/src/main/java/org/onlab/onos/net/host/HostEvent.java
index b06e8b8..2adfb09 100644
--- a/core/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/core/api/src/main/java/org/onlab/onos/net/host/HostProviderService.java b/core/api/src/main/java/org/onlab/onos/net/host/HostProviderService.java
index 76c2aad..ed568e8 100644
--- a/core/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/core/api/src/main/java/org/onlab/onos/net/host/HostService.java b/core/api/src/main/java/org/onlab/onos/net/host/HostService.java
index ed94522..9ffa58a 100644
--- a/core/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