diff --git a/internal/pkg/almgr/alarm_manager.go b/internal/pkg/almgr/alarm_manager.go
index 13a3bef..f0335a9 100755
--- a/internal/pkg/almgr/alarm_manager.go
+++ b/internal/pkg/almgr/alarm_manager.go
@@ -700,17 +700,18 @@
 
 func (am *OnuAlarmManager) getIntfIDAlarm(ctx context.Context, classID me.ClassID, instanceID uint16) *uint32 {
 	var intfID *uint32
-	if classID == circuitPackClassID || classID == physicalPathTerminationPointEthernetUniClassID {
+	switch classID {
+	case circuitPackClassID, physicalPathTerminationPointEthernetUniClassID:
 		for _, uniPort := range *am.pDeviceHandler.GetUniEntityMap() {
 			if uniPort.EntityID == instanceID {
 				intfID = &uniPort.PortNo
 				return intfID
 			}
 		}
-	} else if classID == aniGClassID || classID == onuGClassID {
+	case aniGClassID, onuGClassID:
 		intfID = am.pDeviceHandler.GetPonPortNumber()
 		return intfID
-	} else {
+	default:
 		logger.Warnw(ctx, "me-not-supported", log.Fields{"device-id": am.deviceID, "class-id": classID, "instance-id": instanceID})
 	}
 	return nil
diff --git a/internal/pkg/avcfg/omci_vlan_config.go b/internal/pkg/avcfg/omci_vlan_config.go
index 9b0b8b9..1afc480 100755
--- a/internal/pkg/avcfg/omci_vlan_config.go
+++ b/internal/pkg/avcfg/omci_vlan_config.go
@@ -914,8 +914,8 @@
 func (oFsm *UniVlanConfigFsm) removeRuleComplete(ctx context.Context,
 	aUniFlowParams cmn.UniVlanFlowParams, aCookie uint64, respChan *chan error) bool {
 	pConfigVlanStateBaseFsm := oFsm.PAdaptFsm.PFsm
-	var cancelPendingConfig bool = false
-	var loRemoveParams uniRemoveVlanFlowParams = uniRemoveVlanFlowParams{}
+	var cancelPendingConfig = false
+	var loRemoveParams = uniRemoveVlanFlowParams{}
 	logger.Debugw(ctx, "UniVlanConfigFsm flow removal - full flow removal", log.Fields{
 		"device-id": oFsm.deviceID})
 	//rwCore flow recovery may be the reason for this delete, in which case the flowToBeDeleted may be the same
@@ -1019,15 +1019,16 @@
 	for flow, storedUniFlowParams := range oFsm.uniVlanFlowParamsSlice {
 		// if UniFlowParams exists, cookieSlice should always have at least one element
 		cookieSliceLen := len(storedUniFlowParams.CookieSlice)
-		if cookieSliceLen == 1 {
+		switch cookieSliceLen {
+		case 1:
 			if storedUniFlowParams.CookieSlice[0] == aCookie {
 				cookieFound = true
 			}
-		} else if cookieSliceLen == 0 {
+		case 0:
 			errStr := "UniVlanConfigFsm unexpected cookie slice length 0  - removal in uniVlanFlowParamsSlice aborted"
 			logger.Errorw(ctx, errStr, log.Fields{"device-id": oFsm.deviceID})
 			return errors.New(errStr)
-		} else {
+		default:
 			errStr := "UniVlanConfigFsm flow removal unexpected cookie slice length, but rule removal continued"
 			logger.Errorw(ctx, errStr, log.Fields{
 				"cookieSliceLen": len(oFsm.uniVlanFlowParamsSlice), "device-id": oFsm.deviceID})
@@ -1722,10 +1723,11 @@
 			}
 
 			oFsm.mutexFlowParams.Lock()
-			if loVlanEntryClear == 1 {
+			switch loVlanEntryClear {
+			case 1:
 				oFsm.vlanFilterList[0] = 0 //first entry is the only that can contain the previous only-one element
 				oFsm.numVlanFilterEntries = 0
-			} else if loVlanEntryClear == 2 {
+			case 2:
 				// new VlanFilterList should be one entry smaller now - copy from last configured entry
 				// this loop now includes the 0 element on previous last valid entry
 				for i := uint8(0); i <= oFsm.numVlanFilterEntries; i++ {
diff --git a/internal/pkg/common/omci_cc.go b/internal/pkg/common/omci_cc.go
index 01c6fbf..89d1afb 100755
--- a/internal/pkg/common/omci_cc.go
+++ b/internal/pkg/common/omci_cc.go
@@ -30,7 +30,6 @@
 
 	"github.com/google/gopacket"
 	// TODO!!! Some references could be resolved auto, but some need specific context ....
-	gp "github.com/google/gopacket"
 
 	"github.com/opencord/omci-lib-go/v2"
 	me "github.com/opencord/omci-lib-go/v2/generated"
@@ -78,7 +77,7 @@
 // CallbackPairEntry to be used for OMCI send/receive correlation
 type CallbackPairEntry struct {
 	CbRespChannel chan Message
-	CbFunction    func(context.Context, *omci.OMCI, *gp.Packet, chan Message) error
+	CbFunction    func(context.Context, *omci.OMCI, *gopacket.Packet, chan Message) error
 	FramePrint    bool //true for printing
 }
 
@@ -231,7 +230,7 @@
 }
 
 // Rx handler for omci messages
-func (oo *OmciCC) receiveOnuMessage(ctx context.Context, omciMsg *omci.OMCI, packet *gp.Packet) error {
+func (oo *OmciCC) receiveOnuMessage(ctx context.Context, omciMsg *omci.OMCI, packet *gopacket.Packet) error {
 	logger.Debugw(ctx, "rx-onu-autonomous-message", log.Fields{"omciMsgType": omciMsg.MessageType,
 		"payload": hex.EncodeToString(omciMsg.Payload)})
 	switch omciMsg.MessageType {
@@ -841,7 +840,7 @@
 */
 
 // supply a response handler for omci response messages to be transferred to the requested FSM
-func (oo *OmciCC) receiveOmciResponse(ctx context.Context, omciMsg *omci.OMCI, packet *gp.Packet, respChan chan Message) error {
+func (oo *OmciCC) receiveOmciResponse(ctx context.Context, omciMsg *omci.OMCI, packet *gopacket.Packet, respChan chan Message) error {
 
 	logger.Debugw(ctx, "omci-message-response - transfer on omciRespChannel", log.Fields{"omciMsgType": omciMsg.MessageType,
 		"transCorrId": strconv.FormatInt(int64(omciMsg.TransactionID), 16), "device-id": oo.deviceID})
@@ -1581,7 +1580,7 @@
 		EntityID:   entityID,
 		Attributes: requestedAttributes,
 	}
-	var messageSet omci.DeviceIdent = omci.BaselineIdent
+	var messageSet = omci.BaselineIdent
 	if isExtendedOmci {
 		messageSet = omci.ExtendedIdent
 	}
@@ -4585,7 +4584,7 @@
 	//TODO!!!: don't know by now on how to generate the possibly needed AR (or enforce it to 0) with current omci-lib
 	//    by now just try to send it as defined by omci-lib
 	msgType := omci.DownloadSectionRequestType
-	var timeout int = 0 //default value for no response expected
+	var timeout = 0 //default value for no response expected
 	if aAckRequest > 0 {
 		msgType = omci.DownloadSectionRequestWithResponseType
 		timeout = aTimeout
@@ -4852,7 +4851,7 @@
 }
 
 // nolint: gocyclo
-func (oo *OmciCC) isSuccessfulResponseWithMibDataSync(ctx context.Context, omciMsg *omci.OMCI, packet *gp.Packet) (bool, error) {
+func (oo *OmciCC) isSuccessfulResponseWithMibDataSync(ctx context.Context, omciMsg *omci.OMCI, packet *gopacket.Packet) (bool, error) {
 
 	nextLayer, err := omci.MsgTypeToNextLayer(omciMsg.MessageType, false)
 	if err != nil {
@@ -4863,13 +4862,14 @@
 	if msgLayer != nil {
 		// Note: Due to relaxed decoding, you may now still have a decoding error attached to the layers
 		if failure := (*packet).ErrorLayer(); failure != nil {
-			if nextLayer == omci.LayerTypeMibUploadNextResponse {
+			switch nextLayer {
+			case omci.LayerTypeMibUploadNextResponse:
 				// In the case of MibUploadNextResponse, we let the packet pass so that later processing
 				// can examine for UnkonwnMEs and UnknownAttributes
 				logger.Debug(ctx, "omci-message: MibUploadNextResponse packet with ErrorLayer - let it pass",
 					log.Fields{"device-id": oo.deviceID, "error": failure.Error()})
 				return false, nil
-			} else if nextLayer == omci.LayerTypeGetResponse {
+			case omci.LayerTypeGetResponse:
 				if resp := msgLayer.(*omci.GetResponse); resp != nil {
 					if resp.NextLayerType() == omci.LayerTypeUnknownAttributes {
 						unknownAttrLayer := (*packet).Layer(omci.LayerTypeUnknownAttributes)
diff --git a/internal/pkg/core/device_handler.go b/internal/pkg/core/device_handler.go
index aeeef16..337a97b 100755
--- a/internal/pkg/core/device_handler.go
+++ b/internal/pkg/core/device_handler.go
@@ -45,13 +45,10 @@
 	"github.com/opencord/voltha-openonu-adapter-go/internal/pkg/swupg"
 	uniprt "github.com/opencord/voltha-openonu-adapter-go/internal/pkg/uniprt"
 	"github.com/opencord/voltha-protos/v5/go/common"
-	vc "github.com/opencord/voltha-protos/v5/go/common"
 	ca "github.com/opencord/voltha-protos/v5/go/core_adapter"
 	"github.com/opencord/voltha-protos/v5/go/extension"
-	"github.com/opencord/voltha-protos/v5/go/inter_adapter"
 	ia "github.com/opencord/voltha-protos/v5/go/inter_adapter"
 	of "github.com/opencord/voltha-protos/v5/go/openflow_13"
-	"github.com/opencord/voltha-protos/v5/go/openolt"
 	oop "github.com/opencord/voltha-protos/v5/go/openolt"
 	"github.com/opencord/voltha-protos/v5/go/tech_profile"
 	"github.com/opencord/voltha-protos/v5/go/voltha"
@@ -3157,7 +3154,7 @@
 		// only if this port is validated for operState transfer
 		if (1<<uniPort.UniID)&dh.pOpenOnuAc.config.UniPortMask == (1 << uniPort.UniID) {
 			logger.Infow(ctx, "OnuUniPort-forced-OperState-ACTIVE", log.Fields{"for PortNo": uniNo, "device-id": dh.DeviceID})
-			uniPort.SetOperState(vc.OperStatus_ACTIVE)
+			uniPort.SetOperState(common.OperStatus_ACTIVE)
 			if !dh.IsReconciling() {
 				//maybe also use getter functions on uniPort - perhaps later ...
 				go func(port *cmn.OnuUniPort) {
@@ -3186,7 +3183,7 @@
 
 		if (1<<uniPort.UniID)&dh.pOpenOnuAc.config.UniPortMask == (1 << uniPort.UniID) {
 			logger.Infow(ctx, "OnuUniPort-forced-OperState-UNKNOWN", log.Fields{"for PortNo": uniNo, "device-id": dh.DeviceID})
-			uniPort.SetOperState(vc.OperStatus_UNKNOWN)
+			uniPort.SetOperState(common.OperStatus_UNKNOWN)
 			if !dh.IsReconciling() {
 				//maybe also use getter functions on uniPort - perhaps later ...
 				go func(port *cmn.OnuUniPort) {
@@ -3209,7 +3206,7 @@
 
 // ONU_Active/Inactive announcement on system KAFKA bus
 // tried to re-use procedure of oltUpDownIndication from openolt_eventmgr.go with used values from Py code
-func (dh *deviceHandler) sendOnuOperStateEvent(ctx context.Context, aOperState vc.OperStatus_Types, aDeviceID string, raisedTs int64) {
+func (dh *deviceHandler) sendOnuOperStateEvent(ctx context.Context, aOperState common.OperStatus_Types, aDeviceID string, raisedTs int64) {
 	var de voltha.DeviceEvent
 	eventContext := make(map[string]string)
 	//Populating event context
@@ -3544,8 +3541,8 @@
 			{
 				*loMatchVlan = uint16(field.GetVlanVid())
 				loMatchVlanMask := uint16(field.GetVlanVidMask())
-				if !(*loMatchVlan == uint16(of.OfpVlanId_OFPVID_PRESENT) &&
-					loMatchVlanMask == uint16(of.OfpVlanId_OFPVID_PRESENT)) {
+				if *loMatchVlan != uint16(of.OfpVlanId_OFPVID_PRESENT) ||
+					loMatchVlanMask != uint16(of.OfpVlanId_OFPVID_PRESENT) {
 					*loMatchVlan = *loMatchVlan & 0xFFF // not transparent: copy only ID bits
 				}
 				logger.Debugw(ctx, "flow field type", log.Fields{"device-id": dh.DeviceID,
@@ -3640,8 +3637,8 @@
 // addFlowItemToUniPort parses the actual flow item to add it to the UniPort
 func (dh *deviceHandler) addFlowItemToUniPort(ctx context.Context, apFlowItem *of.OfpFlowStats, apUniPort *cmn.OnuUniPort,
 	apFlowMetaData *of.FlowMetadata, respChan *chan error) {
-	var loSetVlan uint16 = uint16(of.OfpVlanId_OFPVID_NONE)      //noValidEntry
-	var loMatchVlan uint16 = uint16(of.OfpVlanId_OFPVID_PRESENT) //reserved VLANID entry
+	var loSetVlan = uint16(of.OfpVlanId_OFPVID_NONE)      //noValidEntry
+	var loMatchVlan = uint16(of.OfpVlanId_OFPVID_PRESENT) //reserved VLANID entry
 	var loSetPcp uint8
 	var loMatchPcp uint8 = 8 // could the const 'cPrioDoNotFilter' be used from omci_vlan_config.go ?
 	var loIPProto uint32
@@ -4541,7 +4538,8 @@
 							log.Fields{"device-id": dh.DeviceID})
 					} else {
 						onuDevEntry.MutexPersOnuConfig.RLock()
-						if onuDevEntry.SOnuPersistentData.PersOperState == "up" {
+						switch onuDevEntry.SOnuPersistentData.PersOperState {
+						case "up":
 							connectStatus = voltha.ConnectStatus_REACHABLE
 							if !onuDevEntry.SOnuPersistentData.PersUniDisableDone {
 								if onuDevEntry.SOnuPersistentData.PersUniUnlockDone {
@@ -4550,9 +4548,7 @@
 									operState = voltha.OperStatus_ACTIVATING
 								}
 							}
-						} else if onuDevEntry.SOnuPersistentData.PersOperState == "down" ||
-							onuDevEntry.SOnuPersistentData.PersOperState == "unknown" ||
-							onuDevEntry.SOnuPersistentData.PersOperState == "" {
+						case "down", "unknown", "":
 							operState = voltha.OperStatus_DISCOVERED
 						}
 						onuDevEntry.MutexPersOnuConfig.RUnlock()
@@ -4613,7 +4609,7 @@
 				logger.Errorw(ctx, "No valid OnuDevice", log.Fields{"device-id": dh.DeviceID})
 			} else {
 				onuDevEntry.MutexReconciledTpInstances.Lock()
-				onuDevEntry.ReconciledTpInstances = make(map[uint8]map[uint8]inter_adapter.TechProfileDownloadMessage)
+				onuDevEntry.ReconciledTpInstances = make(map[uint8]map[uint8]ia.TechProfileDownloadMessage)
 				onuDevEntry.MutexReconciledTpInstances.Unlock()
 			}
 		}()
@@ -4745,7 +4741,7 @@
 	subCtx, cancel := context.WithTimeout(log.WithSpanFromContext(context.Background(), ctx), dh.config.RPCTimeout)
 	defer cancel()
 	logger.Debugw(subCtx, "get-device-from-core", log.Fields{"device-id": deviceID})
-	return cClient.GetDevice(subCtx, &vc.ID{Id: deviceID})
+	return cClient.GetDevice(subCtx, &common.ID{Id: deviceID})
 }
 
 func (dh *deviceHandler) updateDeviceStateInCore(ctx context.Context, deviceStateFilter *ca.DeviceStateFilter) error {
@@ -5101,7 +5097,7 @@
 }
 
 // GetOnuIndication - TODO: add comment
-func (dh *deviceHandler) GetOnuIndication() *openolt.OnuIndication {
+func (dh *deviceHandler) GetOnuIndication() *oop.OnuIndication {
 	return dh.pOnuIndication
 }
 
diff --git a/internal/pkg/core/openonu.go b/internal/pkg/core/openonu.go
index 3135a94..0f6a887 100755
--- a/internal/pkg/core/openonu.go
+++ b/internal/pkg/core/openonu.go
@@ -929,6 +929,7 @@
 
 	onuIndication := onuInd.OnuIndication
 	onuOperstate := onuIndication.GetOperState()
+	//nolint:staticcheck
 	waitForDhInstPresent := false
 	if onuOperstate == "up" {
 		//Race condition (relevant in BBSIM-environment only): Due to unsynchronized processing of olt-adapter and rw_core,
@@ -943,17 +944,18 @@
 			"AdminState": onuIndication.GetAdminState(), "OperState": onuOperstate,
 			"SNR": onuIndication.GetSerialNumber()})
 
-		if onuOperstate == "up" {
+		switch onuOperstate {
+		case "up":
 			if err := handler.createInterface(ctx, onuIndication); err != nil {
 				return nil, err
 			}
 			return &empty.Empty{}, nil
-		} else if (onuOperstate == "down") || (onuOperstate == "unreachable") {
+		case "down", "unreachable":
 			if err := handler.UpdateInterface(ctx); err != nil {
 				return nil, err
 			}
 			return &empty.Empty{}, nil
-		} else {
+		default:
 			logger.Errorw(ctx, "unknown-onu-ind-request operState", log.Fields{"OnuId": onuIndication.GetOnuId()})
 			return nil, fmt.Errorf("invalidOperState: %s, %s", onuOperstate, onuInd.DeviceId)
 		}
diff --git a/internal/pkg/mib/mib_sync.go b/internal/pkg/mib/mib_sync.go
index 13f4047..9efc65d 100755
--- a/internal/pkg/mib/mib_sync.go
+++ b/internal/pkg/mib/mib_sync.go
@@ -751,9 +751,9 @@
 		if meName == devdb.CUnknownItuG988ManagedEntity || meName == devdb.CUnknownVendorSpecificManagedEntity {
 			logger.Debugw(ctx, "MibUploadNextResponse contains unknown ME", log.Fields{"device-id": oo.deviceID,
 				"Me-Name": devdb.UnknownMeOrAttribName(meName), "Me-ClassId": meClassID, "Me-InstId": meEntityID,
-				"unknown mask": msgObj.ReportedME.GetAttributeMask(), "unknown attributes": msgObj.BaseLayer.Payload})
+				"unknown mask": msgObj.ReportedME.GetAttributeMask(), "unknown attributes": msgObj.Payload})
 			oo.pOnuDB.PutUnknownMeOrAttrib(ctx, devdb.UnknownMeOrAttribName(meName), meClassID, meEntityID,
-				msgObj.ReportedME.GetAttributeMask(), msgObj.BaseLayer.Payload[devdb.CStartUnknownMeAttribsInBaseLayerPayload:])
+				msgObj.ReportedME.GetAttributeMask(), msgObj.Payload[devdb.CStartUnknownMeAttribsInBaseLayerPayload:])
 		} else {
 			//with relaxed decoding set in the OMCI-LIB we have the chance to detect if there are some unknown attributes appended which we cannot decode
 			if unknownAttrLayer := (*msg.OmciPacket).Layer(omci.LayerTypeUnknownAttributes); unknownAttrLayer != nil {
@@ -1159,7 +1159,8 @@
 
 func (oo *OnuDeviceEntry) handleOmciGetResponseOnuG(ctx context.Context, meAttributes me.AttributeValueMap) error {
 	currentState := oo.PMibUploadFsm.PFsm.Current()
-	if currentState == UlStGettingVendorAndSerial {
+	switch currentState {
+	case UlStGettingVendorAndSerial:
 		if onuGVendorID, ok := meAttributes[me.OnuG_VendorId]; ok {
 			vendorID := cmn.TrimStringFromMeOctet(onuGVendorID)
 			if vendorID == "" {
@@ -1210,7 +1211,7 @@
 		// trigger retrieval of Version
 		_ = oo.PMibUploadFsm.PFsm.Event(UlEvGetVersion)
 		return nil
-	} else if currentState == UlStGettingVersion {
+	case UlStGettingVersion:
 		if onuGVersion, ok := meAttributes[me.OnuG_Version]; ok {
 			version := cmn.TrimStringFromMeOctet(onuGVersion)
 			if version == "" {
@@ -1237,7 +1238,7 @@
 		// trigger retrieval of EquipmentId and OMCC version
 		_ = oo.PMibUploadFsm.PFsm.Event(UlEvGetEquipIDAndOmcc)
 		return nil
-	} else {
+	default:
 		logger.Errorw(ctx, "MibSync FSM - wrong state OnuG response processing - handling of MibSyncChan stopped!",
 			log.Fields{"currentState": currentState, "device-id": oo.deviceID})
 		_ = oo.PMibUploadFsm.PFsm.Event(UlEvStop)
diff --git a/internal/pkg/mib/onu_device_entry.go b/internal/pkg/mib/onu_device_entry.go
index cbeb76d..65d223f 100755
--- a/internal/pkg/mib/onu_device_entry.go
+++ b/internal/pkg/mib/onu_device_entry.go
@@ -518,7 +518,8 @@
 	logger.Debugw(ctx, "relaying system-event", log.Fields{"device-id": oo.deviceID, "Event": devEvent})
 	// decouple the handler transfer from further processing here
 	// TODO!!! check if really no synch is required within the system e.g. to ensure following steps ..
-	if devEvent == cmn.MibDatabaseSync {
+	switch devEvent {
+	case cmn.MibDatabaseSync:
 		if oo.devState < cmn.MibDatabaseSync { //devState has not been synced yet
 			oo.devState = cmn.MibDatabaseSync
 			go oo.baseDeviceHandler.DeviceProcStatusUpdate(ctx, devEvent)
@@ -527,7 +528,7 @@
 			logger.Debugw(ctx, "mibinsync-event in some already synced state - ignored",
 				log.Fields{"device-id": oo.deviceID, "state": oo.devState})
 		}
-	} else if devEvent == cmn.MibDownloadDone {
+	case cmn.MibDownloadDone:
 		if oo.devState < cmn.MibDownloadDone { //devState has not been synced yet
 			oo.devState = cmn.MibDownloadDone
 			go oo.baseDeviceHandler.DeviceProcStatusUpdate(ctx, devEvent)
@@ -535,7 +536,7 @@
 			logger.Debugw(ctx, "mibdownloaddone-event was already seen - ignored",
 				log.Fields{"device-id": oo.deviceID, "state": oo.devState})
 		}
-	} else {
+	default:
 		logger.Warnw(ctx, "device-event not yet handled",
 			log.Fields{"device-id": oo.deviceID, "state": devEvent})
 	}
diff --git a/internal/pkg/omcitst/omci_self_test_handler.go b/internal/pkg/omcitst/omci_self_test_handler.go
index fd98f6b..14b70d5 100755
--- a/internal/pkg/omcitst/omci_self_test_handler.go
+++ b/internal/pkg/omcitst/omci_self_test_handler.go
@@ -26,7 +26,6 @@
 	"github.com/looplab/fsm"
 	"github.com/opencord/omci-lib-go/v2"
 	"github.com/opencord/omci-lib-go/v2/generated"
-	me "github.com/opencord/omci-lib-go/v2/generated"
 	"github.com/opencord/voltha-lib-go/v7/pkg/log"
 	cmn "github.com/opencord/voltha-openonu-adapter-go/internal/pkg/common"
 	"github.com/opencord/voltha-protos/v5/go/extension"
@@ -172,7 +171,7 @@
 func (selfTestCb *SelfTestControlBlock) getMeClassID(ctx context.Context, reqMsg extension.SingleGetValueRequest) (generated.ClassID, error) {
 	switch reqMsg.GetRequest().GetRequest().(type) {
 	case *extension.GetValueRequest_OnuOpticalInfo:
-		return me.AniGClassID, nil
+		return generated.AniGClassID, nil
 	default:
 		logger.Warnw(ctx, "unsupported me class id for self test", log.Fields{"device-id": selfTestCb.deviceID})
 		return 0, fmt.Errorf("unsupported me class id for self test %v", selfTestCb.deviceID)
@@ -264,7 +263,7 @@
 	var msgObj *omci.OpticalLineSupervisionTestResult
 	var msgOk bool
 	switch classID {
-	case me.AniGClassID:
+	case generated.AniGClassID:
 		msgObj, msgOk = msgLayer.(*omci.OpticalLineSupervisionTestResult)
 	default:
 		// We should not really land here
diff --git a/internal/pkg/omcitst/omci_test_request.go b/internal/pkg/omcitst/omci_test_request.go
index 2445855..cf8e005 100755
--- a/internal/pkg/omcitst/omci_test_request.go
+++ b/internal/pkg/omcitst/omci_test_request.go
@@ -26,7 +26,6 @@
 	"github.com/opencord/omci-lib-go/v2"
 	me "github.com/opencord/omci-lib-go/v2/generated"
 	"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"
 )
@@ -86,7 +85,9 @@
 		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, onu2gGet, CTestRequestOmciTimeout, cmn.CDefaultRetries, false, omciRxCallbackPair)
+		go func() {
+			_ = 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})
@@ -106,11 +107,11 @@
 	}
 	meInstance, omciErr := me.NewOnu2G(meParams)
 	if omciErr.GetError() == nil {
-		var messageSet omci.DeviceIdent = omci.BaselineIdent
+		var messageSet = omci.BaselineIdent
 		if oo.extended {
 			messageSet = omci.ExtendedIdent
 		}
-		omciLayer, msgLayer, err := oframe.EncodeFrame(meInstance, omci.GetRequestType, oframe.TransactionID(tid),
+		omciLayer, msgLayer, err := meframe.EncodeFrame(meInstance, omci.GetRequestType, meframe.TransactionID(tid),
 			meframe.FrameFormat(messageSet))
 		if err != nil {
 			logger.Errorw(ctx, "Cannot encode ONU2-G instance for get", log.Fields{
diff --git a/internal/pkg/pmmgr/onu_metrics_manager.go b/internal/pkg/pmmgr/onu_metrics_manager.go
index 2736b65..e6eda1c 100755
--- a/internal/pkg/pmmgr/onu_metrics_manager.go
+++ b/internal/pkg/pmmgr/onu_metrics_manager.go
@@ -2152,6 +2152,7 @@
 // nolint: gocyclo
 func (mm *OnuMetricsManager) populateEthernetBridgeHistoryMetrics(ctx context.Context, classID me.ClassID, entityID uint16,
 	meAttributes me.AttributeValueMap, requestedAttributes me.AttributeValueMap, ethPMHistData map[string]float32, intervalEndTime *int) error {
+	//nolint:staticcheck
 	upstream := false
 	if classID == me.EthernetFramePerformanceMonitoringHistoryDataUpstreamClassID {
 		upstream = true
@@ -3278,12 +3279,13 @@
 		logger.Debugw(ctx, "received-extended-pm-me-response",
 			log.Fields{"device-id": mm.deviceID, "resp": resp, "create": create, "meClassID": meClassID, "instID": instID, "upstream": upstream})
 		// If the result is me.InstanceExists it means the entity was already created. It is ok handled that as success
-		if resp == me.Success || resp == me.InstanceExists {
+		switch resp {
+		case me.Success, me.InstanceExists:
 			return true, nil
-		} else if resp == me.UnknownEntity || resp == me.ParameterError ||
-			resp == me.ProcessingError || resp == me.NotSupported || resp == me.AttributeFailure {
+		case me.UnknownEntity, me.ParameterError,
+			me.ProcessingError, me.NotSupported, me.AttributeFailure:
 			return false, fmt.Errorf("not-supported-me--resp-code-%v", resp)
-		} else {
+		default:
 			logger.Warnw(ctx, "failed to create me", log.Fields{"device-id": mm.deviceID, "resp": resp, "class-id": meClassID, "instID": instID, "upstream": upstream})
 			return true, fmt.Errorf("error-while-creating-me--resp-code-%v", resp)
 		}
diff --git a/internal/pkg/swupg/adapter_download_manager.go b/internal/pkg/swupg/adapter_download_manager.go
index 8dabf08..1185399 100755
--- a/internal/pkg/swupg/adapter_download_manager.go
+++ b/internal/pkg/swupg/adapter_download_manager.go
@@ -280,7 +280,7 @@
 		return nil, statsErr
 	}
 
-	var size int64 = stats.Size()
+	var size = stats.Size()
 	bytes := make([]byte, size)
 
 	buffer := bufio.NewReader(file)
diff --git a/internal/pkg/swupg/file_download_manager.go b/internal/pkg/swupg/file_download_manager.go
index 1893b4d..bb9bd69 100755
--- a/internal/pkg/swupg/file_download_manager.go
+++ b/internal/pkg/swupg/file_download_manager.go
@@ -174,7 +174,7 @@
 		return nil, statsErr
 	}
 
-	var size int64 = stats.Size()
+	var size = stats.Size()
 	bytes := make([]byte, size)
 
 	buffer := bufio.NewReader(file)
diff --git a/internal/pkg/swupg/omci_onu_upgrade.go b/internal/pkg/swupg/omci_onu_upgrade.go
index 3ef4612..3cce167 100755
--- a/internal/pkg/swupg/omci_onu_upgrade.go
+++ b/internal/pkg/swupg/omci_onu_upgrade.go
@@ -1539,7 +1539,7 @@
 			//CRC computation for all data bytes of the file
 			imageCRC := crc32a.Checksum(oFsm.imageBuffer[:int(oFsm.origImageLength)]) //store internal for multiple usage
 			//revert the retrieved CRC Byte Order (seems not to deliver NetworkByteOrder)
-			var byteSlice []byte = make([]byte, 4)
+			var byteSlice = make([]byte, 4)
 			binary.LittleEndian.PutUint32(byteSlice, uint32(imageCRC))
 			oFsm.imageCRC = binary.BigEndian.Uint32(byteSlice)
 			oFsm.mutexUpgradeParams.Unlock()
diff --git a/internal/pkg/uniprt/uniportadmin.go b/internal/pkg/uniprt/uniportadmin.go
index 2910f2e..9b67330 100755
--- a/internal/pkg/uniprt/uniportadmin.go
+++ b/internal/pkg/uniprt/uniportadmin.go
@@ -440,7 +440,8 @@
 		if (omciAdminState == 1) || (1<<uniPort.UniID)&oFsm.pDeviceHandler.GetUniPortMask() == (1<<uniPort.UniID) {
 			var meInstance *me.ManagedEntity
 			var err error
-			if uniPort.PortType == cmn.UniPPTP {
+			switch uniPort.PortType {
+			case cmn.UniPPTP:
 				logger.Debugw(ctx, "Setting PPTP admin state", log.Fields{
 					"device-id": oFsm.deviceID, "for PortNo": uniNo, "state (0-unlock)": omciAdminState})
 				oFsm.mutexPLastTxMeInstance.Lock()
@@ -460,7 +461,7 @@
 				}
 				oFsm.pLastTxMeInstance = meInstance
 				oFsm.mutexPLastTxMeInstance.Unlock()
-			} else if uniPort.PortType == cmn.UniVEIP {
+			case cmn.UniVEIP:
 				logger.Debugw(ctx, "Setting VEIP admin state", log.Fields{
 					"device-id": oFsm.deviceID, "for PortNo": uniNo, "state (0-unlock)": omciAdminState})
 				oFsm.mutexPLastTxMeInstance.Lock()
@@ -480,7 +481,7 @@
 				}
 				oFsm.pLastTxMeInstance = meInstance
 				oFsm.mutexPLastTxMeInstance.Unlock()
-			} else {
+			default:
 				//TODO: Discuss on the uni port type POTS .
 				logger.Warnw(ctx, "Unsupported UniTP type - skip",
 					log.Fields{"device-id": oFsm.deviceID, "Port": uniNo})
diff --git a/internal/pkg/uniprt/uniportstatus.go b/internal/pkg/uniprt/uniportstatus.go
index a680f56..a0b5bed 100755
--- a/internal/pkg/uniprt/uniportstatus.go
+++ b/internal/pkg/uniprt/uniportstatus.go
@@ -138,11 +138,12 @@
 		},
 	}
 	if pptpEthUniOperState, ok := meAttributes[me.PhysicalPathTerminationPointEthernetUni_OperationalState]; ok {
-		if pptpEthUniOperState.(uint8) == 0 {
+		switch pptpEthUniOperState.(uint8) {
+		case 0:
 			singleValResp.Response.GetUniInfo().OperState = extension.GetOnuUniInfoResponse_ENABLED
-		} else if pptpEthUniOperState.(uint8) == 1 {
+		case 1:
 			singleValResp.Response.GetUniInfo().OperState = extension.GetOnuUniInfoResponse_DISABLED
-		} else {
+		default:
 			singleValResp.Response.GetUniInfo().OperState = extension.GetOnuUniInfoResponse_OPERSTATE_UNDEFINED
 		}
 	} else {
@@ -152,11 +153,12 @@
 	}
 
 	if pptpEthUniAdminState, ok := meAttributes[me.PhysicalPathTerminationPointEthernetUni_OperationalState]; ok {
-		if pptpEthUniAdminState.(uint8) == 0 {
+		switch pptpEthUniAdminState.(uint8) {
+		case 0:
 			singleValResp.Response.GetUniInfo().AdmState = extension.GetOnuUniInfoResponse_UNLOCKED
-		} else if pptpEthUniAdminState.(uint8) == 1 {
+		case 1:
 			singleValResp.Response.GetUniInfo().AdmState = extension.GetOnuUniInfoResponse_LOCKED
-		} else {
+		default:
 			singleValResp.Response.GetUniInfo().AdmState = extension.GetOnuUniInfoResponse_ADMSTATE_UNDEFINED
 		}
 	} else {
