diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/flowspec/BgpFlowSpecDetails.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/flowspec/BgpFlowSpecDetails.java
index cc6384c..994f656 100755
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/flowspec/BgpFlowSpecDetails.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/flowspec/BgpFlowSpecDetails.java
@@ -27,7 +27,7 @@
  */
 public class BgpFlowSpecDetails {
     private List<BgpValueType> flowSpecComponents;
-    private BgpValueType fsActionTlv;
+    private List<BgpValueType> fsActionTlv;
     private RouteDistinguisher routeDistinguisher;
 
     /**
@@ -44,7 +44,7 @@
      *
      * @return flow specification action tlv
      */
-    public BgpValueType fsActionTlv() {
+    public List<BgpValueType> fsActionTlv() {
         return this.fsActionTlv;
     }
 
@@ -53,7 +53,7 @@
      *
      * @param fsActionTlv flow specification action tlv
      */
-    public void setFsActionTlv(BgpValueType fsActionTlv) {
+    public void setFsActionTlv(List<BgpValueType> fsActionTlv) {
         this.fsActionTlv = fsActionTlv;
     }
 
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/BgpExtendedCommunity.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/BgpExtendedCommunity.java
index 880b332..31a85da 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/BgpExtendedCommunity.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/BgpExtendedCommunity.java
@@ -23,6 +23,10 @@
 import org.onosproject.bgpio.util.Validation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 import java.util.Objects;
 
 /**
@@ -33,14 +37,14 @@
     private static final Logger log = LoggerFactory.getLogger(BgpExtendedCommunity.class);
     public static final short TYPE = Constants.BGP_EXTENDED_COMMUNITY;
     public static final byte FLAGS = (byte) 0xC0;
-    private BgpValueType fsActionTlv;
+    private List<BgpValueType> fsActionTlv;
 
     /**
      * Constructor to initialize the value.
      *
      * @param fsActionTlv flow specification action type
      */
-    public BgpExtendedCommunity(BgpValueType fsActionTlv) {
+    public BgpExtendedCommunity(List<BgpValueType> fsActionTlv) {
         this.fsActionTlv = fsActionTlv;
     }
 
@@ -49,7 +53,7 @@
      *
      * @return extended community
      */
-    public BgpValueType fsActionTlv() {
+    public List<BgpValueType> fsActionTlv() {
         return this.fsActionTlv;
     }
 
@@ -64,7 +68,7 @@
 
         ChannelBuffer tempCb = cb.copy();
         Validation validation = Validation.parseAttributeHeader(cb);
-        BgpValueType fsActionTlv = null;
+        List<BgpValueType> fsActionTlvs = new LinkedList<>();
 
         if (cb.readableBytes() < validation.getLength()) {
             Validation.validateLen(BgpErrorType.UPDATE_MESSAGE_ERROR, BgpErrorType.ATTRIBUTE_LENGTH_ERROR,
@@ -80,27 +84,33 @@
 
         ChannelBuffer tempBuf = cb.readBytes(validation.getLength());
         if (tempBuf.readableBytes() > 0) {
+            BgpValueType fsActionTlv = null;
             ChannelBuffer actionBuf = tempBuf.readBytes(validation.getLength());
-            short actionType = actionBuf.readShort();
-            short length = (short) validation.getLength();
-            switch (actionType) {
-                case Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_ACTION:
-                    fsActionTlv = BgpFsActionTrafficAction.read(actionBuf);
-                    break;
-                case Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_MARKING:
-                    fsActionTlv = BgpFsActionTrafficMarking.read(actionBuf);
-                    break;
-                case Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_RATE:
-                    fsActionTlv = BgpFsActionTrafficRate.read(actionBuf);
-                    break;
-                case Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_REDIRECT:
-                    fsActionTlv = BgpFsActionReDirect.read(actionBuf);
-                    break;
-                default: log.debug("Other type Not Supported:" + actionType);
-                    break;
+
+            while (actionBuf.readableBytes() > 0) {
+                short actionType = actionBuf.readShort();
+                switch (actionType) {
+                    case Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_ACTION:
+                        fsActionTlv = BgpFsActionTrafficAction.read(actionBuf);
+                        break;
+                    case Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_MARKING:
+                        fsActionTlv = BgpFsActionTrafficMarking.read(actionBuf);
+                        break;
+                    case Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_RATE:
+                        fsActionTlv = BgpFsActionTrafficRate.read(actionBuf);
+                        break;
+                    case Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_REDIRECT:
+                        fsActionTlv = BgpFsActionReDirect.read(actionBuf);
+                        break;
+                    default: log.debug("Other type Not Supported:" + actionType);
+                        break;
+                }
+            }
+            if (fsActionTlv != null) {
+                fsActionTlvs.add(fsActionTlv);
             }
         }
-        return new BgpExtendedCommunity(fsActionTlv);
+        return new BgpExtendedCommunity(fsActionTlvs);
     }
 
     @Override
@@ -136,24 +146,29 @@
     @Override
     public int write(ChannelBuffer cb) {
         int iLenStartIndex = cb.writerIndex();
+        ListIterator<BgpValueType> listIterator = fsActionTlv().listIterator();
+
         cb.writeByte(FLAGS);
         cb.writeByte(getType());
 
         int iActionLenIndex = cb.writerIndex();
         cb.writeByte(0);
 
-        if (fsActionTlv.getType() == Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_ACTION) {
-            BgpFsActionTrafficAction trafficAction = (BgpFsActionTrafficAction) fsActionTlv;
-            trafficAction.write(cb);
-        } else if (fsActionTlv.getType() == Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_MARKING) {
-            BgpFsActionTrafficMarking trafficMarking = (BgpFsActionTrafficMarking) fsActionTlv;
-            trafficMarking.write(cb);
-        } else if (fsActionTlv.getType() == Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_RATE) {
-            BgpFsActionTrafficRate trafficRate = (BgpFsActionTrafficRate) fsActionTlv;
-            trafficRate.write(cb);
-        } else if (fsActionTlv.getType() == Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_REDIRECT) {
-            BgpFsActionReDirect trafficRedirect = (BgpFsActionReDirect) fsActionTlv;
-            trafficRedirect.write(cb);
+        while (listIterator.hasNext()) {
+            BgpValueType fsTlv = listIterator.next();
+            if (fsTlv.getType() == Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_ACTION) {
+                BgpFsActionTrafficAction trafficAction = (BgpFsActionTrafficAction) fsTlv;
+                trafficAction.write(cb);
+            } else if (fsTlv.getType() == Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_MARKING) {
+                BgpFsActionTrafficMarking trafficMarking = (BgpFsActionTrafficMarking) fsTlv;
+                trafficMarking.write(cb);
+            } else if (fsTlv.getType() == Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_RATE) {
+                BgpFsActionTrafficRate trafficRate = (BgpFsActionTrafficRate) fsTlv;
+                trafficRate.write(cb);
+            } else if (fsTlv.getType() == Constants.BGP_FLOWSPEC_ACTION_TRAFFIC_REDIRECT) {
+                BgpFsActionReDirect trafficRedirect = (BgpFsActionReDirect) fsTlv;
+                trafficRedirect.write(cb);
+            }
         }
 
         int fsActionLen = cb.writerIndex() - iActionLenIndex;
diff --git a/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/flowspec/BgpFlowSpecDetailsTest.java b/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/flowspec/BgpFlowSpecDetailsTest.java
index 3152b26..15dfd4c 100644
--- a/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/flowspec/BgpFlowSpecDetailsTest.java
+++ b/protocols/bgp/bgpio/src/test/java/org/onosproject/bgpio/protocol/flowspec/BgpFlowSpecDetailsTest.java
@@ -54,21 +54,29 @@
         operatorValue1.add(new BgpFsOperatorValue((byte) 0x81, port1));
         byte[] port11 = new byte[] {(byte) 0x1 };
         operatorValue1.add(new BgpFsOperatorValue((byte) 0x82, port11));
-        flowSpecDetails1.setFsActionTlv(new BgpFsActionTrafficRate((short) 1, 1));
+
+        List<BgpValueType> fsTlvs1 = new LinkedList<>();
+        fsTlvs1.add(new BgpFsActionTrafficRate((short) 1, 1));
+        flowSpecDetails1.setFsActionTlv(fsTlvs1);
 
         flowSpecComponents.add(portNum);
         byte[] port = new byte[] {(byte) 0x1 };
         operatorValue.add(new BgpFsOperatorValue((byte) 0x81, port));
         byte[] port4 = new byte[] {(byte) 0x1 };
         operatorValue.add(new BgpFsOperatorValue((byte) 0x82, port4));
-        flowSpecDetails.setFsActionTlv(new BgpFsActionTrafficRate((short) 1, 1));
+
+        List<BgpValueType> fsTlvs = new LinkedList<>();
+        fsTlvs.add(new BgpFsActionTrafficRate((short) 1, 1));
 
         flowSpecComponents2.add(portNum2);
         byte[] port2 = new byte[] {(byte) 0x1 };
         operatorValue2.add(new BgpFsOperatorValue((byte) 0x82, port2));
         byte[] port22 = new byte[] {(byte) 0x1 };
         operatorValue2.add(new BgpFsOperatorValue((byte) 0x82, port22));
-        flowSpecDetails2.setFsActionTlv(new BgpFsActionTrafficRate((short) 1, 1));
+
+        List<BgpValueType> fsTlvs2 = new LinkedList<>();
+        fsTlvs2.add(new BgpFsActionTrafficRate((short) 1, 1));
+        flowSpecDetails2.setFsActionTlv(fsTlvs2);
 
         new EqualsTester()
         .addEqualityGroup(flowSpecDetails1, flowSpecDetails)
diff --git a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerImpl.java b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerImpl.java
index ce7a33c..b7480b0 100644
--- a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerImpl.java
+++ b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerImpl.java
@@ -252,8 +252,20 @@
 
         if (operType == FlowSpecOperation.ADD) {
             if (flowSpec.routeDistinguisher() == null) {
+                if (flowSpecRibOut.flowSpecTree().containsKey(prefix)) {
+                    sendFlowSpecUpdateMessageToPeer(FlowSpecOperation.DELETE,
+                                                    flowSpecRibOut.flowSpecTree().get(prefix));
+                }
                 flowSpecRibOut.add(prefix, flowSpec);
             } else {
+                if (vpnFlowSpecRibOut.vpnFlowSpecTree().containsKey(flowSpec.routeDistinguisher())) {
+                    Map<BgpFlowSpecPrefix, BgpFlowSpecDetails> fsTree;
+                    fsTree = vpnFlowSpecRibOut.vpnFlowSpecTree().get(flowSpec.routeDistinguisher());
+                    if (fsTree.containsKey(prefix)) {
+                        sendFlowSpecUpdateMessageToPeer(FlowSpecOperation.DELETE,
+                                                        fsTree.get(prefix));
+                    }
+                }
                 vpnFlowSpecRibOut.add(flowSpec.routeDistinguisher(), prefix, flowSpec);
             }
         } else if (operType == FlowSpecOperation.DELETE) {
