diff --git a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/IcmpHandler.java b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/IcmpHandler.java
index 99c6fc1..69da77e 100644
--- a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/IcmpHandler.java
+++ b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/IcmpHandler.java
@@ -74,7 +74,7 @@
             return;
         }
 
-        for (InterfaceIpAddress interfaceIpAddress: targetInterface.ipAddresses()) {
+        for (InterfaceIpAddress interfaceIpAddress: targetInterface.ipAddressesList()) {
             if (interfaceIpAddress.ipAddress().equals(destIpAddress)) {
                 ipMatches = true;
                 break;
diff --git a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/TunnellingConnectivityManager.java b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/TunnellingConnectivityManager.java
index baf6303..95876a8 100644
--- a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/TunnellingConnectivityManager.java
+++ b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/TunnellingConnectivityManager.java
@@ -160,7 +160,7 @@
                     interfaceService.getInterfacesByPort(context.inPacket().receivedFrom());
 
             if (interfaces.stream()
-                    .flatMap(intf -> intf.ipAddresses().stream())
+                    .flatMap(intf -> intf.ipAddressesList().stream())
                     .anyMatch(ia -> ia.ipAddress().equals(dstAddress))) {
                 outputPort = bgpSpeaker.connectPoint();
             }
diff --git a/apps/routing/common/src/main/java/org/onosproject/routing/impl/BgpSpeakerNeighbourHandler.java b/apps/routing/common/src/main/java/org/onosproject/routing/impl/BgpSpeakerNeighbourHandler.java
index b98b69a..9fe73dc 100644
--- a/apps/routing/common/src/main/java/org/onosproject/routing/impl/BgpSpeakerNeighbourHandler.java
+++ b/apps/routing/common/src/main/java/org/onosproject/routing/impl/BgpSpeakerNeighbourHandler.java
@@ -120,7 +120,7 @@
 
     private void updateInterface(Interface intf) {
         // Only use interfaces that have an IP address
-        if (!intf.ipAddresses().isEmpty()) {
+        if (!intf.ipAddressesList().isEmpty()) {
             neighbourService.registerNeighbourHandler(intf, externalHandler, appId);
         }
     }
@@ -144,7 +144,7 @@
                 // address on this port. Drop all other requests.
                 interfaceService.getInterfacesByPort(context.inPort())
                         .stream()
-                        .filter(intf -> intf.ipAddresses()
+                        .filter(intf -> intf.ipAddressesList()
                                 .stream()
                                 .anyMatch(ia -> ia.ipAddress().equals(context.target()) &&
                                         ia.subnetAddress().contains(context.sender())))
diff --git a/apps/routing/cpr/src/main/java/org/onosproject/routing/cpr/ControlPlaneRedirectManager.java b/apps/routing/cpr/src/main/java/org/onosproject/routing/cpr/ControlPlaneRedirectManager.java
index 17de391..8e793e2 100644
--- a/apps/routing/cpr/src/main/java/org/onosproject/routing/cpr/ControlPlaneRedirectManager.java
+++ b/apps/routing/cpr/src/main/java/org/onosproject/routing/cpr/ControlPlaneRedirectManager.java
@@ -265,7 +265,7 @@
         DeviceId deviceId = intf.connectPoint().deviceId();
 
         PortNumber controlPlanePort = request.controlPlaneConnectPoint().port();
-        for (InterfaceIpAddress ip : intf.ipAddresses()) {
+        for (InterfaceIpAddress ip : intf.ipAddressesList()) {
             // create nextObjectives for forwarding to this interface and the
             // controlPlaneConnectPoint
             int cpNextId, intfNextId;
diff --git a/apps/routing/cpr/src/test/java/org/onosproject/routing/cpr/ControlPlaneRedirectManagerTest.java b/apps/routing/cpr/src/test/java/org/onosproject/routing/cpr/ControlPlaneRedirectManagerTest.java
index ffcce3b..40c27d3 100644
--- a/apps/routing/cpr/src/test/java/org/onosproject/routing/cpr/ControlPlaneRedirectManagerTest.java
+++ b/apps/routing/cpr/src/test/java/org/onosproject/routing/cpr/ControlPlaneRedirectManagerTest.java
@@ -272,7 +272,7 @@
     private void setUpInterfaceConfiguration(Interface intf, boolean install) {
         DeviceId deviceId = controlPlaneConnectPoint.deviceId();
         PortNumber controlPlanePort = controlPlaneConnectPoint.port();
-        for (InterfaceIpAddress ip : intf.ipAddresses()) {
+        for (InterfaceIpAddress ip : intf.ipAddressesList()) {
             int cpNextId, intfNextId;
             cpNextId = modifyNextObjective(deviceId, controlPlanePort,
                     VlanId.vlanId(ControlPlaneRedirectManager.ASSIGNED_VLAN), true, install);
@@ -698,7 +698,7 @@
         public Interface getMatchingInterface(IpAddress ip) {
             Interface intff = null;
             for (Interface intf : interfaces) {
-                for (InterfaceIpAddress address : intf.ipAddresses()) {
+                for (InterfaceIpAddress address : intf.ipAddressesList()) {
                     if (address.ipAddress().equals(ip)) {
                         intff = intf;
                         break;
diff --git a/cli/src/main/java/org/onosproject/cli/net/InterfacesListCommand.java b/cli/src/main/java/org/onosproject/cli/net/InterfacesListCommand.java
index 9df7f91..2620c91 100644
--- a/cli/src/main/java/org/onosproject/cli/net/InterfacesListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/InterfacesListCommand.java
@@ -58,9 +58,9 @@
     private void printInterface(Interface intf) {
         StringBuilder formatStringBuilder = new StringBuilder(FORMAT);
 
-        if (!intf.ipAddresses().isEmpty()) {
+        if (!intf.ipAddressesList().isEmpty()) {
             formatStringBuilder.append(IP_FORMAT);
-            formatStringBuilder.append(intf.ipAddresses().toString());
+            formatStringBuilder.append(intf.ipAddressesList().toString());
         }
 
         if (!intf.mac().equals(MacAddress.NONE)) {
diff --git a/core/net/src/main/java/org/onosproject/net/proxyarp/impl/ProxyArpManager.java b/core/net/src/main/java/org/onosproject/net/proxyarp/impl/ProxyArpManager.java
index 3937e9c..a4fd544 100644
--- a/core/net/src/main/java/org/onosproject/net/proxyarp/impl/ProxyArpManager.java
+++ b/core/net/src/main/java/org/onosproject/net/proxyarp/impl/ProxyArpManager.java
@@ -160,7 +160,7 @@
 
             interfaceService.getInterfacesByPort(context.inPort())
                     .stream()
-                    .filter(intf -> intf.ipAddresses()
+                    .filter(intf -> intf.ipAddressesList()
                             .stream()
                             .anyMatch(ia -> ia.ipAddress().equals(context.target())))
                     .forEach(intf -> buildAndSendReply(context, intf.mac()));
@@ -228,7 +228,7 @@
     private Set<Interface> filterVlanInterfacesNoIp(Set<Interface> vlanInterfaces) {
         return vlanInterfaces
                 .stream()
-                .filter(intf -> intf.ipAddresses().isEmpty())
+                .filter(intf -> intf.ipAddressesList().isEmpty())
                 .collect(Collectors.toSet());
     }
 
@@ -244,7 +244,7 @@
         Set<Interface> vlanInterfaces = interfaceService.getInterfacesByVlan(vlanId);
         return interfaceService.getInterfacesByVlan(vlanId)
                 .stream()
-                .anyMatch(intf -> intf.connectPoint().equals(connectPoint) && intf.ipAddresses().isEmpty())
+                .anyMatch(intf -> intf.connectPoint().equals(connectPoint) && intf.ipAddressesList().isEmpty())
                 && vlanInterfaces.size() > 1;
     }
 
@@ -310,7 +310,7 @@
     private boolean hasIpAddress(ConnectPoint connectPoint) {
         return interfaceService.getInterfacesByPort(connectPoint)
                 .stream()
-                .flatMap(intf -> intf.ipAddresses().stream())
+                .flatMap(intf -> intf.ipAddressesList().stream())
                 .findAny()
                 .isPresent();
     }
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/intf/Interface.java b/incubator/api/src/main/java/org/onosproject/incubator/net/intf/Interface.java
index e3d8ee0..c3dba8db0 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/intf/Interface.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/intf/Interface.java
@@ -27,7 +27,6 @@
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -112,17 +111,6 @@
     }
 
     /**
-     * Retrieves the set of IP addresses that are assigned to the interface.
-     *
-     * @return the set of interface IP addresses
-     * @deprecated in Falcon release in favour of an ordered list
-     */
-    @Deprecated
-    public Set<InterfaceIpAddress> ipAddresses() {
-        return ipAddresses.stream().collect(Collectors.toSet());
-    }
-
-    /**
      * Retrieves a list of IP addresses that are assigned to the interface in
      * the order that they were configured.
      *
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/intf/impl/InterfaceManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/intf/impl/InterfaceManagerTest.java
index 87f26d6..08bc1b0 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/intf/impl/InterfaceManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/intf/impl/InterfaceManagerTest.java
@@ -186,7 +186,7 @@
         // Create an interface that is the same as the existing one, but adds a
         // new IP address
         Interface intf = createInterface(1);
-        List<InterfaceIpAddress> addresses = Lists.newArrayList(intf.ipAddresses());
+        List<InterfaceIpAddress> addresses = Lists.newArrayList(intf.ipAddressesList());
         addresses.add(InterfaceIpAddress.valueOf("192.168.100.1/24"));
         intf = new Interface(Interface.NO_INTERFACE_NAME, intf.connectPoint(), addresses, intf.mac(), intf.vlan());
 
