diff --git a/internal/pkg/onuadaptercore/device_handler.go b/internal/pkg/onuadaptercore/device_handler.go
index b0908f0..a4da535 100644
--- a/internal/pkg/onuadaptercore/device_handler.go
+++ b/internal/pkg/onuadaptercore/device_handler.go
@@ -1526,19 +1526,21 @@
 		return
 	}
 	i := uint8(0) //UNI Port limit: see MaxUnisPerOnu (by now 16) (OMCI supports max 255 p.b.)
-	if unigInstKeys := pDevEntry.pOnuDB.getSortedInstKeys(ctx, me.UniGClassID); len(unigInstKeys) > 0 {
-		for _, mgmtEntityID := range unigInstKeys {
-			logger.Debugw(ctx, "Add UNI port for stored UniG instance:", log.Fields{
-				"device-id": dh.deviceID, "UnigMe EntityID": mgmtEntityID})
+	if pptpInstKeys := pDevEntry.pOnuDB.getSortedInstKeys(
+		ctx, me.PhysicalPathTerminationPointEthernetUniClassID); len(pptpInstKeys) > 0 {
+		for _, mgmtEntityID := range pptpInstKeys {
+			logger.Debugw(ctx, "Add PPTPEthUni port for MIB-stored instance:", log.Fields{
+				"device-id": dh.deviceID, "PPTPEthUni EntityID": mgmtEntityID})
 			dh.addUniPort(ctx, mgmtEntityID, i, uniPPTP)
 			i++
 		}
 	} else {
 		logger.Debugw(ctx, "No UniG instances found", log.Fields{"device-id": dh.deviceID})
 	}
-	if veipInstKeys := pDevEntry.pOnuDB.getSortedInstKeys(ctx, me.VirtualEthernetInterfacePointClassID); len(veipInstKeys) > 0 {
+	if veipInstKeys := pDevEntry.pOnuDB.getSortedInstKeys(
+		ctx, me.VirtualEthernetInterfacePointClassID); len(veipInstKeys) > 0 {
 		for _, mgmtEntityID := range veipInstKeys {
-			logger.Debugw(ctx, "Add VEIP acc. to stored VEIP instance:", log.Fields{
+			logger.Debugw(ctx, "Add VEIP for MIB-stored instance:", log.Fields{
 				"device-id": dh.deviceID, "VEIP EntityID": mgmtEntityID})
 			dh.addUniPort(ctx, mgmtEntityID, i, uniVEIP)
 			i++
diff --git a/internal/pkg/onuadaptercore/omci_ani_config.go b/internal/pkg/onuadaptercore/omci_ani_config.go
index e04f8c7..fdd7830 100644
--- a/internal/pkg/onuadaptercore/omci_ani_config.go
+++ b/internal/pkg/onuadaptercore/omci_ani_config.go
@@ -562,10 +562,14 @@
 				"device-id": oFsm.deviceID})
 		} else {
 			// The null pointer 0xFFFF specifies that frames with the associated priority are to be discarded.
+			// 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[meAttribute] = 0xffff
 		}
 	}
 	// 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
 
 	if !foundIwPtr {
diff --git a/internal/pkg/onuadaptercore/omci_cc.go b/internal/pkg/onuadaptercore/omci_cc.go
index 8d6d4ef..c8ad45f 100644
--- a/internal/pkg/onuadaptercore/omci_cc.go
+++ b/internal/pkg/onuadaptercore/omci_cc.go
@@ -1187,8 +1187,19 @@
 		"SequNo": strconv.FormatInt(int64(tid), 16), "InstId": strconv.FormatInt(int64(aInstID), 16)})
 
 	meParams := me.ParamData{
-		EntityID:   aInstID,
-		Attributes: me.AttributeValueMap{},
+		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,
+		},
 	}
 	meInstance, omciErr := me.NewIeee8021PMapperServiceProfile(meParams)
 	if omciErr.GetError() == nil {
diff --git a/internal/pkg/onuadaptercore/uniportadmin.go b/internal/pkg/onuadaptercore/uniportadmin.go
index 7f361c9..d05843a 100644
--- a/internal/pkg/onuadaptercore/uniportadmin.go
+++ b/internal/pkg/onuadaptercore/uniportadmin.go
@@ -211,7 +211,7 @@
 }
 
 func (oFsm *lockStateFsm) enterSettingUnisState(ctx context.Context, e *fsm.Event) {
-	logger.Debugw(ctx, "LockStateFSM - starting PPTP config loop", log.Fields{
+	logger.Debugw(ctx, "LockStateFSM - starting UniTP adminState loop", log.Fields{
 		"in state": e.FSM.Current(), "device-id": oFsm.deviceID, "LockState": oFsm.adminState})
 	go oFsm.performUniPortAdminSet(ctx)
 }
@@ -348,36 +348,41 @@
 	requestedAttributes := me.AttributeValueMap{"AdministrativeState": omciAdminState}
 
 	for uniNo, uniPort := range oFsm.pOmciCC.pBaseDeviceHandler.uniEntityMap {
-		logger.Debugw(ctx, "Setting PPTP admin state", log.Fields{
-			"device-id": oFsm.deviceID, "for PortNo": uniNo})
+		// only unlock the UniPort in case it is defined for usage (R2.6 limit only one port),
+		// compare also limitation for logical voltha port in dh.enableUniPortStateUpdate()
+		if (omciAdminState == 1) || (1<<uniPort.uniID)&activeUniPortStateUpdateMask == (1<<uniPort.uniID) {
+			var meInstance *me.ManagedEntity
+			if uniPort.portType == uniPPTP {
+				logger.Debugw(ctx, "Setting PPTP admin state", log.Fields{
+					"device-id": oFsm.deviceID, "for PortNo": uniNo, "state (0-unlock)": omciAdminState})
+				meInstance = oFsm.pOmciCC.sendSetPptpEthUniLS(log.WithSpanFromContext(context.TODO(), ctx), uniPort.entityID, ConstDefaultOmciTimeout,
+					true, requestedAttributes, oFsm.pAdaptFsm.commChan)
+				oFsm.pLastTxMeInstance = meInstance
+			} else if uniPort.portType == uniVEIP {
+				logger.Debugw(ctx, "Setting VEIP admin state", log.Fields{
+					"device-id": oFsm.deviceID, "for PortNo": uniNo, "state (0-unlock)": omciAdminState})
+				meInstance = oFsm.pOmciCC.sendSetVeipLS(log.WithSpanFromContext(context.TODO(), ctx), uniPort.entityID, ConstDefaultOmciTimeout,
+					true, requestedAttributes, oFsm.pAdaptFsm.commChan)
+				oFsm.pLastTxMeInstance = meInstance
+			} else {
+				logger.Warnw(ctx, "Unsupported UniTP type - skip",
+					log.Fields{"device-id": oFsm.deviceID, "Port": uniNo})
+				continue
+			}
 
-		var meInstance *me.ManagedEntity
-		if uniPort.portType == uniPPTP {
-			meInstance = oFsm.pOmciCC.sendSetPptpEthUniLS(log.WithSpanFromContext(context.TODO(), ctx), uniPort.entityID, ConstDefaultOmciTimeout,
-				true, requestedAttributes, oFsm.pAdaptFsm.commChan)
-			oFsm.pLastTxMeInstance = meInstance
-		} else if uniPort.portType == uniVEIP {
-			meInstance = oFsm.pOmciCC.sendSetVeipLS(log.WithSpanFromContext(context.TODO(), ctx), uniPort.entityID, ConstDefaultOmciTimeout,
-				true, requestedAttributes, oFsm.pAdaptFsm.commChan)
-			oFsm.pLastTxMeInstance = meInstance
-		} else {
-			logger.Warnw(ctx, "Unsupported PPTP type - skip",
-				log.Fields{"device-id": oFsm.deviceID, "Port": uniNo})
-			continue
-		}
-
-		//verify response
-		err := oFsm.waitforOmciResponse(ctx, meInstance)
-		if err != nil {
-			logger.Errorw(ctx, "PPTP Admin State set failed, aborting LockState set!",
-				log.Fields{"device-id": oFsm.deviceID, "Port": uniNo})
-			_ = oFsm.pAdaptFsm.pFsm.Event(uniEvReset)
-			return
+			//verify response
+			err := oFsm.waitforOmciResponse(ctx, meInstance)
+			if err != nil {
+				logger.Errorw(ctx, "UniTP Admin State set failed, aborting LockState set!",
+					log.Fields{"device-id": oFsm.deviceID, "Port": uniNo})
+				_ = oFsm.pAdaptFsm.pFsm.Event(uniEvReset)
+				return
+			}
 		}
 	} //for all UNI ports
 	// if Config has been done for all UNI related instances let the FSM proceed
 	// while we did not check here, if there is some port at all - !?
-	logger.Infow(ctx, "PPTP config loop finished", log.Fields{"device-id": oFsm.deviceID})
+	logger.Infow(ctx, "UniTP adminState loop finished", log.Fields{"device-id": oFsm.deviceID})
 	_ = oFsm.pAdaptFsm.pFsm.Event(uniEvRxUnisResp)
 }
 
