diff --git a/apps/openstackinterface/api/src/main/java/org/onosproject/openstackinterface/OpenstackInterfaceService.java b/apps/openstackinterface/api/src/main/java/org/onosproject/openstackinterface/OpenstackInterfaceService.java
index fd6f953..051bb5f 100644
--- a/apps/openstackinterface/api/src/main/java/org/onosproject/openstackinterface/OpenstackInterfaceService.java
+++ b/apps/openstackinterface/api/src/main/java/org/onosproject/openstackinterface/OpenstackInterfaceService.java
@@ -15,9 +15,11 @@
  */
 package org.onosproject.openstackinterface;
 
+import org.onlab.packet.Ip4Address;
 import org.onosproject.net.Port;
 
 import java.util.Collection;
+import java.util.Optional;
 
 /**
  * Handles port management REST API from Openstack for VMs.
@@ -49,7 +51,7 @@
     /**
      * Returns port information for the port ID given.
      *
-     * @param portId Port ID
+     * @param portId port id
      * @return port information
      */
     OpenstackPort port(String portId);
@@ -57,7 +59,7 @@
     /**
      * Returns network information list for the network ID given.
      *
-     * @param networkId Network ID
+     * @param networkId network id
      * @return network information, or null if not present
      */
     OpenstackNetwork network(String networkId);
@@ -72,7 +74,7 @@
     /**
      * Returns subnet information for the subnet ID give.
      *
-     * @param subnetId Subnet ID
+     * @param subnetId subnet id
      * @return subnet information, or null if not present
      */
     OpenstackSubnet subnet(String subnetId);
@@ -94,7 +96,7 @@
     /**
      * Returns the router information for the router ID given.
      *
-     * @param routerId router ID
+     * @param routerId router id
      * @return router information
      */
     OpenstackRouter router(String routerId);
@@ -114,6 +116,16 @@
      */
     Collection<OpenstackFloatingIP> floatingIps();
 
+    /**
+     * Updates a floating IP and its association with an internal port.
+     *
+     * @param id floating ip id
+     * @param portId port id
+     * @param fixedIpAddress fixed ip address of the port
+     * @return true if the update succeed
+     */
+    boolean updateFloatingIp(String id, String portId, Optional<Ip4Address> fixedIpAddress);
+
 
 
 }
diff --git a/apps/openstackinterface/app/pom.xml b/apps/openstackinterface/app/pom.xml
index 7bbeca8..859d0fe 100644
--- a/apps/openstackinterface/app/pom.xml
+++ b/apps/openstackinterface/app/pom.xml
@@ -83,5 +83,10 @@
             <groupId>org.onosproject</groupId>
             <artifactId>onlab-misc</artifactId>
         </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.4</version>
+        </dependency>
     </dependencies>
 </project>
diff --git a/apps/openstackinterface/app/src/main/java/org/onosproject/openstackinterface/impl/OpenstackInterfaceManager.java b/apps/openstackinterface/app/src/main/java/org/onosproject/openstackinterface/impl/OpenstackInterfaceManager.java
index 1eef7c8..21a4d73 100644
--- a/apps/openstackinterface/app/src/main/java/org/onosproject/openstackinterface/impl/OpenstackInterfaceManager.java
+++ b/apps/openstackinterface/app/src/main/java/org/onosproject/openstackinterface/impl/OpenstackInterfaceManager.java
@@ -21,6 +21,7 @@
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
+import org.apache.commons.io.IOUtils;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -28,6 +29,7 @@
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
 import org.glassfish.jersey.client.ClientProperties;
+import org.onlab.packet.Ip4Address;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.net.Port;
@@ -57,7 +59,11 @@
 import javax.ws.rs.client.Invocation;
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
@@ -65,6 +71,7 @@
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -91,6 +98,9 @@
     private static final String URI_SECURITY_GROUPS = "security-groups";
     private static final String URI_FLOATINGIPS = "floatingips";
     private static final String URI_TOKENS = "tokens";
+    private static final String FLOATINGIP = "floatingip";
+    private static final String PORT_ID = "port_id";
+    private static final String FIXED_IP_ADDRESS = "fixed_ip_address";
 
     private static final String PATH_ROUTERS = "routers";
     private static final String PATH_NETWORKS = "networks";
@@ -485,6 +495,63 @@
         return openstackFloatingIPs;
     }
 
+    @Override
+    public boolean updateFloatingIp(String id, String portId, Optional<Ip4Address> fixedIpAddress) {
+        Invocation.Builder builder = getClientBuilder(neutronUrl, URI_FLOATINGIPS + "/" + id);
+
+        if (builder == null || (portId != null && !fixedIpAddress.isPresent())) {
+            log.warn("Failed to update floating IP");
+            return false;
+        }
+
+        ObjectNode objectNode = createFloatingIpObject(portId, fixedIpAddress);
+
+        InputStream inputStream = new ByteArrayInputStream(objectNode.toString().getBytes());
+
+        try {
+            Response response = builder.header(HEADER_AUTH_TOKEN, getToken())
+                    .put(Entity.entity(IOUtils.toString(inputStream, StandardCharsets.UTF_8),
+                            MediaType.APPLICATION_JSON));
+            log.debug("updateFloatingIp called: {}, status: {}", response.readEntity(String.class),
+                    String.valueOf(response.getStatus()));
+
+            return checkReply(response);
+        } catch (IOException e) {
+            log.error("Cannot do PUT {} request");
+            return false;
+        }
+    }
+
+    private ObjectNode createFloatingIpObject(String portId, Optional<Ip4Address> fixedIpAddress) {
+        ObjectMapper mapper = new ObjectMapper();
+        ObjectNode objectNode = mapper.createObjectNode();
+
+        objectNode.putObject(FLOATINGIP)
+                .put(PORT_ID, portId);
+
+        if (portId != null) {
+            objectNode.put(FIXED_IP_ADDRESS, fixedIpAddress.get().toString());
+        }
+
+        return objectNode;
+    }
+
+    private boolean checkReply(Response response) {
+        if (response != null) {
+            return checkStatusCode(response.getStatus());
+        }
+
+        log.warn("Null floating IP response from openstack");
+        return false;
+    }
+
+    private boolean checkStatusCode(int statusCode) {
+        if (statusCode == Response.Status.OK.getStatusCode()) {
+            return true;
+        }
+
+        return false;
+    }
     private void configureNetwork() {
         OpenstackInterfaceConfig cfg =
                 cfgService.getConfig(appId, OpenstackInterfaceConfig.class);
