diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleHostStore.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleHostStore.java
index 93fa3f0..e1fea28 100644
--- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleHostStore.java
+++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleHostStore.java
@@ -106,6 +106,7 @@
                                             descr.vlan(),
                                             descr.location(),
                                             ImmutableSet.copyOf(descr.ipAddress()),
+                                            descr.configured(),
                                             descr.annotations());
         synchronized (this) {
             hosts.put(hostId, newhost);
@@ -141,6 +142,7 @@
         StoredHost updated = new StoredHost(providerId, host.id(),
                                             host.mac(), host.vlan(),
                                             descr.location(), addresses,
+                                            descr.configured(),
                                             annotations);
         event = new HostEvent(HOST_UPDATED, updated);
         synchronized (this) {
@@ -257,8 +259,8 @@
          */
         public StoredHost(ProviderId providerId, HostId id,
                           MacAddress mac, VlanId vlan, HostLocation location,
-                          Set<IpAddress> ips, Annotations... annotations) {
-            super(providerId, id, mac, vlan, location, ips, annotations);
+                          Set<IpAddress> ips, boolean configured, Annotations... annotations) {
+            super(providerId, id, mac, vlan, location, ips, configured, annotations);
             this.location = location;
         }
 
diff --git a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
index 66159f7..b7a38e6 100644
--- a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
+++ b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
@@ -464,10 +464,13 @@
             store.removePendingHostLocation(probeMac);
         }
 
+        /**
+         * Providers should only be able to remove a host that is provided by itself,
+         * or a host that is not configured.
+         */
         private boolean allowedToChange(HostId hostId) {
-            // Disallow removing inexistent host or host provided by others
             Host host = store.getHost(hostId);
-            return host != null && host.providerId().equals(provider().id());
+            return host == null || !host.configured() || host.providerId().equals(provider().id());
         }
     }
 
diff --git a/core/net/src/test/java/org/onosproject/net/host/impl/HostManagerTest.java b/core/net/src/test/java/org/onosproject/net/host/impl/HostManagerTest.java
index ba27dcb..f2beda1 100644
--- a/core/net/src/test/java/org/onosproject/net/host/impl/HostManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/host/impl/HostManagerTest.java
@@ -259,7 +259,8 @@
     }
 
     /**
-     * Providers should only be able to remove a host provided by itself.
+     * Providers should only be able to remove a host that is provided by itself,
+     * or a host that is not configured.
      */
     @Test
     public void hostVanishedWithMultipleProviders() {
@@ -267,16 +268,15 @@
         configured(HID2, MAC2, VLAN2, LOC2, IP2);
 
         providerService2.hostVanished(HID1);
-        assertNotNull("host should not be removed", mgr.getHost(HID1));
+        assertNull("Should be able to remove learnt host", mgr.getHost(HID1));
 
         providerService.hostVanished(HID2);
-        assertNotNull("host should not be removed", mgr.getHost(HID2));
-
-        providerService.hostVanished(HID1);
-        assertNull("host should be removed", mgr.getHost(HID1));
+        assertNotNull("Should not be able to remove configured host since the provider is different",
+                mgr.getHost(HID2));
 
         providerService2.hostVanished(HID2);
-        assertNull("host should be removed", mgr.getHost(HID2));
+        assertNull("Should be able to remove configured host when provider is the same",
+                mgr.getHost(HID2));
     }
 
     private void validateHosts(
