diff --git a/app/src/main/java/org/opencord/cordmcast/impl/CordMcast.java b/app/src/main/java/org/opencord/cordmcast/impl/CordMcast.java
index e014b79..f1b9429 100644
--- a/app/src/main/java/org/opencord/cordmcast/impl/CordMcast.java
+++ b/app/src/main/java/org/opencord/cordmcast/impl/CordMcast.java
@@ -157,6 +157,7 @@
     private ApplicationId appId;
     private ApplicationId coreAppId;
     private short mcastVlan = DEFAULT_MCAST_VLAN;
+    private VlanId mcastInnerVlan = VlanId.NONE;
 
     /**
      * Whether to use VLAN for multicast traffic.
@@ -297,6 +298,10 @@
         return vlanEnabled ? multicastVlan() : VlanId.NONE;
     }
 
+    protected VlanId assignedInnerVlan() {
+        return vlanEnabled ? mcastInnerVlan : VlanId.NONE;
+    }
+
     private class InternalMulticastListener implements McastListener {
         @Override
         public void event(McastEvent event) {
@@ -471,13 +476,13 @@
         }
 
         ObjectiveContext context = new DefaultObjectiveContext(
-                (objective) -> log.debug("Successfully add {} on {}/{}, vlan {}",
+                (objective) -> log.debug("Successfully add {} on {}/{}, vlan {}, inner vlan {}",
                                          route.group(), sink.deviceId(), sink.port().toLong(),
-                                         assignedVlan()),
+                                         assignedVlan(), assignedInnerVlan()),
                 (objective, error) -> {
-                    log.warn("Failed to add {} on {}/{}, vlan {}: {}",
+                    log.warn("Failed to add {} on {}/{}, vlan {}, inner vlan {}: {}",
                              route.group(), sink.deviceId(), sink.port().toLong(), assignedVlan(),
-                             error);
+                             assignedInnerVlan(), error);
                 });
 
         flowObjectiveService.next(sink.deviceId(), newNextObj);
@@ -538,7 +543,8 @@
                                 //TODO: Simply remove flows/groups, hosts will response period query
                                 // and re-sent IGMP report, so the flows can be rebuild.
                                 // However, better to remove and re-add mcast flow rules here
-                                if (mcastVlan != config.egressVlan().toShort() && vlanEnabled) {
+                                if (vlanEnabled && (mcastVlan != config.egressVlan().toShort() ||
+                                                    !mcastInnerVlan.equals(config.egressInnerVlan()))) {
                                     clearGroups();
                                 }
                                 updateConfig(config);
@@ -565,6 +571,9 @@
         if (config.egressVlan() != null) {
             mcastVlan = config.egressVlan().toShort();
         }
+        if (config.egressInnerVlan() != null) {
+            mcastInnerVlan = config.egressInnerVlan();
+        }
     }
 
     private class NextKey {
@@ -644,6 +653,10 @@
 
         if (vlanEnabled) {
             metadata.matchVlanId(multicastVlan());
+
+            if (!mcastInnerVlan.equals(VlanId.NONE)) {
+                metadata.matchInnerVlanId(mcastInnerVlan);
+            }
         }
 
         DefaultNextObjective.Builder build = DefaultNextObjective.builder()
@@ -690,6 +703,10 @@
         TrafficSelector.Builder metabuilder = DefaultTrafficSelector.builder();
         if (vlanEnabled) {
             metabuilder.matchVlanId(multicastVlan());
+
+            if (!mcastInnerVlan.equals(VlanId.NONE)) {
+                metabuilder.matchInnerVlanId(mcastInnerVlan);
+            }
         }
 
         ForwardingObjective.Builder fwdBuilder = DefaultForwardingObjective.builder()
diff --git a/app/src/test/java/org/opencord/cordmcast/impl/McastTestBase.java b/app/src/test/java/org/opencord/cordmcast/impl/McastTestBase.java
index 17ad11b..986c175 100644
--- a/app/src/test/java/org/opencord/cordmcast/impl/McastTestBase.java
+++ b/app/src/test/java/org/opencord/cordmcast/impl/McastTestBase.java
@@ -168,6 +168,11 @@
         public VlanId egressVlan() {
             return VlanId.vlanId("4000");
         }
+
+        @Override
+        public VlanId egressInnerVlan() {
+            return VlanId.NONE;
+        }
     }
 
     /**
