diff --git a/internal/pkg/application/service.go b/internal/pkg/application/service.go
index 4ddd45d..9315b5b 100644
--- a/internal/pkg/application/service.go
+++ b/internal/pkg/application/service.go
@@ -71,6 +71,10 @@
 	SVlanTpid                  layers.EthernetType
 	MacAddr                    net.HardwareAddr
 	Pbits                      []of.PbitType
+	UsPonCTagPriority          of.PbitType
+	UsPonSTagPriority          of.PbitType
+	DsPonCTagPriority          of.PbitType
+	DsPonSTagPriority          of.PbitType
 	DsRemarkPbitsMap           map[int]int // Ex: Remark case {0:0,1:0} and No-remark case {1:1}
 	TechProfileID              uint16
 	CircuitID                  string
@@ -99,6 +103,7 @@
 	MaxDataRateDs              uint32
 	IsActivated                bool
 	Trigger                    ServiceTrigger
+	ServiceType                string
 }
 
 // VoltServiceOper structure
@@ -285,6 +290,25 @@
 	}
 }
 
+func (vs *VoltService) AddMeterToDevice(cntx context.Context) error {
+	if vs.DeleteInProgress || vs.UpdateInProgress {
+		logger.Errorw(ctx, "Ignoring Meter Push, Service deleteion In-Progress", log.Fields{"Device": vs.Device, "Service": vs.Name})
+	}
+	va := GetApplication()
+	logger.Infow(ctx, "Configuring Meters for FTTB", log.Fields{"ServiceName": vs.Name})
+	device, err := va.GetDeviceFromPort(vs.Port)
+	if err != nil {
+		logger.Errorw(ctx, "Error Getting Device", log.Fields{"Reason": err.Error()})
+		return errorCodes.ErrDeviceNotFound
+	} else if device.State != controller.DeviceStateUP {
+		logger.Warnw(ctx, "Device state Down. Ignoring Meter Push", log.Fields{"Service": vs.Name, "Port": vs.Port})
+		return nil
+	}
+	va.AddMeterToDevice(vs.Port, device.Name, vs.UsMeterID, 0)
+	va.AddMeterToDevice(vs.Port, device.Name, vs.DsMeterID, vs.AggDsMeterID)
+	return nil
+}
+
 // AddUsHsiaFlows - Add US HSIA Flows for the service
 func (vs *VoltService) AddUsHsiaFlows(cntx context.Context) error {
 
@@ -306,9 +330,11 @@
 		}
 
 		vs.Device = device.Name
-		va.AddMeterToDevice(vs.Port, device.Name, vs.UsMeterID, 0)
-		va.AddMeterToDevice(vs.Port, device.Name, vs.DsMeterID, vs.AggDsMeterID)
-
+		/* In case of DPU_MGMT_TRAFFIC the meters will be configured before US flow creation*/
+		if vs.ServiceType != DPU_MGMT_TRAFFIC {
+			va.AddMeterToDevice(vs.Port, device.Name, vs.UsMeterID, 0)
+			va.AddMeterToDevice(vs.Port, device.Name, vs.DsMeterID, vs.AggDsMeterID)
+		}
 		logger.Infow(ctx, "Adding HSIA flows", log.Fields{"Name": vs.Name})
 		pBits := vs.Pbits
 
@@ -560,7 +586,6 @@
 		if pbits != PbitMatchNone {
 			subflow1.SetMatchPbit(pbits)
 		}
