diff --git a/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java b/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
index e197a0d..461319a 100644
--- a/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
+++ b/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
@@ -475,9 +475,22 @@
 
             // IPv4: update location only
             } else if (eth.getEtherType() == Ethernet.TYPE_IPV4) {
-                // DHCP ACK: additionally update IP of DHCP client
-                Optional<DHCP> dhcp = findDhcp(eth);
-                if (useDhcp || !dhcp.isPresent()) {
+                DHCP dhcp = findDhcp(eth).orElse(null);
+                if (dhcp != null) {
+                    if (useDhcp) {
+                        // learn host (server or client) MAC address
+                        createOrUpdateHost(hid, srcMac, vlan, hloc, null);
+
+                        // DHCP ACK: additionally update IP of DHCP client
+                        if (dhcp.getPacketType().equals(DHCP.MsgType.DHCPACK)) {
+                            MacAddress hostMac = MacAddress.valueOf(dhcp.getClientHardwareAddress());
+                            VlanId hostVlan = VlanId.vlanId(eth.getVlanID());
+                            HostId hostId = HostId.hostId(hostMac, hostVlan);
+                            updateHostIp(hostId, IpAddress.valueOf(dhcp.getYourIPAddress()));
+                        }
+                    }
+                } else {
+                    // learn host MAC address
                     createOrUpdateHost(hid, srcMac, vlan, hloc, null);
                 }
             //
diff --git a/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java b/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
index 080e0e4..b43b50f 100644
--- a/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
+++ b/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
@@ -371,7 +371,7 @@
         // DHCP Ack
         testProcessor.process(new TestDhcpAckPacketContext(DEV1, false));
         assertThat("receiveDhcpAck. Two additional host descriptions expected",
-                providerService.descriptions.size(), is(2));
+                providerService.descriptions.size(), is(3));
 
         // Should also learn the MAC, location of DHCP server
         HostDescription descr2 = providerService.descriptions.get(1);
@@ -380,7 +380,14 @@
         assertThat(descr2.ipAddress().size(), is(0));
         assertThat(descr2.vlan(), is(VLAN));
 
-        // Should not update the IP address of the host.
+        // Should update the IP address of the client.
+        HostDescription descr3 = providerService.descriptions.get(2);
+        assertThat(descr3.location(), is(LOCATION));
+        assertThat(descr3.hwAddress(), is(MAC));
+        assertThat(descr3.ipAddress().size(), is(1));
+        IpAddress ip = descr3.ipAddress().iterator().next();
+        assertThat(ip, is(IP_ADDRESS.getIp4Address()));
+        assertThat(descr3.vlan(), is(VLAN));
     }
 
     /**
