diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/routing/ResolvedRoute.java b/incubator/api/src/main/java/org/onosproject/incubator/net/routing/ResolvedRoute.java
index d6cb4b4..02d4e95 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/routing/ResolvedRoute.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/routing/ResolvedRoute.java
@@ -19,6 +19,7 @@
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.IpPrefix;
 import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
 import org.onosproject.net.ConnectPoint;
 
 import java.util.Objects;
@@ -33,6 +34,7 @@
     private final IpPrefix prefix;
     private final IpAddress nextHop;
     private final MacAddress nextHopMac;
+    private final VlanId nextHopVlan;
     private final ConnectPoint location;
 
     /**
@@ -43,10 +45,7 @@
      * @param location connect point where the next hop connects to
      */
     public ResolvedRoute(Route route, MacAddress nextHopMac, ConnectPoint location) {
-        this.prefix = route.prefix();
-        this.nextHop = route.nextHop();
-        this.nextHopMac = nextHopMac;
-        this.location = location;
+        this(route, nextHopMac, VlanId.NONE, location);
     }
 
     /**
@@ -59,9 +58,41 @@
      */
     public ResolvedRoute(IpPrefix prefix, IpAddress nextHop, MacAddress nextHopMac,
                          ConnectPoint location) {
+        this(prefix, nextHop, nextHopMac, VlanId.NONE, location);
+    }
+
+    /**
+     * Creates a new resolved route.
+     *
+     * @param route input route
+     * @param nextHopMac next hop MAC address
+     * @param nextHopVlan next hop VLAN ID
+     * @param location connect point where the next hop connects to
+     */
+    public ResolvedRoute(Route route, MacAddress nextHopMac, VlanId nextHopVlan,
+                         ConnectPoint location) {
+        this.prefix = route.prefix();
+        this.nextHop = route.nextHop();
+        this.nextHopMac = nextHopMac;
+        this.nextHopVlan = nextHopVlan;
+        this.location = location;
+    }
+
+    /**
+     * Creates a new resolved route.
+     *
+     * @param prefix route prefix
+     * @param nextHop route next hop IP address
+     * @param nextHopMac next hop MAC address
+     * @param nextHopVlan next hop VLAN address
+     * @param location connect point where the next hop connects to
+     */
+    public ResolvedRoute(IpPrefix prefix, IpAddress nextHop, MacAddress nextHopMac,
+                         VlanId nextHopVlan, ConnectPoint location) {
         this.prefix = prefix;
         this.nextHop = nextHop;
         this.nextHopMac = nextHopMac;
+        this.nextHopVlan = nextHopVlan;
         this.location = location;
     }
 
@@ -93,6 +124,15 @@
     }
 
     /**
+     * Returns the next hop VLAN ID.
+     *
+     * @return VLAN ID
+     */
+    public VlanId nextHopVlan() {
+        return nextHopVlan;
+    }
+
+    /**
      * Returns the next hop location.
      *
      * @return connect point where the next hop attaches to
@@ -103,7 +143,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(prefix, nextHop, nextHopMac, location);
+        return Objects.hash(prefix, nextHop, nextHopMac, nextHopVlan, location);
     }
 
     @Override
@@ -121,6 +161,7 @@
         return Objects.equals(this.prefix, that.prefix) &&
                 Objects.equals(this.nextHop, that.nextHop) &&
                 Objects.equals(this.nextHopMac, that.nextHopMac) &&
+                Objects.equals(this.nextHopVlan, that.nextHopVlan) &&
                 Objects.equals(this.location, that.location);
     }
 
@@ -130,6 +171,7 @@
                 .add("prefix", prefix)
                 .add("nextHop", nextHop)
                 .add("nextHopMac", nextHopMac)
+                .add("nextHopVlan", nextHopVlan)
                 .add("location", location)
                 .toString();
     }
