diff --git a/web/api/src/main/java/org/onosproject/rest/resources/HostsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/HostsWebResource.java
index 3e5dc21..04886e4 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/HostsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/HostsWebResource.java
@@ -138,12 +138,12 @@
     @Produces(MediaType.APPLICATION_JSON)
     public Response createAndAddHost(InputStream stream) {
         URI location;
+        HostProviderRegistry hostProviderRegistry = get(HostProviderRegistry.class);
+        InternalHostProvider hostProvider = new InternalHostProvider();
         try {
             // Parse the input stream
             ObjectNode root = readTreeFromStream(mapper(), stream);
 
-            HostProviderRegistry hostProviderRegistry = get(HostProviderRegistry.class);
-            InternalHostProvider hostProvider = new InternalHostProvider();
             HostProviderService hostProviderService = hostProviderRegistry.register(hostProvider);
             hostProvider.setHostProviderService(hostProviderService);
             HostId hostId = hostProvider.parseHost(root);
@@ -153,11 +153,12 @@
                     .path(hostId.mac().toString())
                     .path(hostId.vlanId().toString());
             location = locationBuilder.build();
-            hostProviderRegistry.unregister(hostProvider);
-
         } catch (IOException ex) {
             throw new IllegalArgumentException(ex);
+        } finally {
+            hostProviderRegistry.unregister(hostProvider);
         }
+
         return Response
                 .created(location)
                 .build();
@@ -221,6 +222,10 @@
             MacAddress mac = MacAddress.valueOf(node.get("mac").asText());
             VlanId vlanId = VlanId.vlanId((short) node.get("vlan").asInt(VlanId.UNTAGGED));
 
+            if (null == node.get("locations")) {
+                throw new IllegalArgumentException("location isn't specified");
+            }
+
             Iterator<JsonNode> locationNodes = node.get("locations").elements();
             Set<HostLocation> locations = new HashSet<>();
             while (locationNodes.hasNext()) {
@@ -231,6 +236,10 @@
                 locations.add(hostLocation);
             }
 
+            if (null == node.get("ipAddresses")) {
+                throw new IllegalArgumentException("ipAddress isn't specified");
+            }
+
             Iterator<JsonNode> ipNodes = node.get("ipAddresses").elements();
             Set<IpAddress> ips = new HashSet<>();
             while (ipNodes.hasNext()) {
