diff --git a/core/api/src/main/java/org/onosproject/net/host/DefaultHostDescription.java b/core/api/src/main/java/org/onosproject/net/host/DefaultHostDescription.java
index c83c2c1..74fa9f4 100644
--- a/core/api/src/main/java/org/onosproject/net/host/DefaultHostDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/host/DefaultHostDescription.java
@@ -18,6 +18,7 @@
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashSet;
+import java.util.Objects;
 import java.util.Set;
 
 import org.onlab.packet.EthType;
@@ -31,7 +32,6 @@
 import com.google.common.collect.ImmutableSet;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
-import com.google.common.base.Objects;
 
 /**
  * Default implementation of an immutable host description.
@@ -42,6 +42,7 @@
     private final MacAddress mac;
     private final VlanId vlan;
     private final Set<HostLocation> locations;
+    private final Set<HostLocation> auxLocations;
     private final Set<IpAddress> ip;
     private final VlanId innerVlan;
     private final EthType tpid;
@@ -157,10 +158,31 @@
     public DefaultHostDescription(MacAddress mac, VlanId vlan, Set<HostLocation> locations,
                                   Set<IpAddress> ip, VlanId innerVlan, EthType tpid,
                                   boolean configured, SparseAnnotations... annotations) {
+        this(mac, vlan, locations, null, ip, innerVlan, tpid, configured, annotations);
+    }
+
+    /**
+     * Creates a host description using the supplied information.
+     *
+     * @param mac          host MAC address
+     * @param vlan         host VLAN identifier
+     * @param locations    host locations
+     * @param auxLocations  set of auxiliary locations, or null if unspecified
+     * @param ip           host IP address
+     * @param innerVlan    host inner VLAN identifier
+     * @param tpid         outer TPID of a host
+     * @param configured   true if configured via NetworkConfiguration
+     * @param annotations  optional key/value annotations map
+     */
+    public DefaultHostDescription(MacAddress mac, VlanId vlan,
+                                  Set<HostLocation> locations, Set<HostLocation> auxLocations,
+                                  Set<IpAddress> ip, VlanId innerVlan, EthType tpid,
+                                  boolean configured, SparseAnnotations... annotations) {
         super(annotations);
         this.mac = mac;
         this.vlan = vlan;
         this.locations = new HashSet<>(locations);
+        this.auxLocations = (auxLocations != null) ? new HashSet<>(auxLocations) : null;
         this.ip = new HashSet<>(ip);
         this.innerVlan = innerVlan;
         this.tpid = tpid;
@@ -212,6 +234,11 @@
     }
 
     @Override
+    public Set<HostLocation> auxLocations() {
+        return auxLocations;
+    }
+
+    @Override
     public Set<IpAddress> ipAddress() {
         return ip;
     }
@@ -237,6 +264,7 @@
                 .add("mac", mac)
                 .add("vlan", vlan)
                 .add("locations", locations)
+                .add("auxLocations", auxLocations)
                 .add("ipAddress", ip)
                 .add("configured", configured)
                 .add("innerVlanId", innerVlan)
@@ -246,7 +274,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hashCode(super.hashCode(), mac, vlan, locations, ip);
+        return Objects.hash(super.hashCode(), mac, vlan, locations, auxLocations, ip);
     }
 
     @Override
@@ -256,12 +284,13 @@
                 return false;
             }
             DefaultHostDescription that = (DefaultHostDescription) object;
-            return Objects.equal(this.mac, that.mac)
-                    && Objects.equal(this.vlan, that.vlan)
-                    && Objects.equal(this.locations, that.locations)
-                    && Objects.equal(this.ip, that.ip)
-                    && Objects.equal(this.innerVlan, that.innerVlan)
-                    && Objects.equal(this.tpid, that.tpid);
+            return Objects.equals(this.mac, that.mac)
+                    && Objects.equals(this.vlan, that.vlan)
+                    && Objects.equals(this.locations, that.locations)
+                    && Objects.equals(this.auxLocations, that.auxLocations)
+                    && Objects.equals(this.ip, that.ip)
+                    && Objects.equals(this.innerVlan, that.innerVlan)
+                    && Objects.equals(this.tpid, that.tpid);
         }
         return false;
     }
