diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java
index 5bb6a5d..4bb1d92 100644
--- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java
+++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java
@@ -32,192 +32,160 @@
     private FabricConstants() {
     }
 
-    public static final String DOT = ".";
-    // Header IDs
-    public static final String HDR = "hdr";
-    public static final String STANDARD_METADATA = "standard_metadata";
-    public static final String MPLS = "mpls";
-    public static final String FABRIC_METADATA = "fabric_metadata";
-    public static final String IPV4 = "ipv4";
-    public static final String IPV6 = "ipv6";
-    public static final String ETHERNET = "ethernet";
-    public static final String VLAN_TAG = "vlan_tag";
-    public static final String ICMP = "icmp";
-
     // Header field IDs
-    public static final PiMatchFieldId HF_FABRIC_METADATA_L4_SRC_PORT_ID =
-            buildPiMatchField(FABRIC_METADATA, "l4_src_port", false);
-    public static final PiMatchFieldId HF_IPV4_SRC_ADDR_ID =
-            buildPiMatchField(IPV4, "src_addr", true);
-    public static final PiMatchFieldId HF_VLAN_TAG_VLAN_ID_ID =
-            buildPiMatchField(VLAN_TAG, "vlan_id", true);
-    public static final PiMatchFieldId HF_MPLS_LABEL_ID =
-            buildPiMatchField(MPLS, "label", true);
-    public static final PiMatchFieldId HF_IPV6_DST_ADDR_ID =
-            buildPiMatchField(IPV6, "dst_addr", true);
-    public static final PiMatchFieldId HF_ETHERNET_SRC_ADDR_ID =
-            buildPiMatchField(ETHERNET, "src_addr", true);
-    public static final PiMatchFieldId HF_ICMP_ICMP_TYPE_ID =
-            buildPiMatchField(ICMP, "icmp_type", true);
-    public static final PiMatchFieldId HF_STANDARD_METADATA_EGRESS_PORT_ID =
-            buildPiMatchField(STANDARD_METADATA, "egress_port", false);
-    public static final PiMatchFieldId HF_FABRIC_METADATA_NEXT_ID_ID =
-            buildPiMatchField(FABRIC_METADATA, "next_id", false);
-    public static final PiMatchFieldId HF_FABRIC_METADATA_L4_DST_PORT_ID =
-            buildPiMatchField(FABRIC_METADATA, "l4_dst_port", false);
-    public static final PiMatchFieldId HF_STANDARD_METADATA_INGRESS_PORT_ID =
-            buildPiMatchField(STANDARD_METADATA, "ingress_port", false);
-    public static final PiMatchFieldId HF_FABRIC_METADATA_ORIGINAL_ETHER_TYPE_ID =
-            buildPiMatchField(FABRIC_METADATA, "original_ether_type", false);
-    public static final PiMatchFieldId HF_IPV4_DST_ADDR_ID =
-            buildPiMatchField(IPV4, "dst_addr", true);
-    public static final PiMatchFieldId HF_VLAN_TAG_IS_VALID_ID =
-            buildPiMatchField(VLAN_TAG, "is_valid", true);
-    public static final PiMatchFieldId HF_FABRIC_METADATA_IP_PROTO_ID =
-            buildPiMatchField(FABRIC_METADATA, "ip_proto", false);
-    public static final PiMatchFieldId HF_ETHERNET_DST_ADDR_ID =
-            buildPiMatchField(ETHERNET, "dst_addr", true);
-    public static final PiMatchFieldId HF_ICMP_ICMP_CODE_ID =
-            buildPiMatchField(ICMP, "icmp_code", true);
-
-    private static PiMatchFieldId buildPiMatchField(String header, String field, boolean withHdrPrefix) {
-        if (withHdrPrefix) {
-            return PiMatchFieldId.of(HDR + DOT + header + DOT + field);
-        } else {
-            return PiMatchFieldId.of(header + DOT + field);
-        }
-    }
-
+    public static final PiMatchFieldId FABRIC_METADATA_L4_SRC_PORT =
+            PiMatchFieldId.of("fabric_metadata.l4_src_port");
+    public static final PiMatchFieldId HDR_IPV4_SRC_ADDR =
+            PiMatchFieldId.of("hdr.ipv4.src_addr");
+    public static final PiMatchFieldId HDR_VLAN_TAG_VLAN_ID =
+            PiMatchFieldId.of("hdr.vlan_tag.vlan_id");
+    public static final PiMatchFieldId HDR_MPLS_LABEL =
+            PiMatchFieldId.of("hdr.mpls.label");
+    public static final PiMatchFieldId HDR_IPV6_DST_ADDR =
+            PiMatchFieldId.of("hdr.ipv6.dst_addr");
+    public static final PiMatchFieldId HDR_ETHERNET_SRC_ADDR =
+            PiMatchFieldId.of("hdr.ethernet.src_addr");
+    public static final PiMatchFieldId HDR_ICMP_ICMP_TYPE =
+            PiMatchFieldId.of("hdr.icmp.icmp_type");
+    public static final PiMatchFieldId STANDARD_METADATA_EGRESS_PORT =
+            PiMatchFieldId.of("standard_metadata.egress_port");
+    public static final PiMatchFieldId FABRIC_METADATA_NEXT_ID =
+            PiMatchFieldId.of("fabric_metadata.next_id");
+    public static final PiMatchFieldId FABRIC_METADATA_L4_DST_PORT =
+            PiMatchFieldId.of("fabric_metadata.l4_dst_port");
+    public static final PiMatchFieldId STANDARD_METADATA_INGRESS_PORT =
+            PiMatchFieldId.of("standard_metadata.ingress_port");
+    public static final PiMatchFieldId FABRIC_METADATA_ORIGINAL_ETHER_TYPE =
+            PiMatchFieldId.of("fabric_metadata.original_ether_type");
+    public static final PiMatchFieldId HDR_IPV4_DST_ADDR =
+            PiMatchFieldId.of("hdr.ipv4.dst_addr");
+    public static final PiMatchFieldId HDR_VLAN_TAG_IS_VALID =
+            PiMatchFieldId.of("hdr.vlan_tag.is_valid");
+    public static final PiMatchFieldId FABRIC_METADATA_IP_PROTO =
+            PiMatchFieldId.of("fabric_metadata.ip_proto");
+    public static final PiMatchFieldId HDR_ETHERNET_DST_ADDR =
+            PiMatchFieldId.of("hdr.ethernet.dst_addr");
+    public static final PiMatchFieldId HDR_ICMP_ICMP_CODE =
+            PiMatchFieldId.of("hdr.icmp.icmp_code");
     // Table IDs
-    public static final PiTableId TBL_ACL_ID =
+    public static final PiTableId FABRIC_INGRESS_FORWARDING_ACL =
             PiTableId.of("FabricIngress.forwarding.acl");
-    public static final PiTableId TBL_HASHED_ID =
+    public static final PiTableId FABRIC_INGRESS_NEXT_HASHED =
             PiTableId.of("FabricIngress.next.hashed");
-    public static final PiTableId TBL_EGRESS_VLAN_ID =
+    public static final PiTableId FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN =
             PiTableId.of("FabricEgress.egress_next.egress_vlan");
-    public static final PiTableId TBL_MPLS_ID =
+    public static final PiTableId FABRIC_INGRESS_FORWARDING_MPLS =
             PiTableId.of("FabricIngress.forwarding.mpls");
-    public static final PiTableId TBL_MULTICAST_ID =
+    public static final PiTableId FABRIC_INGRESS_NEXT_MULTICAST =
             PiTableId.of("FabricIngress.next.multicast");
-    public static final PiTableId TBL_MULTICAST_V4_ID =
+    public static final PiTableId FABRIC_INGRESS_FORWARDING_MULTICAST_V4 =
             PiTableId.of("FabricIngress.forwarding.multicast_v4");
-    public static final PiTableId TBL_MULTICAST_V6_ID =
+    public static final PiTableId FABRIC_INGRESS_FORWARDING_MULTICAST_V6 =
             PiTableId.of("FabricIngress.forwarding.multicast_v6");
-    public static final PiTableId TBL_UNICAST_V4_ID =
+    public static final PiTableId FABRIC_INGRESS_FORWARDING_UNICAST_V4 =
             PiTableId.of("FabricIngress.forwarding.unicast_v4");
-    public static final PiTableId TBL_FWD_CLASSIFIER_ID =
+    public static final PiTableId FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER =
             PiTableId.of("FabricIngress.filtering.fwd_classifier");
-    public static final PiTableId TBL_BRIDGING_ID =
+    public static final PiTableId FABRIC_INGRESS_FORWARDING_BRIDGING =
             PiTableId.of("FabricIngress.forwarding.bridging");
-    public static final PiTableId TBL_SIMPLE_ID =
+    public static final PiTableId FABRIC_INGRESS_NEXT_SIMPLE =
             PiTableId.of("FabricIngress.next.simple");
-    public static final PiTableId TBL_INGRESS_PORT_VLAN_ID =
+    public static final PiTableId FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN =
             PiTableId.of("FabricIngress.filtering.ingress_port_vlan");
-    public static final PiTableId TBL_UNICAST_V6_ID =
+    public static final PiTableId FABRIC_INGRESS_FORWARDING_UNICAST_V6 =
             PiTableId.of("FabricIngress.forwarding.unicast_v6");
-    public static final PiTableId TBL_VLAN_META_ID =
+    public static final PiTableId FABRIC_INGRESS_NEXT_VLAN_META =
             PiTableId.of("FabricIngress.next.vlan_meta");
-
     // Indirect Counter IDs
-    public static final PiCounterId CNT_EGRESS_PORT_COUNTER_ID =
+    public static final PiCounterId FABRIC_INGRESS_PORT_COUNTERS_CONTROL_EGRESS_PORT_COUNTER =
             PiCounterId.of("FabricIngress.port_counters_control.egress_port_counter");
-    public static final PiCounterId CNT_INGRESS_PORT_COUNTER_ID =
+    public static final PiCounterId FABRIC_INGRESS_PORT_COUNTERS_CONTROL_INGRESS_PORT_COUNTER =
             PiCounterId.of("FabricIngress.port_counters_control.ingress_port_counter");
-
     // Direct Counter IDs
-    public static final PiCounterId CNT_ACL_COUNTER_ID =
+    public static final PiCounterId FABRIC_INGRESS_FORWARDING_ACL_COUNTER =
             PiCounterId.of("FabricIngress.forwarding.acl_counter");
-    public static final PiCounterId CNT_MULTICAST_COUNTER_ID =
+    public static final PiCounterId FABRIC_INGRESS_NEXT_MULTICAST_COUNTER =
             PiCounterId.of("FabricIngress.next.multicast_counter");
-    public static final PiCounterId CNT_VLAN_META_COUNTER_ID =
+    public static final PiCounterId FABRIC_INGRESS_NEXT_VLAN_META_COUNTER =
             PiCounterId.of("FabricIngress.next.vlan_meta_counter");
