diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/SpgwPiConstants.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/SpgwPiConstants.java
new file mode 100644
index 0000000..5dac361
--- /dev/null
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/SpgwPiConstants.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2018-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.
+ */
+
+package org.onosproject.fpcagent;
+
+import org.onosproject.net.pi.model.PiActionId;
+import org.onosproject.net.pi.model.PiActionParamId;
+import org.onosproject.net.pi.model.PiMatchFieldId;
+import org.onosproject.net.pi.model.PiTableId;
+import org.onosproject.net.pi.runtime.PiAction;
+
+public class SpgwPiConstants {
+    public static final PiTableId TBL_ID_UE_FILTER = PiTableId
+            .of("spgw_ingress.ue_filter_table");
+    public static final PiTableId TBL_ID_S1U_FILTER = PiTableId
+            .of("spgw_ingress.s1u_filter_table");
+    public static final PiTableId TBL_ID_DL_SESS_LOOKUP = PiTableId
+            .of("spgw_ingress.dl_sess_lookup");
+    public static final PiMatchFieldId MF_ID_IPV4_DST = PiMatchFieldId
+            .of("ipv4.dst_addr");
+    public static final PiMatchFieldId MF_ID_S1U_SGW_ADDR = PiMatchFieldId
+            .of("spgw_meta.s1u_sgw_addr");
+    public static final PiActionId ACT_ID_SET_DL_SESS_INFO = PiActionId
+            .of("spgw_ingress.set_dl_sess_info");
+    public static final PiActionParamId TEID = PiActionParamId
+            .of("teid");
+    public static final PiActionParamId PARAM_S1U_ENB_ADDR = PiActionParamId
+            .of("s1u_enb_addr");
+    public static final PiActionParamId PARAM_ID_S1U_SGW_ADDR = PiActionParamId
+            .of("s1u_sgw_addr");
+    public static final PiAction NO_ACTION = PiAction.builder()
+            .withId(PiActionId.of("NoAction"))
+            .build();
+}
diff --git a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/protocols/DpnP4Communicator.java b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/protocols/DpnP4Communicator.java
index e5433f2..c274b83 100644
--- a/apps/fpcagent/src/main/java/org/onosproject/fpcagent/protocols/DpnP4Communicator.java
+++ b/apps/fpcagent/src/main/java/org/onosproject/fpcagent/protocols/DpnP4Communicator.java
@@ -22,6 +22,7 @@
 import org.onlab.packet.Ip4Address;
 import org.onlab.util.ImmutableByteSequence;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.fpcagent.SpgwPiConstants;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.flow.DefaultFlowRule;
 import org.onosproject.net.flow.DefaultTrafficSelector;
@@ -31,10 +32,6 @@
 import org.onosproject.net.flow.FlowRuleService;
 import org.onosproject.net.flow.criteria.PiCriterion;
 import org.onosproject.net.intf.InterfaceAdminService;
-import org.onosproject.net.pi.model.PiActionId;
-import org.onosproject.net.pi.model.PiActionParamId;
-import org.onosproject.net.pi.model.PiMatchFieldId;
-import org.onosproject.net.pi.model.PiTableId;
 import org.onosproject.net.pi.runtime.PiAction;
 import org.onosproject.net.pi.runtime.PiActionParam;
 import org.onosproject.routeservice.Route;
@@ -66,31 +63,6 @@
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    public static final PiTableId TBL_ID_UE_FILTER = PiTableId
-            .of("spgw_ingress.ue_filter_table");
-    public static final PiTableId TBL_ID_S1U_FILTER = PiTableId
-            .of("spgw_ingress.s1u_filter_table");
-    public static final PiTableId TBL_ID_DL_SESS_LOOKUP = PiTableId
-            .of("spgw_ingress.dl_sess_lookup");
-
-    public static final PiMatchFieldId MF_ID_IPV4_DST = PiMatchFieldId
-            .of("ipv4.dst_addr");
-    public static final PiMatchFieldId MF_ID_S1U_SGW_ADDR = PiMatchFieldId
-            .of("spgw_meta.s1u_sgw_addr");
-
-    public static final PiActionId ACT_ID_SET_DL_SESS_INFO = PiActionId
-            .of("spgw_ingress.set_dl_sess_info");
-    public static final PiActionParamId TEID = PiActionParamId
-            .of("teid");
-    public static final PiActionParamId PARAM_S1U_ENB_ADDR = PiActionParamId
-            .of("s1u_enb_addr");
-    public static final PiActionParamId PARAM_ID_S1U_SGW_ADDR = PiActionParamId
-            .of("s1u_sgw_addr");
-
-    public static final PiAction NO_ACTION = PiAction.builder()
-            .withId(PiActionId.of("NoAction"))
-            .build();
-
     private static final ConcurrentMap<Long, Ip4Address> UE_ADDRESSES =
             Maps.newConcurrentMap();
     private static final ConcurrentMap<Long, Set<FlowRule>> FLOWS =
