diff --git a/core/store/dist/src/main/java/org/onosproject/store/host/impl/DistributedHostStore.java b/core/store/dist/src/main/java/org/onosproject/store/host/impl/DistributedHostStore.java
index c65ca4b..b3101dd 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/host/impl/DistributedHostStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/host/impl/DistributedHostStore.java
@@ -205,14 +205,11 @@
                            }
 
                            final Annotations annotations;
-                           final boolean configured;
                            if (existingHost != null) {
                                annotations = merge((DefaultAnnotations) existingHost.annotations(),
                                        hostDescription.annotations());
-                               configured = existingHost.configured();
                            } else {
                                annotations = hostDescription.annotations();
-                               configured = hostDescription.configured();
                            }
 
                            return new DefaultHost(providerId,
@@ -221,7 +218,7 @@
                                                   hostDescription.vlan(),
                                                   location,
                                                   addresses,
-                                                  configured,
+                                                  hostDescription.configured(),
                                                   annotations);
                        });
         return null;
diff --git a/core/store/dist/src/test/java/org/onosproject/store/host/impl/DistributedHostStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/host/impl/DistributedHostStoreTest.java
index 99f2947..fa61a19 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/host/impl/DistributedHostStoreTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/host/impl/DistributedHostStoreTest.java
@@ -34,6 +34,7 @@
 import java.util.Set;
 
 import static junit.framework.TestCase.assertTrue;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 
 /**
@@ -50,6 +51,12 @@
     private static final IpAddress IP2 = IpAddress.valueOf("10.2.0.3");
 
     private static final ProviderId PID = new ProviderId("of", "foo");
+    private static final ProviderId PID2 = new ProviderId("of", "foo2");
+
+    private static final HostDescription HOST_LEARNT =
+            createHostDesc(HOSTID, Sets.newHashSet(IP1), false);
+    private static final HostDescription HOST_CONFIGURED =
+            createHostDesc(HOSTID, Sets.newHashSet(IP1), true);
 
     @Before
     public void setUp() {
@@ -118,11 +125,37 @@
         assertTrue(hosts.size() == 0);
     }
 
-    private HostDescription createHostDesc(HostId hostId, Set<IpAddress> ips) {
+    @Test
+    public void testHostOverride() {
+        Host hostInStore;
+        ecXHostStore.createOrUpdateHost(PID, HOSTID, HOST_LEARNT, false);
+        hostInStore = ecXHostStore.getHost(HOSTID);
+        assertFalse(hostInStore.configured());
+        assertEquals(PID, hostInStore.providerId());
+
+        // Expect: configured host should override learnt host
+        ecXHostStore.createOrUpdateHost(PID2, HOSTID, HOST_CONFIGURED, true);
+        hostInStore = ecXHostStore.getHost(HOSTID);
+        assertTrue(hostInStore.configured());
+        assertEquals(PID2, hostInStore.providerId());
+
+        // Expect: learnt host should not override configured host
+        ecXHostStore.createOrUpdateHost(PID, HOSTID, HOST_LEARNT, false);
+        hostInStore = ecXHostStore.getHost(HOSTID);
+        assertTrue(hostInStore.configured());
+        assertEquals(PID2, hostInStore.providerId());
+    }
+
+    private static HostDescription createHostDesc(HostId hostId, Set<IpAddress> ips) {
+        return createHostDesc(hostId, ips, false);
+    }
+
+    private static HostDescription createHostDesc(HostId hostId, Set<IpAddress> ips,
+                                                  boolean configured) {
         return new DefaultHostDescription(hostId.mac(),
                 hostId.vlanId(),
                 HostLocation.NONE,
-                ips);
+                ips,
+                configured);
     }
-
 }
diff --git a/providers/netcfghost/src/main/java/org/onosproject/provider/netcfghost/NetworkConfigHostProvider.java b/providers/netcfghost/src/main/java/org/onosproject/provider/netcfghost/NetworkConfigHostProvider.java
index 5e7c4e9..4c526f3 100644
--- a/providers/netcfghost/src/main/java/org/onosproject/provider/netcfghost/NetworkConfigHostProvider.java
+++ b/providers/netcfghost/src/main/java/org/onosproject/provider/netcfghost/NetworkConfigHostProvider.java
@@ -114,7 +114,7 @@
         HostDescription desc = (ips != null) ?
                 new DefaultHostDescription(mac, vlan, hloc, ips, true) :
                 new DefaultHostDescription(mac, vlan, hloc, true);
-        providerService.hostDetected(hid, desc, false);
+        providerService.hostDetected(hid, desc, true);
     }
 
     /**
