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 f1b9429..d107f05 100644
--- a/app/src/main/java/org/opencord/cordmcast/impl/CordMcast.java
+++ b/app/src/main/java/org/opencord/cordmcast/impl/CordMcast.java
@@ -241,7 +241,7 @@
             log.error("Unable to parse configuration parameter for priority", ne);
             priority = DEFAULT_PRIORITY;
         }
-        cordMcastStatisticsService.setVlanValue(assignedVlan());
+        feedStatsServiceWithVlanConfigValues();
     }
 
     @Deactivate
@@ -256,6 +256,14 @@
         log.info("Stopped");
     }
 
+    /**
+     * Updates the stats service with current VLAN config values.
+     */
+    private void feedStatsServiceWithVlanConfigValues() {
+        cordMcastStatisticsService.setVlanValue(assignedVlan());
+        cordMcastStatisticsService.setInnerVlanValue(assignedInnerVlan());
+    }
+
     public void clearGroups() {
         mcastLock();
         try {
@@ -574,6 +582,7 @@
         if (config.egressInnerVlan() != null) {
             mcastInnerVlan = config.egressInnerVlan();
         }
+        feedStatsServiceWithVlanConfigValues();
     }
 
     private class NextKey {
diff --git a/app/src/main/java/org/opencord/cordmcast/impl/CordMcastStatisticsManager.java b/app/src/main/java/org/opencord/cordmcast/impl/CordMcastStatisticsManager.java
index a5715f4..1044adc 100644
--- a/app/src/main/java/org/opencord/cordmcast/impl/CordMcastStatisticsManager.java
+++ b/app/src/main/java/org/opencord/cordmcast/impl/CordMcastStatisticsManager.java
@@ -78,6 +78,7 @@
     private ScheduledExecutorService executor;
 
     private VlanId vlanId;
+    private VlanId innerVlanId;
 
     @Activate
     public void activate(ComponentContext context) {
@@ -119,7 +120,7 @@
         routes.forEach(route -> {
             mcastData.add(new CordMcastStatistics(route.group(),
                     route.source().isEmpty() ? "*" : route.source().get().toString(),
-                    vlanId));
+                    vlanId, innerVlanId));
         });
         return mcastData;
     }
@@ -129,6 +130,11 @@
         vlanId = vlanValue;
     }
 
+    @Override
+    public void setInnerVlanValue(VlanId innerVlanValue) {
+        innerVlanId = innerVlanValue;
+    }
+
     /**
      * pushing mcast stat data as event.
      */
@@ -141,7 +147,9 @@
                     " | Source: " +
                     (mcastStats.getSourceAddress() != null ? mcastStats.getSourceAddress().toString() : "null") +
                     " | Vlan: " +
-                    (mcastStats.getVlanId() != null ? mcastStats.getVlanId().toString() : "null"));
+                    (mcastStats.getVlanId() != null ? mcastStats.getVlanId().toString() : "null") +
+                    " | InnerVlan: " +
+                    (mcastStats.getInnerVlanId() != null ? mcastStats.getInnerVlanId().toString() : "null"));
         });
         post(new CordMcastStatisticsEvent(CordMcastStatisticsEvent.Type.STATUS_UPDATE, routeList));
     }
