diff --git a/internal/pkg/avcfg/omci_ani_config.go b/internal/pkg/avcfg/omci_ani_config.go
index cc023ba..92fe84f 100755
--- a/internal/pkg/avcfg/omci_ani_config.go
+++ b/internal/pkg/avcfg/omci_ani_config.go
@@ -377,7 +377,7 @@
 				dsQueueFound := false
 				for _, mgmtEntityID := range queueInstKeys {
 					if meAttributes := oFsm.pOnuDB.GetMe(me.PriorityQueueClassID, mgmtEntityID); meAttributes != nil {
-						returnVal := meAttributes["RelatedPort"]
+						returnVal := meAttributes[me.PriorityQueue_RelatedPort]
 						if returnVal != nil {
 							if relatedPort, err := oFsm.pOnuDB.GetUint32Attrib(returnVal); err == nil {
 								if relatedPort == usQrelPortMask {
@@ -398,7 +398,7 @@
 								logger.Warnw(ctx, "Could not convert attribute value", log.Fields{"device-id": oFsm.deviceID})
 							}
 						} else {
-							logger.Warnw(ctx, "'RelatedPort' not found in meAttributes:", log.Fields{"device-id": oFsm.deviceID})
+							logger.Warnw(ctx, "PrioQueue.RelatedPort not found in meAttributes:", log.Fields{"device-id": oFsm.deviceID})
 						}
 					} else {
 						logger.Warnw(ctx, "No attributes available in DB:", log.Fields{"meClassID": me.PriorityQueueClassID,
@@ -525,10 +525,10 @@
 	meParams := me.ParamData{
 		EntityID: oFsm.macBPCD0ID,
 		Attributes: me.AttributeValueMap{
-			"BridgeIdPointer": bridgePtr,
-			"PortNum":         0xFF, //fixed unique ANI side indication
-			"TpType":          3,    //for .1PMapper
-			"TpPointer":       oFsm.mapperSP0ID,
+			me.MacBridgePortConfigurationData_BridgeIdPointer: bridgePtr,
+			me.MacBridgePortConfigurationData_PortNum:         0xFF, //fixed unique ANI side indication
+			me.MacBridgePortConfigurationData_TpType:          3,    //for .1PMapper
+			me.MacBridgePortConfigurationData_TpPointer:       oFsm.mapperSP0ID,
 		},
 	}
 	oFsm.mutexPLastTxMeInstance.Lock()
@@ -574,7 +574,7 @@
 	meParams := me.ParamData{
 		EntityID: oFsm.tcont0ID,
 		Attributes: me.AttributeValueMap{
-			"AllocId": oFsm.alloc0ID,
+			me.TCont_AllocId: oFsm.alloc0ID,
 		},
 	}
 	oFsm.mutexPLastTxMeInstance.Lock()
@@ -691,7 +691,7 @@
 	// The TP type value 0 also indicates bridging mapping, and the TP pointer should be set to 0xFFFF
 	// setting this parameter is not strictly needed anymore with the ensured .1pMapper create default setting
 	// but except for processing effort does not really harm - left to keep changes low
-	meParams.Attributes["TpPointer"] = 0xffff
+	meParams.Attributes[me.Ieee8021PMapperServiceProfile_TpPointer] = 0xffff
 
 	if !foundIwPtr {
 		logger.Debugw(ctx, "UniPonAniConfigFsm no GemIwPtr found for .1pMapper - abort", log.Fields{
@@ -983,7 +983,7 @@
 	meParams := me.ParamData{
 		EntityID: oFsm.tcont0ID,
 		Attributes: me.AttributeValueMap{
-			"AllocId": cmn.UnusedTcontAllocID,
+			me.TCont_AllocId: cmn.UnusedTcontAllocID,
 		},
 	}
 	oFsm.mutexPLastTxMeInstance.Lock()
@@ -1454,13 +1454,13 @@
 		meParams := me.ParamData{
 			EntityID: gemPortAttribs.gemPortID, //unique, same as PortId
 			Attributes: me.AttributeValueMap{
-				"PortId":       gemPortAttribs.gemPortID,
-				"TContPointer": oFsm.tcont0ID,
-				"Direction":    gemPortAttribs.direction,
+				me.GemPortNetworkCtp_PortId:       gemPortAttribs.gemPortID,
+				me.GemPortNetworkCtp_TContPointer: oFsm.tcont0ID,
+				me.GemPortNetworkCtp_Direction:    gemPortAttribs.direction,
 				//ONU-G.TrafficManagementOption dependency ->PrioQueue or TCont
 				//  TODO!! verify dependency and QueueId in case of Multi-GemPort setup!
-				"TrafficManagementPointerForUpstream": gemPortAttribs.upQueueID, //might be different in wrr-only Setup - tcont0ID
-				"PriorityQueuePointerForDownStream":   gemPortAttribs.downQueueID,
+				me.GemPortNetworkCtp_TrafficManagementPointerForUpstream: gemPortAttribs.upQueueID, //might be different in wrr-only Setup - tcont0ID
+				me.GemPortNetworkCtp_PriorityQueuePointerForDownStream:   gemPortAttribs.downQueueID,
 			},
 		}
 		oFsm.mutexPLastTxMeInstance.Lock()
@@ -1520,10 +1520,10 @@
 			meParams := me.ParamData{
 				EntityID: gemPortAttribs.multicastGemID,
 				Attributes: me.AttributeValueMap{
-					"GemPortNetworkCtpConnectivityPointer": gemPortAttribs.multicastGemID,
-					"InterworkingOption":                   0, // Don't Care
-					"ServiceProfilePointer":                0, // Don't Care
-					"GalProfilePointer":                    cmn.GalEthernetEID,
+					me.MulticastGemInterworkingTerminationPoint_GemPortNetworkCtpConnectivityPointer: gemPortAttribs.multicastGemID,
+					me.MulticastGemInterworkingTerminationPoint_InterworkingOption:                   0, // Don't Care
+					me.MulticastGemInterworkingTerminationPoint_ServiceProfilePointer:                0, // Don't Care
+					me.MulticastGemInterworkingTerminationPoint_GalProfilePointer:                    cmn.GalEthernetEID,
 				},
 			}
 			if oFsm.pUniTechProf.multicastConfiguredForOtherUniTps(ctx, oFsm.uniTpKey) {
@@ -1564,7 +1564,7 @@
 			meIPV4MCTableParams := me.ParamData{
 				EntityID: gemPortAttribs.multicastGemID,
 				Attributes: me.AttributeValueMap{
-					"Ipv4MulticastAddressTable": ipv4MulticastTable,
+					me.MulticastGemInterworkingTerminationPoint_Ipv4MulticastAddressTable: ipv4MulticastTable,
 				},
 			}
 			oFsm.mutexPLastTxMeInstance.Lock()
@@ -1584,11 +1584,11 @@
 			meParams := me.ParamData{
 				EntityID: gemPortAttribs.gemPortID,
 				Attributes: me.AttributeValueMap{
-					"GemPortNetworkCtpConnectivityPointer": gemPortAttribs.gemPortID, //same as EntityID, see above
-					"InterworkingOption":                   5,                        //fixed model:: G.998 .1pMapper
-					"ServiceProfilePointer":                oFsm.mapperSP0ID,
-					"InterworkingTerminationPointPointer":  0, //not used with .1PMapper Mac bridge
-					"GalProfilePointer":                    cmn.GalEthernetEID,
+					me.GemInterworkingTerminationPoint_GemPortNetworkCtpConnectivityPointer: gemPortAttribs.gemPortID, //same as EntityID, see above
+					me.GemInterworkingTerminationPoint_InterworkingOption:                   5,                        //fixed model:: G.998 .1pMapper
+					me.GemInterworkingTerminationPoint_ServiceProfilePointer:                oFsm.mapperSP0ID,
+					me.GemInterworkingTerminationPoint_InterworkingTerminationPointPointer:  0, //not used with .1PMapper Mac bridge
+					me.GemInterworkingTerminationPoint_GalProfilePointer:                    cmn.GalEthernetEID,
 				},
 			}
 			oFsm.mutexPLastTxMeInstance.Lock()
@@ -1705,15 +1705,15 @@
 				logger.Debugw(ctx, "uniPonAniConfigFsm Tx Set::PrioQueue to StrictPrio", log.Fields{
 					"EntitytId": strconv.FormatInt(int64(queueIndex), 16),
 					"device-id": oFsm.deviceID})
-				meParams.Attributes["TrafficSchedulerPointer"] = 0 //ensure T-Cont defined StrictPrio scheduling
+				meParams.Attributes[me.PriorityQueue_TrafficSchedulerPointer] = 0 //ensure T-Cont defined StrictPrio scheduling
 			} else {
 				//WRR indication
 				logger.Debugw(ctx, "uniPonAniConfigFsm Tx Set::PrioQueue to WRR", log.Fields{
 					"EntitytId": strconv.FormatInt(int64(queueIndex), 16),
 					"Weight":    kv.Value,
 					"device-id": oFsm.deviceID})
-				meParams.Attributes["TrafficSchedulerPointer"] = loTrafficSchedulerEID //ensure assignment of the relevant trafficScheduler
-				meParams.Attributes["Weight"] = uint8(kv.Value.(uint16))
+				meParams.Attributes[me.PriorityQueue_TrafficSchedulerPointer] = loTrafficSchedulerEID //ensure assignment of the relevant trafficScheduler
+				meParams.Attributes[me.PriorityQueue_Weight] = uint8(kv.Value.(uint16))
 			}
 		} else {
 			// setting Traffic Scheduler (TS) pointer is not supported unless we point to another TS that points to the same TCONT.
@@ -1730,7 +1730,7 @@
 				"EntitytId": strconv.FormatInt(int64(queueIndex), 16),
 				"Weight":    kv.Value,
 				"device-id": oFsm.deviceID})
-			meParams.Attributes["Weight"] = uint8(kv.Value.(uint16))
+			meParams.Attributes[me.PriorityQueue_Weight] = uint8(kv.Value.(uint16))
 		}
 		oFsm.mutexPLastTxMeInstance.Lock()
 		meInstance, err := oFsm.pOmciCC.SendSetPrioQueueVar(log.WithSpanFromContext(context.TODO(), ctx), oFsm.pDeviceHandler.GetOmciTimeout(), true,
diff --git a/internal/pkg/avcfg/omci_vlan_config.go b/internal/pkg/avcfg/omci_vlan_config.go
index e97b0be..dd066b7 100755
--- a/internal/pkg/avcfg/omci_vlan_config.go
+++ b/internal/pkg/avcfg/omci_vlan_config.go
@@ -1215,9 +1215,9 @@
 		meParams := me.ParamData{
 			EntityID: vtfdID,
 			Attributes: me.AttributeValueMap{
-				"VlanFilterList":   vtfdFilterList, //omci lib wants a slice for serialization
-				"ForwardOperation": uint8(0x10),    //VID investigation
-				"NumberOfEntries":  oFsm.numVlanFilterEntries,
+				me.VlanTaggingFilterData_VlanFilterList:   vtfdFilterList, //omci lib wants a slice for serialization
+				me.VlanTaggingFilterData_ForwardOperation: uint8(0x10),    //VID investigation
+				me.VlanTaggingFilterData_NumberOfEntries:  oFsm.numVlanFilterEntries,
 			},
 		}
 		logger.Debugw(ctx, "UniVlanConfigFsm sendcreate VTFD", log.Fields{
@@ -1448,9 +1448,9 @@
 			meParams := me.ParamData{
 				EntityID: vtfdID,
 				Attributes: me.AttributeValueMap{
-					"VlanFilterList":   vtfdFilterList,
-					"ForwardOperation": uint8(0x10), //VID investigation
-					"NumberOfEntries":  oFsm.numVlanFilterEntries,
+					me.VlanTaggingFilterData_VlanFilterList:   vtfdFilterList,
+					me.VlanTaggingFilterData_ForwardOperation: uint8(0x10), //VID investigation
+					me.VlanTaggingFilterData_NumberOfEntries:  oFsm.numVlanFilterEntries,
 				},
 			}
 			oFsm.mutexPLastTxMeInstance.Lock()
@@ -1499,9 +1499,9 @@
 			meParams := me.ParamData{
 				EntityID: vtfdID,
 				Attributes: me.AttributeValueMap{
-					"VlanFilterList":   vtfdFilterList,
-					"ForwardOperation": uint8(0x10), //VID investigation
-					"NumberOfEntries":  oFsm.numVlanFilterEntries,
+					me.VlanTaggingFilterData_VlanFilterList:   vtfdFilterList,
+					me.VlanTaggingFilterData_ForwardOperation: uint8(0x10), //VID investigation
+					me.VlanTaggingFilterData_NumberOfEntries:  oFsm.numVlanFilterEntries,
 				},
 			}
 			oFsm.mutexPLastTxMeInstance.Lock()
@@ -2166,8 +2166,8 @@
 		meParams := me.ParamData{
 			EntityID: evtocdID,
 			Attributes: me.AttributeValueMap{
-				"AssociationType":     uint8(associationType),
-				"AssociatedMePointer": oFsm.pOnuUniPort.EntityID,
+				me.ExtendedVlanTaggingOperationConfigurationData_AssociationType:     uint8(associationType),
+				me.ExtendedVlanTaggingOperationConfigurationData_AssociatedMePointer: oFsm.pOnuUniPort.EntityID,
 			},
 		}
 		oFsm.mutexPLastTxMeInstance.Lock()
@@ -2198,9 +2198,9 @@
 		meParams = me.ParamData{
 			EntityID: evtocdID,
 			Attributes: me.AttributeValueMap{
-				"InputTpid":      uint16(cDefaultTpid), //could be possibly retrieved from flow config one day, by now just like py-code base
-				"OutputTpid":     uint16(cDefaultTpid), //could be possibly retrieved from flow config one day, by now just like py-code base
-				"DownstreamMode": uint8(cDefaultDownstreamMode),
+				me.ExtendedVlanTaggingOperationConfigurationData_InputTpid:      uint16(cDefaultTpid), //could be possibly retrieved from flow config one day, by now just like py-code base
+				me.ExtendedVlanTaggingOperationConfigurationData_OutputTpid:     uint16(cDefaultTpid), //could be possibly retrieved from flow config one day, by now just like py-code base
+				me.ExtendedVlanTaggingOperationConfigurationData_DownstreamMode: uint8(cDefaultDownstreamMode),
 			},
 		}
 		oFsm.mutexPLastTxMeInstance.Lock()
@@ -2262,7 +2262,7 @@
 		meParams := me.ParamData{
 			EntityID: evtocdID,
 			Attributes: me.AttributeValueMap{
-				"ReceivedFrameVlanTaggingOperationTable": sliceEvtocdRule,
+				me.ExtendedVlanTaggingOperationConfigurationData_ReceivedFrameVlanTaggingOperationTable: sliceEvtocdRule,
 			},
 		}
 		oFsm.mutexPLastTxMeInstance.Lock()
@@ -2328,7 +2328,7 @@
 			meParams := me.ParamData{
 				EntityID: evtocdID,
 				Attributes: me.AttributeValueMap{
-					"ReceivedFrameVlanTaggingOperationTable": sliceEvtocdRule,
+					me.ExtendedVlanTaggingOperationConfigurationData_ReceivedFrameVlanTaggingOperationTable: sliceEvtocdRule,
 				},
 			}
 			oFsm.mutexPLastTxMeInstance.Lock()
@@ -2390,7 +2390,7 @@
 				meParams := me.ParamData{
 					EntityID: evtocdID,
 					Attributes: me.AttributeValueMap{
-						"ReceivedFrameVlanTaggingOperationTable": sliceEvtocdRule,
+						me.ExtendedVlanTaggingOperationConfigurationData_ReceivedFrameVlanTaggingOperationTable: sliceEvtocdRule,
 					},
 				}
 				oFsm.mutexPLastTxMeInstance.Lock()
@@ -2453,7 +2453,7 @@
 				meParams := me.ParamData{
 					EntityID: evtocdID,
 					Attributes: me.AttributeValueMap{
-						"ReceivedFrameVlanTaggingOperationTable": sliceEvtocdRule,
+						me.ExtendedVlanTaggingOperationConfigurationData_ReceivedFrameVlanTaggingOperationTable: sliceEvtocdRule,
 					},
 				}
 				oFsm.mutexPLastTxMeInstance.Lock()
@@ -2532,7 +2532,7 @@
 		meParams := me.ParamData{
 			EntityID: evtocdID,
 			Attributes: me.AttributeValueMap{
-				"ReceivedFrameVlanTaggingOperationTable": sliceEvtocdRule,
+				me.ExtendedVlanTaggingOperationConfigurationData_ReceivedFrameVlanTaggingOperationTable: sliceEvtocdRule,
 			},
 		}
 		oFsm.mutexPLastTxMeInstance.Lock()
@@ -2587,7 +2587,7 @@
 			meParams := me.ParamData{
 				EntityID: evtocdID,
 				Attributes: me.AttributeValueMap{
-					"ReceivedFrameVlanTaggingOperationTable": sliceEvtocdRule,
+					me.ExtendedVlanTaggingOperationConfigurationData_ReceivedFrameVlanTaggingOperationTable: sliceEvtocdRule,
 				},
 			}
 			oFsm.mutexPLastTxMeInstance.Lock()
@@ -2699,7 +2699,7 @@
 					meParams := me.ParamData{
 						EntityID: evtocdID,
 						Attributes: me.AttributeValueMap{
-							"ReceivedFrameVlanTaggingOperationTable": sliceEvtocdRule,
+							me.ExtendedVlanTaggingOperationConfigurationData_ReceivedFrameVlanTaggingOperationTable: sliceEvtocdRule,
 						},
 					}
 					oFsm.mutexPLastTxMeInstance.Lock()
@@ -2751,7 +2751,7 @@
 					meParams := me.ParamData{
 						EntityID: evtocdID,
 						Attributes: me.AttributeValueMap{
-							"ReceivedFrameVlanTaggingOperationTable": sliceEvtocdRule,
+							me.ExtendedVlanTaggingOperationConfigurationData_ReceivedFrameVlanTaggingOperationTable: sliceEvtocdRule,
 						},
 					}
 					oFsm.mutexPLastTxMeInstance.Lock()
@@ -2864,10 +2864,10 @@
 	meParams := me.ParamData{
 		EntityID: macBpCdEID,
 		Attributes: me.AttributeValueMap{
-			"BridgeIdPointer": cmn.MacBridgeServiceProfileEID + uint16(oFsm.pOnuUniPort.MacBpNo),
-			"PortNum":         0xf0, //fixed unique ANI side indication
-			"TpType":          6,    //MCGemIWTP
-			"TpPointer":       multicastGemPortID,
+			me.MacBridgePortConfigurationData_BridgeIdPointer: cmn.MacBridgeServiceProfileEID + uint16(oFsm.pOnuUniPort.MacBpNo),
+			me.MacBridgePortConfigurationData_PortNum:         0xf0, //fixed unique ANI side indication
+			me.MacBridgePortConfigurationData_TpType:          6,    //MCGemIWTP
+			me.MacBridgePortConfigurationData_TpPointer:       multicastGemPortID,
 		},
 	}
 	oFsm.mutexPLastTxMeInstance.Lock()
@@ -2911,9 +2911,9 @@
 	meParams = me.ParamData{
 		EntityID: mcastVtfdID,
 		Attributes: me.AttributeValueMap{
-			"VlanFilterList":   vtfdFilterList,
-			"ForwardOperation": uint8(0x10), //VID investigation
-			"NumberOfEntries":  oFsm.numVlanFilterEntries,
+			me.VlanTaggingFilterData_VlanFilterList:   vtfdFilterList,
+			me.VlanTaggingFilterData_ForwardOperation: uint8(0x10), //VID investigation
+			me.VlanTaggingFilterData_NumberOfEntries:  oFsm.numVlanFilterEntries,
 		},
 	}
 	oFsm.mutexPLastTxMeInstance.Lock()
@@ -2951,7 +2951,7 @@
 	meParams := me.ParamData{
 		EntityID: instID,
 		Attributes: me.AttributeValueMap{
-			"MeType": 0,
+			me.MulticastSubscriberConfigInfo_MeType: 0,
 			//Direct reference to the Operation profile
 			//TODO ANI side used on UNI side, not the clearest option.
 			"MulticastOperationsProfilePointer": instID,
@@ -2995,17 +2995,17 @@
 	meParams := me.ParamData{
 		EntityID: instID,
 		Attributes: me.AttributeValueMap{
-			"IgmpVersion":  2,
-			"IgmpFunction": 0,
+			me.MulticastOperationsProfile_IgmpVersion:  2,
+			me.MulticastOperationsProfile_IgmpFunction: 0,
 			//0 means false
-			"ImmediateLeave":          0,
-			"Robustness":              2,
-			"QuerierIpAddress":        0,
-			"QueryInterval":           125,
-			"QueryMaxResponseTime":    100,
-			"LastMemberQueryInterval": 10,
+			me.MulticastOperationsProfile_ImmediateLeave:          0,
+			me.MulticastOperationsProfile_Robustness:              2,
+			me.MulticastOperationsProfile_QuerierIpAddress:        0,
+			me.MulticastOperationsProfile_QueryInterval:           125,
+			me.MulticastOperationsProfile_QueryMaxResponseTime:    100,
+			me.MulticastOperationsProfile_LastMemberQueryInterval: 10,
 			//0 means false
-			"UnauthorizedJoinRequestBehaviour": 0,
+			me.MulticastOperationsProfile_UnauthorizedJoinRequestBehaviour: 0,
 		},
 	}
 	oFsm.mutexPLastTxMeInstance.Lock()
@@ -3070,7 +3070,7 @@
 	meParams := me.ParamData{
 		EntityID: instID,
 		Attributes: me.AttributeValueMap{
-			"DynamicAccessControlListTable": dynamicAccessCL,
+			me.MulticastOperationsProfile_DynamicAccessControlListTable: dynamicAccessCL,
 		},
 	}
 	oFsm.mutexPLastTxMeInstance.Lock()
@@ -3122,14 +3122,14 @@
 	meParams := me.ParamData{
 		EntityID: trafficDescriptorID,
 		Attributes: me.AttributeValueMap{
-			"Cir":                  cir,
-			"Pir":                  pir,
-			"Cbs":                  cbs,
-			"Pbs":                  pbs,
-			"ColourMode":           1,
-			"IngressColourMarking": 3,
-			"EgressColourMarking":  3,
-			"MeterType":            1,
+			me.TrafficDescriptor_Cir:                  cir,
+			me.TrafficDescriptor_Pir:                  pir,
+			me.TrafficDescriptor_Cbs:                  cbs,
+			me.TrafficDescriptor_Pbs:                  pbs,
+			me.TrafficDescriptor_ColourMode:           1,
+			me.TrafficDescriptor_IngressColourMarking: 3,
+			me.TrafficDescriptor_EgressColourMarking:  3,
+			me.TrafficDescriptor_MeterType:            1,
 		},
 	}
 	oFsm.mutexPLastTxMeInstance.Lock()
@@ -3165,7 +3165,7 @@
 	meParams := me.ParamData{
 		EntityID: gemPortEntityID,
 		Attributes: me.AttributeValueMap{
-			"TrafficDescriptorProfilePointerForUpstream": trafficDescriptorEntityID,
+			me.GemPortNetworkCtp_TrafficDescriptorProfilePointerForUpstream: trafficDescriptorEntityID,
 		},
 	}
 	oFsm.mutexPLastTxMeInstance.Lock()
diff --git a/internal/pkg/common/omci_cc.go b/internal/pkg/common/omci_cc.go
index 57bc0ce..45c536d 100755
--- a/internal/pkg/common/omci_cc.go
+++ b/internal/pkg/common/omci_cc.go
@@ -891,7 +891,7 @@
 
 	meParams := me.ParamData{
 		EntityID:   GalEthernetEID,
-		Attributes: me.AttributeValueMap{"MaximumGemPayloadSize": maxGemPayloadSize},
+		Attributes: me.AttributeValueMap{me.GalEthernetProfile_MaximumGemPayloadSize: maxGemPayloadSize},
 	}
 	meInstance, omciErr := me.NewGalEthernetProfile(meParams)
 	if omciErr.GetError() == nil {
@@ -941,7 +941,7 @@
 	// read ONU-2G from DB ???? //TODO!!!
 	meParams := me.ParamData{
 		EntityID:   0,
-		Attributes: me.AttributeValueMap{"CurrentConnectivityMode": connectivityModeValue},
+		Attributes: me.AttributeValueMap{me.Onu2G_CurrentConnectivityMode: connectivityModeValue},
 	}
 	meInstance, omciErr := me.NewOnu2G(meParams)
 	if omciErr.GetError() == nil {
@@ -988,11 +988,11 @@
 	meParams := me.ParamData{
 		EntityID: instID,
 		Attributes: me.AttributeValueMap{
-			"Priority":                   0x8000,
-			"MaxAge":                     20 * 256, //20s
-			"HelloTime":                  2 * 256,  //2s
-			"ForwardDelay":               15 * 256, //15s
-			"DynamicFilteringAgeingTime": 0,
+			me.MacBridgeServiceProfile_Priority:                   0x8000,
+			me.MacBridgeServiceProfile_MaxAge:                     20 * 256, //20s
+			me.MacBridgeServiceProfile_HelloTime:                  2 * 256,  //2s
+			me.MacBridgeServiceProfile_ForwardDelay:               15 * 256, //15s
+			me.MacBridgeServiceProfile_DynamicFilteringAgeingTime: 0,
 		},
 	}
 
@@ -1048,10 +1048,10 @@
 	meParams := me.ParamData{
 		EntityID: instID,
 		Attributes: me.AttributeValueMap{
-			"BridgeIdPointer": MacBridgeServiceProfileEID + uint16(aPUniPort.MacBpNo),
-			"PortNum":         aPUniPort.MacBpNo,
-			"TpType":          uint8(aPUniPort.PortType),
-			"TpPointer":       aPUniPort.EntityID,
+			me.MacBridgePortConfigurationData_BridgeIdPointer: MacBridgeServiceProfileEID + uint16(aPUniPort.MacBpNo),
+			me.MacBridgePortConfigurationData_PortNum:         aPUniPort.MacBpNo,
+			me.MacBridgePortConfigurationData_TpType:          uint8(aPUniPort.PortType),
+			me.MacBridgePortConfigurationData_TpPointer:       aPUniPort.EntityID,
 		},
 	}
 	meInstance, omciErr := me.NewMacBridgePortConfigurationData(meParams)
@@ -1109,8 +1109,8 @@
 	meParams := me.ParamData{
 		EntityID: instID,
 		Attributes: me.AttributeValueMap{
-			"AssociationType":     assType,
-			"AssociatedMePointer": aPUniPort.EntityID,
+			me.ExtendedVlanTaggingOperationConfigurationData_AssociationType:     assType,
+			me.ExtendedVlanTaggingOperationConfigurationData_AssociatedMePointer: aPUniPort.EntityID,
 			//EnhancedMode not yet supported, used with default options
 		},
 	}
@@ -1422,15 +1422,15 @@
 		EntityID: aInstID,
 		Attributes: me.AttributeValueMap{
 			//workaround for unsuitable omci-lib default values, cmp VOL-3729
-			"TpPointer":                          0xFFFF,
-			"InterworkTpPointerForPBitPriority0": 0xFFFF,
-			"InterworkTpPointerForPBitPriority1": 0xFFFF,
-			"InterworkTpPointerForPBitPriority2": 0xFFFF,
-			"InterworkTpPointerForPBitPriority3": 0xFFFF,
-			"InterworkTpPointerForPBitPriority4": 0xFFFF,
-			"InterworkTpPointerForPBitPriority5": 0xFFFF,
-			"InterworkTpPointerForPBitPriority6": 0xFFFF,
-			"InterworkTpPointerForPBitPriority7": 0xFFFF,
+			me.Ieee8021PMapperServiceProfile_TpPointer:                          0xFFFF,
+			me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority0: 0xFFFF,
+			me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority1: 0xFFFF,
+			me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority2: 0xFFFF,
+			me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority3: 0xFFFF,
+			me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority4: 0xFFFF,
+			me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority5: 0xFFFF,
+			me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority6: 0xFFFF,
+			me.Ieee8021PMapperServiceProfile_InterworkTpPointerForPBitPriority7: 0xFFFF,
 		},
 	}
 	meInstance, omciErr := me.NewIeee8021PMapperServiceProfile(meParams)
@@ -4552,7 +4552,7 @@
 		"SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(entityID), 16), "create": create, "upstream": upstream})
 
 	meParam := me.ParamData{EntityID: entityID,
-		Attributes: me.AttributeValueMap{"ControlBlock": controlBlock},
+		Attributes: me.AttributeValueMap{me.EthernetFrameExtendedPm_ControlBlock: controlBlock},
 	}
 	var meInstance *me.ManagedEntity
 	var omciErr me.OmciErrors
@@ -4633,7 +4633,7 @@
 		"SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(entityID), 16)})
 
 	meParams := me.ParamData{EntityID: entityID,
-		Attributes: me.AttributeValueMap{"ControlBlock": controlBlock},
+		Attributes: me.AttributeValueMap{me.EthernetFrameExtendedPm_ControlBlock: controlBlock},
 	}
 	var meInstance *me.ManagedEntity
 	var omciErr me.OmciErrors
diff --git a/internal/pkg/mib/mib_sync.go b/internal/pkg/mib/mib_sync.go
index 5222b8b..9b8196b 100755
--- a/internal/pkg/mib/mib_sync.go
+++ b/internal/pkg/mib/mib_sync.go
@@ -97,7 +97,7 @@
 
 func (oo *OnuDeviceEntry) enterGettingVendorAndSerialState(ctx context.Context, e *fsm.Event) {
 	logger.Debugw(ctx, "MibSync FSM", log.Fields{"Start getting VendorId and SerialNumber in State": e.FSM.Current(), "device-id": oo.deviceID})
-	requestedAttributes := me.AttributeValueMap{"VendorId": "", "SerialNumber": 0}
+	requestedAttributes := me.AttributeValueMap{me.OnuG_VendorId: "", me.OnuG_SerialNumber: 0}
 	oo.mutexLastTxParamStruct.Lock()
 	meInstance, err := oo.PDevOmciCC.SendGetMe(log.WithSpanFromContext(context.TODO(), ctx), me.OnuGClassID, cmn.OnugMeID, requestedAttributes, oo.baseDeviceHandler.GetOmciTimeout(), true, oo.PMibUploadFsm.CommChan)
 	//accept also nil as (error) return value for writing to LastTx
@@ -120,7 +120,7 @@
 
 func (oo *OnuDeviceEntry) enterGettingEquipmentIDState(ctx context.Context, e *fsm.Event) {
 	logger.Debugw(ctx, "MibSync FSM", log.Fields{"Start getting EquipmentId in State": e.FSM.Current(), "device-id": oo.deviceID})
-	requestedAttributes := me.AttributeValueMap{"EquipmentId": ""}
+	requestedAttributes := me.AttributeValueMap{me.Onu2G_EquipmentId: ""}
 	oo.mutexLastTxParamStruct.Lock()
 	meInstance, err := oo.PDevOmciCC.SendGetMe(log.WithSpanFromContext(context.TODO(), ctx), me.Onu2GClassID, cmn.Onu2gMeID, requestedAttributes, oo.baseDeviceHandler.GetOmciTimeout(), true, oo.PMibUploadFsm.CommChan)
 	//accept also nil as (error) return value for writing to LastTx
@@ -143,7 +143,7 @@
 
 func (oo *OnuDeviceEntry) enterGettingFirstSwVersionState(ctx context.Context, e *fsm.Event) {
 	logger.Debugw(ctx, "MibSync FSM", log.Fields{"Start getting IsActive and Version of first SW-image in State": e.FSM.Current(), "device-id": oo.deviceID})
-	requestedAttributes := me.AttributeValueMap{"IsCommitted": 0, "IsActive": 0, "Version": ""}
+	requestedAttributes := me.AttributeValueMap{me.SoftwareImage_IsCommitted: 0, me.SoftwareImage_IsActive: 0, me.SoftwareImage_Version: ""}
 	oo.mutexLastTxParamStruct.Lock()
 	meInstance, err := oo.PDevOmciCC.SendGetMe(log.WithSpanFromContext(context.TODO(), ctx), me.SoftwareImageClassID, cmn.FirstSwImageMeID, requestedAttributes, oo.baseDeviceHandler.GetOmciTimeout(), true, oo.PMibUploadFsm.CommChan)
 	//accept also nil as (error) return value for writing to LastTx
@@ -166,7 +166,7 @@
 
 func (oo *OnuDeviceEntry) enterGettingSecondSwVersionState(ctx context.Context, e *fsm.Event) {
 	logger.Debugw(ctx, "MibSync FSM", log.Fields{"Start getting IsActive and Version of second SW-image in State": e.FSM.Current(), "device-id": oo.deviceID})
-	requestedAttributes := me.AttributeValueMap{"IsCommitted": 0, "IsActive": 0, "Version": ""}
+	requestedAttributes := me.AttributeValueMap{me.SoftwareImage_IsCommitted: 0, me.SoftwareImage_IsActive: 0, me.SoftwareImage_Version: ""}
 	oo.mutexLastTxParamStruct.Lock()
 	meInstance, err := oo.PDevOmciCC.SendGetMe(log.WithSpanFromContext(context.TODO(), ctx), me.SoftwareImageClassID, cmn.SecondSwImageMeID, requestedAttributes, oo.baseDeviceHandler.GetOmciTimeout(), true, oo.PMibUploadFsm.CommChan)
 	//accept also nil as (error) return value for writing to LastTx
@@ -189,7 +189,7 @@
 
 func (oo *OnuDeviceEntry) enterGettingMacAddressState(ctx context.Context, e *fsm.Event) {
 	logger.Debugw(ctx, "MibSync FSM", log.Fields{"Start getting MacAddress in State": e.FSM.Current(), "device-id": oo.deviceID})
-	requestedAttributes := me.AttributeValueMap{"MacAddress": ""}
+	requestedAttributes := me.AttributeValueMap{me.IpHostConfigData_MacAddress: ""}
 	oo.mutexLastTxParamStruct.Lock()
 	meInstance, err := oo.PDevOmciCC.SendGetMe(log.WithSpanFromContext(context.TODO(), ctx), me.IpHostConfigDataClassID, cmn.IPHostConfigDataMeID, requestedAttributes, oo.baseDeviceHandler.GetOmciTimeout(), true, oo.PMibUploadFsm.CommChan)
 	//accept also nil as (error) return value for writing to LastTx
@@ -550,7 +550,7 @@
 		oo.mutexLastTxParamStruct.Lock()
 		if oo.lastTxParamStruct.lastTxMessageType == omci.GetRequestType && oo.lastTxParamStruct.repeatCount == 0 {
 			logger.Debugw(ctx, "MibSync FSM - repeat MdsGetRequest (updated SequenceNumber)", log.Fields{"device-id": oo.deviceID})
-			requestedAttributes := me.AttributeValueMap{"MibDataSync": ""}
+			requestedAttributes := me.AttributeValueMap{me.OnuData_MibDataSync: ""}
 			_, err := oo.PDevOmciCC.SendGetMe(log.WithSpanFromContext(context.TODO(), ctx),
 				me.OnuDataClassID, cmn.OnuDataMeID, requestedAttributes, oo.baseDeviceHandler.GetOmciTimeout(), true, oo.PMibUploadFsm.CommChan)
 			if err != nil {
@@ -721,8 +721,8 @@
 			case "OnuG":
 				oo.mutexLastTxParamStruct.RUnlock()
 				oo.MutexPersOnuConfig.Lock()
-				oo.SOnuPersistentData.PersVendorID = cmn.TrimStringFromMeOctet(meAttributes["VendorId"])
-				snBytes, _ := me.InterfaceToOctets(meAttributes["SerialNumber"])
+				oo.SOnuPersistentData.PersVendorID = cmn.TrimStringFromMeOctet(meAttributes[me.OnuG_VendorId])
+				snBytes, _ := me.InterfaceToOctets(meAttributes[me.OnuG_SerialNumber])
 				if cmn.OnugSerialNumberLen == len(snBytes) {
 					snVendorPart := fmt.Sprintf("%s", snBytes[:4])
 					snNumberPart := hex.EncodeToString(snBytes[4:])
@@ -740,7 +740,7 @@
 			case "Onu2G":
 				oo.mutexLastTxParamStruct.RUnlock()
 				oo.MutexPersOnuConfig.Lock()
-				oo.SOnuPersistentData.PersEquipmentID = cmn.TrimStringFromMeOctet(meAttributes["EquipmentId"])
+				oo.SOnuPersistentData.PersEquipmentID = cmn.TrimStringFromMeOctet(meAttributes[me.Onu2G_EquipmentId])
 				logger.Debugw(ctx, "MibSync FSM - GetResponse Data for Onu2-G - EquipmentId", log.Fields{"device-id": oo.deviceID,
 					"onuDeviceEntry.equipmentID": oo.SOnuPersistentData.PersEquipmentID})
 				oo.MutexPersOnuConfig.Unlock()
@@ -760,7 +760,7 @@
 				return nil
 			case "IpHostConfigData":
 				oo.mutexLastTxParamStruct.RUnlock()
-				macBytes, _ := me.InterfaceToOctets(meAttributes["MacAddress"])
+				macBytes, _ := me.InterfaceToOctets(meAttributes[me.IpHostConfigData_MacAddress])
 				oo.MutexPersOnuConfig.Lock()
 				if cmn.OmciMacAddressLen == len(macBytes) {
 					oo.SOnuPersistentData.PersMacAddress = hex.EncodeToString(macBytes[:])
@@ -776,7 +776,7 @@
 				return nil
 			case "OnuData":
 				oo.mutexLastTxParamStruct.RUnlock()
-				oo.checkMdsValue(ctx, meAttributes["MibDataSync"].(uint8))
+				oo.checkMdsValue(ctx, meAttributes[me.OnuData_MibDataSync].(uint8))
 				return nil
 			default:
 				oo.mutexLastTxParamStruct.RUnlock()
@@ -801,9 +801,9 @@
 
 //HandleSwImageIndications updates onuSwImageIndications with the ONU data just received
 func (oo *OnuDeviceEntry) HandleSwImageIndications(ctx context.Context, entityID uint16, meAttributes me.AttributeValueMap) {
-	imageIsCommitted := meAttributes["IsCommitted"].(uint8)
-	imageIsActive := meAttributes["IsActive"].(uint8)
-	imageVersion := cmn.TrimStringFromMeOctet(meAttributes["Version"])
+	imageIsCommitted := meAttributes[me.SoftwareImage_IsCommitted].(uint8)
+	imageIsActive := meAttributes[me.SoftwareImage_IsActive].(uint8)
+	imageVersion := cmn.TrimStringFromMeOctet(meAttributes[me.SoftwareImage_Version])
 	oo.MutexPersOnuConfig.RLock()
 	logger.Infow(ctx, "MibSync FSM - GetResponse Data for SoftwareImage",
 		log.Fields{"device-id": oo.deviceID, "entityID": entityID,
@@ -1042,7 +1042,7 @@
 
 func (oo *OnuDeviceEntry) requestMdsValue(ctx context.Context) {
 	logger.Debugw(ctx, "Request MDS value", log.Fields{"device-id": oo.deviceID})
-	requestedAttributes := me.AttributeValueMap{"MibDataSync": ""}
+	requestedAttributes := me.AttributeValueMap{me.OnuData_MibDataSync: ""}
 	meInstance, err := oo.PDevOmciCC.SendGetMe(log.WithSpanFromContext(context.TODO(), ctx),
 		me.OnuDataClassID, cmn.OnuDataMeID, requestedAttributes, oo.baseDeviceHandler.GetOmciTimeout(), true, oo.PMibUploadFsm.CommChan)
 	//accept also nil as (error) return value for writing to LastTx
diff --git a/internal/pkg/pmmgr/onu_metrics_manager.go b/internal/pkg/pmmgr/onu_metrics_manager.go
index 2ce6174..b67f455 100755
--- a/internal/pkg/pmmgr/onu_metrics_manager.go
+++ b/internal/pkg/pmmgr/onu_metrics_manager.go
@@ -74,20 +74,6 @@
 	ExtendedPmCreateAttempts            = 3
 	UnsupportedCounterValue32bit uint64 = 4294967294
 	UnsupportedCounterValue64bit uint64 = 18446744073709551614
-	dropEvents                          = "DropEvents"
-	octets                              = "Octets"
-	frames                              = "Frames"
-	broadcastFrames                     = "BroadcastFrames"
-	multicastFrames                     = "MulticastFrames"
-	crcErroredFrames                    = "CrcErroredFrames"
-	undersizeFrames                     = "UndersizeFrames"
-	oversizeFrames                      = "OversizeFrames"
-	frames64Octets                      = "Frames64Octets"
-	frames65To127Octets                 = "Frames65To127Octets"
-	frames128To255Octets                = "Frames128To255Octets"
-	frames256To511Octets                = "Frames256To511Octets"
-	frames512To1023Octets               = "Frames512To1023Octets"
-	frames1024To1518Octets              = "Frames1024To1518Octets"
 )
 
 // OpticalPowerGroupMetrics are supported optical pm names
@@ -760,7 +746,7 @@
 		var meAttributes me.AttributeValueMap
 		opticalMetrics := make(map[string]float32)
 		// Get the ANI-G instance optical power attributes
-		requestedAttributes := me.AttributeValueMap{"OpticalSignalLevel": 0, "TransmitOpticalLevel": 0}
+		requestedAttributes := me.AttributeValueMap{me.AniG_OpticalSignalLevel: 0, me.AniG_TransmitOpticalLevel: 0}
 		meInstance, err := mm.pOnuDeviceEntry.GetDevOmciCC().SendGetMe(ctx, me.AniGClassID, anigInstID, requestedAttributes, mm.pDeviceHandler.GetOmciTimeout(), true, mm.PAdaptFsm.CommChan)
 		if err != nil {
 			logger.Errorw(ctx, "GetMe failed, failure PM FSM!", log.Fields{"device-id": mm.deviceID})
@@ -781,15 +767,15 @@
 			for k := range OpticalPowerGroupMetrics {
 				switch k {
 				case "ani_g_instance_id":
-					if val, ok := meAttributes["ManagedEntityId"]; ok && val != nil {
+					if val, ok := meAttributes[me.ManagedEntityID]; ok && val != nil {
 						opticalMetrics[k] = float32(val.(uint16))
 					}
 				case "transmit_power_dBm":
-					if val, ok := meAttributes["TransmitOpticalLevel"]; ok && val != nil {
+					if val, ok := meAttributes[me.AniG_TransmitOpticalLevel]; ok && val != nil {
 						opticalMetrics[k] = float32(math.Round((float64(cmn.TwosComplementToSignedInt16(val.(uint16)))/500.0)*10) / 10) // convert to dBm rounded of to single decimal place
 					}
 				case "receive_power_dBm":
-					if val, ok := meAttributes["OpticalSignalLevel"]; ok && val != nil {
+					if val, ok := meAttributes[me.AniG_OpticalSignalLevel]; ok && val != nil {
 						opticalMetrics[k] = float32(math.Round((float64(cmn.TwosComplementToSignedInt16(val.(uint16)))/500.0)*10) / 10) // convert to dBm rounded of to single decimal place
 					}
 				default:
@@ -843,7 +829,7 @@
 		unigMetrics := make(map[string]float32)
 		var meAttributes me.AttributeValueMap
 		// Get the UNI-G instance optical power attributes
-		requestedAttributes := me.AttributeValueMap{"AdministrativeState": 0}
+		requestedAttributes := me.AttributeValueMap{me.UniG_AdministrativeState: 0}
 		meInstance, err := mm.pOnuDeviceEntry.GetDevOmciCC().SendGetMe(ctx, me.UniGClassID, unigInstID, requestedAttributes, mm.pDeviceHandler.GetOmciTimeout(), true, mm.PAdaptFsm.CommChan)
 		if err != nil {
 			logger.Errorw(ctx, "UNI-G failed, failure PM FSM!", log.Fields{"device-id": mm.deviceID})
@@ -864,14 +850,14 @@
 			for k := range UniStatusGroupMetrics {
 				switch k {
 				case "uni_admin_state":
-					if val, ok := meAttributes["AdministrativeState"]; ok && val != nil {
+					if val, ok := meAttributes[me.UniG_AdministrativeState]; ok && val != nil {
 						unigMetrics[k] = float32(val.(byte))
 					}
 				default:
 					// do nothing
 				}
 			}
-			if val, ok := meAttributes["ManagedEntityId"]; ok && val != nil {
+			if val, ok := meAttributes[me.ManagedEntityID]; ok && val != nil {
 				entityID := val.(uint16)
 				unigMetrics["entity_id"] = float32(entityID)
 				// TODO: Rlock needed for reading uniEntityMap? May not be needed given uniEntityMap is populated setup at initial ONU bring up
@@ -899,8 +885,12 @@
 		var meAttributes me.AttributeValueMap
 		pptpMetrics := make(map[string]float32)
 
-		requestedAttributes := me.AttributeValueMap{"ConfigurationInd": 0, "OperationalState": 0, "AdministrativeState": 0}
-		meInstance, err := mm.pOnuDeviceEntry.GetDevOmciCC().SendGetMe(ctx, me.PhysicalPathTerminationPointEthernetUniClassID, pptpInstID, requestedAttributes, mm.pDeviceHandler.GetOmciTimeout(), true, mm.PAdaptFsm.CommChan)
+		requestedAttributes := me.AttributeValueMap{
+			me.PhysicalPathTerminationPointEthernetUni_ConfigurationInd:    0,
+			me.PhysicalPathTerminationPointEthernetUni_OperationalState:    0,
+			me.PhysicalPathTerminationPointEthernetUni_AdministrativeState: 0}
+		meInstance, err := mm.pOnuDeviceEntry.GetDevOmciCC().SendGetMe(ctx, me.PhysicalPathTerminationPointEthernetUniClassID,
+			pptpInstID, requestedAttributes, mm.pDeviceHandler.GetOmciTimeout(), true, mm.PAdaptFsm.CommChan)
 		if err != nil {
 			logger.Errorw(ctx, "GetMe failed, failure PM FSM!", log.Fields{"device-id": mm.deviceID})
 			_ = mm.PAdaptFsm.PFsm.Event(L2PmEventFailure)
@@ -921,15 +911,15 @@
 			for k := range UniStatusGroupMetrics {
 				switch k {
 				case "configuration_ind":
-					if val, ok := meAttributes["ConfigurationInd"]; ok && val != nil {
+					if val, ok := meAttributes[me.PhysicalPathTerminationPointEthernetUni_ConfigurationInd]; ok && val != nil {
 						pptpMetrics[k] = float32(val.(byte))
 					}
 				case "oper_status":
-					if val, ok := meAttributes["OperationalState"]; ok && val != nil {
+					if val, ok := meAttributes[me.PhysicalPathTerminationPointEthernetUni_OperationalState]; ok && val != nil {
 						pptpMetrics[k] = float32(val.(byte))
 					}
 				case "uni_admin_state":
-					if val, ok := meAttributes["AdministrativeState"]; ok && val != nil {
+					if val, ok := meAttributes[me.PhysicalPathTerminationPointEthernetUni_AdministrativeState]; ok && val != nil {
 						pptpMetrics[k] = float32(val.(byte))
 					}
 				default:
@@ -937,7 +927,7 @@
 				}
 			}
 		}
-		if val, ok := meAttributes["ManagedEntityId"]; ok && val != nil {
+		if val, ok := meAttributes[me.ManagedEntityID]; ok && val != nil {
 			entityID := val.(uint16)
 			pptpMetrics["entity_id"] = float32(entityID)
 			// TODO: Rlock needed for reading uniEntityMap? May not be needed given uniEntityMap is populated setup at initial ONU bring up
@@ -964,7 +954,7 @@
 		var meAttributes me.AttributeValueMap
 		veipMetrics := make(map[string]float32)
 
-		requestedAttributes := me.AttributeValueMap{"OperationalState": 0, "AdministrativeState": 0}
+		requestedAttributes := me.AttributeValueMap{me.VirtualEthernetInterfacePoint_OperationalState: 0, me.VirtualEthernetInterfacePoint_AdministrativeState: 0}
 		meInstance, err := mm.pOnuDeviceEntry.GetDevOmciCC().SendGetMe(ctx, me.VirtualEthernetInterfacePointClassID, veipInstID, requestedAttributes, mm.pDeviceHandler.GetOmciTimeout(), true, mm.PAdaptFsm.CommChan)
 		if err != nil {
 			logger.Errorw(ctx, "GetMe failed, failure PM FSM!", log.Fields{"device-id": mm.deviceID})
@@ -986,11 +976,11 @@
 			for k := range UniStatusGroupMetrics {
 				switch k {
 				case "oper_status":
-					if val, ok := meAttributes["OperationalState"]; ok && val != nil {
+					if val, ok := meAttributes[me.VirtualEthernetInterfacePoint_OperationalState]; ok && val != nil {
 						veipMetrics[k] = float32(val.(byte))
 					}
 				case "uni_admin_state":
-					if val, ok := meAttributes["AdministrativeState"]; ok && val != nil {
+					if val, ok := meAttributes[me.VirtualEthernetInterfacePoint_AdministrativeState]; ok && val != nil {
 						veipMetrics[k] = float32(val.(byte))
 					}
 				default:
@@ -999,7 +989,7 @@
 			}
 		}
 
-		if val, ok := meAttributes["ManagedEntityId"]; ok && val != nil {
+		if val, ok := meAttributes[me.ManagedEntityID]; ok && val != nil {
 			entityID := val.(uint16)
 			veipMetrics["entity_id"] = float32(entityID)
 			// TODO: Rlock needed for reading uniEntityMap? May not be needed given uniEntityMap is populated setup at initial ONU bring up
@@ -1999,7 +1989,7 @@
 		upstream = true
 	}
 	// Insert "IntervalEndTime" as part of the requested attributes as we need this to compare the get responses when get request is multipart
-	requestedAttributes["IntervalEndTime"] = 0
+	requestedAttributes[me.EthernetFramePerformanceMonitoringHistoryDataUpstream_IntervalEndTime] = 0
 	meInstance, err := mm.pOnuDeviceEntry.GetDevOmciCC().SendGetMe(ctx, classID, entityID, requestedAttributes, mm.pDeviceHandler.GetOmciTimeout(), true, mm.PAdaptFsm.CommChan)
 	if err != nil {
 		logger.Errorw(ctx, "GetME failed, failure PM FSM!", log.Fields{"device-id": mm.deviceID})
@@ -2034,63 +2024,63 @@
 		if _, ok := ethPMHistData[k]; !ok {
 			switch k {
 			case "entity_id":
-				if val, ok := meAttributes["ManagedEntityId"]; ok && val != nil {
+				if val, ok := meAttributes[me.ManagedEntityID]; ok && val != nil {
 					ethPMHistData[k] = float32(val.(uint16))
 				}
 			case "drop_events":
-				if val, ok := meAttributes["DropEvents"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetFramePerformanceMonitoringHistoryDataUpstream_DropEvents]; ok && val != nil {
 					ethPMHistData[k] = float32(val.(uint32))
 				}
 			case "octets":
-				if val, ok := meAttributes["Octets"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Octets]; ok && val != nil {
 					ethPMHistData[k] = float32(val.(uint32))
 				}
 			case "packets":
-				if val, ok := meAttributes["Packets"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Packets]; ok && val != nil {
 					ethPMHistData[k] = float32(val.(uint32))
 				}
 			case "broadcast_packets":
-				if val, ok := meAttributes["BroadcastPackets"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetFramePerformanceMonitoringHistoryDataUpstream_BroadcastPackets]; ok && val != nil {
 					ethPMHistData[k] = float32(val.(uint32))
 				}
 			case "multicast_packets":
-				if val, ok := meAttributes["MulticastPackets"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetFramePerformanceMonitoringHistoryDataUpstream_MulticastPackets]; ok && val != nil {
 					ethPMHistData[k] = float32(val.(uint32))
 				}
 			case "crc_errored_packets":
-				if val, ok := meAttributes["CrcErroredPackets"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetFramePerformanceMonitoringHistoryDataUpstream_CrcErroredPackets]; ok && val != nil {
 					ethPMHistData[k] = float32(val.(uint32))
 				}
 			case "undersize_packets":
-				if val, ok := meAttributes["UndersizePackets"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetFramePerformanceMonitoringHistoryDataUpstream_UndersizePackets]; ok && val != nil {
 					ethPMHistData[k] = float32(val.(uint32))
 				}
 			case "oversize_packets":
-				if val, ok := meAttributes["OversizePackets"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetFramePerformanceMonitoringHistoryDataUpstream_OversizePackets]; ok && val != nil {
 					ethPMHistData[k] = float32(val.(uint32))
 				}
 			case "64_octets":
-				if val, ok := meAttributes["Packets64Octets"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Packets64Octets]; ok && val != nil {
 					ethPMHistData[k] = float32(val.(uint32))
 				}
 			case "65_to_127_octets":
-				if val, ok := meAttributes["Packets65To127Octets"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Packets65To127Octets]; ok && val != nil {
 					ethPMHistData[k] = float32(val.(uint32))
 				}
 			case "128_to_255_octets":
-				if val, ok := meAttributes["Packets128To255Octets"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Packets128To255Octets]; ok && val != nil {
 					ethPMHistData[k] = float32(val.(uint32))
 				}
 			case "256_to_511_octets":
-				if val, ok := meAttributes["Packets256To511Octets"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Packets256To511Octets]; ok && val != nil {
 					ethPMHistData[k] = float32(val.(uint32))
 				}
 			case "512_to_1023_octets":
-				if val, ok := meAttributes["Packets512To1023Octets"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Packets512To1023Octets]; ok && val != nil {
 					ethPMHistData[k] = float32(val.(uint32))
 				}
 			case "1024_to_1518_octets":
-				if val, ok := meAttributes["Packets1024To1518Octets"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetFramePerformanceMonitoringHistoryDataUpstream_Packets1024To1518Octets]; ok && val != nil {
 					ethPMHistData[k] = float32(val.(uint32))
 				}
 			default:
@@ -2136,63 +2126,63 @@
 		if _, ok := ethPMUniHistData[k]; !ok {
 			switch k {
 			case "entity_id":
-				if val, ok := meAttributes["ManagedEntityId"]; ok && val != nil {
+				if val, ok := meAttributes[me.ManagedEntityID]; ok && val != nil {
 					ethPMUniHistData[k] = float32(val.(uint16))
 				}
 			case "fcs_errors":
-				if val, ok := meAttributes["FcsErrors"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetPerformanceMonitoringHistoryData_FcsErrors]; ok && val != nil {
 					ethPMUniHistData[k] = float32(val.(uint32))
 				}
 			case "excessive_collision_counter":
-				if val, ok := meAttributes["ExcessiveCollisionCounter"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetPerformanceMonitoringHistoryData_ExcessiveCollisionCounter]; ok && val != nil {
 					ethPMUniHistData[k] = float32(val.(uint32))
 				}
 			case "late_collision_counter":
-				if val, ok := meAttributes["LateCollisionCounter"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetPerformanceMonitoringHistoryData_LateCollisionCounter]; ok && val != nil {
 					ethPMUniHistData[k] = float32(val.(uint32))
 				}
 			case "frames_too_long":
-				if val, ok := meAttributes["FramesTooLong"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetPerformanceMonitoringHistoryData_FramesTooLong]; ok && val != nil {
 					ethPMUniHistData[k] = float32(val.(uint32))
 				}
 			case "buffer_overflows_on_rx":
-				if val, ok := meAttributes["BufferOverflowsOnReceive"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetPerformanceMonitoringHistoryData_BufferOverflowsOnReceive]; ok && val != nil {
 					ethPMUniHistData[k] = float32(val.(uint32))
 				}
 			case "buffer_overflows_on_tx":
-				if val, ok := meAttributes["BufferOverflowsOnTransmit"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetPerformanceMonitoringHistoryData_BufferOverflowsOnTransmit]; ok && val != nil {
 					ethPMUniHistData[k] = float32(val.(uint32))
 				}
 			case "single_collision_frame_counter":
-				if val, ok := meAttributes["SingleCollisionFrameCounter"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetPerformanceMonitoringHistoryData_SingleCollisionFrameCounter]; ok && val != nil {
 					ethPMUniHistData[k] = float32(val.(uint32))
 				}
 			case "multiple_collisions_frame_counter":
-				if val, ok := meAttributes["MultipleCollisionsFrameCounter"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetPerformanceMonitoringHistoryData_MultipleCollisionsFrameCounter]; ok && val != nil {
 					ethPMUniHistData[k] = float32(val.(uint32))
 				}
 			case "sqe_counter":
-				if val, ok := meAttributes["SqeCounter"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetPerformanceMonitoringHistoryData_SqeCounter]; ok && val != nil {
 					ethPMUniHistData[k] = float32(val.(uint32))
 				}
 			case "deferred_tx_counter":
-				if val, ok := meAttributes["DeferredTransmissionCounter"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetPerformanceMonitoringHistoryData_DeferredTransmissionCounter]; ok && val != nil {
 					ethPMUniHistData[k] = float32(val.(uint32))
 				}
 			case "internal_mac_tx_error_counter":
-				if val, ok := meAttributes["InternalMacTransmitErrorCounter"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetPerformanceMonitoringHistoryData_InternalMacTransmitErrorCounter]; ok && val != nil {
 					ethPMUniHistData[k] = float32(val.(uint32))
 				}
 			case "carrier_sense_error_counter":
-				if val, ok := meAttributes["CarrierSenseErrorCounter"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetPerformanceMonitoringHistoryData_CarrierSenseErrorCounter]; ok && val != nil {
 					ethPMUniHistData[k] = float32(val.(uint32))
 				}
 			case "alignment_error_counter":
-				if val, ok := meAttributes["AlignmentErrorCounter"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetPerformanceMonitoringHistoryData_AlignmentErrorCounter]; ok && val != nil {
 					ethPMUniHistData[k] = float32(val.(uint32))
 				}
 			case "internal_mac_rx_error_counter":
-				if val, ok := meAttributes["InternalMacReceiveErrorCounter"]; ok && val != nil {
+				if val, ok := meAttributes[me.EthernetPerformanceMonitoringHistoryData_InternalMacReceiveErrorCounter]; ok && val != nil {
 					ethPMUniHistData[k] = float32(val.(uint32))
 				}
 			default:
@@ -2207,8 +2197,8 @@
 func (mm *OnuMetricsManager) populateFecHistoryMetrics(ctx context.Context, classID me.ClassID, entityID uint16,
 	meAttributes me.AttributeValueMap, requestedAttributes me.AttributeValueMap, fecHistData map[string]float32, intervalEndTime *int) error {
 	// Insert "IntervalEndTime" as part of the requested attributes as we need this to compare the get responses when get request is multipart
-	if _, ok := requestedAttributes["IntervalEndTime"]; !ok {
-		requestedAttributes["IntervalEndTime"] = 0
+	if _, ok := requestedAttributes[me.FecPerformanceMonitoringHistoryData_IntervalEndTime]; !ok {
+		requestedAttributes[me.FecPerformanceMonitoringHistoryData_IntervalEndTime] = 0
 	}
 	meInstance, err := mm.pOnuDeviceEntry.GetDevOmciCC().SendGetMe(ctx, classID, entityID, requestedAttributes, mm.pDeviceHandler.GetOmciTimeout(), true, mm.PAdaptFsm.CommChan)
 	if err != nil {
@@ -2238,27 +2228,27 @@
 		if _, ok := fecHistData[k]; !ok {
 			switch k {
 			case "entity_id":
-				if val, ok := meAttributes["ManagedEntityId"]; ok && val != nil {
+				if val, ok := meAttributes[me.ManagedEntityID]; ok && val != nil {
 					fecHistData[k] = float32(val.(uint16))
 				}
 			case "corrected_bytes":
-				if val, ok := meAttributes["CorrectedBytes"]; ok && val != nil {
+				if val, ok := meAttributes[me.FecPerformanceMonitoringHistoryData_CorrectedBytes]; ok && val != nil {
 					fecHistData[k] = float32(val.(uint32))
 				}
 			case "corrected_code_words":
-				if val, ok := meAttributes["CorrectedCodeWords"]; ok && val != nil {
+				if val, ok := meAttributes[me.FecPerformanceMonitoringHistoryData_CorrectedCodeWords]; ok && val != nil {
 					fecHistData[k] = float32(val.(uint32))
 				}
 			case "uncorrectable_code_words":
-				if val, ok := meAttributes["UncorrectableCodeWords"]; ok && val != nil {
+				if val, ok := meAttributes[me.FecPerformanceMonitoringHistoryData_UncorrectableCodeWords]; ok && val != nil {
 					fecHistData[k] = float32(val.(uint32))
 				}
 			case "total_code_words":
-				if val, ok := meAttributes["TotalCodeWords"]; ok && val != nil {
+				if val, ok := meAttributes[me.FecPerformanceMonitoringHistoryData_TotalCodeWords]; ok && val != nil {
 					fecHistData[k] = float32(val.(uint32))
 				}
 			case "fec_seconds":
-				if val, ok := meAttributes["FecSeconds"]; ok && val != nil {
+				if val, ok := meAttributes[me.FecPerformanceMonitoringHistoryData_FecSeconds]; ok && val != nil {
 					fecHistData[k] = float32(val.(uint16))
 				}
 			default:
@@ -2273,8 +2263,8 @@
 func (mm *OnuMetricsManager) populateGemPortMetrics(ctx context.Context, classID me.ClassID, entityID uint16,
 	meAttributes me.AttributeValueMap, requestedAttributes me.AttributeValueMap, gemPortHistData map[string]float32, intervalEndTime *int) error {
 	// Insert "IntervalEndTime" is part of the requested attributes as we need this to compare the get responses when get request is multipart
-	if _, ok := requestedAttributes["IntervalEndTime"]; !ok {
-		requestedAttributes["IntervalEndTime"] = 0
+	if _, ok := requestedAttributes[me.GemPortNetworkCtpPerformanceMonitoringHistoryData_IntervalEndTime]; !ok {
+		requestedAttributes[me.GemPortNetworkCtpPerformanceMonitoringHistoryData_IntervalEndTime] = 0
 	}
 	meInstance, err := mm.pOnuDeviceEntry.GetDevOmciCC().SendGetMe(ctx, classID, entityID, requestedAttributes, mm.pDeviceHandler.GetOmciTimeout(), true, mm.PAdaptFsm.CommChan)
 	if err != nil {
@@ -2304,27 +2294,27 @@
 		if _, ok := gemPortHistData[k]; !ok {
 			switch k {
 			case "entity_id":
-				if val, ok := meAttributes["ManagedEntityId"]; ok && val != nil {
+				if val, ok := meAttributes[me.ManagedEntityID]; ok && val != nil {
 					gemPortHistData[k] = float32(val.(uint16))
 				}
 			case "transmitted_gem_frames":
-				if val, ok := meAttributes["TransmittedGemFrames"]; ok && val != nil {
+				if val, ok := meAttributes[me.GemPortNetworkCtpPerformanceMonitoringHistoryData_TransmittedGemFrames]; ok && val != nil {
 					gemPortHistData[k] = float32(val.(uint32))
 				}
 			case "received_gem_frames":
-				if val, ok := meAttributes["ReceivedGemFrames"]; ok && val != nil {
+				if val, ok := meAttributes[me.GemPortNetworkCtpPerformanceMonitoringHistoryData_ReceivedGemFrames]; ok && val != nil {
 					gemPortHistData[k] = float32(val.(uint32))
 				}
 			case "received_payload_bytes":
-				if val, ok := meAttributes["ReceivedPayloadBytes"]; ok && val != nil {
+				if val, ok := meAttributes[me.GemPortNetworkCtpPerformanceMonitoringHistoryData_ReceivedPayloadBytes]; ok && val != nil {
 					gemPortHistData[k] = float32(val.(uint64))
 				}
 			case "transmitted_payload_bytes":
-				if val, ok := meAttributes["TransmittedPayloadBytes"]; ok && val != nil {
+				if val, ok := meAttributes[me.GemPortNetworkCtpPerformanceMonitoringHistoryData_TransmittedPayloadBytes]; ok && val != nil {
 					gemPortHistData[k] = float32(val.(uint64))
 				}
 			case "encryption_key_errors":
-				if val, ok := meAttributes["EncryptionKeyErrors"]; ok && val != nil {
+				if val, ok := meAttributes[me.GemPortNetworkCtpPerformanceMonitoringHistoryData_EncryptionKeyErrors]; ok && val != nil {
 					gemPortHistData[k] = float32(val.(uint32))
 				}
 			default:
@@ -3476,42 +3466,42 @@
 			if _, ok := ethFrameExtPMData[k]; !ok {
 				switch k {
 				case "drop_events":
-					if val, ok := meAttributes[dropEvents]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm_DropEvents]; ok && val != nil {
 						ethFrameExtPMData[k] = uint64(val.(uint32))
 						receivedMask |= 0x2000
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue32bit
 					}
 				case "octets":
-					if val, ok := meAttributes[octets]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm_Octets]; ok && val != nil {
 						ethFrameExtPMData[k] = uint64(val.(uint32))
 						receivedMask |= 0x1000
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue32bit
 					}
 				case "frames":
-					if val, ok := meAttributes[frames]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm_Frames]; ok && val != nil {
 						ethFrameExtPMData[k] = uint64(val.(uint32))
 						receivedMask |= 0x800
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue32bit
 					}
 				case "broadcast_frames":
-					if val, ok := meAttributes[broadcastFrames]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm_BroadcastFrames]; ok && val != nil {
 						ethFrameExtPMData[k] = uint64(val.(uint32))
 						receivedMask |= 0x400
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue32bit
 					}
 				case "multicast_frames":
-					if val, ok := meAttributes[multicastFrames]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm_MulticastFrames]; ok && val != nil {
 						ethFrameExtPMData[k] = uint64(val.(uint32))
 						receivedMask |= 0x200
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue32bit
 					}
 				case "crc_errored_frames":
-					if val, ok := meAttributes[crcErroredFrames]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm_CrcErroredFrames]; ok && val != nil {
 						ethFrameExtPMData[k] = uint64(val.(uint32))
 						receivedMask |= 0x100
 					} else if !ok {
@@ -3527,42 +3517,42 @@
 			if _, ok := ethFrameExtPMData[k]; !ok {
 				switch k {
 				case "undersize_frames":
-					if val, ok := meAttributes[undersizeFrames]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm_UndersizeFrames]; ok && val != nil {
 						ethFrameExtPMData[k] = uint64(val.(uint32))
 						receivedMask |= 0x80
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue32bit
 					}
 				case "oversize_frames":
-					if val, ok := meAttributes[oversizeFrames]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm_OversizeFrames]; ok && val != nil {
 						ethFrameExtPMData[k] = uint64(val.(uint32))
 						receivedMask |= 0x40
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue32bit
 					}
 				case "64_octets":
-					if val, ok := meAttributes[frames64Octets]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm_Frames64Octets]; ok && val != nil {
 						ethFrameExtPMData[k] = uint64(val.(uint32))
 						receivedMask |= 0x20
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue32bit
 					}
 				case "65_to_127_octets":
-					if val, ok := meAttributes[frames65To127Octets]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm_Frames65To127Octets]; ok && val != nil {
 						ethFrameExtPMData[k] = uint64(val.(uint32))
 						receivedMask |= 0x10
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue32bit
 					}
 				case "128_to_255_octets":
-					if val, ok := meAttributes[frames128To255Octets]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm_Frames128To255Octets]; ok && val != nil {
 						ethFrameExtPMData[k] = uint64(val.(uint32))
 						receivedMask |= 0x8
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue32bit
 					}
 				case "256_to_511_octets":
-					if val, ok := meAttributes[frames256To511Octets]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm_Frames256To511Octets]; ok && val != nil {
 						ethFrameExtPMData[k] = uint64(val.(uint32))
 						receivedMask |= 0x4
 					} else if !ok {
@@ -3578,14 +3568,14 @@
 			if _, ok := ethFrameExtPMData[k]; !ok {
 				switch k {
 				case "512_to_1023_octets":
-					if val, ok := meAttributes[frames512To1023Octets]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm_Frames512To1023Octets]; ok && val != nil {
 						ethFrameExtPMData[k] = uint64(val.(uint32))
 						receivedMask |= 0x2
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue32bit
 					}
 				case "1024_to_1518_octets":
-					if val, ok := meAttributes[frames1024To1518Octets]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm_Frames1024To1518Octets]; ok && val != nil {
 						ethFrameExtPMData[k] = uint64(val.(uint32))
 						receivedMask |= 0x1
 					} else if !ok {
@@ -3611,21 +3601,21 @@
 			if _, ok := ethFrameExtPMData[k]; !ok {
 				switch k {
 				case "drop_events":
-					if val, ok := meAttributes[dropEvents]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm64Bit_DropEvents]; ok && val != nil {
 						ethFrameExtPMData[k] = val.(uint64)
 						receivedMask |= 0x2000
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue64bit
 					}
 				case "octets":
-					if val, ok := meAttributes[octets]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm64Bit_Octets]; ok && val != nil {
 						ethFrameExtPMData[k] = val.(uint64)
 						receivedMask |= 0x1000
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue64bit
 					}
 				case "frames":
-					if val, ok := meAttributes[frames]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm64Bit_Frames]; ok && val != nil {
 						ethFrameExtPMData[k] = val.(uint64)
 						receivedMask |= 0x800
 					} else if !ok {
@@ -3639,21 +3629,21 @@
 			if _, ok := ethFrameExtPMData[k]; !ok {
 				switch k {
 				case "broadcast_frames":
-					if val, ok := meAttributes[broadcastFrames]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm64Bit_BroadcastFrames]; ok && val != nil {
 						ethFrameExtPMData[k] = val.(uint64)
 						receivedMask |= 0x400
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue64bit
 					}
 				case "multicast_frames":
-					if val, ok := meAttributes[multicastFrames]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm64Bit_MulticastFrames]; ok && val != nil {
 						ethFrameExtPMData[k] = val.(uint64)
 						receivedMask |= 0x200
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue64bit
 					}
 				case "crc_errored_frames":
-					if val, ok := meAttributes[crcErroredFrames]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm64Bit_CrcErroredFrames]; ok && val != nil {
 						ethFrameExtPMData[k] = val.(uint64)
 						receivedMask |= 0x100
 					} else if !ok {
@@ -3667,21 +3657,21 @@
 			if _, ok := ethFrameExtPMData[k]; !ok {
 				switch k {
 				case "undersize_frames":
-					if val, ok := meAttributes[undersizeFrames]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm64Bit_UndersizeFrames]; ok && val != nil {
 						ethFrameExtPMData[k] = val.(uint64)
 						receivedMask |= 0x80
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue64bit
 					}
 				case "oversize_frames":
-					if val, ok := meAttributes[oversizeFrames]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm64Bit_OversizeFrames]; ok && val != nil {
 						ethFrameExtPMData[k] = val.(uint64)
 						receivedMask |= 0x40
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue64bit
 					}
 				case "64_octets":
-					if val, ok := meAttributes[frames64Octets]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm64Bit_Frames64Octets]; ok && val != nil {
 						ethFrameExtPMData[k] = val.(uint64)
 						receivedMask |= 0x20
 					} else if !ok {
@@ -3695,21 +3685,21 @@
 			if _, ok := ethFrameExtPMData[k]; !ok {
 				switch k {
 				case "65_to_127_octets":
-					if val, ok := meAttributes[frames65To127Octets]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm64Bit_Frames65To127Octets]; ok && val != nil {
 						ethFrameExtPMData[k] = val.(uint64)
 						receivedMask |= 0x10
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue64bit
 					}
 				case "128_to_255_octets":
-					if val, ok := meAttributes[frames128To255Octets]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm64Bit_Frames128To255Octets]; ok && val != nil {
 						ethFrameExtPMData[k] = val.(uint64)
 						receivedMask |= 0x8
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue64bit
 					}
 				case "256_to_511_octets":
-					if val, ok := meAttributes[frames256To511Octets]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm64Bit_Frames256To511Octets]; ok && val != nil {
 						ethFrameExtPMData[k] = val.(uint64)
 						receivedMask |= 0x4
 					} else if !ok {
@@ -3725,14 +3715,14 @@
 			if _, ok := ethFrameExtPMData[k]; !ok {
 				switch k {
 				case "512_to_1023_octets":
-					if val, ok := meAttributes[frames512To1023Octets]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm64Bit_Frames512To1023Octets]; ok && val != nil {
 						ethFrameExtPMData[k] = val.(uint64)
 						receivedMask |= 0x2
 					} else if !ok {
 						ethFrameExtPMData[k] = UnsupportedCounterValue64bit
 					}
 				case "1024_to_1518_octets":
-					if val, ok := meAttributes[frames1024To1518Octets]; ok && val != nil {
+					if val, ok := meAttributes[me.EthernetFrameExtendedPm64Bit_Frames1024To1518Octets]; ok && val != nil {
 						ethFrameExtPMData[k] = val.(uint64)
 						receivedMask |= 0x1
 					} else if !ok {
diff --git a/internal/pkg/swupg/omci_onu_upgrade.go b/internal/pkg/swupg/omci_onu_upgrade.go
index f9b393e..7809ef8 100755
--- a/internal/pkg/swupg/omci_onu_upgrade.go
+++ b/internal/pkg/swupg/omci_onu_upgrade.go
@@ -960,7 +960,7 @@
 func (oFsm *OnuUpgradeFsm) enterCheckImageName(ctx context.Context, e *fsm.Event) {
 	logger.Debugw(ctx, "OnuUpgradeFsm checking downloaded image name", log.Fields{
 		"device-id": oFsm.deviceID, "me-id": oFsm.InactiveImageMeID})
-	requestedAttributes := me.AttributeValueMap{"IsCommitted": 0, "IsActive": 0, "Version": ""}
+	requestedAttributes := me.AttributeValueMap{me.SoftwareImage_IsCommitted: 0, me.SoftwareImage_IsActive: 0, me.SoftwareImage_Version: ""}
 	meInstance, err := oFsm.pOmciCC.SendGetMe(log.WithSpanFromContext(context.Background(), ctx),
 		me.SoftwareImageClassID, oFsm.InactiveImageMeID, requestedAttributes, oFsm.pDeviceHandler.GetOmciTimeout(),
 		false, oFsm.PAdaptFsm.CommChan)
@@ -1038,7 +1038,7 @@
 func (oFsm *OnuUpgradeFsm) enterCheckCommitted(ctx context.Context, e *fsm.Event) {
 	logger.Debugw(ctx, "OnuUpgradeFsm checking committed SW", log.Fields{
 		"device-id": oFsm.deviceID, "me-id": oFsm.InactiveImageMeID})
-	requestedAttributes := me.AttributeValueMap{"IsCommitted": 0, "IsActive": 0, "Version": ""}
+	requestedAttributes := me.AttributeValueMap{me.SoftwareImage_IsCommitted: 0, me.SoftwareImage_IsActive: 0, me.SoftwareImage_Version: ""}
 	meInstance, err := oFsm.pOmciCC.SendGetMe(log.WithSpanFromContext(context.Background(), ctx),
 		me.SoftwareImageClassID, oFsm.InactiveImageMeID, requestedAttributes, oFsm.pDeviceHandler.GetOmciTimeout(), false, oFsm.PAdaptFsm.CommChan)
 	if err != nil {
@@ -1612,9 +1612,9 @@
 	}
 
 	meAttributes := msgObj.Attributes
-	imageIsCommitted := meAttributes["IsCommitted"].(uint8)
-	imageIsActive := meAttributes["IsActive"].(uint8)
-	imageVersion := cmn.TrimStringFromMeOctet(meAttributes["Version"])
+	imageIsCommitted := meAttributes[me.SoftwareImage_IsCommitted].(uint8)
+	imageIsActive := meAttributes[me.SoftwareImage_IsActive].(uint8)
+	imageVersion := cmn.TrimStringFromMeOctet(meAttributes[me.SoftwareImage_Version])
 	logger.Debugw(ctx, "OnuUpgradeFsm - GetResponse Data for SoftwareImage",
 		log.Fields{"device-id": oFsm.deviceID, "entityID": msgObj.EntityInstance,
 			"version": imageVersion, "isActive": imageIsActive, "isCommitted": imageIsCommitted})
diff --git a/internal/pkg/swupg/onu_image_status.go b/internal/pkg/swupg/onu_image_status.go
index eb4021f..02d92bc 100755
--- a/internal/pkg/swupg/onu_image_status.go
+++ b/internal/pkg/swupg/onu_image_status.go
@@ -45,14 +45,6 @@
 	pLastTxMeInstance      *me.ManagedEntity
 }
 
-const (
-	cImgVersion     = "Version"
-	cImgIsCommitted = "IsCommitted"
-	cImgIsActive    = "IsActive"
-	cImgIsValid     = "IsValid"
-	cImgProductCode = "ProductCode"
-	cImgImageHash   = "ImageHash"
-)
 const cResponse = "response: "
 
 //NewOnuImageStatus creates a new instance of OnuImageStatus
@@ -91,17 +83,17 @@
 		// a global mechanism should be implemented that automates this distribution - which would entail quite some
 		// changes on the respective receiver sides.
 
-		oo.requestedAttributes = me.AttributeValueMap{cImgVersion: "", cImgIsCommitted: 0, cImgIsActive: 0, cImgIsValid: 0}
+		oo.requestedAttributes = me.AttributeValueMap{me.SoftwareImage_Version: "", me.SoftwareImage_IsCommitted: 0, me.SoftwareImage_IsActive: 0, me.SoftwareImage_IsValid: 0}
 		if err := oo.requestOnuImageAttributes(ctx, uint16(i), &image); err != nil {
 			logger.Errorw(ctx, err.Error(), log.Fields{"requestedAttributes": oo.requestedAttributes, "device-id": oo.deviceID})
 			return nil, err
 		}
-		oo.requestedAttributes = me.AttributeValueMap{cImgProductCode: ""}
+		oo.requestedAttributes = me.AttributeValueMap{me.SoftwareImage_ProductCode: ""}
 		if err := oo.requestOnuImageAttributes(ctx, uint16(i), &image); err != nil {
 			logger.Errorw(ctx, err.Error(), log.Fields{"requestedAttributes": oo.requestedAttributes, "device-id": oo.deviceID})
 			return nil, err
 		}
-		oo.requestedAttributes = me.AttributeValueMap{cImgImageHash: 0}
+		oo.requestedAttributes = me.AttributeValueMap{me.SoftwareImage_ImageHash: 0}
 		if err := oo.requestOnuImageAttributes(ctx, uint16(i), &image); err != nil {
 			logger.Errorw(ctx, err.Error(), log.Fields{"requestedAttributes": oo.requestedAttributes, "device-id": oo.deviceID})
 			return nil, err
@@ -213,7 +205,7 @@
 	meAttributes := msgObj.Attributes
 	logger.Debugw(ctx, "processAttributesReceived", log.Fields{"attributes": meAttributes, "device-id": oo.deviceID})
 
-	if _, ok := oo.requestedAttributes[cImgVersion]; ok {
+	if _, ok := oo.requestedAttributes[me.SoftwareImage_Version]; ok {
 		if msgObj.Result != me.Success {
 			logger.Errorw(ctx, "processAttributesReceived retrieval of mandatory attributes failed",
 				log.Fields{"device-id": oo.deviceID})
@@ -224,40 +216,40 @@
 	for k := range oo.requestedAttributes {
 		switch k {
 		// mandatory attributes
-		case cImgIsCommitted:
-			if meAttributes[cImgIsCommitted].(uint8) == cmn.SwIsCommitted {
+		case me.SoftwareImage_IsCommitted:
+			if meAttributes[me.SoftwareImage_IsCommitted].(uint8) == cmn.SwIsCommitted {
 				image.IsCommited = true
 			} else {
 				image.IsCommited = false
 			}
-		case cImgIsActive:
-			if meAttributes[cImgIsActive].(uint8) == cmn.SwIsActive {
+		case me.SoftwareImage_IsActive:
+			if meAttributes[me.SoftwareImage_IsActive].(uint8) == cmn.SwIsActive {
 				image.IsActive = true
 			} else {
 				image.IsActive = false
 			}
-		case cImgIsValid:
-			if meAttributes[cImgIsValid].(uint8) == cmn.SwIsValid {
+		case me.SoftwareImage_IsValid:
+			if meAttributes[me.SoftwareImage_IsValid].(uint8) == cmn.SwIsValid {
 				image.IsValid = true
 			} else {
 				image.IsValid = false
 			}
-		case cImgVersion:
-			image.Version = cmn.TrimStringFromMeOctet(meAttributes[cImgVersion])
+		case me.SoftwareImage_Version:
+			image.Version = cmn.TrimStringFromMeOctet(meAttributes[me.SoftwareImage_Version])
 
 		// optional attributes
-		case cImgProductCode:
+		case me.SoftwareImage_ProductCode:
 			if msgObj.Result == me.Success {
-				image.ProductCode = cmn.TrimStringFromMeOctet(meAttributes[cImgProductCode])
+				image.ProductCode = cmn.TrimStringFromMeOctet(meAttributes[me.SoftwareImage_ProductCode])
 			} else {
 				sResult := msgObj.Result.String()
 				logger.Infow(ctx, "processAttributesReceived - ProductCode",
 					log.Fields{"result": sResult, "unsupported attribute mask": msgObj.UnsupportedAttributeMask, "device-id": oo.deviceID})
 				image.ProductCode = cResponse + sResult
 			}
-		case cImgImageHash:
+		case me.SoftwareImage_ImageHash:
 			if msgObj.Result == me.Success {
-				bytes, _ := me.InterfaceToOctets(meAttributes[cImgImageHash])
+				bytes, _ := me.InterfaceToOctets(meAttributes[me.SoftwareImage_ImageHash])
 				image.Hash = hex.EncodeToString(bytes)
 			} else {
 				sResult := msgObj.Result.String()
diff --git a/internal/pkg/uniprt/uniportadmin.go b/internal/pkg/uniprt/uniportadmin.go
index 4ddf154..2a0a2c9 100755
--- a/internal/pkg/uniprt/uniportadmin.go
+++ b/internal/pkg/uniprt/uniportadmin.go
@@ -213,7 +213,7 @@
 	oFsm.mutexAdminState.RUnlock()
 	logger.Debugw(ctx, "LockStateFSM Tx Set::ONU-G:admin", log.Fields{
 		"omciAdmin": omciAdminState, "in state": e.FSM.Current(), "device-id": oFsm.deviceID})
-	requestedAttributes := me.AttributeValueMap{"AdministrativeState": omciAdminState}
+	requestedAttributes := me.AttributeValueMap{me.OnuG_AdministrativeState: omciAdminState}
 	oFsm.mutexPLastTxMeInstance.Lock()
 	meInstance, err := oFsm.pOmciCC.SendSetOnuGLS(log.WithSpanFromContext(context.TODO(), ctx), oFsm.pDeviceHandler.GetOmciTimeout(), true,
 		requestedAttributes, oFsm.PAdaptFsm.CommChan)
@@ -430,7 +430,7 @@
 	}
 	oFsm.mutexAdminState.RUnlock()
 	//set PPTPEthUni or VEIP AdminState
-	requestedAttributes := me.AttributeValueMap{"AdministrativeState": omciAdminState}
+	requestedAttributes := me.AttributeValueMap{me.PhysicalPathTerminationPointEthernetUni_AdministrativeState: omciAdminState}
 
 	for uniNo, uniPort := range *oFsm.pDeviceHandler.GetUniEntityMap() {
 		// only unlock the UniPort in case it is defined for usage (R2.6 limit only one port),
diff --git a/internal/pkg/uniprt/uniportstatus.go b/internal/pkg/uniprt/uniportstatus.go
index b088d41..4c294ce 100755
--- a/internal/pkg/uniprt/uniportstatus.go
+++ b/internal/pkg/uniprt/uniportstatus.go
@@ -28,12 +28,7 @@
 	"github.com/opencord/voltha-protos/v5/go/extension"
 )
 
-const (
-	uniStatusTimeout = 3
-	adminState       = "AdministrativeState"
-	operationalState = "OperationalState"
-	configInd        = "ConfigurationInd"
-)
+const uniStatusTimeout = 3
 
 //UniPortStatus implements methods to get uni port status info
 type UniPortStatus struct {
@@ -59,7 +54,10 @@
 
 		if uniPort.UniID == uint8(uniIdx) && uniPort.PortType == cmn.UniPPTP {
 
-			requestedAttributes := me.AttributeValueMap{adminState: 0, operationalState: 0, configInd: 0}
+			requestedAttributes := me.AttributeValueMap{
+				me.PhysicalPathTerminationPointEthernetUni_AdministrativeState: 0,
+				me.PhysicalPathTerminationPointEthernetUni_OperationalState:    0,
+				me.PhysicalPathTerminationPointEthernetUni_ConfigurationInd:    0}
 			// Note: No reference to fetch the OMCI timeout configuration value, so hard code it to 10s
 			meInstance, err := portStatus.pOmiCC.SendGetMe(ctx, me.PhysicalPathTerminationPointEthernetUniClassID, uniPort.EntityID, requestedAttributes, 10, true, portStatus.omciRespChn)
 			if err != nil {
@@ -134,17 +132,17 @@
 			},
 		},
 	}
-	if meAttributes[operationalState].(uint8) == 0 {
+	if meAttributes[me.PhysicalPathTerminationPointEthernetUni_OperationalState].(uint8) == 0 {
 		singleValResp.Response.GetUniInfo().OperState = extension.GetOnuUniInfoResponse_ENABLED
-	} else if meAttributes[operationalState].(uint8) == 1 {
+	} else if meAttributes[me.PhysicalPathTerminationPointEthernetUni_OperationalState].(uint8) == 1 {
 		singleValResp.Response.GetUniInfo().OperState = extension.GetOnuUniInfoResponse_DISABLED
 	} else {
 		singleValResp.Response.GetUniInfo().OperState = extension.GetOnuUniInfoResponse_OPERSTATE_UNDEFINED
 	}
 
-	if meAttributes[adminState].(uint8) == 0 {
+	if meAttributes[me.PhysicalPathTerminationPointEthernetUni_AdministrativeState].(uint8) == 0 {
 		singleValResp.Response.GetUniInfo().AdmState = extension.GetOnuUniInfoResponse_UNLOCKED
-	} else if meAttributes[adminState].(uint8) == 1 {
+	} else if meAttributes[me.PhysicalPathTerminationPointEthernetUni_AdministrativeState].(uint8) == 1 {
 		singleValResp.Response.GetUniInfo().AdmState = extension.GetOnuUniInfoResponse_LOCKED
 	} else {
 		singleValResp.Response.GetUniInfo().AdmState = extension.GetOnuUniInfoResponse_ADMSTATE_UNDEFINED
@@ -159,7 +157,7 @@
 		18: extension.GetOnuUniInfoResponse_HUNDRED_BASE_T_HDX,
 		19: extension.GetOnuUniInfoResponse_GIGABIT_ETHERNET_HDX,
 	}
-	configInd := meAttributes[configInd].(uint8)
+	configInd := meAttributes[me.PhysicalPathTerminationPointEthernetUni_ConfigurationInd].(uint8)
 	singleValResp.Response.GetUniInfo().ConfigInd = configIndMap[configInd]
 	return &singleValResp
 }
