diff --git a/impl/src/main/java/org/opencord/olt/impl/OltFlowService.java b/impl/src/main/java/org/opencord/olt/impl/OltFlowService.java
index 3a2c818..ebe0505 100644
--- a/impl/src/main/java/org/opencord/olt/impl/OltFlowService.java
+++ b/impl/src/main/java/org/opencord/olt/impl/OltFlowService.java
@@ -615,6 +615,7 @@
         // side is still up as nothing changed, so no need to add/remove flows, when and if the UNI comes up
         // we will re-push the EAPOL flow to require the subscriber to auth again.
         // When the subscriber is admin removed from REST or CLI we ignore the port status.
+        // Check the admin Status of the port
         if (!isPortPresent || sub.port.isEnabled() || sub.status == DiscoveredSubscriber.Status.ADMIN_REMOVED) {
 
             handleSubscriberDhcpFlows(sub.device.id(), sub.port, FlowOperation.REMOVE, si);
@@ -1836,7 +1837,7 @@
         }
 
         VlanId innerVlan = null;
-
+        treatmentBuilder.setOutput(nniPort.number());
         if (serviceName.equals(FTTB_SERVICE_DPU_MGMT_TRAFFIC) || serviceName.equals(FTTB_SERVICE_DPU_ANCP_TRAFFIC)) {
             MacAddress mac = FttbUtils.getMacAddressFromDhcpEnabledUti(
                     hostService, si, deviceId, port);
@@ -1848,15 +1849,15 @@
             }
 
             selectorBuilder.matchEthSrc(mac);
-            innerVlan = VlanId.NONE;
+
+            treatmentBuilder.writeMetadata(OltFlowServiceUtils.createMetadata(VlanId.NONE,
+                    uti.getTechnologyProfileId(), nniPort.number()), 0L);
 
         } else if (serviceName.equals(FTTB_SERVICE_SUBSCRIBER_TRAFFIC)) {
-            innerVlan = VlanId.ANY;
+            treatmentBuilder.writeMetadata(OltFlowServiceUtils.createMetadata(VlanId.ANY,
+                    uti.getTechnologyProfileId(), nniPort.number()), 0L);
         }
 
-        treatmentBuilder.setOutput(nniPort.number()).writeMetadata(OltFlowServiceUtils.createMetadata(innerVlan,
-                uti.getTechnologyProfileId(), nniPort.number()), 0L);
-
         DefaultForwardingObjective.Builder flowBuilder = createForwardingObjectiveBuilder(selectorBuilder.build(),
                 treatmentBuilder.build(), MIN_PRIORITY,
                 annotationBuilder.build());
@@ -1909,16 +1910,17 @@
 
             selectorBuilder.matchEthDst(mac);
             innerVlan = VlanId.NONE;
+            treatmentBuilder.writeMetadata(OltFlowServiceUtils.createMetadata(innerVlan,
+                    uti.getTechnologyProfileId(),
+                    port.number()), 0);
 
         } else if (serviceName.equals(FTTB_SERVICE_SUBSCRIBER_TRAFFIC)) {
-            innerVlan = VlanId.ANY;
-            selectorBuilder.matchMetadata(uti.getPonSTag().toShort());
+            selectorBuilder.matchMetadata(uti.getPonCTag().toShort());
+            treatmentBuilder.writeMetadata(OltFlowServiceUtils.createMetadata(VlanId.ANY,
+                    uti.getTechnologyProfileId(),
+                    port.number()), 0);
         }
 
-        treatmentBuilder.writeMetadata(OltFlowServiceUtils.createMetadata(innerVlan,
-                uti.getTechnologyProfileId(),
-                port.number()), 0);
-
         DefaultForwardingObjective.Builder flowBuilder = createForwardingObjectiveBuilder(selectorBuilder.build(),
                 treatmentBuilder.build(), MIN_PRIORITY, annotationBuilder.build());
 
diff --git a/impl/src/test/java/org/opencord/olt/impl/OltFlowServiceTest.java b/impl/src/test/java/org/opencord/olt/impl/OltFlowServiceTest.java
index 4196f57..35474b7 100644
--- a/impl/src/test/java/org/opencord/olt/impl/OltFlowServiceTest.java
+++ b/impl/src/test/java/org/opencord/olt/impl/OltFlowServiceTest.java
@@ -1068,6 +1068,7 @@
                 .setVlanPcp((byte) dpuMgmtUti.getUsPonSTagPriority())
                 .setOutput(PortNumber.CONTROLLER)
                 .meter(usBpMeterId)
+                //TODO why tests use this one and not the other method ?
                 .writeMetadata(OltFlowServiceUtils.createTechProfValueForWriteMetadata(VlanId.NONE,
                         dpuMgmtUti.getTechnologyProfileId(), usOltBpMeterId), 0L).build();
 
@@ -1438,7 +1439,7 @@
                     case FTTB_FLOW_DOWNSTREAM:
                         expectedSelectorBuilder
                                 .matchInPort(nniPort.number())
-                                .matchMetadata(uti.getPonSTag().toShort())
+                                .matchMetadata(uti.getPonCTag().toShort())
                                 .matchVlanId(uti.getPonSTag());
 
                         expectedTreatment.setVlanId(uti.getPonCTag())
@@ -1541,7 +1542,7 @@
                     case FTTB_FLOW_DOWNSTREAM:
                         expectedSelectorBuilder
                                 .matchInPort(nniPort.number())
-                                .matchMetadata(uti.getPonSTag().toShort())
+                                .matchMetadata(uti.getPonCTag().toShort())
                                 .matchVlanId(uti.getPonSTag());
 
                         expectedTreatment.setVlanId(uti.getPonCTag())