@@ -314,32 +286,32 @@
 
     private FlowRule ueFilterRule(Ip4Address ueAddr) {
         final PiCriterion piCriterion = PiCriterion.builder()
-                .matchLpm(MF_ID_IPV4_DST, ueAddr.toOctets(), 32)
+                .matchLpm(SpgwPiConstants.MF_ID_IPV4_DST, ueAddr.toOctets(), 32)
                 .build();
 
         return flowRuleBuilder()
-                .forTable(TBL_ID_UE_FILTER)
+                .forTable(SpgwPiConstants.TBL_ID_UE_FILTER)
                 .withSelector(DefaultTrafficSelector.builder()
                                       .matchPi(piCriterion)
                                       .build())
                 .withTreatment(DefaultTrafficTreatment.builder()
-                                       .piTableAction(NO_ACTION)
+                                       .piTableAction(SpgwPiConstants.NO_ACTION)
                                        .build())
                 .build();
     }
 
     private FlowRule s1uFilterRule(Ip4Address s1uAddr) {
         final PiCriterion piCriterion = PiCriterion.builder()
-                .matchExact(MF_ID_S1U_SGW_ADDR, s1uAddr.toOctets())
+                .matchExact(SpgwPiConstants.MF_ID_S1U_SGW_ADDR, s1uAddr.toOctets())
                 .build();
 
         return flowRuleBuilder()
-                .forTable(TBL_ID_S1U_FILTER)
+                .forTable(SpgwPiConstants.TBL_ID_S1U_FILTER)
                 .withSelector(DefaultTrafficSelector.builder()
                                       .matchPi(piCriterion)
                                       .build())
                 .withTreatment(DefaultTrafficTreatment.builder()
-                                       .piTableAction(NO_ACTION)
+                                       .piTableAction(SpgwPiConstants.NO_ACTION)
                                        .build())
                 .build();
     }
@@ -356,20 +328,20 @@
 
         // Add rule to
         final PiAction action = PiAction.builder()
-                .withId(ACT_ID_SET_DL_SESS_INFO)
-                .withParameter(new PiActionParam(TEID, revTeidBs))
-                .withParameter(new PiActionParam(PARAM_S1U_ENB_ADDR,
+                .withId(SpgwPiConstants.ACT_ID_SET_DL_SESS_INFO)
+                .withParameter(new PiActionParam(SpgwPiConstants.TEID, revTeidBs))
+                .withParameter(new PiActionParam(SpgwPiConstants.PARAM_S1U_ENB_ADDR,
                                                  copyFrom(enbAddr.toOctets())))
-                .withParameter(new PiActionParam(PARAM_ID_S1U_SGW_ADDR,
+                .withParameter(new PiActionParam(SpgwPiConstants.PARAM_ID_S1U_SGW_ADDR,
                                                  copyFrom(s1uAddr.toOctets())))
                 .build();
 
         final PiCriterion piCriterion = PiCriterion.builder()
-                .matchExact(MF_ID_IPV4_DST, ueAddr.toOctets())
+                .matchExact(SpgwPiConstants.MF_ID_IPV4_DST, ueAddr.toOctets())
                 .build();
 
         return flowRuleBuilder()
-                .forTable(TBL_ID_DL_SESS_LOOKUP)
+                .forTable(SpgwPiConstants.TBL_ID_DL_SESS_LOOKUP)
                 .withSelector(DefaultTrafficSelector.builder()
                                       .matchPi(piCriterion)
                                       .build())