-
 		if remarkExists && (of.PbitType(remarkPbit) != pbits) {
 			subflow1.SetPcp(of.PbitType(remarkPbit))
 			// match & action pbits are different, set remark-pbit action
@@ -703,14 +728,6 @@
 	// PortName and PortID to be used for validation of port before flow pushing
 	flow.PortID = inport
 	flow.PortName = vs.Port
-	allowTransparent := 0
-	reqBwInfo := 0
-	if vs.AllowTransparent {
-		allowTransparent = 1
-	}
-	if vs.BwAvailInfo == "" {
-		reqBwInfo = 1
-	}
 
 	// Add Table-0 flow that deals with the inner VLAN in ONU
 	{
@@ -719,42 +736,24 @@
 		subflow1.SetGoToTable(1)
 		subflow1.SetInPort(inport)
 
+		if vs.ServiceType == DPU_MGMT_TRAFFIC {
+			subflow1.SetMatchPbit(vs.UsPonCTagPriority)
+			subflow1.SetPcp(vs.UsPonSTagPriority)
+		} else if vs.ServiceType == DPU_ANCP_TRAFFIC {
+			subflow1.SetPcp(vs.UsPonSTagPriority)
+		}
 		if err := vs.setUSMatchActionVlanT0(subflow1); err != nil {
 			return nil, err
 		}
 		subflow1.SetMeterID(vs.UsMeterID)
 
-		if GetApplication().GetVendorID() == Radisys {
-			if pbits != PbitMatchNone {
-				subflow1.SetMatchPbit(pbits)
-			}
-			/* WriteMetaData 8 Byte(uint64) usage:
-			| Byte8    | Byte7    | Byte6 | Byte5  | Byte4  | Byte3   | Byte2  | Byte1 |
-			| reserved | reserved | TpID  | TpID   | uinID  | uniID   | uniID  | uniID | */
-			metadata := uint64(vs.CVlan)<<48 + uint64(vs.TechProfileID)<<32 + uint64(outport)
-			subflow1.SetWriteMetadata(metadata)
-			/* TableMetaData 8 Byte(uint64) usage: (Considering MSB bit as 63rd bit and LSB bit as 0th bit)
-			|                         Byte8                     |  Byte7    |  Byte6    |      Byte5       |  Byte4    | Byte3    | Byte2    | Byte1   |
-			| 000      |    0      |    00     |    0     |  0  |  00000000 |  00000000 |  0000   0000     |  00000000 | 00000000 | 00000000 | 00000000|
-			| reserved | reqBwInfo | svlanTpID |  Buff us |  AT |  schedID  |  schedID  | onteth  vlanCtrl |  unitag   | unitag   | ctag     | ctag    | */
-			metadata = uint64(reqBwInfo)<<60 | uint64(allowTransparent)<<56 | uint64(vs.SchedID)<<40 | uint64(vs.ONTEtherTypeClassification)<<36 | uint64(vs.VlanControl)<<32 | uint64(vs.CVlan)
+		/* WriteMetaData 8 Byte(uint64) usage:
+		| Byte8    | Byte7    | Byte6 | Byte5  | Byte4  | Byte3   | Byte2  | Byte1 |
+		| reserved | reserved | TpID  | TpID   | uinID  | uniID   | uniID  | uniID | */
+		//metadata := uint64(vs.CVlan)<<48 + uint64(vs.TechProfileID)<<32 + uint64(outport)
+		metadata := uint64(vs.TechProfileID)<<32 + uint64(outport)
+		subflow1.SetWriteMetadata(metadata)
 
-			// // In case of MAC Learning enabled voltha will buffer the US flow installation.
-			// if NonZeroMacAddress(vs.MacAddr) {
-			// 	subflow1.SetMatchSrcMac(vs.MacAddr)
-			// } else if vs.MacLearning != MacLearning {
-			// 	metadata |= 1 << 57
-			// 	logger.Infow(ctx, "Buffer us flow at adapter", log.Fields{"metadata": metadata})
-			// }
-			subflow1.SetTableMetadata(metadata)
-		} else {
-			/* WriteMetaData 8 Byte(uint64) usage:
-			| Byte8    | Byte7    | Byte6 | Byte5  | Byte4  | Byte3   | Byte2  | Byte1 |
-			| reserved | reserved | TpID  | TpID   | uinID  | uniID   | uniID  | uniID | */
-			//metadata := uint64(vs.CVlan)<<48 + uint64(vs.TechProfileID)<<32 + uint64(outport)
-			metadata := uint64(vs.TechProfileID)<<32 + uint64(outport)
-			subflow1.SetWriteMetadata(metadata)
-		}
 		if vs.VlanControl == OLTCVlanOLTSVlan {
 			/**
 			 * The new cookie generation is only for OLT_CVLAN_OLT_SVLAN case (TEF residential case) within a UNI.
@@ -783,33 +782,17 @@
 		if err := vs.setUSMatchActionVlanT1(subflow2); err != nil {
 			return nil, err
 		}
+		if vs.ServiceType == DPU_MGMT_TRAFFIC {
+			subflow2.SetMatchSrcMac(vs.MacAddr)
+		}
 		subflow2.SetInPort(inport)
 		subflow2.SetOutPort(outport)
 		subflow2.SetMeterID(vs.UsMeterID)
 
-		if GetApplication().GetVendorID() == Radisys {
-			if pbits != PbitMatchNone {
-				subflow2.SetMatchPbit(pbits)
-			}
-			// refer Table-0 flow generation for byte information
-			metadata := uint64(vs.CVlan)<<48 + uint64(vs.TechProfileID)<<32 + uint64(outport)
-			subflow2.SetWriteMetadata(metadata)
-			// refer Table-0 flow generation for byte information
-			metadata = uint64(reqBwInfo)<<60 | uint64(allowTransparent)<<56 | uint64(vs.SchedID)<<40 | uint64(vs.ONTEtherTypeClassification)<<36 | uint64(vs.VlanControl)<<32 | uint64(vs.CVlan)
-			// // In case of MAC Learning enabled voltha will buffer the US flow installation.
-			// if NonZeroMacAddress(vs.MacAddr) {
-			// 	subflow2.SetMatchSrcMac(vs.MacAddr)
-			// } else if vs.MacLearning != MacLearningNone {
-			// 	metadata |= 1 << 57
-			// 	logger.Infow(ctx, "Buffer us flow at adapter", log.Fields{"metadata": metadata})
-			// }
-			subflow2.SetTableMetadata(metadata)
-		} else {
-			// refer Table-0 flow generation for byte information
-			metadata := uint64(vs.TechProfileID)<<32 + uint64(outport)
-			subflow2.SetWriteMetadata(metadata)
+		// refer Table-0 flow generation for byte information
+		metadata := uint64(vs.TechProfileID)<<32 + uint64(outport)
+		subflow2.SetWriteMetadata(metadata)
 
-		}
 		if vs.VlanControl == OLTCVlanOLTSVlan {
 			/**
 			 * The new cookie generation is only for OLT_CVLAN_OLT_SVLAN case (TEF residential case) within a UNI.
@@ -1085,6 +1068,12 @@
 		return errors.New("VNET doesn't exist")
 	}
 
+	// If the device is already discovered, update the device name in service
+	d, err := va.GetDeviceFromPort(vs.Port)
+	if err == nil {
+		vs.Device = d.Name
+	}
+
 	vs.Version = database.PresentVersionMap[database.ServicePath]
 	// Add the service to the volt application
 	va.ServiceByName.Store(vs.Name, vs)
@@ -1588,7 +1577,7 @@
 		return errors.New("New Vnet Id not found")
 	}
 
-	d := va.GetDeviceBySerialNo(serialNum)
+	d, _ := va.GetDeviceBySerialNo(serialNum)
 	if d == nil {
 		logger.Errorw(ctx, "Error Getting Device", log.Fields{"SerialNum": serialNum})
 		return errorCodes.ErrDeviceNotFound
@@ -2064,6 +2053,7 @@
 		vs := value.(*VoltService)
 		// If svlan if provided, then the tags and tpID of service has to be matching
 		if sVlan != of.VlanNone && (sVlan != vs.SVlan || cVlan != vs.CVlan || tpID != vs.TechProfileID) {
+			logger.Infow(ctx, "Service Activate Request Does not match", log.Fields{"Device": deviceID, "voltService": vs})
 			return true
 		}
 		if portNo == vs.Port && !vs.IsActivated {