-    public static final PiCounterId CNT_FWD_CLASSIFIER_COUNTER_ID =
+    public static final PiCounterId FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER_COUNTER =
             PiCounterId.of("FabricIngress.filtering.fwd_classifier_counter");
-    public static final PiCounterId CNT_BRIDGING_COUNTER_ID =
+    public static final PiCounterId FABRIC_INGRESS_FORWARDING_BRIDGING_COUNTER =
             PiCounterId.of("FabricIngress.forwarding.bridging_counter");
-    public static final PiCounterId CNT_MULTICAST_V6_COUNTER_ID =
+    public static final PiCounterId FABRIC_INGRESS_FORWARDING_MULTICAST_V6_COUNTER =
             PiCounterId.of("FabricIngress.forwarding.multicast_v6_counter");
-    public static final PiCounterId CNT_MULTICAST_V4_COUNTER_ID =
+    public static final PiCounterId FABRIC_INGRESS_FORWARDING_MULTICAST_V4_COUNTER =
             PiCounterId.of("FabricIngress.forwarding.multicast_v4_counter");
-    public static final PiCounterId CNT_UNICAST_V6_COUNTER_ID =
+    public static final PiCounterId FABRIC_INGRESS_FORWARDING_UNICAST_V6_COUNTER =
             PiCounterId.of("FabricIngress.forwarding.unicast_v6_counter");
-    public static final PiCounterId CNT_UNICAST_V4_COUNTER_ID =
+    public static final PiCounterId FABRIC_INGRESS_FORWARDING_UNICAST_V4_COUNTER =
             PiCounterId.of("FabricIngress.forwarding.unicast_v4_counter");
-    public static final PiCounterId CNT_SIMPLE_COUNTER_ID =
+    public static final PiCounterId FABRIC_INGRESS_NEXT_SIMPLE_COUNTER =
             PiCounterId.of("FabricIngress.next.simple_counter");
-    public static final PiCounterId CNT_INGRESS_PORT_VLAN_COUNTER_ID =
+    public static final PiCounterId FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN_COUNTER =
             PiCounterId.of("FabricIngress.filtering.ingress_port_vlan_counter");
-    public static final PiCounterId CNT_MPLS_COUNTER_ID =
+    public static final PiCounterId FABRIC_INGRESS_FORWARDING_MPLS_COUNTER =
             PiCounterId.of("FabricIngress.forwarding.mpls_counter");
-    public static final PiCounterId CNT_HASHED_COUNTER_ID =
+    public static final PiCounterId FABRIC_INGRESS_NEXT_HASHED_COUNTER =
             PiCounterId.of("FabricIngress.next.hashed_counter");
-
     // Action IDs
-    public static final PiActionId ACT_FABRICINGRESS_FILTERING_DROP_ID =
+    public static final PiActionId FABRIC_INGRESS_FILTERING_DROP =
             PiActionId.of("FabricIngress.filtering.drop");
-    public static final PiActionId ACT_FABRICINGRESS_NEXT_SET_VLAN_ID =
+    public static final PiActionId FABRIC_INGRESS_NEXT_SET_VLAN =
             PiActionId.of("FabricIngress.next.set_vlan");
-    public static final PiActionId ACT_FABRICINGRESS_FORWARDING_POP_MPLS_AND_NEXT_ID =
+    public static final PiActionId FABRIC_INGRESS_FORWARDING_POP_MPLS_AND_NEXT =
             PiActionId.of("FabricIngress.forwarding.pop_mpls_and_next");
-    public static final PiActionId ACT_FABRICEGRESS_EGRESS_NEXT_POP_VLAN_ID =
+    public static final PiActionId FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN =
             PiActionId.of("FabricEgress.egress_next.pop_vlan");
-    public static final PiActionId ACT_FABRICINGRESS_FILTERING_SET_FORWARDING_TYPE_ID =
+    public static final PiActionId FABRIC_INGRESS_FILTERING_SET_FORWARDING_TYPE =
             PiActionId.of("FabricIngress.filtering.set_forwarding_type");
-    public static final PiActionId ACT_NOP_ID = PiActionId.of("nop");
-    public static final PiActionId ACT_FABRICINGRESS_FILTERING_SET_VLAN_ID =
+    public static final PiActionId NOP = PiActionId.of("nop");
+    public static final PiActionId FABRIC_INGRESS_FILTERING_SET_VLAN =
             PiActionId.of("FabricIngress.filtering.set_vlan");
-    public static final PiActionId ACT_FABRICINGRESS_NEXT_MPLS_ROUTING_V6_ID =
+    public static final PiActionId FABRIC_INGRESS_NEXT_MPLS_ROUTING_V6 =
             PiActionId.of("FabricIngress.next.mpls_routing_v6");
-    public static final PiActionId ACT_FABRICEGRESS_PKT_IO_EGRESS_POP_VLAN_ID =
+    public static final PiActionId FABRIC_EGRESS_PKT_IO_EGRESS_POP_VLAN =
             PiActionId.of("FabricEgress.pkt_io_egress.pop_vlan");
-    public static final PiActionId ACT_FABRICINGRESS_NEXT_L3_ROUTING_VLAN_ID =
+    public static final PiActionId FABRIC_INGRESS_NEXT_L3_ROUTING_VLAN =
             PiActionId.of("FabricIngress.next.l3_routing_vlan");
-    public static final PiActionId ACT_NOACTION_ID = PiActionId.of("NoAction");
-    public static final PiActionId ACT_FABRICINGRESS_NEXT_SET_MCAST_GROUP_ID =
+    public static final PiActionId NO_ACTION = PiActionId.of("NoAction");
+    public static final PiActionId FABRIC_INGRESS_NEXT_SET_MCAST_GROUP =
             PiActionId.of("FabricIngress.next.set_mcast_group");
-    public static final PiActionId ACT_FABRICINGRESS_FORWARDING_DUPLICATE_TO_CONTROLLER_ID =
+    public static final PiActionId FABRIC_INGRESS_FORWARDING_DUPLICATE_TO_CONTROLLER =
             PiActionId.of("FabricIngress.forwarding.duplicate_to_controller");
-    public static final PiActionId ACT_FABRICINGRESS_NEXT_L3_ROUTING_ID =
+    public static final PiActionId FABRIC_INGRESS_NEXT_L3_ROUTING =
             PiActionId.of("FabricIngress.next.l3_routing");
-    public static final PiActionId ACT_FABRICINGRESS_NEXT_MPLS_ROUTING_V4_ID =
+    public static final PiActionId FABRIC_INGRESS_NEXT_MPLS_ROUTING_V4 =
             PiActionId.of("FabricIngress.next.mpls_routing_v4");
-    public static final PiActionId ACT_FABRICINGRESS_NEXT_SET_VLAN_OUTPUT_ID =
+    public static final PiActionId FABRIC_INGRESS_NEXT_SET_VLAN_OUTPUT =
             PiActionId.of("FabricIngress.next.set_vlan_output");
-    public static final PiActionId ACT_FABRICINGRESS_FORWARDING_SET_NEXT_ID_ID =
+    public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID =
             PiActionId.of("FabricIngress.forwarding.set_next_id");
-    public static final PiActionId ACT_FABRICINGRESS_FILTERING_PUSH_INTERNAL_VLAN_ID =
+    public static final PiActionId FABRIC_INGRESS_FILTERING_PUSH_INTERNAL_VLAN =
             PiActionId.of("FabricIngress.filtering.push_internal_vlan");
-    public static final PiActionId ACT_FABRICINGRESS_FORWARDING_DROP_ID =
+    public static final PiActionId FABRIC_INGRESS_FORWARDING_DROP =
             PiActionId.of("FabricIngress.forwarding.drop");
-    public static final PiActionId ACT_FABRICINGRESS_NEXT_OUTPUT_ID =
+    public static final PiActionId FABRIC_INGRESS_NEXT_OUTPUT =
             PiActionId.of("FabricIngress.next.output");
-
     // Action Param IDs
-    public static final PiActionParamId ACT_PRM_DMAC_ID =
-            PiActionParamId.of("dmac");
-    public static final PiActionParamId ACT_PRM_PORT_NUM_ID =
+    public static final PiActionParamId DMAC = PiActionParamId.of("dmac");
+    public static final PiActionParamId PORT_NUM =
             PiActionParamId.of("port_num");
-    public static final PiActionParamId ACT_PRM_LABEL_ID =
-            PiActionParamId.of("label");
-    public static final PiActionParamId ACT_PRM_SMAC_ID =
-            PiActionParamId.of("smac");
-    public static final PiActionParamId ACT_PRM_GID_ID =
-            PiActionParamId.of("gid");
-    public static final PiActionParamId ACT_PRM_NEW_VLAN_ID_ID =
+    public static final PiActionParamId LABEL = PiActionParamId.of("label");
+    public static final PiActionParamId SMAC = PiActionParamId.of("smac");
+    public static final PiActionParamId GID = PiActionParamId.of("gid");
+    public static final PiActionParamId NEW_VLAN_ID =
             PiActionParamId.of("new_vlan_id");
-    public static final PiActionParamId ACT_PRM_FWD_TYPE_ID =
+    public static final PiActionParamId FWD_TYPE =
             PiActionParamId.of("fwd_type");
-    public static final PiActionParamId ACT_PRM_NEXT_ID_ID =
-            PiActionParamId.of("next_id");
-
+    public static final PiActionParamId NEXT_ID = PiActionParamId.of("next_id");
     // Action Profile IDs
-    public static final PiActionProfileId ACT_PRF_FABRICINGRESS_NEXT_ECMP_SELECTOR_ID =
+    public static final PiActionProfileId FABRIC_INGRESS_NEXT_ECMP_SELECTOR =
             PiActionProfileId.of("FabricIngress.next.ecmp_selector");
-
     // Packet Metadata IDs
-    public static final PiControlMetadataId CTRL_META_INGRESS_PORT_ID =
+    public static final PiControlMetadataId INGRESS_PORT =
             PiControlMetadataId.of("ingress_port");
-    public static final PiControlMetadataId CTRL_META_EGRESS_PORT_ID =
+    public static final PiControlMetadataId EGRESS_PORT =
             PiControlMetadataId.of("egress_port");
     public static final int PORT_BITWIDTH = 9;
-}
+}
\ No newline at end of file
diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java
index fb85ff3..2c698a5 100644
--- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java
+++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java
@@ -63,75 +63,79 @@
     private static final ImmutableBiMap<Integer, PiTableId> TABLE_ID_MAP =
             ImmutableBiMap.<Integer, PiTableId>builder()
                     // Filtering
-                    .put(0, FabricConstants.TBL_INGRESS_PORT_VLAN_ID)
-                    .put(1, FabricConstants.TBL_FWD_CLASSIFIER_ID)
+                    .put(0, FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN)
+                    .put(1, FabricConstants.FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER)
                     // Forwarding
