diff --git a/apps/openstacknetworking/web/src/main/java/org/onosproject/openstacknetworking/web/OpenstackFloatingIpWebResource.java b/apps/openstacknetworking/web/src/main/java/org/onosproject/openstacknetworking/web/OpenstackFloatingIpWebResource.java
index bd6c2c9..3382620 100644
--- a/apps/openstacknetworking/web/src/main/java/org/onosproject/openstacknetworking/web/OpenstackFloatingIpWebResource.java
+++ b/apps/openstacknetworking/web/src/main/java/org/onosproject/openstacknetworking/web/OpenstackFloatingIpWebResource.java
@@ -20,7 +20,7 @@
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.onosproject.openstackinterface.OpenstackFloatingIP;
 import org.onosproject.openstackinterface.web.OpenstackFloatingIpCodec;
-import org.onosproject.openstacknetworking.OpenstackRoutingService;
+import org.onosproject.openstacknetworking.OpenstackFloatingIpService;
 import org.onosproject.rest.AbstractWebResource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -45,8 +45,7 @@
 public class OpenstackFloatingIpWebResource extends AbstractWebResource {
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private static final OpenstackFloatingIpCodec FLOATING_IP_CODEC
-            = new OpenstackFloatingIpCodec();
+    private static final OpenstackFloatingIpCodec FLOATING_IP_CODEC = new OpenstackFloatingIpCodec();
 
     /**
      * Create FloatingIP.
@@ -64,20 +63,15 @@
             ObjectMapper mapper = new ObjectMapper();
             ObjectNode floatingIpNode = (ObjectNode) mapper.readTree(input);
 
-            OpenstackFloatingIP osFloatingIp =
-                    FLOATING_IP_CODEC.decode(floatingIpNode, this);
-
-            OpenstackRoutingService routingService =
-                    getService(OpenstackRoutingService.class);
-
-            routingService.createFloatingIP(osFloatingIp);
+            OpenstackFloatingIP osFloatingIp = FLOATING_IP_CODEC.decode(floatingIpNode, this);
+            OpenstackFloatingIpService floatingIpService =
+                    getService(OpenstackFloatingIpService.class);
+            floatingIpService.createFloatingIp(osFloatingIp);
 
             log.debug("REST API CREATE floatingip called");
-
             return Response.status(Response.Status.OK).build();
         } catch (Exception e) {
             log.error("createFloatingIp failed with {}", e.toString());
-
             return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.toString())
                     .build();
         }
@@ -102,20 +96,15 @@
             ObjectMapper mapper = new ObjectMapper();
             ObjectNode floatingIpNode = (ObjectNode) mapper.readTree(input);
 
-            OpenstackFloatingIP osFloatingIp =
-                    FLOATING_IP_CODEC.decode(floatingIpNode, this);
-
-            OpenstackRoutingService routingService =
-                    getService(OpenstackRoutingService.class);
-
-            routingService.updateFloatingIP(osFloatingIp);
+            OpenstackFloatingIP osFloatingIp = FLOATING_IP_CODEC.decode(floatingIpNode, this);
+            OpenstackFloatingIpService floatingIpService =
+                    getService(OpenstackFloatingIpService.class);
+            floatingIpService.updateFloatingIp(osFloatingIp);
 
             log.debug("REST API UPDATE floatingip called {}", id);
-
             return Response.status(Response.Status.OK).build();
         } catch (Exception e) {
             log.error("updateFloatingIp failed with {}", e.toString());
-
             return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.toString())
                     .build();
         }
@@ -133,12 +122,11 @@
     public Response deleteFloatingIp(@PathParam("id") String id) {
         checkNotNull(id);
 
-        OpenstackRoutingService routingService =
-                getService(OpenstackRoutingService.class);
-        routingService.deleteFloatingIP(id);
+        OpenstackFloatingIpService floatingIpService =
+                getService(OpenstackFloatingIpService.class);
+        floatingIpService.deleteFloatingIp(id);
 
         log.debug("REST API DELETE floatingip is called {}", id);
-
         return Response.noContent().build();
     }
 
