diff --git a/apps/openstacknetworking/routing/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java b/apps/openstacknetworking/routing/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java
index ab68ead..30916cf 100644
--- a/apps/openstacknetworking/routing/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java
+++ b/apps/openstacknetworking/routing/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java
@@ -137,7 +137,11 @@
             openstackService.ports().stream()
                     .filter(osPort -> osPort.deviceOwner().equals(DEVICE_OWNER_ROUTER_INTERFACE) &&
                             osPort.deviceId().equals(osRouter.id()))
-                    .forEach(osPort -> unsetExternalConnection(osRouter, osPort.networkId()));
+                    .forEach(osPort -> {
+                        String subnetId = osPort.fixedIps().keySet().stream().findFirst().get();
+                        OpenstackSubnet osSubNet = openstackService.subnet(subnetId);
+                        unsetExternalConnection(osRouter, osPort.networkId(), osSubNet.cidr());
+                    });
 
             log.info("Disconnected external gateway from router {}",
                      osRouter.name());
@@ -184,7 +188,7 @@
         unsetRoutes(osRouter, osSubnet);
 
         if (osRouter.gatewayExternalInfo().externalFixedIps().size() > 0) {
-            unsetExternalConnection(osRouter, osNet.id());
+            unsetExternalConnection(osRouter, osNet.id(), osSubnet.cidr());
         }
         log.info("Disconnected {} from router {}", osSubnet.cidr(), osRouter.name());
     }
@@ -250,7 +254,7 @@
         populateExternalRules(osNet, osSubNet);
     }
 
-    private void unsetExternalConnection(OpenstackRouter osRouter, String osNetId) {
+    private void unsetExternalConnection(OpenstackRouter osRouter, String osNetId, String subNetCidr) {
         if (!osRouter.gatewayExternalInfo().isEnablePnat()) {
             log.debug("Source NAT is disabled");
             return;
@@ -258,7 +262,7 @@
 
         // FIXME router interface is subnet specific, not network
         OpenstackNetwork osNet = openstackService.network(osNetId);
-        removeExternalRules(osNet);
+        removeExternalRules(osNet, subNetCidr);
     }
 
     private void setRoutes(OpenstackRouter osRouter, Optional<Host> host) {
@@ -324,10 +328,11 @@
         populateGatewayToController(Long.valueOf(osNet.segmentId()), osSubNet.cidr());
     }
 
-    private void removeExternalRules(OpenstackNetwork osNet) {
+    private void removeExternalRules(OpenstackNetwork osNet, String subNetCidr) {
         TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder();
         sBuilder.matchEthType(Ethernet.TYPE_IPV4)
                 .matchTunnelId(Long.valueOf(osNet.segmentId()))
+                .matchIPSrc(IpPrefix.valueOf(subNetCidr))
                 .matchEthDst(Constants.DEFAULT_GATEWAY_MAC);
 
         nodeService.completeNodes().forEach(node -> {
diff --git a/apps/openstacknetworking/web/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java b/apps/openstacknetworking/web/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java
index 3e71f88..c82ac33 100644
--- a/apps/openstacknetworking/web/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java
+++ b/apps/openstacknetworking/web/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java
@@ -57,7 +57,7 @@
 
     @Path("{portUUID}")
     @DELETE
-    @Produces(MediaType.APPLICATION_JSON)
+    @Consumes(MediaType.APPLICATION_JSON)
     public Response deletePorts(@PathParam("portUUID") String id) {
         return Response.noContent().build();
     }
