diff --git a/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java b/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java
index 2150bf1..034ef77 100644
--- a/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java
+++ b/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java
@@ -18,8 +18,6 @@
 import org.onlab.packet.ARP;
 import org.onlab.packet.Ethernet;
 import org.onlab.packet.IPv6;
-import org.onlab.packet.Ip4Address;
-import org.onlab.packet.Ip6Address;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.VlanId;
@@ -196,25 +194,16 @@
             intf.ipAddressesList().stream()
                     .filter(ia -> ia.subnetAddress().contains(targetIp))
                     .forEach(ia -> {
-                        // Use DAD to probe when interface MAC is not supplied,
-                        // such that host will not learn ONOS dummy MAC from the probe.
-                        IpAddress sourceIp;
-                        if (!MacAddress.NONE.equals(intf.mac())) {
-                            sourceIp = ia.ipAddress();
-                        } else {
-                            sourceIp = targetIp.isIp4() ? Ip4Address.ZERO : Ip6Address.ZERO;
-                        }
-
                         log.debug("Sending probe for target:{} out of intf:{} vlan:{}",
                                 targetIp, intf.connectPoint(), intf.vlan());
-                        sendProbe(intf.connectPoint(), targetIp, sourceIp,
+                        sendProbe(intf.connectPoint(), targetIp, ia.ipAddress(),
                                 intf.mac(), intf.vlan());
                         // account for use-cases where tagged-vlan config is used
                         if (!intf.vlanTagged().isEmpty()) {
                             intf.vlanTagged().forEach(tag -> {
                                 log.debug("Sending probe for target:{} out of intf:{} vlan:{}",
                                         targetIp, intf.connectPoint(), tag);
-                                sendProbe(intf.connectPoint(), targetIp, sourceIp,
+                                sendProbe(intf.connectPoint(), targetIp, ia.ipAddress(),
                                         intf.mac(), tag);
                             });
                         }
