diff --git a/core/api/src/main/java/org/onosproject/net/config/basics/BasicHostConfig.java b/core/api/src/main/java/org/onosproject/net/config/basics/BasicHostConfig.java
index 1a8db33..3d98d08 100644
--- a/core/api/src/main/java/org/onosproject/net/config/basics/BasicHostConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/config/basics/BasicHostConfig.java
@@ -35,7 +35,8 @@
 
     @Override
     public boolean isValid() {
-        // Location and IP addresses can be absent, but if present must be valid.
+        // locations is mandatory and must have at least one
+        // ipAddresses can be absent, but if present must be valid
         this.locations();
         this.ipAddresses();
         return hasOnlyFields(ALLOWED, NAME, LOC_TYPE, LATITUDE, LONGITUDE,
@@ -56,7 +57,7 @@
     /**
      * Returns the location of the host.
      *
-     * @return location of the host or null if not set
+     * @return location of the host
      * @throws IllegalArgumentException if not specified with correct format
      */
     public Set<HostLocation> locations() {
@@ -67,9 +68,11 @@
                 ConnectPoint cp = ConnectPoint.deviceConnectPoint((n.asText()));
                 locations.add(new HostLocation(cp, 0));
             });
-            return locations;
         }
-        return null;
+        if (locations.isEmpty()) {
+            throw new IllegalArgumentException("Host should have at least one location");
+        }
+        return locations;
     }
 
     /**
diff --git a/core/net/src/test/java/org/onosproject/net/host/impl/BasicHostOperatorTest.java b/core/net/src/test/java/org/onosproject/net/host/impl/BasicHostOperatorTest.java
index 3d1331a..4f18efc 100644
--- a/core/net/src/test/java/org/onosproject/net/host/impl/BasicHostOperatorTest.java
+++ b/core/net/src/test/java/org/onosproject/net/host/impl/BasicHostOperatorTest.java
@@ -17,6 +17,7 @@
 
 import static org.junit.Assert.assertEquals;
 
+import com.google.common.collect.Sets;
 import org.junit.Before;
 import org.junit.Test;
 import org.onlab.packet.IpAddress;
@@ -59,7 +60,7 @@
     @Before
     public void setUp() {
         BHC.init(ID, "test", JsonNodeFactory.instance.objectNode(), mapper, delegate);
-        BHC.name(NAME).latitude(40.96);
+        BHC.setLocations(Sets.newHashSet(LOC)).name(NAME).latitude(40.96);
         // if you set lat or long, the other becomes valid as 0.0 (not null)
     }
 