diff --git a/core/api/src/main/java/org/onosproject/net/host/HostDescription.java b/core/api/src/main/java/org/onosproject/net/host/HostDescription.java
index 543836e..322b57d 100644
--- a/core/api/src/main/java/org/onosproject/net/host/HostDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/host/HostDescription.java
@@ -76,6 +76,13 @@
     Set<HostLocation> locations();
 
     /**
+     * Returns host auxiliary locations, which could be useful for app operations in addition to the attach points.
+     *
+     * @return auxiliary locations, or null if unspecified
+     */
+    Set<HostLocation> auxLocations();
+
+    /**
      * Returns the IP address associated with this host's MAC.
      *
      * @return host IP address
diff --git a/core/api/src/main/java/org/onosproject/net/host/HostEvent.java b/core/api/src/main/java/org/onosproject/net/host/HostEvent.java
index 0fecf2b..132ac11 100644
--- a/core/api/src/main/java/org/onosproject/net/host/HostEvent.java
+++ b/core/api/src/main/java/org/onosproject/net/host/HostEvent.java
@@ -56,7 +56,11 @@
         /**
          * Signifies that host state in non offending state.
          */
-        HOST_UNSUSPENDED
+        HOST_UNSUSPENDED,
+        /**
+         * Signifies that host auxiliary location has changed.
+         */
+        HOST_AUX_MOVED
     }
 
     private Host prevSubject;
@@ -94,7 +98,7 @@
      */
     public HostEvent(Type type, Host host, Host prevSubject) {
         super(type, host);
-        if (type == Type.HOST_MOVED || type == Type.HOST_UPDATED) {
+        if (type == Type.HOST_MOVED || type == Type.HOST_UPDATED || type == Type.HOST_AUX_MOVED) {
             this.prevSubject = prevSubject;
         }
     }
diff --git a/core/api/src/main/java/org/onosproject/net/host/HostService.java b/core/api/src/main/java/org/onosproject/net/host/HostService.java
index 55532bc..349f6db 100644
--- a/core/api/src/main/java/org/onosproject/net/host/HostService.java
+++ b/core/api/src/main/java/org/onosproject/net/host/HostService.java
@@ -81,8 +81,7 @@
     // TODO: consider adding Host getHostByIp(IpAddress ip, VlanId vlan);
 
     /**
-     * Returns the set of hosts whose most recent location is the specified
-     * connection point.
+     * Returns the set of hosts that attach to the specified connection point.
      *
      * @param connectPoint connection point
      * @return set of hosts connected to the connection point
@@ -90,8 +89,7 @@
     Set<Host> getConnectedHosts(ConnectPoint connectPoint);
 
     /**
-     * Returns the set of hosts whose most recent location is the specified
-     * infrastructure device.
+     * Returns the set of hosts that attach to the specified device.
      *
      * @param deviceId device identifier
      * @return set of hosts connected to the device
diff --git a/core/api/src/main/java/org/onosproject/net/host/HostStore.java b/core/api/src/main/java/org/onosproject/net/host/HostStore.java
index 6d6eb11..b6b27b5 100644
--- a/core/api/src/main/java/org/onosproject/net/host/HostStore.java
+++ b/core/api/src/main/java/org/onosproject/net/host/HostStore.java
@@ -127,7 +127,7 @@
     Set<Host> getHosts(IpAddress ip);
 
     /**
-     * Returns the set of hosts whose location falls on the given connection point.
+     * Returns the set of hosts that attach to the specified connection point.
      *
      * @param connectPoint connection point
      * @return set of hosts
@@ -135,7 +135,7 @@
     Set<Host> getConnectedHosts(ConnectPoint connectPoint);
 
     /**
-     * Returns the set of hosts whose location falls on the given device.
+     * Returns the set of hosts that attach to the specified device.
      *
      * @param deviceId infrastructure device identifier
      * @return set of hosts
