diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java
index a2d0013..06265bd 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java
@@ -22,6 +22,7 @@
 import org.onlab.packet.Ip4Address;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 import org.onlab.util.Tools;
 import org.onosproject.cfg.ComponentConfigService;
 import org.onosproject.cfg.ConfigProperty;
@@ -315,26 +316,32 @@
                 return;
             }
 
-            TrafficSelector selector = DefaultTrafficSelector.builder()
-                    .matchEthType(EthType.EtherType.ARP.ethType().toShort())
-                    .matchArpOp(ARP.OP_REQUEST)
-                    .matchArpTpa(Ip4Address.valueOf(gateway))
-                    .build();
+            TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder();
+            TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();
 
-            TrafficTreatment treatment = DefaultTrafficTreatment.builder()
-                    .setArpOp(ARP.OP_REPLY)
+            NetworkType type = NetworkType.valueOf(osNetworkService.networkType(osSubnet.getNetworkId()));
+
+            if (type.equals(NetworkType.VLAN)) {
+                sBuilder.matchVlanId(VlanId.vlanId(osNetworkService.segmentId(osSubnet.getNetworkId())));
+                tBuilder.popVlan();
+            }
+
+            sBuilder.matchEthType(EthType.EtherType.ARP.ethType().toShort())
+                    .matchArpOp(ARP.OP_REQUEST)
+                    .matchArpTpa(Ip4Address.valueOf(gateway));
+
+            tBuilder.setArpOp(ARP.OP_REPLY)
                     .setArpSha(MacAddress.valueOf(gatewayMac))
                     .setArpSpa(Ip4Address.valueOf(gateway))
-                    .setOutput(PortNumber.IN_PORT)
-                    .build();
+                    .setOutput(PortNumber.IN_PORT);
 
             if (osNode == null) {
                 osNodeService.completeNodes(COMPUTE).forEach(n ->
                         osFlowRuleService.setRule(
                                 appId,
                                 n.intgBridge(),
-                                selector,
-                                treatment,
+                                sBuilder.build(),
+                                tBuilder.build(),
                                 PRIORITY_ARP_GATEWAY_RULE,
                                 ARP_TABLE,
                                 install
@@ -344,8 +351,8 @@
                 osFlowRuleService.setRule(
                         appId,
                         osNode.intgBridge(),
-                        selector,
-                        treatment,
+                        sBuilder.build(),
+                        tBuilder.build(),
                         PRIORITY_ARP_GATEWAY_RULE,
                         ARP_TABLE,
                         install
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
index 14fd5da..196c07d 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
@@ -540,17 +540,21 @@
                 .matchInPort(instPort.portNumber())
                 .build();
 
-        TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+        TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder()
                 .pushVlan()
-                .setVlanId(getVlanId(instPort))
-                .transition(ACL_TABLE)
-                .build();
+                .setVlanId(getVlanId(instPort));
+
+        if (ethType == Ethernet.TYPE_ARP) {
+            tBuilder.transition(ARP_TABLE);
+        } else if (ethType == Ethernet.TYPE_IPV4) {
+            tBuilder.transition(ACL_TABLE);
+        }
 
         osFlowRuleService.setRule(
                 appId,
                 instPort.deviceId(),
                 selector,
-                treatment,
+                tBuilder.build(),
                 PRIORITY_TUNNEL_TAG_RULE,
                 VTAG_TABLE,
                 install);
