diff --git a/apps/routing-api/src/main/java/org/onosproject/routing/config/BgpConfig.java b/apps/routing-api/src/main/java/org/onosproject/routing/config/BgpConfig.java
index dc1cc81..45cda26 100644
--- a/apps/routing-api/src/main/java/org/onosproject/routing/config/BgpConfig.java
+++ b/apps/routing-api/src/main/java/org/onosproject/routing/config/BgpConfig.java
@@ -22,6 +22,7 @@
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.collect.Sets;
 import org.onlab.packet.IpAddress;
+import org.onlab.packet.VlanId;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.config.Config;
@@ -41,6 +42,7 @@
     public static final String CONNECT_POINT = "connectPoint";
     public static final String NAME = "name";
     public static final String PEERS = "peers";
+    public static final String VLAN = "vlan";
 
     /**
      * Gets the set of configured BGP speakers.
@@ -69,7 +71,10 @@
                 name = Optional.of(jsonNode.get(NAME).asText());
             }
 
+            VlanId vlan = getVlan(jsonNode);
+
             speakers.add(new BgpSpeakerConfig(name,
+                    vlan,
                     ConnectPoint.deviceConnectPoint(jsonNode.path(CONNECT_POINT).asText()),
                     listenAddresses));
         });
@@ -77,6 +82,15 @@
         return speakers;
     }
 
+    // If configured, it retreives a VLAN Id from a BGP speaker node
+    private VlanId getVlan(JsonNode node) {
+        VlanId vlan = VlanId.NONE;
+        if (!node.path(VLAN).isMissingNode()) {
+            vlan = VlanId.vlanId(node.path(VLAN).asText());
+        }
+        return vlan;
+    }
+
     /**
      * Examines whether a name of BGP speaker exists in configuration.
      *
@@ -102,6 +116,8 @@
 
         speakerNode.put(NAME, speaker.name().get());
 
+        speakerNode.put(VLAN, speaker.vlan().toString());
+
         speakerNode.put(CONNECT_POINT, speaker.connectPoint().elementId().toString()
                 + "/" + speaker.connectPoint().port().toString());
 
@@ -157,8 +173,8 @@
     /**
      * Finds BGP speaker peering with a given external peer.
      *
-     * @param peerAddress peering address to be removed
-     * @return speaker
+     * @param peerAddress BGP peer address
+     * @return BGP speaker
      */
     public BgpSpeakerConfig getSpeakerFromPeer(IpAddress peerAddress) {
         for (BgpConfig.BgpSpeakerConfig speaker : bgpSpeakers()) {
@@ -207,12 +223,14 @@
     public static class BgpSpeakerConfig {
 
         private Optional<String> name;
+        private VlanId vlanId;
         private ConnectPoint connectPoint;
         private Set<IpAddress> peers;
 
-        public BgpSpeakerConfig(Optional<String> name, ConnectPoint connectPoint,
-                                Set<IpAddress> peers) {
+        public BgpSpeakerConfig(Optional<String> name, VlanId vlanId,
+                                ConnectPoint connectPoint, Set<IpAddress> peers) {
             this.name = checkNotNull(name);
+            this.vlanId = checkNotNull(vlanId);
             this.connectPoint = checkNotNull(connectPoint);
             this.peers = checkNotNull(peers);
         }
@@ -221,6 +239,10 @@
             return name;
         }
 
+        public VlanId vlan() {
+            return vlanId;
+        }
+
         public ConnectPoint connectPoint() {
             return connectPoint;
         }
@@ -252,6 +274,7 @@
             if (obj instanceof BgpSpeakerConfig) {
                 final BgpSpeakerConfig that = (BgpSpeakerConfig) obj;
                 return Objects.equals(this.name, that.name) &&
+                        Objects.equals(this.vlanId, that.vlanId) &&
                         Objects.equals(this.connectPoint, that.connectPoint) &&
                         Objects.equals(this.peers, that.peers);
             }
@@ -260,7 +283,7 @@
 
         @Override
         public int hashCode() {
-            return Objects.hash(name, connectPoint, peers);
+            return Objects.hash(name, vlanId, connectPoint, peers);
         }
     }
 }
