diff --git a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpCfg.java b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpCfg.java
index dac1ee8..8bb05df 100755
--- a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpCfg.java
+++ b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpCfg.java
@@ -44,6 +44,29 @@
         IP_AS_CONFIGURED
     }
 
+    enum FlowSpec {
+
+        /**
+         * Signifies that peer support IPV4 flow specification.
+         */
+        IPV4,
+
+        /**
+         *  Signifies that peer support VPNV4 flow specification.
+         */
+        VPNV4,
+
+        /**
+         *  Signifies that peer support IPV4 and VPNV4 flow specification.
+         */
+        IPV4_VPNV4,
+
+        /**
+         * Signifies that peer flow specification capability disabled.
+         */
+        NONE
+    }
+
     /**
      * Returns the status of the configuration based on this state certain operations like connection is handled.
      *
@@ -294,4 +317,18 @@
      * @return state information
      */
     BgpPeerCfg.State getPeerConnState(String routerid);
+
+    /**
+     * Gets the flow specification capability.
+     *
+     * @return flow specification capability
+     */
+    FlowSpec flowSpecCapability();
+
+    /**
+     * Sets the flow specification capability.
+     *
+     * @param flowSpec flow specification capability
+     */
+    void setFlowSpecCapability(FlowSpec flowSpec);
 }
diff --git a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpPeerCfg.java b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpPeerCfg.java
index e519404..2fb970f 100755
--- a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpPeerCfg.java
+++ b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpPeerCfg.java
@@ -58,24 +58,6 @@
         INVALID
     }
 
-    enum FlowSpec {
-
-        /**
-         * Signifies that peer support IPV4 flow specification.
-         */
-        IPV4,
-
-        /**
-         *  Signifies that peer support VPNV4 flow specification.
-         */
-        VPNV4,
-
-        /**
-         * Signifies that peer flow specification support disabled.
-         */
-        NONE
-    }
-
     /**
      * Returns the connection State information of the peer.
      *
@@ -195,18 +177,4 @@
      * @return peer connect instance
      */
     BgpConnectPeer connectPeer();
-
-    /**
-     * Gets the flow specification capability.
-     *
-     * @return flow specification status
-     */
-    public FlowSpec flowSpecStatus();
-
-    /**
-     * sets the flow specification capability.
-     *
-     * @param flowSpecStatus flow specification status
-     */
-    public void setFlowSpecStatus(FlowSpec flowSpecStatus);
 }
