diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/PortChain.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/PortChain.java
index 8a4bb95..2906411 100644
--- a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/PortChain.java
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/PortChain.java
@@ -19,6 +19,8 @@
 import java.util.Optional;
 import java.util.Set;
 
+import org.onosproject.net.DeviceId;
+
 /**
  * Abstraction of an entity providing Port Chain information.
  * A Port Chain (Service Function Path) consists of
@@ -82,7 +84,55 @@
                             List<PortPairId> path);
 
     /**
-     * Get the load balance id from five tuple.
+     * Adds sfc classifiers to the given load balance id for a port chain.
+     *
+     * @param id load balance path identifier
+     * @param classifierList list of classifier devices
+     */
+    void addSfcClassifiers(LoadBalanceId id, List<DeviceId> classifierList);
+
+    /**
+     * Adds sfc forwarders to the given load balance id for a port chain.
+     *
+     * @param id load balance path identifier
+     * @param forwarderList list of forwarder devices
+     */
+    void addSfcForwarders(LoadBalanceId id, List<DeviceId> forwarderList);
+
+    /**
+     * Removes sfc classifiers to the given load balance id for a port chain.
+     *
+     * @param id load balance path identifier
+     * @param classifierList list of classifier devices
+     */
+    void removeSfcClassifiers(LoadBalanceId id, List<DeviceId> classifierList);
+
+    /**
+     * Removes sfc forwarders to the given load balance id for a port chain.
+     *
+     * @param id load balance path identifier
+     * @param forwarderList list of forwarder devices
+     */
+    void removeSfcForwarders(LoadBalanceId id, List<DeviceId> forwarderList);
+
+    /**
+     * Returns sfc classifiers to the given load balance id for a port chain.
+     *
+     * @param id load balance path identifier
+     * @return list of classifier devices
+     */
+    List<DeviceId> getSfcClassifiers(LoadBalanceId id);
+
+    /**
+     * Returns sfc forwarders to the given load balance id for a port chain.
+     *
+     * @param id load balance path identifier
+     * @return list of forwarder devices
+     */
+    List<DeviceId> getSfcForwarders(LoadBalanceId id);
+
+    /**
+     * Returns the load balance id from five tuple.
      *
      * @param fiveTuple five tuple from the packet
      * @return load balance identifier for the given packet
@@ -90,14 +140,21 @@
     LoadBalanceId getLoadBalanceId(FiveTuple fiveTuple);
 
     /**
-     * Get the keys set from load balanced id map.
+     * Returns the keys set from load balance id map.
      *
      * @return set of five tuple info
      */
     Set<FiveTuple> getLoadBalanceIdMapKeys();
 
     /**
-     * Get the load balanced path from load balance Id.
+     * Returns the keys set from load balance path map.
+     *
+     * @return set of load balance id's
+     */
+    Set<LoadBalanceId> getLoadBalancePathMapKeys();
+
+    /**
+     * Returns the load balanced path from load balance Id.
      *
      * @param id load balance id.
      * @return path containing list of port pairs
@@ -105,7 +162,7 @@
     List<PortPairId> getLoadBalancePath(LoadBalanceId id);
 
     /**
-     * Get the load balanced path from five tuple.
+     * Returns the load balanced path from five tuple.
      *
      * @param fiveTuple five tuple from the packet
      * @return path containing list of port pairs
@@ -113,7 +170,7 @@
     List<PortPairId> getLoadBalancePath(FiveTuple fiveTuple);
 
     /**
-     * Get the no of load balance paths created.
+     * Returns the no of load balance paths created.
      *
      * @return size of load balanced paths
      */