-                    .put(2, FabricConstants.TBL_MPLS_ID)
-                    .put(3, FabricConstants.TBL_UNICAST_V4_ID)
-                    .put(4, FabricConstants.TBL_UNICAST_V6_ID)
-                    .put(5, FabricConstants.TBL_MULTICAST_V4_ID)
-                    .put(6, FabricConstants.TBL_MULTICAST_V6_ID)
-                    .put(7, FabricConstants.TBL_BRIDGING_ID)
-                    .put(8, FabricConstants.TBL_ACL_ID)
+                    .put(2, FabricConstants.FABRIC_INGRESS_FORWARDING_MPLS)
+                    .put(3, FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V4)
+                    .put(4, FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V6)
+                    .put(5, FabricConstants.FABRIC_INGRESS_FORWARDING_MULTICAST_V4)
+                    .put(6, FabricConstants.FABRIC_INGRESS_FORWARDING_MULTICAST_V6)
+                    .put(7, FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING)
+                    .put(8, FabricConstants.FABRIC_INGRESS_FORWARDING_ACL)
                     // Next
-                    .put(9, FabricConstants.TBL_SIMPLE_ID)
-                    .put(10, FabricConstants.TBL_HASHED_ID)
-                    .put(11, FabricConstants.TBL_MULTICAST_ID)
+                    .put(9, FabricConstants.FABRIC_INGRESS_NEXT_VLAN_META)
+                    .put(10, FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE)
+                    .put(11, FabricConstants.FABRIC_INGRESS_NEXT_HASHED)
+                    .put(12, FabricConstants.FABRIC_INGRESS_NEXT_MULTICAST)
+                    .put(13, FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN)
                     .build();
 
-    private static final Set<PiTableId> FILTERING_CTRL_TBLS = ImmutableSet.of(FabricConstants.TBL_INGRESS_PORT_VLAN_ID,
-                                                                              FabricConstants.TBL_FWD_CLASSIFIER_ID);
-    private static final Set<PiTableId> FORWARDING_CTRL_TBLS = ImmutableSet.of(FabricConstants.TBL_MPLS_ID,
-                                                                               FabricConstants.TBL_UNICAST_V4_ID,
-                                                                               FabricConstants.TBL_UNICAST_V6_ID,
-                                                                               FabricConstants.TBL_MULTICAST_V4_ID,
-                                                                               FabricConstants.TBL_MULTICAST_V6_ID,
-                                                                               FabricConstants.TBL_BRIDGING_ID,
-                                                                               FabricConstants.TBL_ACL_ID);
-    private static final Set<PiTableId> NEXT_CTRL_TBLS = ImmutableSet.of(FabricConstants.TBL_SIMPLE_ID,
-                                                                         FabricConstants.TBL_HASHED_ID,
-                                                                         FabricConstants.TBL_MULTICAST_ID,
-                                                                         FabricConstants.TBL_VLAN_META_ID);
-
-    private static final Set<PiTableId> E_NEXT_CTRL_TBLS = ImmutableSet.of(FabricConstants.TBL_EGRESS_VLAN_ID);
+    private static final Set<PiTableId> FILTERING_CTRL_TBLS =
+            ImmutableSet.of(FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN,
+                            FabricConstants.FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER);
+    private static final Set<PiTableId> FORWARDING_CTRL_TBLS =
+            ImmutableSet.of(FabricConstants.FABRIC_INGRESS_FORWARDING_MPLS,
+                            FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V4,
+                            FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V6,
+                            FabricConstants.FABRIC_INGRESS_FORWARDING_MULTICAST_V4,
+                            FabricConstants.FABRIC_INGRESS_FORWARDING_MULTICAST_V6,
+                            FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING,
+                            FabricConstants.FABRIC_INGRESS_FORWARDING_ACL);
+    private static final Set<PiTableId> NEXT_CTRL_TBLS =
+            ImmutableSet.of(FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE,
+                            FabricConstants.FABRIC_INGRESS_NEXT_HASHED,
+                            FabricConstants.FABRIC_INGRESS_NEXT_MULTICAST);
+    private static final Set<PiTableId> E_NEXT_CTRL_TBLS =
+            ImmutableSet.of(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN);
 
     private static final ImmutableMap<Criterion.Type, PiMatchFieldId> CRITERION_MAP =
             ImmutableMap.<Criterion.Type, PiMatchFieldId>builder()
-                    .put(Criterion.Type.IN_PORT, FabricConstants.HF_STANDARD_METADATA_INGRESS_PORT_ID)
-                    .put(Criterion.Type.ETH_DST, FabricConstants.HF_ETHERNET_DST_ADDR_ID)
-                    .put(Criterion.Type.ETH_SRC, FabricConstants.HF_ETHERNET_SRC_ADDR_ID)
-                    .put(Criterion.Type.ETH_TYPE, FabricConstants.HF_FABRIC_METADATA_ORIGINAL_ETHER_TYPE_ID)
-                    .put(Criterion.Type.MPLS_LABEL, FabricConstants.HF_MPLS_LABEL_ID)
-                    .put(Criterion.Type.VLAN_VID, FabricConstants.HF_VLAN_TAG_VLAN_ID_ID)
-                    .put(Criterion.Type.IPV4_DST, FabricConstants.HF_IPV4_DST_ADDR_ID)
-                    .put(Criterion.Type.IPV4_SRC, FabricConstants.HF_IPV4_SRC_ADDR_ID)
-                    .put(Criterion.Type.IPV6_DST, FabricConstants.HF_IPV6_DST_ADDR_ID)
-                    .put(Criterion.Type.TCP_SRC, FabricConstants.HF_FABRIC_METADATA_L4_SRC_PORT_ID)
-                    .put(Criterion.Type.TCP_DST, FabricConstants.HF_FABRIC_METADATA_L4_DST_PORT_ID)
-                    .put(Criterion.Type.UDP_SRC, FabricConstants.HF_FABRIC_METADATA_L4_SRC_PORT_ID)
-                    .put(Criterion.Type.UDP_DST, FabricConstants.HF_FABRIC_METADATA_L4_DST_PORT_ID)
-                    .put(Criterion.Type.IP_PROTO, FabricConstants.HF_FABRIC_METADATA_IP_PROTO_ID)
-                    .put(Criterion.Type.ICMPV6_TYPE, FabricConstants.HF_ICMP_ICMP_TYPE_ID)
-                    .put(Criterion.Type.ICMPV6_CODE, FabricConstants.HF_ICMP_ICMP_CODE_ID)
+                    .put(Criterion.Type.IN_PORT, FabricConstants.STANDARD_METADATA_INGRESS_PORT)
+                    .put(Criterion.Type.ETH_DST, FabricConstants.HDR_ETHERNET_DST_ADDR)
+                    .put(Criterion.Type.ETH_SRC, FabricConstants.HDR_ETHERNET_SRC_ADDR)
+                    .put(Criterion.Type.ETH_TYPE, FabricConstants.FABRIC_METADATA_ORIGINAL_ETHER_TYPE)
+                    .put(Criterion.Type.MPLS_LABEL, FabricConstants.HDR_MPLS_LABEL)
+                    .put(Criterion.Type.VLAN_VID, FabricConstants.HDR_VLAN_TAG_VLAN_ID)
+                    .put(Criterion.Type.IPV4_DST, FabricConstants.HDR_IPV4_DST_ADDR)
+                    .put(Criterion.Type.IPV4_SRC, FabricConstants.HDR_IPV4_SRC_ADDR)
+                    .put(Criterion.Type.IPV6_DST, FabricConstants.HDR_IPV6_DST_ADDR)
+                    .put(Criterion.Type.TCP_SRC, FabricConstants.FABRIC_METADATA_L4_SRC_PORT)
+                    .put(Criterion.Type.TCP_DST, FabricConstants.FABRIC_METADATA_L4_DST_PORT)
+                    .put(Criterion.Type.UDP_SRC, FabricConstants.FABRIC_METADATA_L4_SRC_PORT)
+                    .put(Criterion.Type.UDP_DST, FabricConstants.FABRIC_METADATA_L4_DST_PORT)
+                    .put(Criterion.Type.IP_PROTO, FabricConstants.FABRIC_METADATA_IP_PROTO)
+                    .put(Criterion.Type.ICMPV6_TYPE, FabricConstants.HDR_ICMP_ICMP_TYPE)
+                    .put(Criterion.Type.ICMPV6_CODE, FabricConstants.HDR_ICMP_ICMP_CODE)
                     .build();
 
     private static final ImmutableMap<PiMatchFieldId, Criterion.Type> INVERSE_CRITERION_MAP =
             ImmutableMap.<PiMatchFieldId, Criterion.Type>builder()
-                    .put(FabricConstants.HF_STANDARD_METADATA_INGRESS_PORT_ID, Criterion.Type.IN_PORT)
-                    .put(FabricConstants.HF_ETHERNET_DST_ADDR_ID, Criterion.Type.ETH_DST)
-                    .put(FabricConstants.HF_ETHERNET_SRC_ADDR_ID, Criterion.Type.ETH_SRC)
-                    .put(FabricConstants.HF_FABRIC_METADATA_ORIGINAL_ETHER_TYPE_ID, Criterion.Type.ETH_TYPE)
-                    .put(FabricConstants.HF_MPLS_LABEL_ID, Criterion.Type.MPLS_LABEL)
-                    .put(FabricConstants.HF_VLAN_TAG_VLAN_ID_ID, Criterion.Type.VLAN_VID)
-                    .put(FabricConstants.HF_IPV4_DST_ADDR_ID, Criterion.Type.IPV4_DST)
-                    .put(FabricConstants.HF_IPV4_SRC_ADDR_ID, Criterion.Type.IPV4_SRC)
-                    .put(FabricConstants.HF_IPV6_DST_ADDR_ID, Criterion.Type.IPV6_DST)
+                    .put(FabricConstants.STANDARD_METADATA_INGRESS_PORT, Criterion.Type.IN_PORT)
+                    .put(FabricConstants.HDR_ETHERNET_DST_ADDR, Criterion.Type.ETH_DST)
+                    .put(FabricConstants.HDR_ETHERNET_SRC_ADDR, Criterion.Type.ETH_SRC)
+                    .put(FabricConstants.FABRIC_METADATA_ORIGINAL_ETHER_TYPE, Criterion.Type.ETH_TYPE)
+                    .put(FabricConstants.HDR_MPLS_LABEL, Criterion.Type.MPLS_LABEL)
+                    .put(FabricConstants.HDR_VLAN_TAG_VLAN_ID, Criterion.Type.VLAN_VID)
+                    .put(FabricConstants.HDR_IPV4_DST_ADDR, Criterion.Type.IPV4_DST)
+                    .put(FabricConstants.HDR_IPV4_SRC_ADDR, Criterion.Type.IPV4_SRC)
+                    .put(FabricConstants.HDR_IPV6_DST_ADDR, Criterion.Type.IPV6_DST)
                     // FIXME: might be incorrect if we inverse the map....
