diff --git a/core/api/src/main/java/org/onosproject/net/DefaultHost.java b/core/api/src/main/java/org/onosproject/net/DefaultHost.java
index 8e6c195..5c28a04 100644
--- a/core/api/src/main/java/org/onosproject/net/DefaultHost.java
+++ b/core/api/src/main/java/org/onosproject/net/DefaultHost.java
@@ -37,6 +37,7 @@
     private final MacAddress mac;
     private final VlanId vlan;
     private final Set<HostLocation> locations;
+    private final Set<HostLocation> auxLocations;
     private final Set<IpAddress> ips;
     private final VlanId innerVlan;
     private final EthType tpid;
@@ -116,15 +117,7 @@
     public DefaultHost(ProviderId providerId, HostId id, MacAddress mac, VlanId vlan,
                        Set<HostLocation> locations, Set<IpAddress> ips, VlanId innerVlan,
                        EthType tpid, boolean configured, Annotations... annotations) {
-        super(providerId, id, annotations);
-        this.mac = mac;
-        this.vlan = vlan;
-        this.locations = new HashSet<>(locations);
-        this.ips = new HashSet<>(ips);
-        this.configured = configured;
-        this.innerVlan = innerVlan;
-        this.tpid = tpid;
-        this.suspended = false;
+        this(providerId, id, mac, vlan, locations, ips, innerVlan, tpid, configured, false, annotations);
     }
 
     /**
@@ -145,10 +138,34 @@
     public DefaultHost(ProviderId providerId, HostId id, MacAddress mac,
                        VlanId vlan, Set<HostLocation> locations, Set<IpAddress> ips, VlanId innerVlan,
                        EthType tpid, boolean configured, boolean suspended, Annotations... annotations) {
+        this(providerId, id, mac, vlan, locations, null, ips, innerVlan, tpid, configured, suspended, annotations);
+    }
+
+    /**
+     * Creates an end-station host using the supplied information.
+     *
+     * @param providerId    provider identity
+     * @param id            host identifier
+     * @param mac           host MAC address
+     * @param vlan          host VLAN identifier
+     * @param locations     set of host locations
+     * @param auxLocations  set of auxiliary locations, or null if unspecified
+     * @param ips           host IP addresses
+     * @param configured    true if configured via NetworkConfiguration
+     * @param innerVlan     host inner VLAN identifier
+     * @param tpid          outer TPID of a host
+     * @param suspended     true if the host is suspended due to policy violation.
+     * @param annotations   optional key/value annotations
+     */
+    public DefaultHost(ProviderId providerId, HostId id, MacAddress mac,
+                       VlanId vlan, Set<HostLocation> locations, Set<HostLocation> auxLocations,
+                       Set<IpAddress> ips, VlanId innerVlan,
+                       EthType tpid, boolean configured, boolean suspended, Annotations... annotations) {
         super(providerId, id, annotations);
         this.mac = mac;
         this.vlan = vlan;
         this.locations = new HashSet<>(locations);
+        this.auxLocations = (auxLocations != null) ? new HashSet<>(auxLocations) : null;
         this.ips = new HashSet<>(ips);
         this.configured = configured;
         this.innerVlan = innerVlan;
@@ -188,6 +205,11 @@
     }
 
     @Override
+    public Set<HostLocation> auxLocations() {
+        return auxLocations;
+    }
+
+    @Override
     public VlanId vlan() {
         return vlan;
     }
@@ -215,7 +237,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(id, mac, vlan, locations, suspended);
+        return Objects.hash(id, mac, vlan, locations, auxLocations, ips, innerVlan, tpid, suspended);
     }
 
     @Override
@@ -229,6 +251,7 @@
                     Objects.equals(this.mac, other.mac) &&
                     Objects.equals(this.vlan, other.vlan) &&
                     Objects.equals(this.locations, other.locations) &&
+                    Objects.equals(this.auxLocations, other.auxLocations) &&
                     Objects.equals(this.ipAddresses(), other.ipAddresses()) &&
                     Objects.equals(this.innerVlan, other.innerVlan) &&
                     Objects.equals(this.tpid, other.tpid) &&
@@ -245,6 +268,7 @@
                 .add("mac", mac())
                 .add("vlan", vlan())
                 .add("locations", locations())
+                .add("auxLocations", auxLocations())
                 .add("ipAddresses", ipAddresses())
                 .add("annotations", annotations())
                 .add("configured", configured())
diff --git a/core/api/src/main/java/org/onosproject/net/Host.java b/core/api/src/main/java/org/onosproject/net/Host.java
index d4a922e..bf49bd9 100644
--- a/core/api/src/main/java/org/onosproject/net/Host.java
+++ b/core/api/src/main/java/org/onosproject/net/Host.java
@@ -65,13 +65,20 @@
     HostLocation location();
 
     /**
-     * Returns all host locations where the host attaches to the network edge.
+     * Returns host locations where the host attaches to the network edge.
      *
-     * @return all host locations
+     * @return host locations
      */
     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 true if configured by NetworkConfiguration.
      *
      * @return configured/learnt dynamically
@@ -106,5 +113,4 @@
      */
     boolean suspended();
 
-
 }