diff --git a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpChannelHandler.java b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpChannelHandler.java
index d2c8098..af229a5 100755
--- a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpChannelHandler.java
+++ b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpChannelHandler.java
@@ -665,14 +665,18 @@
      */
     private void sendHandshakeOpenMessage() throws IOException, BgpParseException {
         int bgpId;
+        BgpCfg.FlowSpec flowSpec = bgpconfig.flowSpecCapability();
         boolean flowSpecStatus = false;
         boolean vpnFlowSpecStatus = false;
 
         bgpId = Ip4Address.valueOf(bgpconfig.getRouterId()).toInt();
-        BgpPeerConfig peerConfig = (BgpPeerConfig) bgpconfig.displayPeers(peerAddr);
-        if (peerConfig.flowSpecStatus() == BgpPeerCfg.FlowSpec.IPV4) {
+
+        if (flowSpec == BgpCfg.FlowSpec.IPV4) {
             flowSpecStatus = true;
-        } else if (peerConfig.flowSpecStatus() == BgpPeerCfg.FlowSpec.VPNV4) {
+        } else if (flowSpec == BgpCfg.FlowSpec.VPNV4) {
+            vpnFlowSpecStatus = true;
+        } else if (flowSpec == BgpCfg.FlowSpec.IPV4_VPNV4) {
+            flowSpecStatus = true;
             vpnFlowSpecStatus = true;
         }
 
@@ -792,9 +796,9 @@
         boolean isMultiProtocolLsCapability = false;
         boolean isMultiProtocolFlowSpecCapability = false;
         boolean isMultiProtocolVpnFlowSpecCapability = false;
+        BgpCfg.FlowSpec flowSpec = h.bgpconfig.flowSpecCapability();
 
-        BgpPeerConfig peerConfig = (BgpPeerConfig) h.bgpconfig.displayPeers(peerAddr);
-        if (peerConfig.flowSpecStatus() != BgpPeerCfg.FlowSpec.NONE) {
+        if (flowSpec != BgpCfg.FlowSpec.NONE) {
             isFlowSpecCapabilityCfg = true;
         }
 
diff --git a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpConfig.java b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpConfig.java
index 1c846eb..5b367a7 100755
--- a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpConfig.java
+++ b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpConfig.java
@@ -51,7 +51,7 @@
     private boolean largeAs = false;
     private int maxConnRetryTime;
     private int maxConnRetryCount;
-
+    private FlowSpec flowSpec = FlowSpec.NONE;
     private Ip4Address routerId = null;
     private TreeMap<String, BgpPeerCfg> bgpPeerTree = new TreeMap<>();
     private BgpConnectPeer connectPeer;
@@ -119,6 +119,16 @@
     }
 
     @Override
+    public FlowSpec flowSpecCapability() {
+        return this.flowSpec;
+    }
+
+    @Override
+    public void setFlowSpecCapability(FlowSpec flowSpec) {
+        this.flowSpec = flowSpec;
+    }
+
+    @Override
     public String getRouterId() {
         if (this.routerId != null) {
             return this.routerId.toString();
@@ -222,7 +232,7 @@
             if (disconnPeer != null) {
                 // TODO: send notification peer deconfigured
                 disconnPeer.disconnectPeer();
-            } else {
+            } else if (lspeer.connectPeer() != null) {
                 lspeer.connectPeer().disconnectPeer();
             }
             lspeer.setState(BgpPeerCfg.State.IDLE);
diff --git a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerConfig.java b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerConfig.java
index 65cd485..a8eaee3 100755
--- a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerConfig.java
+++ b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerConfig.java
@@ -30,7 +30,6 @@
     private State state;
     private boolean selfInitiated;
     private BgpConnectPeer connectPeer;
-    private FlowSpec flowSpecStatus = FlowSpec.NONE;
 
     /**
      * Constructor to initialize the values.
@@ -119,14 +118,4 @@
     public void setConnectPeer(BgpConnectPeer connectPeer) {
         this.connectPeer = connectPeer;
     }
-
-    @Override
-    public FlowSpec flowSpecStatus() {
-        return flowSpecStatus;
-    }
-
-    @Override
-    public void setFlowSpecStatus(FlowSpec flowSpecStatus) {
-        this.flowSpecStatus = flowSpecStatus;
-    }
 }
diff --git a/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpAppConfig.java b/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpAppConfig.java
index ba205bc..8853e04 100644
--- a/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpAppConfig.java
+++ b/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpAppConfig.java
@@ -47,6 +47,7 @@
     public static final String LS_CAPABILITY = "lsCapability";
     public static final String HOLD_TIME = "holdTime";
     public static final String LARGE_AS_CAPABILITY = "largeAsCapability";
+    public static final String FLOW_SPEC_CAPABILITY = "flowSpecCapability";
 
     public static final String BGP_PEER = "bgpPeer";
     public static final String PEER_IP = "peerIp";
@@ -67,10 +68,11 @@
         bgpConfig = bgpController.getConfig();
 
         fields = hasOnlyFields(ROUTER_ID, LOCAL_AS, MAX_SESSION, LS_CAPABILITY,
-                HOLD_TIME, LARGE_AS_CAPABILITY, BGP_PEER) &&
+                HOLD_TIME, LARGE_AS_CAPABILITY, FLOW_SPEC_CAPABILITY, BGP_PEER) &&
                 isIpAddress(ROUTER_ID, MANDATORY) && isNumber(LOCAL_AS, MANDATORY) &&
                 isNumber(MAX_SESSION, OPTIONAL, 20) && isNumber(HOLD_TIME, OPTIONAL, 180) &&
-                isBoolean(LS_CAPABILITY, OPTIONAL) && isBoolean(LARGE_AS_CAPABILITY, OPTIONAL);
+                isBoolean(LS_CAPABILITY, OPTIONAL) && isBoolean(LARGE_AS_CAPABILITY, OPTIONAL) &&
+                isString(FLOW_SPEC_CAPABILITY, OPTIONAL);
 
         if (!fields) {
             return fields;
@@ -125,6 +127,15 @@
     }
 
     /**
+     * Returns flow specification capability support from the configuration.
+     *
+     * @return flow specification capability
+     */
+    public String flowSpecCapability() {
+        return get(FLOW_SPEC_CAPABILITY, null);
+    }
+
+    /**
      * Returns holdTime of the local node from the configuration.
      *
      * @return holdTime
@@ -134,6 +145,22 @@
     }
 
     /**
+     * Validates the flow specification capability.
+     *
+     * @return true if valid else false
+     */
+    public boolean validateFlowSpec() {
+        if (flowSpecCapability() != null) {
+            String flowSpec = flowSpecCapability();
+            if ((flowSpec.equals("IPV4")) || (flowSpec.equals("VPNV4")) || (flowSpec.equals("IPV4_VPNV4"))) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
      * Validates the Bgp local and peer configuration.
      *
      * @return true if valid else false
@@ -152,6 +179,9 @@
             return false;
         }
 
+        if (!validateFlowSpec()) {
+            return false;
+        }
         return true;
     }
 
diff --git a/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpCfgProvider.java b/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpCfgProvider.java
index 2ceb4c7..7629da7 100755
--- a/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpCfgProvider.java
+++ b/providers/bgp/cfg/src/main/java/org/onosproject/provider/bgp/cfg/impl/BgpCfgProvider.java
@@ -128,6 +128,16 @@
         bgpConfig.setMaxSession(config.maxSession());
         bgpConfig.setLargeASCapability(config.largeAsCapability());
 
+        if (config.flowSpecCapability().equals("IPV4")) {
+            bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.IPV4);
+        } else if (config.flowSpecCapability().equals("VPNV4")) {
+            bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.VPNV4);
+        } else if (config.flowSpecCapability().equals("IPV4_VPNV4")) {
+            bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.IPV4_VPNV4);
+        } else {
+            bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.NONE);
+        }
+
         nodes = config.bgpPeer();
         for (int i = 0; i < nodes.size(); i++) {
             String connectMode = nodes.get(i).connectMode();
@@ -163,6 +173,16 @@
             bgpConfig.setHoldTime(config.holdTime());
             bgpConfig.setMaxSession(config.maxSession());
             bgpConfig.setLargeASCapability(config.largeAsCapability());
+
+            if (config.flowSpecCapability().equals("IPV4")) {
+                bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.IPV4);
+            } else if (config.flowSpecCapability().equals("VPNV4")) {
+                bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.VPNV4);
+            } else if (config.flowSpecCapability().equals("IPV4_VPNV4")) {
+                bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.IPV4_VPNV4);
+            } else {
+                bgpConfig.setFlowSpecCapability(BgpCfg.FlowSpec.NONE);
+            }
         } else {
             log.info(" Self configuration cannot be modified as there is existing connections ");
         }