-                    .put(FabricConstants.HF_FABRIC_METADATA_L4_SRC_PORT_ID, Criterion.Type.UDP_SRC)
-                    .put(FabricConstants.HF_FABRIC_METADATA_L4_DST_PORT_ID, Criterion.Type.UDP_DST)
-                    .put(FabricConstants.HF_FABRIC_METADATA_IP_PROTO_ID, Criterion.Type.IP_PROTO)
-                    .put(FabricConstants.HF_ICMP_ICMP_TYPE_ID, Criterion.Type.ICMPV6_TYPE)
-                    .put(FabricConstants.HF_ICMP_ICMP_CODE_ID, Criterion.Type.ICMPV6_CODE)
+                    .put(FabricConstants.FABRIC_METADATA_L4_SRC_PORT, Criterion.Type.UDP_SRC)
+                    .put(FabricConstants.FABRIC_METADATA_L4_DST_PORT, Criterion.Type.UDP_DST)
+                    .put(FabricConstants.FABRIC_METADATA_IP_PROTO, Criterion.Type.IP_PROTO)
+                    .put(FabricConstants.HDR_ICMP_ICMP_TYPE, Criterion.Type.ICMPV6_TYPE)
+                    .put(FabricConstants.HDR_ICMP_ICMP_CODE, Criterion.Type.ICMPV6_CODE)
                     .build();
 
     @Override
@@ -185,7 +189,7 @@
     private PiControlMetadata createPacketMetadata(long portNumber) throws PiInterpreterException {
         try {
             return PiControlMetadata.builder()
-                    .withId(FabricConstants.CTRL_META_EGRESS_PORT_ID)
+                    .withId(FabricConstants.EGRESS_PORT)
                     .withValue(copyFrom(portNumber).fit(FabricConstants.PORT_BITWIDTH))
                     .build();
         } catch (ImmutableByteSequence.ByteSequenceTrimException e) {
@@ -247,7 +251,7 @@
 
         // Returns the ingress port packet metadata.
         Optional<PiControlMetadata> packetMetadata = packetIn.metadatas()
-                .stream().filter(m -> m.id().equals(FabricConstants.CTRL_META_INGRESS_PORT_ID))
+                .stream().filter(m -> m.id().equals(FabricConstants.INGRESS_PORT))
                 .findFirst();
 
         if (packetMetadata.isPresent()) {
@@ -259,7 +263,7 @@
         } else {
             throw new PiInterpreterException(format(
                     "Missing metadata '%s' in packet-in received from '%s': %s",
-                    FabricConstants.CTRL_META_INGRESS_PORT_ID, deviceId, packetIn));
+                    FabricConstants.INGRESS_PORT, deviceId, packetIn));
         }
     }
 }
diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricPortStatisticsDiscovery.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricPortStatisticsDiscovery.java
index a9e3f3b..ab44040 100644
--- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricPortStatisticsDiscovery.java
+++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricPortStatisticsDiscovery.java
@@ -32,7 +32,7 @@
      */
     @Override
     public PiCounterId ingressCounterId() {
-        return FabricConstants.CNT_INGRESS_PORT_COUNTER_ID;
+        return FabricConstants.FABRIC_INGRESS_PORT_COUNTERS_CONTROL_INGRESS_PORT_COUNTER;
     }
 
     /**
@@ -42,6 +42,6 @@
      */
     @Override
     public PiCounterId egressCounterId() {
-        return FabricConstants.CNT_EGRESS_PORT_COUNTER_ID;
+        return FabricConstants.FABRIC_INGRESS_PORT_COUNTERS_CONTROL_EGRESS_PORT_COUNTER;
     }
 }
diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricTreatmentInterpreter.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricTreatmentInterpreter.java
index 3be56bb..2c41985 100644
--- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricTreatmentInterpreter.java
+++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricTreatmentInterpreter.java
@@ -51,11 +51,11 @@
     private static final Logger log = getLogger(FabricTreatmentInterpreter.class);
     private static final String INVALID_TREATMENT = "Invalid treatment for %s block: %s";
     private static final PiAction NOP = PiAction.builder()
-            .withId(FabricConstants.ACT_NOP_ID)
+            .withId(FabricConstants.NOP)
             .build();
 
     private static final PiAction POP_VLAN = PiAction.builder()
-            .withId(FabricConstants.ACT_FABRICEGRESS_EGRESS_NEXT_POP_VLAN_ID)
+            .withId(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN)
             .build();
 
     // Hide default constructor
@@ -103,14 +103,14 @@
         }
 
         VlanId vlanId = setVlanInst.vlanId();
-        PiActionParam param = new PiActionParam(FabricConstants.ACT_PRM_NEW_VLAN_ID_ID,
+        PiActionParam param = new PiActionParam(FabricConstants.NEW_VLAN_ID,
                                                 ImmutableByteSequence.copyFrom(vlanId.toShort()));
         PiActionId actionId;
         if (pushVlanInst != null) {
             // push_internal_vlan
-            actionId = FabricConstants.ACT_FABRICINGRESS_FILTERING_PUSH_INTERNAL_VLAN_ID;
+            actionId = FabricConstants.FABRIC_INGRESS_FILTERING_PUSH_INTERNAL_VLAN;
         } else {
-            actionId = FabricConstants.ACT_FABRICINGRESS_FILTERING_SET_VLAN_ID;
+            actionId = FabricConstants.FABRIC_INGRESS_FILTERING_SET_VLAN;
         }
 
         // set_vlan
@@ -155,7 +155,7 @@
         }
 
         return PiAction.builder()
-                .withId(FabricConstants.ACT_FABRICINGRESS_FORWARDING_DUPLICATE_TO_CONTROLLER_ID)
+                .withId(FabricConstants.FABRIC_INGRESS_FORWARDING_DUPLICATE_TO_CONTROLLER)
                 .build();
     }
 
@@ -219,11 +219,10 @@
                 // set_vlan
                 VlanId vlanId = modVlanIdInst.vlanId();
                 PiActionParam newVlanParam =
-                        new PiActionParam(FabricConstants.ACT_PRM_NEW_VLAN_ID_ID,
+                        new PiActionParam(FabricConstants.NEW_VLAN_ID,
                                           ImmutableByteSequence.copyFrom(vlanId.toShort()));
-                // set_vlan_output
                 return PiAction.builder()
-                        .withId(FabricConstants.ACT_FABRICINGRESS_NEXT_SET_VLAN_ID)
+                        .withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_VLAN)
                         .withParameter(newVlanParam)
                         .build();
             } else {
@@ -232,23 +231,23 @@
         }
 
         short portNum = (short) outInst.port().toLong();
