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 994f656..7fe40e1 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
@@ -40,6 +40,14 @@
     }
 
     /**
+     * Flow specification details object constructor.
+     *
+     */
+    public BgpFlowSpecDetails() {
+
+    }
+
+    /**
      * Returns flow specification action tlv.
      *
      * @return flow specification action tlv
@@ -84,6 +92,15 @@
         return this.flowSpecComponents;
     }
 
+    /**
+     * Sets flow specification components.
+     *
+     * @param flowSpecComponents flow specification components
+     */
+    public void setFlowSpecComponents(List<BgpValueType> flowSpecComponents) {
+        this.flowSpecComponents = flowSpecComponents;
+    }
+
     @Override
     public int hashCode() {
         return Objects.hash(flowSpecComponents);
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/flowspec/BgpFlowSpecPrefix.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/flowspec/BgpFlowSpecPrefix.java
index a394839..8e83404 100755
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/flowspec/BgpFlowSpecPrefix.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/flowspec/BgpFlowSpecPrefix.java
@@ -41,6 +41,14 @@
      * @param sourcePrefix source prefix
      */
     public BgpFlowSpecPrefix(IpPrefix destinationPrefix, IpPrefix sourcePrefix) {
+        if (destinationPrefix == null) {
+            destinationPrefix = IpPrefix.valueOf(0, 0);
+        }
+
+        if (sourcePrefix == null) {
+            sourcePrefix = IpPrefix.valueOf(0, 0);
+        }
+
         this.destinationPrefix = destinationPrefix;
         this.sourcePrefix = sourcePrefix;
     }
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/MpReachNlri.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/MpReachNlri.java
index a93725e..3a108e9 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/MpReachNlri.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/MpReachNlri.java
@@ -189,7 +189,7 @@
                                                && ((safi == Constants.SAFI_FLOWSPEC_VALUE)
                                                || (safi == Constants.VPN_SAFI_FLOWSPEC_VALUE))) {
                 List<BgpValueType> flowSpecComponents = new LinkedList<>();
-
+                RouteDistinguisher routeDistinguisher = null;
                 if (tempCb.readableBytes() > 0) {
                     BgpValueType flowSpecComponent = null;
 
@@ -203,6 +203,11 @@
                     }
 
                     byte reserved = tempCb.readByte();
+
+                    if (safi == Constants.VPN_SAFI_FLOWSPEC_VALUE) {
+                        routeDistinguisher = new RouteDistinguisher();
+                        routeDistinguisher = RouteDistinguisher.read(tempCb);
+                    }
                     short totNlriLen = tempCb.getByte(tempCb.readerIndex());
                     if (totNlriLen >= FLOW_SPEC_LEN) {
                         totNlriLen = tempCb.readShort();
@@ -260,7 +265,9 @@
                         flowSpecComponents.add(flowSpecComponent);
                     }
                 }
-                return new MpReachNlri(new BgpFlowSpecDetails(flowSpecComponents), afi, safi);
+                BgpFlowSpecDetails flowSpecDetails = new BgpFlowSpecDetails(flowSpecComponents);
+                flowSpecDetails.setRouteDistinguiher(routeDistinguisher);
+                return new MpReachNlri(flowSpecDetails, afi, safi);
             } else {
                 throw new BgpParseException("Not Supporting afi " + afi + "safi " + safi);
             }
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/MpUnReachNlri.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/MpUnReachNlri.java
index 076d8dd..f21a6be 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/MpUnReachNlri.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/MpUnReachNlri.java
@@ -154,9 +154,14 @@
                                                && ((safi == Constants.SAFI_FLOWSPEC_VALUE)
                                                || (safi == Constants.VPN_SAFI_FLOWSPEC_VALUE))) {
                 List<BgpValueType> flowSpecComponents = new LinkedList<>();
-
+                RouteDistinguisher routeDistinguisher = null;
                 if (tempCb.readableBytes() > 0) {
                     BgpValueType flowSpecComponent = null;
+
+                    if (safi == Constants.VPN_SAFI_FLOWSPEC_VALUE) {
+                        routeDistinguisher = new RouteDistinguisher();
+                        routeDistinguisher = RouteDistinguisher.read(tempCb);
+                    }
                     short totNlriLen = tempCb.getByte(tempCb.readerIndex());
                     if (totNlriLen >= FLOW_SPEC_LEN) {
                         totNlriLen = tempCb.readShort();
@@ -214,7 +219,9 @@
                         flowSpecComponents.add(flowSpecComponent);
                     }
                 }
-                return new MpUnReachNlri(new BgpFlowSpecDetails(flowSpecComponents), afi, safi);
+                BgpFlowSpecDetails flowSpecDetails = new BgpFlowSpecDetails(flowSpecComponents);
+                flowSpecDetails.setRouteDistinguiher(routeDistinguisher);
+                return new MpUnReachNlri(flowSpecDetails, afi, safi);
             } else {
                 //TODO: check with the values got from capability
                 throw new BgpParseException("Not Supporting afi " + afi + "safi " + safi);
