diff --git a/internal/pkg/omcitst/omci_test_request.go b/internal/pkg/omcitst/omci_test_request.go
index 9f802a4..9dac298 100755
--- a/internal/pkg/omcitst/omci_test_request.go
+++ b/internal/pkg/omcitst/omci_test_request.go
@@ -19,20 +19,23 @@
 
 import (
 	"context"
+	"encoding/hex"
 	"fmt"
 
 	gp "github.com/google/gopacket"
 	"github.com/opencord/omci-lib-go/v2"
 	me "github.com/opencord/omci-lib-go/v2/generated"
-	cmn "github.com/opencord/voltha-openonu-adapter-go/internal/pkg/common"
-
+	"github.com/opencord/omci-lib-go/v2/meframe"
+	oframe "github.com/opencord/omci-lib-go/v2/meframe"
 	"github.com/opencord/voltha-lib-go/v7/pkg/log"
+	cmn "github.com/opencord/voltha-openonu-adapter-go/internal/pkg/common"
 )
 
 //OmciTestRequest structure holds the information for the OMCI test
 type OmciTestRequest struct {
 	deviceID     string
 	pDevOmciCC   *cmn.OmciCC
+	extended     bool
 	started      bool
 	result       bool
 	exclusiveCc  bool
@@ -41,14 +44,18 @@
 	verifyDone   chan<- bool
 }
 
+// CTestRequestOmciTimeout - Special OMCI timeout for low prio test request
+const CTestRequestOmciTimeout = 5
+
 //NewOmciTestRequest returns a new instance of OmciTestRequest
 func NewOmciTestRequest(ctx context.Context,
-	deviceID string, omciCc *cmn.OmciCC,
+	deviceID string, omciCc *cmn.OmciCC, extended bool,
 	exclusive bool, allowFailure bool) *OmciTestRequest {
 	logger.Debug(ctx, "OmciTestRequest-init")
 	var OmciTestRequest OmciTestRequest
 	OmciTestRequest.deviceID = deviceID
 	OmciTestRequest.pDevOmciCC = omciCc
+	OmciTestRequest.extended = extended
 	OmciTestRequest.started = false
 	OmciTestRequest.result = false
 	OmciTestRequest.exclusiveCc = exclusive
@@ -66,7 +73,7 @@
 		// test functionality is limited to ONU-2G get request for the moment
 		// without yet checking the received response automatically here (might be improved ??)
 		tid := oo.pDevOmciCC.GetNextTid(false)
-		onu2gBaseGet, _ := oo.createOnu2gBaseGet(ctx, tid)
+		onu2gGet, _ := oo.createOnu2gGet(ctx, tid)
 		omciRxCallbackPair := cmn.CallbackPair{
 			CbKey: tid,
 			CbEntry: cmn.CallbackPairEntry{
@@ -75,11 +82,10 @@
 				FramePrint:    true,
 			},
 		}
-
-		logger.Debugw(ctx, "performOmciTest-start sending frame", log.Fields{"for device-id": oo.deviceID})
+		logger.Debugw(ctx, "performOmciTest-start sending frame", log.Fields{"for device-id": oo.deviceID, "onu2gGet": hex.EncodeToString(onu2gGet)})
 		// send with default timeout and normal prio
 		// Note: No reference to fetch the OMCI timeout value from configuration, so hardcode it to 10s
-		go oo.pDevOmciCC.Send(ctx, onu2gBaseGet, 10, cmn.CDefaultRetries, false, omciRxCallbackPair)
+		go oo.pDevOmciCC.Send(ctx, onu2gGet, CTestRequestOmciTimeout, cmn.CDefaultRetries, false, omciRxCallbackPair)
 
 	} else {
 		logger.Errorw(ctx, "performOmciTest: Device does not exist", log.Fields{"for device-id": oo.deviceID})
@@ -89,26 +95,40 @@
 // these are OMCI related functions, could/should be collected in a separate file? TODO!!!
 // for a simple start just included in here
 //basic approach copied from bbsim, cmp /devices/onu.go and /internal/common/omci/mibpackets.go
-func (oo *OmciTestRequest) createOnu2gBaseGet(ctx context.Context, tid uint16) ([]byte, error) {
+func (oo *OmciTestRequest) createOnu2gGet(ctx context.Context, tid uint16) ([]byte, error) {
 
-	request := &omci.GetRequest{
-		MeBasePacket: omci.MeBasePacket{
-			EntityClass:    me.Onu2GClassID,
-			EntityInstance: 0, //there is only the 0 instance of ONU2-G (still hard-coded - TODO!!!)
-		},
-		AttributeMask: 0xE000, //example hardcoded (TODO!!!) request EquId, OmccVersion, VendorCode
+	meParams := me.ParamData{
+		EntityID: 0,
+		Attributes: me.AttributeValueMap{
+			me.Onu2G_EquipmentId: "",
+			me.Onu2G_OpticalNetworkUnitManagementAndControlChannelOmccVersion: 0},
 	}
+	meInstance, omciErr := me.NewOnu2G(meParams)
+	if omciErr.GetError() == nil {
+		var messageSet omci.DeviceIdent = omci.BaselineIdent
+		if oo.extended {
+			messageSet = omci.ExtendedIdent
+		}
+		omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.GetRequestType, oframe.TransactionID(tid),
+			meframe.FrameFormat(messageSet))
+		if err != nil {
+			logger.Errorw(ctx, "Cannot encode ONU2-G instance for get", log.Fields{
+				"Err": err, "device-id": oo.deviceID})
+			return nil, err
+		}
+		oo.txSeqNo = tid
 
-	oo.txSeqNo = tid
-	pkt, err := cmn.Serialize(ctx, omci.GetRequestType, request, tid)
-	if err != nil {
-		//omciLogger.WithFields(log.Fields{ ...
-		logger.Errorw(ctx, "Cannot serialize Onu2-G GetRequest", log.Fields{"device-id": oo.deviceID, "Err": err})
-		return nil, err
+		pkt, err := cmn.SerializeOmciLayer(ctx, omciLayer, msgLayer)
+		if err != nil {
+			logger.Errorw(ctx, "Cannot serialize ONU2-G get", log.Fields{
+				"Err": err, "device-id": oo.deviceID})
+			return nil, err
+		}
+		return pkt, nil
 	}
-	// hexEncode would probably work as well, but not needed and leads to wrong logs on OltAdapter frame
-	//	return hexEncode(pkt)
-	return pkt, nil
+	logger.Errorw(ctx, "Cannot generate ONU2-G", log.Fields{
+		"Err": omciErr.GetError(), "device-id": oo.deviceID})
+	return nil, omciErr.GetError()
 }
 
 //ReceiveOmciVerifyResponse supply a response handler - in this testobject the message is evaluated directly, no response channel used
@@ -133,6 +153,16 @@
 		oo.verifyDone <- false
 		return fmt.Errorf("unexpected MessageType %s", oo.deviceID)
 	}
+	if oo.extended {
+		if omciMsg.DeviceIdentifier == omci.ExtendedIdent {
+			logger.Debugw(ctx, "verify-omci-message-response", log.Fields{"correct DeviceIdentifier": omciMsg.DeviceIdentifier})
+		} else {
+			logger.Debugw(ctx, "verify-omci-message-response error", log.Fields{"incorrect DeviceIdentifier": omciMsg.DeviceIdentifier,
+				"expected": omci.ExtendedIdent})
+			oo.verifyDone <- false
+			return fmt.Errorf("unexpected DeviceIdentifier %s", oo.deviceID)
+		}
+	}
 
 	//TODO!!! further tests on the payload should be done here ...
 