-        PiActionParam portNumParam = new PiActionParam(FabricConstants.ACT_PRM_PORT_NUM_ID,
+        PiActionParam portNumParam = new PiActionParam(FabricConstants.PORT_NUM,
                                                        ImmutableByteSequence.copyFrom(portNum));
         if (modEthDstInst == null && modEthSrcInst == null) {
             if (modVlanIdInst != null) {
                 VlanId vlanId = modVlanIdInst.vlanId();
                 PiActionParam vlanParam =
-                        new PiActionParam(FabricConstants.ACT_PRM_NEW_VLAN_ID_ID,
+                        new PiActionParam(FabricConstants.NEW_VLAN_ID,
                                           ImmutableByteSequence.copyFrom(vlanId.toShort()));
                 // set_vlan_output
                 return PiAction.builder()
-                        .withId(FabricConstants.ACT_FABRICINGRESS_NEXT_SET_VLAN_OUTPUT_ID)
+                        .withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_VLAN_OUTPUT)
                         .withParameters(ImmutableList.of(portNumParam, vlanParam))
                         .build();
             } else {
                 // output
                 return PiAction.builder()
-                        .withId(FabricConstants.ACT_FABRICINGRESS_NEXT_OUTPUT_ID)
+                        .withId(FabricConstants.FABRIC_INGRESS_NEXT_OUTPUT)
                         .withParameter(portNumParam)
                         .build();
             }
@@ -257,9 +256,9 @@
         if (modEthDstInst != null && modEthSrcInst != null) {
             MacAddress srcMac = modEthSrcInst.mac();
             MacAddress dstMac = modEthDstInst.mac();
-            PiActionParam srcMacParam = new PiActionParam(FabricConstants.ACT_PRM_SMAC_ID,
+            PiActionParam srcMacParam = new PiActionParam(FabricConstants.SMAC,
                                                           ImmutableByteSequence.copyFrom(srcMac.toBytes()));
-            PiActionParam dstMacParam = new PiActionParam(FabricConstants.ACT_PRM_DMAC_ID,
+            PiActionParam dstMacParam = new PiActionParam(FabricConstants.DMAC,
                                                           ImmutableByteSequence.copyFrom(dstMac.toBytes()));
 
             if (modMplsInst != null) {
@@ -268,10 +267,10 @@
                 try {
                     ImmutableByteSequence mplsValue =
                             ImmutableByteSequence.copyFrom(mplsLabel.toInt()).fit(20);
-                    PiActionParam mplsParam = new PiActionParam(FabricConstants.ACT_PRM_LABEL_ID, mplsValue);
+                    PiActionParam mplsParam = new PiActionParam(FabricConstants.LABEL, mplsValue);
                     return PiAction.builder()
                             // FIXME: fins a way to determine v4 or v6
-                            .withId(FabricConstants.ACT_FABRICINGRESS_NEXT_MPLS_ROUTING_V4_ID)
+                            .withId(FabricConstants.FABRIC_INGRESS_NEXT_MPLS_ROUTING_V4)
                             .withParameters(ImmutableList.of(portNumParam,
                                                              srcMacParam,
                                                              dstMacParam,
@@ -287,17 +286,17 @@
             if (modVlanIdInst != null) {
                 VlanId vlanId = modVlanIdInst.vlanId();
                 PiActionParam vlanParam =
-                        new PiActionParam(FabricConstants.ACT_PRM_NEW_VLAN_ID_ID,
+                        new PiActionParam(FabricConstants.NEW_VLAN_ID,
                                           ImmutableByteSequence.copyFrom(vlanId.toShort()));
                 // L3 routing and set VLAN
                 return PiAction.builder()
-                        .withId(FabricConstants.ACT_FABRICINGRESS_NEXT_L3_ROUTING_VLAN_ID)
+                        .withId(FabricConstants.FABRIC_INGRESS_NEXT_L3_ROUTING_VLAN)
                         .withParameters(ImmutableList.of(srcMacParam, dstMacParam, portNumParam, vlanParam))
                         .build();
             } else {
                 // L3 routing
                 return PiAction.builder()
-                        .withId(FabricConstants.ACT_FABRICINGRESS_NEXT_L3_ROUTING_ID)
+                        .withId(FabricConstants.FABRIC_INGRESS_NEXT_L3_ROUTING)
                         .withParameters(ImmutableList.of(portNumParam,
                                                          srcMacParam,
                                                          dstMacParam))
diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricFilteringPipeliner.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricFilteringPipeliner.java
index d46d354..a8515e5 100644
--- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricFilteringPipeliner.java
+++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricFilteringPipeliner.java
@@ -58,10 +58,10 @@
     private static final byte FWD_IPV6_UNICAST = 4;
     private static final byte FWD_IPV6_MULTICAST = 5;
     private static final PiCriterion VLAN_VALID = PiCriterion.builder()
-            .matchExact(FabricConstants.HF_VLAN_TAG_IS_VALID_ID, new byte[]{1})
+            .matchExact(FabricConstants.HDR_VLAN_TAG_IS_VALID, new byte[]{1})
             .build();
     private static final PiCriterion VLAN_INVALID = PiCriterion.builder()
-            .matchExact(FabricConstants.HF_VLAN_TAG_IS_VALID_ID, new byte[]{0})
+            .matchExact(FabricConstants.HDR_VLAN_TAG_IS_VALID, new byte[]{0})
             .build();
 
     protected DeviceId deviceId;
@@ -147,7 +147,7 @@
                 .withSelector(selector.build())
                 .withTreatment(treatment)
                 .withPriority(filterObjective.priority())
-                .forTable(FabricConstants.TBL_INGRESS_PORT_VLAN_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN)
                 .forDevice(deviceId)
                 .makePermanent()
                 .build();
@@ -225,15 +225,15 @@
                 .withPriority(filterObjective.priority())
                 .forDevice(deviceId)
                 .makePermanent()
-                .forTable(FabricConstants.TBL_FWD_CLASSIFIER_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER)
                 .build();
     }
 
     private TrafficTreatment createFwdClassifierTreatment(byte fwdType) {
-        PiActionParam param = new PiActionParam(FabricConstants.ACT_PRM_FWD_TYPE_ID,
+        PiActionParam param = new PiActionParam(FabricConstants.FWD_TYPE,
                                                 ImmutableByteSequence.copyFrom(fwdType));
         PiAction action = PiAction.builder()
-                .withId(FabricConstants.ACT_FABRICINGRESS_FILTERING_SET_FORWARDING_TYPE_ID)
+                .withId(FabricConstants.FABRIC_INGRESS_FILTERING_SET_FORWARDING_TYPE)
                 .withParameter(param)
                 .build();
         return DefaultTrafficTreatment.builder()
diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricForwardingPipeliner.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricForwardingPipeliner.java
index 6f87e79..785870e 100644
--- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricForwardingPipeliner.java
+++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricForwardingPipeliner.java
@@ -84,7 +84,7 @@
         FlowRule flowRule = DefaultFlowRule.builder()
                 .withSelector(fwd.selector())
                 .withTreatment(fwd.treatment())
-                .forTable(FabricConstants.TBL_ACL_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_FORWARDING_ACL)
                 .withPriority(fwd.priority())
                 .forDevice(deviceId)
                 .makePermanent()
@@ -188,7 +188,7 @@
                 .withPriority(fwd.priority())
                 .makePermanent()
                 .forDevice(deviceId)
-                .forTable(FabricConstants.TBL_BRIDGING_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING)
                 .build();
 
         resultBuilder.addFlowRule(flowRule);
@@ -215,7 +215,7 @@
                 .withPriority(fwd.priority())
                 .makePermanent()
                 .forDevice(deviceId)
-                .forTable(FabricConstants.TBL_BRIDGING_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING)
                 .build();
 
         resultBuilder.addFlowRule(flowRule);
@@ -238,7 +238,7 @@
                 .withPriority(fwd.priority())
                 .makePermanent()
                 .forDevice(deviceId)
-                .forTable(FabricConstants.TBL_UNICAST_V4_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V4)
                 .build();
 
         resultBuilder.addFlowRule(flowRule);
@@ -251,10 +251,10 @@
 
         treatment = fwd.treatment();
         if (fwd.nextId() != null) {
-            PiActionParam nextIdParam = new PiActionParam(FabricConstants.ACT_PRM_NEXT_ID_ID,
+            PiActionParam nextIdParam = new PiActionParam(FabricConstants.NEXT_ID,
                                                           ImmutableByteSequence.copyFrom(fwd.nextId().byteValue()));
             PiAction nextIdAction = PiAction.builder()
-                    .withId(FabricConstants.ACT_FABRICINGRESS_FORWARDING_POP_MPLS_AND_NEXT_ID)
+                    .withId(FabricConstants.FABRIC_INGRESS_FORWARDING_POP_MPLS_AND_NEXT)
                     .withParameter(nextIdParam)
                     .build();
             treatment = DefaultTrafficTreatment.builder()
@@ -273,7 +273,7 @@
                 .withPriority(fwd.priority())
                 .makePermanent()
                 .forDevice(deviceId)
-                .forTable(FabricConstants.TBL_MPLS_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_FORWARDING_MPLS)
                 .build();
 
         resultBuilder.addFlowRule(flowRule);
@@ -287,10 +287,10 @@
      * @return treatment with set_next_id action; empty treatment if next id is null
      */
     private static TrafficTreatment buildSetNextIdTreatment(Integer nextId) {
-        PiActionParam nextIdParam = new PiActionParam(FabricConstants.ACT_PRM_NEXT_ID_ID,
+        PiActionParam nextIdParam = new PiActionParam(FabricConstants.NEXT_ID,
                                                       ImmutableByteSequence.copyFrom(nextId.byteValue()));
         PiAction nextIdAction = PiAction.builder()
-                .withId(FabricConstants.ACT_FABRICINGRESS_FORWARDING_SET_NEXT_ID_ID)
+                .withId(FabricConstants.FABRIC_INGRESS_FORWARDING_SET_NEXT_ID)
                 .withParameter(nextIdParam)
                 .build();
 
diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricNextPipeliner.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricNextPipeliner.java
index 12602b4..3b66b1b 100644
--- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricNextPipeliner.java
+++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/pipeliner/FabricNextPipeliner.java
@@ -42,18 +42,12 @@
 import org.onosproject.net.group.GroupDescription;
 import org.onosproject.net.pi.runtime.PiActionGroupId;
 import org.onosproject.net.pi.runtime.PiGroupKey;
+import org.onosproject.pipelines.fabric.FabricConstants;
 import org.slf4j.Logger;
 
 import java.util.List;
 import java.util.stream.Collectors;
 
-import static org.onosproject.pipelines.fabric.FabricConstants.ACT_PRF_FABRICINGRESS_NEXT_ECMP_SELECTOR_ID;
-import static org.onosproject.pipelines.fabric.FabricConstants.HF_FABRIC_METADATA_NEXT_ID_ID;
-import static org.onosproject.pipelines.fabric.FabricConstants.HF_STANDARD_METADATA_EGRESS_PORT_ID;
-import static org.onosproject.pipelines.fabric.FabricConstants.TBL_EGRESS_VLAN_ID;
-import static org.onosproject.pipelines.fabric.FabricConstants.TBL_HASHED_ID;
-import static org.onosproject.pipelines.fabric.FabricConstants.TBL_SIMPLE_ID;
-import static org.onosproject.pipelines.fabric.FabricConstants.TBL_VLAN_META_ID;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -116,7 +110,7 @@
         resultBuilder.addFlowRule(DefaultFlowRule.builder()
                                           .withSelector(selector)
                                           .withTreatment(treatment)
-                                          .forTable(TBL_VLAN_META_ID)
+                                          .forTable(FabricConstants.FABRIC_INGRESS_NEXT_VLAN_META)
                                           .makePermanent()
                                           .withPriority(next.priority())
                                           .forDevice(deviceId)
@@ -146,7 +140,7 @@
         resultBuilder.addFlowRule(DefaultFlowRule.builder()
                                           .withSelector(selector)
                                           .withTreatment(treatment)
-                                          .forTable(TBL_SIMPLE_ID)
+                                          .forTable(FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE)
                                           .makePermanent()
                                           .withPriority(next.priority())
                                           .forDevice(deviceId)
@@ -184,7 +178,7 @@
         VlanId vlanId = vlanIdCriterion.vlanId();
 
         PiCriterion egressVlanTableMatch = PiCriterion.builder()
-                .matchExact(HF_STANDARD_METADATA_EGRESS_PORT_ID,
+                .matchExact(FabricConstants.STANDARD_METADATA_EGRESS_PORT,
                             (short) port.toLong())
                 .build();
         // Add VLAN pop rule to egress pipeline table
@@ -198,7 +192,7 @@
         resultBuilder.addFlowRule(DefaultFlowRule.builder()
                                           .withSelector(selector)
                                           .withTreatment(treatment)
-                                          .forTable(TBL_EGRESS_VLAN_ID)
+                                          .forTable(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN)
                                           .makePermanent()
                                           .withPriority(next.priority())
                                           .forDevice(deviceId)
@@ -256,8 +250,8 @@
         }
 
         GroupBuckets buckets = new GroupBuckets(bucketList);
-        PiGroupKey groupKey = new PiGroupKey(TBL_HASHED_ID,
-                                             ACT_PRF_FABRICINGRESS_NEXT_ECMP_SELECTOR_ID,
+        PiGroupKey groupKey = new PiGroupKey(FabricConstants.FABRIC_INGRESS_NEXT_HASHED,
+                                             FabricConstants.FABRIC_INGRESS_NEXT_ECMP_SELECTOR,
                                              groupId);
 
         resultBuilder.addGroup(new DefaultGroupDescription(deviceId,
@@ -282,7 +276,7 @@
         resultBuilder.addFlowRule(DefaultFlowRule.builder()
                                           .withSelector(selector)
                                           .withTreatment(treatment)
-                                          .forTable(TBL_HASHED_ID)
+                                          .forTable(FabricConstants.FABRIC_INGRESS_NEXT_HASHED)
                                           .makePermanent()
                                           .withPriority(next.priority())
                                           .forDevice(deviceId)
@@ -292,7 +286,7 @@
 
     private TrafficSelector buildNextIdSelector(int nextId) {
         PiCriterion nextIdCriterion = PiCriterion.builder()
-                .matchExact(HF_FABRIC_METADATA_NEXT_ID_ID, nextId)
+                .matchExact(FabricConstants.FABRIC_METADATA_NEXT_ID, nextId)
                 .build();
         return DefaultTrafficSelector.builder()
                 .matchPi(nextIdCriterion)
diff --git a/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/FabricInterpreterTest.java b/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/FabricInterpreterTest.java
index dc20728..b56d904 100644
--- a/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/FabricInterpreterTest.java
+++ b/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/FabricInterpreterTest.java
@@ -61,11 +61,11 @@
                 .setVlanId(VLAN_100)
                 .build();
         PiAction mappedAction = interpreter.mapTreatment(treatment,
-                                                   FabricConstants.TBL_INGRESS_PORT_VLAN_ID);
-        PiActionParam param = new PiActionParam(FabricConstants.ACT_PRM_NEW_VLAN_ID_ID,
+                                                   FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
+        PiActionParam param = new PiActionParam(FabricConstants.NEW_VLAN_ID,
                                                 ImmutableByteSequence.copyFrom(VLAN_100.toShort()));
         PiAction expectedAction = PiAction.builder()
-                .withId(FabricConstants.ACT_FABRICINGRESS_FILTERING_PUSH_INTERNAL_VLAN_ID)
+                .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PUSH_INTERNAL_VLAN)
                 .withParameter(param)
                 .build();
 
@@ -81,11 +81,11 @@
                 .setVlanId(VLAN_100)
                 .build();
         PiAction mappedAction = interpreter.mapTreatment(treatment,
-                                                         FabricConstants.TBL_INGRESS_PORT_VLAN_ID);
-        PiActionParam param = new PiActionParam(FabricConstants.ACT_PRM_NEW_VLAN_ID_ID,
+                                                         FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
+        PiActionParam param = new PiActionParam(FabricConstants.NEW_VLAN_ID,
                                                 ImmutableByteSequence.copyFrom(VLAN_100.toShort()));
         PiAction expectedAction = PiAction.builder()
-                .withId(FabricConstants.ACT_FABRICINGRESS_FILTERING_SET_VLAN_ID)
+                .withId(FabricConstants.FABRIC_INGRESS_FILTERING_SET_VLAN)
                 .withParameter(param)
                 .build();
 
@@ -99,9 +99,9 @@
     public void testFilteringTreatment3() throws Exception {
         TrafficTreatment treatment = DefaultTrafficTreatment.emptyTreatment();
         PiAction mappedAction = interpreter.mapTreatment(treatment,
-                                                         FabricConstants.TBL_INGRESS_PORT_VLAN_ID);
+                                                         FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
         PiAction expectedAction = PiAction.builder()
-                .withId(FabricConstants.ACT_NOP_ID)
+                .withId(FabricConstants.NOP)
                 .build();
 
         assertEquals(expectedAction, mappedAction);
@@ -118,9 +118,9 @@
                 .punt()
                 .build();
         PiAction mappedAction = interpreter.mapTreatment(treatment,
-                                                         FabricConstants.TBL_ACL_ID);
+                                                         FabricConstants.FABRIC_INGRESS_FORWARDING_ACL);
         PiAction expectedAction = PiAction.builder()
-                .withId(FabricConstants.ACT_FABRICINGRESS_FORWARDING_DUPLICATE_TO_CONTROLLER_ID)
+                .withId(FabricConstants.FABRIC_INGRESS_FORWARDING_DUPLICATE_TO_CONTROLLER)
                 .build();
 
         assertEquals(expectedAction, mappedAction);
@@ -133,7 +133,7 @@
     public void testEmptyForwardingTreatment() throws Exception {
         TrafficTreatment treatment = DefaultTrafficTreatment.emptyTreatment();
         PiAction mappedAction = interpreter.mapTreatment(treatment,
-                                                         FabricConstants.TBL_UNICAST_V4_ID);
+                                                         FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V4);
         assertNull(mappedAction);
     }
 
@@ -148,12 +148,12 @@
                 .setOutput(PORT_1)
                 .build();
         PiAction mappedAction = interpreter.mapTreatment(treatment,
-                                                         FabricConstants.TBL_SIMPLE_ID);
+                                                         FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE);
         short portNumVal = (short) PORT_1.toLong();
-        PiActionParam param = new PiActionParam(FabricConstants.ACT_PRM_PORT_NUM_ID,
+        PiActionParam param = new PiActionParam(FabricConstants.PORT_NUM,
                                                 ImmutableByteSequence.copyFrom(portNumVal));
         PiAction expectedAction = PiAction.builder()
-                .withId(FabricConstants.ACT_FABRICINGRESS_NEXT_OUTPUT_ID)
+                .withId(FabricConstants.FABRIC_INGRESS_NEXT_OUTPUT)
                 .withParameter(param)
                 .build();
 
@@ -171,16 +171,16 @@
                 .setOutput(PORT_1)
                 .build();
         PiAction mappedAction = interpreter.mapTreatment(treatment,
-                                                         FabricConstants.TBL_HASHED_ID);
+                                                         FabricConstants.FABRIC_INGRESS_NEXT_HASHED);
         short portNumVal = (short) PORT_1.toLong();
-        PiActionParam ethSrcParam = new PiActionParam(FabricConstants.ACT_PRM_SMAC_ID,
+        PiActionParam ethSrcParam = new PiActionParam(FabricConstants.SMAC,
                                                       ImmutableByteSequence.copyFrom(SRC_MAC.toBytes()));
-        PiActionParam ethDstParam = new PiActionParam(FabricConstants.ACT_PRM_DMAC_ID,
+        PiActionParam ethDstParam = new PiActionParam(FabricConstants.DMAC,
                                                       ImmutableByteSequence.copyFrom(DST_MAC.toBytes()));
-        PiActionParam portParam = new PiActionParam(FabricConstants.ACT_PRM_PORT_NUM_ID,
+        PiActionParam portParam = new PiActionParam(FabricConstants.PORT_NUM,
                                                 ImmutableByteSequence.copyFrom(portNumVal));
         PiAction expectedAction = PiAction.builder()
-                .withId(FabricConstants.ACT_FABRICINGRESS_NEXT_L3_ROUTING_ID)
+                .withId(FabricConstants.FABRIC_INGRESS_NEXT_L3_ROUTING)
                 .withParameters(ImmutableList.of(ethSrcParam, ethDstParam, portParam))
                 .build();
 
@@ -197,16 +197,16 @@
                 .setOutput(PORT_1)
                 .build();
         PiAction mappedAction = interpreter.mapTreatment(treatment,
-                                                         FabricConstants.TBL_SIMPLE_ID);
+                                                         FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE);
         short portNumVal = (short) PORT_1.toLong();
-        PiActionParam portParam = new PiActionParam(FabricConstants.ACT_PRM_PORT_NUM_ID,
+        PiActionParam portParam = new PiActionParam(FabricConstants.PORT_NUM,
                                                     ImmutableByteSequence.copyFrom(portNumVal));
         short vlanVal = VLAN_100.toShort();
-        PiActionParam vlanParam = new PiActionParam(FabricConstants.ACT_PRM_NEW_VLAN_ID_ID,
+        PiActionParam vlanParam = new PiActionParam(FabricConstants.NEW_VLAN_ID,
                                                     ImmutableByteSequence.copyFrom(vlanVal));
 
         PiAction expectedAction = PiAction.builder()
-                .withId(FabricConstants.ACT_FABRICINGRESS_NEXT_SET_VLAN_OUTPUT_ID)
+                .withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_VLAN_OUTPUT)
                 .withParameters(ImmutableList.of(vlanParam, portParam))
                 .build();
 
@@ -224,19 +224,19 @@
                 .setOutput(PORT_1)
                 .build();
         PiAction mappedAction = interpreter.mapTreatment(treatment,
-                                                         FabricConstants.TBL_HASHED_ID);
+                                                         FabricConstants.FABRIC_INGRESS_NEXT_HASHED);
         short portNumVal = (short) PORT_1.toLong();
-        PiActionParam ethSrcParam = new PiActionParam(FabricConstants.ACT_PRM_SMAC_ID,
+        PiActionParam ethSrcParam = new PiActionParam(FabricConstants.SMAC,
                                                       ImmutableByteSequence.copyFrom(SRC_MAC.toBytes()));
-        PiActionParam ethDstParam = new PiActionParam(FabricConstants.ACT_PRM_DMAC_ID,
+        PiActionParam ethDstParam = new PiActionParam(FabricConstants.DMAC,
                                                       ImmutableByteSequence.copyFrom(DST_MAC.toBytes()));
-        PiActionParam portParam = new PiActionParam(FabricConstants.ACT_PRM_PORT_NUM_ID,
+        PiActionParam portParam = new PiActionParam(FabricConstants.PORT_NUM,
                                                     ImmutableByteSequence.copyFrom(portNumVal));
         ImmutableByteSequence mplsVal =
                 ImmutableByteSequence.copyFrom(MPLS_10.toInt()).fit(20);
-        PiActionParam mplsParam = new PiActionParam(FabricConstants.ACT_PRM_LABEL_ID, mplsVal);
+        PiActionParam mplsParam = new PiActionParam(FabricConstants.LABEL, mplsVal);
         PiAction expectedAction = PiAction.builder()
-                .withId(FabricConstants.ACT_FABRICINGRESS_NEXT_MPLS_ROUTING_V4_ID)
+                .withId(FabricConstants.FABRIC_INGRESS_NEXT_MPLS_ROUTING_V4)
                 .withParameters(ImmutableList.of(ethSrcParam, ethDstParam, portParam, mplsParam))
                 .build();
         assertEquals(expectedAction, mappedAction);
diff --git a/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricFilteringPipelinerTest.java b/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricFilteringPipelinerTest.java
index b62c3c2..5769e8f 100644
--- a/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricFilteringPipelinerTest.java
+++ b/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricFilteringPipelinerTest.java
@@ -65,10 +65,11 @@
 
         // in port vlan flow rule
         FlowRule actualFlowRule = flowRulesInstalled.get(0);
-        FlowRule flowRuleExpected = buildExpectedVlanInPortRule(PORT_1,
-                                                                VlanId.NONE,
-                                                                VLAN_100,
-                                                                FabricConstants.TBL_INGRESS_PORT_VLAN_ID);
+        FlowRule flowRuleExpected =
+                buildExpectedVlanInPortRule(PORT_1,
+                                            VlanId.NONE,
+                                            VLAN_100,
+                                            FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
         assertTrue(flowRuleExpected.exactMatch(actualFlowRule));
 
         // forwarding classifier ipv4
@@ -125,10 +126,11 @@
 
         // in port vlan flow rule
         FlowRule actualFlowRule = flowRulesInstalled.get(0);
-        FlowRule flowRuleExpected = buildExpectedVlanInPortRule(PORT_1,
-                                                                VlanId.NONE,
-                                                                VLAN_100,
-                                                                FabricConstants.TBL_INGRESS_PORT_VLAN_ID);
+        FlowRule flowRuleExpected =
+                buildExpectedVlanInPortRule(PORT_1,
+                                            VlanId.NONE,
+                                            VLAN_100,
+                                            FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
         assertTrue(flowRuleExpected.exactMatch(actualFlowRule));
 
         // forwarding classifier
@@ -169,10 +171,11 @@
 
         // in port vlan flow rule
         FlowRule actualFlowRule = flowRulesInstalled.get(0);
-        FlowRule flowRuleExpected = buildExpectedVlanInPortRule(PORT_1,
-                                                                VlanId.NONE,
-                                                                VLAN_100,
-                                                                FabricConstants.TBL_INGRESS_PORT_VLAN_ID);
+        FlowRule flowRuleExpected =
+                buildExpectedVlanInPortRule(PORT_1,
+                                            VlanId.NONE,
+                                            VLAN_100,
+                                            FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
         assertTrue(flowRuleExpected.exactMatch(actualFlowRule));
 
         // forwarding classifier
@@ -200,10 +203,11 @@
 
         // in port vlan flow rule
         FlowRule actualFlowRule = flowRulesInstalled.get(0);
-        FlowRule flowRuleExpected = buildExpectedVlanInPortRule(PORT_1,
-                                                                VlanId.NONE,
-                                                                VLAN_100,
-                                                                FabricConstants.TBL_INGRESS_PORT_VLAN_ID);
+        FlowRule flowRuleExpected =
+                buildExpectedVlanInPortRule(PORT_1,
+                                            VlanId.NONE,
+                                            VLAN_100,
+                                            FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
         assertTrue(flowRuleExpected.exactMatch(actualFlowRule));
 
         // No rules in forwarding classifier, will do default action: set fwd type to bridging
@@ -332,10 +336,10 @@
                 .matchInPort(inPort)
                 .matchEthType(ethType)
                 .build();
-        PiActionParam classParam = new PiActionParam(FabricConstants.ACT_PRM_FWD_TYPE_ID,
+        PiActionParam classParam = new PiActionParam(FabricConstants.FWD_TYPE,
                                                      ImmutableByteSequence.copyFrom(fwdClass));
         PiAction fwdClassifierAction = PiAction.builder()
-                .withId(FabricConstants.ACT_FABRICINGRESS_FILTERING_SET_FORWARDING_TYPE_ID)
+                .withId(FabricConstants.FABRIC_INGRESS_FILTERING_SET_FORWARDING_TYPE)
                 .withParameter(classParam)
                 .build();
         TrafficTreatment treatment = DefaultTrafficTreatment.builder()
@@ -349,7 +353,7 @@
                 .fromApp(APP_ID)
                 .forDevice(DEVICE_ID)
                 .makePermanent()
-                .forTable(FabricConstants.TBL_FWD_CLASSIFIER_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER)
                 .build();
     }
 }
diff --git a/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricForwardingPipelineTest.java b/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricForwardingPipelineTest.java
index c471ede..a4e2195 100644
--- a/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricForwardingPipelineTest.java
+++ b/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricForwardingPipelineTest.java
@@ -79,7 +79,7 @@
         FlowRule actualFlowRule = flowRulesInstalled.get(0);
         FlowRule expectedFlowRule = DefaultFlowRule.builder()
                 .forDevice(DEVICE_ID)
-                .forTable(FabricConstants.TBL_ACL_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_FORWARDING_ACL)
                 .withPriority(PRIORITY)
                 .makePermanent()
                 .withSelector(selector)
@@ -125,7 +125,7 @@
         FlowRule actualFlowRule = flowRulesInstalled.get(0);
         FlowRule expectedFlowRule = DefaultFlowRule.builder()
                 .forDevice(DEVICE_ID)
-                .forTable(FabricConstants.TBL_ACL_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_FORWARDING_ACL)
                 .withPriority(PRIORITY)
                 .makePermanent()
                 .withSelector(selector)
@@ -145,7 +145,8 @@
                 .matchVlanId(VLAN_100)
                 .matchEthDst(HOST_MAC)
                 .build();
-        testSpecificForward(FabricConstants.TBL_BRIDGING_ID, selector, selector, NEXT_ID_1);
+        testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING,
+                            selector, selector, NEXT_ID_1);
     }
 
     @Test
@@ -153,7 +154,8 @@
         TrafficSelector selector = DefaultTrafficSelector.builder()
                 .matchVlanId(VLAN_100)
                 .build();
-        testSpecificForward(FabricConstants.TBL_BRIDGING_ID, selector, selector, NEXT_ID_1);
+        testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING,
+                            selector, selector, NEXT_ID_1);
     }
 
     @Test
@@ -165,7 +167,8 @@
         TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
                 .matchIPDst(IPV4_UNICAST_ADDR)
                 .build();
-        testSpecificForward(FabricConstants.TBL_UNICAST_V4_ID, expectedSelector, selector, NEXT_ID_1);
+        testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V4,
+                            expectedSelector, selector, NEXT_ID_1);
     }
 
     @Test
@@ -177,7 +180,8 @@
         TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
                 .matchIPDst(IPV4_UNICAST_ADDR)
                 .build();
-        testSpecificForward(FabricConstants.TBL_UNICAST_V4_ID, expectedSelector, selector, null);
+        testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V4,
+                            expectedSelector, selector, null);
     }
 
     @Test
@@ -191,7 +195,8 @@
         TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
                 .matchIPDst(IPV4_MCAST_ADDR)
                 .build();
-        testSpecificForward(FabricConstants.TBL_MULTICAST_V4_ID, expectedSelector, selector, NEXT_ID_1);
+        testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V4,
+                            expectedSelector, selector, NEXT_ID_1);
     }
 
     @Test
@@ -204,7 +209,9 @@
         TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
                 .matchIPDst(IPV6_UNICAST_ADDR)
                 .build();
-        testSpecificForward(FabricConstants.TBL_UNICAST_V6_ID, expectedSelector, selector, NEXT_ID_1);
+        testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V6,
+                            expectedSelector, selector, NEXT_ID_1);
+
     }
 
     @Test
@@ -218,7 +225,8 @@
         TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
                 .matchIPDst(IPV6_MCAST_ADDR)
                 .build();
-        testSpecificForward(FabricConstants.TBL_MULTICAST_V6_ID, expectedSelector, selector, NEXT_ID_1);
+        testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V6,
+                            expectedSelector, selector, NEXT_ID_1);
     }
 
     @Test
@@ -232,16 +240,17 @@
                 .matchMplsLabel(MPLS_10)
                 .build();
 
-        PiActionParam nextIdParam = new PiActionParam(FabricConstants.ACT_PRM_NEXT_ID_ID,
+        PiActionParam nextIdParam = new PiActionParam(FabricConstants.NEXT_ID,
                                                       ImmutableByteSequence.copyFrom(NEXT_ID_1.byteValue()));
         PiAction setNextIdAction = PiAction.builder()
-                .withId(FabricConstants.ACT_FABRICINGRESS_FORWARDING_POP_MPLS_AND_NEXT_ID)
+                .withId(FabricConstants.FABRIC_INGRESS_FORWARDING_POP_MPLS_AND_NEXT)
                 .withParameter(nextIdParam)
                 .build();
         TrafficTreatment treatment = DefaultTrafficTreatment.builder()
                 .piTableAction(setNextIdAction)
                 .build();
-        testSpecificForward(FabricConstants.TBL_MPLS_ID, expectedSelector, selector, NEXT_ID_1, treatment);
+        testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_MPLS,
+                            expectedSelector, selector, NEXT_ID_1, treatment);
     }
 
     private void testSpecificForward(PiTableId expectedTableId, TrafficSelector expectedSelector,
@@ -251,10 +260,10 @@
             // Ref: RoutingRulePopulator.java->revokeIpRuleForRouter
             setNextIdTreatment = DefaultTrafficTreatment.builder().build();
         } else {
-            PiActionParam nextIdParam = new PiActionParam(FabricConstants.ACT_PRM_NEXT_ID_ID,
+            PiActionParam nextIdParam = new PiActionParam(FabricConstants.NEXT_ID,
                                                           ImmutableByteSequence.copyFrom(nextId.byteValue()));
             PiAction setNextIdAction = PiAction.builder()
-                    .withId(FabricConstants.ACT_FABRICINGRESS_FORWARDING_SET_NEXT_ID_ID)
+                    .withId(FabricConstants.FABRIC_INGRESS_FORWARDING_SET_NEXT_ID)
                     .withParameter(nextIdParam)
                     .build();
             setNextIdTreatment = DefaultTrafficTreatment.builder()
diff --git a/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricNextPipelinerTest.java b/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricNextPipelinerTest.java
index a797a83..e2a6af8 100644
--- a/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricNextPipelinerTest.java
+++ b/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricNextPipelinerTest.java
@@ -42,9 +42,6 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
-import static org.onosproject.pipelines.fabric.FabricConstants.ACT_PRF_FABRICINGRESS_NEXT_ECMP_SELECTOR_ID;
-import static org.onosproject.pipelines.fabric.FabricConstants.TBL_HASHED_ID;
-import static org.onosproject.pipelines.fabric.FabricConstants.TBL_VLAN_META_ID;
 
 /**
  * Test cases for fabric.p4 pipeline next control block.
@@ -54,7 +51,7 @@
 
     public FabricNextPipelinerTest() {
         PiCriterion nextIdCriterion = PiCriterion.builder()
-                .matchExact(FabricConstants.HF_FABRIC_METADATA_NEXT_ID_ID, NEXT_ID_1)
+                .matchExact(FabricConstants.FABRIC_METADATA_NEXT_ID, NEXT_ID_1)
                 .build();
         TrafficSelector selector = DefaultTrafficSelector.builder()
                 .matchPi(nextIdCriterion)
@@ -66,7 +63,7 @@
         vlanMetaFlowRule = DefaultFlowRule.builder()
                 .withSelector(selector)
                 .withTreatment(treatment)
-                .forTable(TBL_VLAN_META_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_NEXT_VLAN_META)
                 .makePermanent()
                 // FIXME: currently next objective doesn't support priority, ignore this
                 .withPriority(0)
@@ -145,7 +142,7 @@
 
         // Simple table
         PiCriterion nextIdCriterion = PiCriterion.builder()
-                .matchExact(FabricConstants.HF_FABRIC_METADATA_NEXT_ID_ID, NEXT_ID_1)
+                .matchExact(FabricConstants.FABRIC_METADATA_NEXT_ID, NEXT_ID_1)
                 .build();
         TrafficSelector nextIdSelector = DefaultTrafficSelector.builder()
                 .matchPi(nextIdCriterion)
@@ -162,7 +159,7 @@
                 .makePermanent()
                 // FIXME: currently next objective doesn't support priority, ignore this
                 .withPriority(0)
-                .forTable(FabricConstants.TBL_SIMPLE_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE)
                 .withSelector(nextIdSelector)
                 .withTreatment(treatment)
                 .build();
@@ -206,7 +203,7 @@
 
         // Hashed table
         PiCriterion nextIdCriterion = PiCriterion.builder()
-                .matchExact(FabricConstants.HF_FABRIC_METADATA_NEXT_ID_ID, NEXT_ID_1)
+                .matchExact(FabricConstants.FABRIC_METADATA_NEXT_ID, NEXT_ID_1)
                 .build();
         TrafficSelector nextIdSelector = DefaultTrafficSelector.builder()
                 .matchPi(nextIdCriterion)
@@ -227,7 +224,7 @@
                 .makePermanent()
                 // FIXME: currently next objective doesn't support priority, ignore this
                 .withPriority(0)
-                .forTable(TBL_HASHED_ID)
+                .forTable(FabricConstants.FABRIC_INGRESS_NEXT_HASHED)
                 .withSelector(nextIdSelector)
                 .withTreatment(treatment)
                 .build();
@@ -241,7 +238,9 @@
                 .map(DefaultGroupBucket::createSelectGroupBucket)
                 .collect(Collectors.toList());
         GroupBuckets groupBuckets = new GroupBuckets(buckets);
-        PiGroupKey groupKey = new PiGroupKey(TBL_HASHED_ID, ACT_PRF_FABRICINGRESS_NEXT_ECMP_SELECTOR_ID, NEXT_ID_1);
+        PiGroupKey groupKey = new PiGroupKey(FabricConstants.FABRIC_INGRESS_NEXT_HASHED,
+                                             FabricConstants.FABRIC_INGRESS_NEXT_ECMP_SELECTOR,
+                                             NEXT_ID_1);
         GroupDescription expectedGroup = new DefaultGroupDescription(
                 DEVICE_ID,
                 GroupDescription.Type.SELECT,
diff --git a/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricPipelinerTest.java b/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricPipelinerTest.java
index c605e99..b907bdf 100644
--- a/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricPipelinerTest.java
+++ b/pipelines/fabric/src/test/java/org/onosproject/pipelines/fabric/pipeliner/FabricPipelinerTest.java
@@ -68,17 +68,11 @@
     static final byte FWD_IPV6_UNICAST = 4;
     static final byte FWD_IPV6_MULTICAST = 5;
 
-    // Next types
-    static final byte NEXT_TYPE_SIMPLE = 0;
-    static final byte NEXT_TYPE_HASHED = 1;
-    static final byte NEXT_TYPE_BROADCAST = 2;
-    static final byte NEXT_TYPE_PUNT = 3;
-
     static final PiCriterion VLAN_VALID = PiCriterion.builder()
-            .matchExact(FabricConstants.HF_VLAN_TAG_IS_VALID_ID, new byte[]{1})
+            .matchExact(FabricConstants.HDR_VLAN_TAG_IS_VALID, new byte[]{1})
             .build();
     static final PiCriterion VLAN_INVALID = PiCriterion.builder()
-            .matchExact(FabricConstants.HF_VLAN_TAG_IS_VALID_ID, new byte[]{0})
+            .matchExact(FabricConstants.HDR_VLAN_TAG_IS_VALID, new byte[]{0})
             .build();
 
     FabricPipeliner pipeliner;
diff --git a/tools/dev/bin/onos-gen-p4-constants b/tools/dev/bin/onos-gen-p4-constants
new file mode 100755
index 0000000..8e68acc
--- /dev/null
+++ b/tools/dev/bin/onos-gen-p4-constants
@@ -0,0 +1,219 @@
+#!/usr/bin/env python2.7
+# -*- utf-8 -*-
+import argparse
+import re
+import google.protobuf.text_format as tf
+from p4.config import p4info_pb2
+
+
+copyright = '''/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+'''
+
+imports = '''
+import org.onosproject.net.pi.model.PiActionId;
+import org.onosproject.net.pi.model.PiActionParamId;
+import org.onosproject.net.pi.model.PiActionProfileId;
+import org.onosproject.net.pi.model.PiControlMetadataId;
+import org.onosproject.net.pi.model.PiCounterId;
+import org.onosproject.net.pi.model.PiMatchFieldId;
+import org.onosproject.net.pi.model.PiTableId;'''
+
+PKG_FMT = 'package org.onosproject.pipelines.%s;'
+
+CLASS_OPEN = 'public final class %s {'
+CLASS_CLOSE = '}'
+
+DEFAULT_CONSTRUCTOR = '''
+    // hide default constructor
+    private %s() {
+    }
+'''
+
+CONST_FMT = '    public static final %s %s = %s;'
+SHORT_CONST_FMT ='''    public static final %s %s =
+            %s;'''
+JAVA_STR = 'String'
+EMPTY_STR = ''
+JAVA_DOC_FMT = '''/**
+ * Constants for %s pipeline.
+ */'''
+
+
+PI_HF_FIELD_ID = 'PiMatchFieldId'
+PI_HF_FIELD_ID_CST = 'PiMatchFieldId.of("%s")'
+
+PI_TBL_ID = 'PiTableId'
+PI_TBL_ID_CST = 'PiTableId.of("%s")'
+
+PI_CTR_ID = 'PiCounterId'
+PI_CTR_ID_CST = 'PiCounterId.of("%s")'
+
+PI_ACT_ID = 'PiActionId'
+PI_ACT_ID_CST = 'PiActionId.of("%s")'
+
+PI_ACT_PRM_ID = 'PiActionParamId'
+PI_ACT_PRM_ID_CST = 'PiActionParamId.of("%s")'
+
+PI_ACT_PROF_ID = 'PiActionProfileId'
+PI_ACT_PROF_ID_CST = 'PiActionProfileId.of("%s")'
+
+PI_PKT_META_ID = 'PiControlMetadataId'
+PI_PKT_META_ID_CST = 'PiControlMetadataId.of("%s")'
+
+class ConstantClassGenerator(object):
+    headers = set()
+    header_fields = set()
+    tables = set()
+    counters = set()
+    direct_counters = set()
+    actions = set()
+    action_params = set()
+    action_profiles = set()
+    packet_metadata = set()
+
+    # https://stackoverflow.com/questions/1175208/elegant-python-function-to-convert-camelcase-to-snake-case
+    def convert_camel_to_all_caps(self, name):
+        s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
+        s1 = re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).upper()
+        return s1.replace('.', '_')
+
+    def __init__(self, base_name):
+
+        self.class_name = base_name.title() + 'Constants'
+        self.package_name = PKG_FMT % (base_name, )
+        self.java_doc = JAVA_DOC_FMT % (base_name, )
+
+    def parse(self, p4info):
+        for tbl in p4info.tables:
+            for mf in tbl.match_fields:
+                self.header_fields.add(mf.name)
+
+            self.tables.add(tbl.preamble.name)
+
+        for ctr in p4info.counters:
+            self.counters.add(ctr.preamble.name)
+
+        for dir_ctr in p4info.direct_counters:
+            self.direct_counters.add(dir_ctr.preamble.name)
+
+        for act in p4info.actions:
+            self.actions.add(act.preamble.name)
+
+            for param in act.params:
+                self.action_params.add(param.name)
+
+        for act_prof in p4info.action_profiles:
+            self.action_profiles.add(act_prof.preamble.name)
+
+        for cpm in p4info.controller_packet_metadata:
+            for mta in cpm.metadata:
+                self.packet_metadata.add(mta.name)
+
+    def const_line(self, name, type, constructor):
+        var_name = self.convert_camel_to_all_caps(name)
+        val = constructor % (name, )
+
+        line = CONST_FMT % (type, var_name, val)
+        if len(line) > 80:
+            line = SHORT_CONST_FMT % (type, var_name, val)
+        return line
+
+    def generate_java(self):
+        lines = list()
+        lines.append(copyright)
+        lines.append(self.package_name)
+        lines.append(imports)
+        lines.append(self.java_doc)
+        # generate the class
+        lines.append(CLASS_OPEN % (self.class_name, ))
+        lines.append(DEFAULT_CONSTRUCTOR % (self.class_name, ))
+
+        if len(self.header_fields) is not 0:
+            lines.append('    // Header field IDs')
+        for hf in self.header_fields:
+            lines.append(self.const_line(hf, PI_HF_FIELD_ID, PI_HF_FIELD_ID_CST))
+
+        if len(self.tables) is not 0:
+            lines.append('    // Table IDs')
+        for tbl in self.tables:
+            lines.append(self.const_line(tbl, PI_TBL_ID, PI_TBL_ID_CST))
+
+        if len(self.counters) is not 0:
+            lines.append('    // Indirect Counter IDs')
+        for ctr in self.counters:
+            lines.append(self.const_line(ctr, PI_CTR_ID, PI_CTR_ID_CST))
+
+        if len(self.direct_counters) is not 0:
+            lines.append('    // Direct Counter IDs')
+        for dctr in self.direct_counters:
+            lines.append(self.const_line(dctr, PI_CTR_ID, PI_CTR_ID_CST))
+
+        if len(self.actions) is not 0:
+            lines.append('    // Action IDs')
+        for act in self.actions:
+            lines.append(self.const_line(act, PI_ACT_ID, PI_ACT_ID_CST))
+
+        if len(self.action_params) is not 0:
+            lines.append('    // Action Param IDs')
+        for act_prm in self.action_params:
+            lines.append(self.const_line(act_prm, PI_ACT_PRM_ID, PI_ACT_PRM_ID_CST))
+
+        if len(self.action_profiles) is not 0:
+            lines.append('    // Action Profile IDs')
+        for act_prof in self.action_profiles:
+            lines.append(self.const_line(act_prof, PI_ACT_PROF_ID, PI_ACT_PROF_ID_CST))
+
+        if len(self.packet_metadata) is not 0:
+            lines.append('    // Packet Metadata IDs')
+        for pmeta in self.packet_metadata:
+            lines.append(self.const_line(pmeta, PI_PKT_META_ID, PI_PKT_META_ID_CST))
+        lines.append(CLASS_CLOSE)
+        # end of class
+
+        return '\n'.join(lines)
+
+
+def main():
+    parser = argparse.ArgumentParser(prog='onos-gen-p4-constants',
+                                     description='ONOS P4Info to Java constant generator.')
+    parser.add_argument('name', help='Name of the constant, will be used as class name')
+    parser.add_argument('p4info', help='P4Info file')
+    parser.add_argument('-o', '--output', help='output path', default='-')
+    args = parser.parse_args()
+
+    base_name = args.name
+    file_name = args.p4info
+    p4info = p4info_pb2.P4Info()
+    with open(file_name, 'r') as intput_file:
+        s = intput_file.read()
+        tf.Merge(s, p4info)
+
+    gen = ConstantClassGenerator(base_name)
+    gen.parse(p4info)
+
+    java_code = gen.generate_java()
+
+    if args.output == '-':
+        # std output
+        print java_code
+    else:
+        with open(args.output, 'w') as output_file:
+            output_file.write(java_code)
+
+
+if __name__ == '__main__':
+    main()
