diff --git a/.golangci.yml b/.golangci.yml
index be5b4a3..d42a821 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -11,6 +11,50 @@
 #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 #See the License for the specific language governing permissions and
 #limitations under the License.
+version: "2"
+
+linters:
+  enable:
+    #- gocritic
+    #- gochecknoglobals
+    #- gochecknoinits
+    - gocyclo
+    - govet
+    - ineffassign
+    - misspell
+    - gosec
+    - errcheck
+    - staticcheck
+    - unused
+    - unparam
+  exclusions:
+    rules:
+      - path: ".*_test.go"
+        linters:
+          - govet
+          - fieldalignment
+          - staticcheck
+      - text: "weak cryptographic primitive"
+        linters:
+          - gosec
+      - text: "Error return value of `rxCallbackEntry.cbFunction` is not checked"
+        linters:
+          - gocritic
+      - text: "Error return value of `oo.sendNextRequest` is not checked"
+        linters:
+          - gocritic
+      - text: "Error return value of `oo.pDevOmciCC.send` is not checked"
+        linters:
+          - gocritic
+      - text: "Error return value of `onuDeviceEntry.mibDbClass` is not checked"
+        linters:
+          - gocritic
+      - text: "SA1019: voltha.ImageDownload is deprecated"
+        linters:
+          - staticcheck
+      - text: 'G115: integer overflow conversion'
+        linters:
+          - gosec
 
 linters-settings:
   govet:
@@ -35,41 +79,29 @@
     ignore-words:
       - cancelled
 
-linters:
+formatters:
   enable:
-    #- gocritic
-    #- gochecknoglobals
-    #- gochecknoinits
-    - gocyclo
     - gofmt
-    - govet
-    - ineffassign
-    - misspell
-    - gosec
-    - errcheck
     - goimports
-    - gosimple
-    - staticcheck
-    - unused
-    - unparam
 
-run:
-  modules-download-mode: vendor
+# run:
+#   modules-download-mode: vendor
 
 issues:
-  exclude-rules:
-    - text: "weak cryptographic primitive"
-      linters:
-        - gosec
-    - path: ".*_test.go"
-      linters:
-        - govet
-        - fieldalignment
-  exclude:
-    - "Error return value of `rxCallbackEntry.cbFunction` is not checked"
-    - "Error return value of `oo.sendNextRequest` is not checked"
-    - "Error return value of `oo.pDevOmciCC.send` is not checked"
-    - "Error return value of `onuDeviceEntry.mibDbClass` is not checked"
-    - "SA1019: voltha.ImageDownload is deprecated"
-    - 'G115: integer overflow conversion'
-  exclude-use-default: false
+  modules-download-mode: vendor
+  # exclude-rules:
+  #   - text: "weak cryptographic primitive"
+  #     linters:
+  #       - gosec
+  #   - path: ".*_test.go"
+  #     linters:
+  #       - govet
+  #       - fieldalignment
+  # exclude:
+  #   - "Error return value of `rxCallbackEntry.cbFunction` is not checked"
+  #   - "Error return value of `oo.sendNextRequest` is not checked"
+  #   - "Error return value of `oo.pDevOmciCC.send` is not checked"
+  #   - "Error return value of `onuDeviceEntry.mibDbClass` is not checked"
+  #   - "SA1019: voltha.ImageDownload is deprecated"
+  #   - 'G115: integer overflow conversion'
+  # exclude-use-default: false
diff --git a/Makefile b/Makefile
index ce2f3c1..ed44cc2 100755
--- a/Makefile
+++ b/Makefile
@@ -83,7 +83,7 @@
 	--build-arg org_opencord_vcs_dirty="${DOCKER_LABEL_VCS_DIRTY}"
 
 # tool containers
-VOLTHA_TOOLS_VERSION ?= 3.1.1
+VOLTHA_TOOLS_VERSION ?= 3.1.3
 
 GO                = docker run --rm --user $$(id -u):$$(id -g) -v ${CURDIR}:/app -v gocache:/.cache -v gocache-${VOLTHA_TOOLS_VERSION}:/go/pkg voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-golang go
 GO_JUNIT_REPORT   = docker run --rm --user $$(id -u):$$(id -g) -v ${CURDIR}:/app -i voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-go-junit-report go-junit-report
@@ -233,7 +233,7 @@
 sca: ## Runs static code analysis with the golangci-lint tool
 	@mkdir -p ./sca-report
 	@echo "Running static code analysis..."
-	@${GOLANGCI_LINT} run  --out-format junit-xml ./... | tee ./sca-report/sca-report.xml
+	@${GOLANGCI_LINT} run --output.text.path=stdout --output.junit-xml.path=./sca-report/sca-report.xml ./...
 	@echo "Static code analysis OK"
 
 ## -----------------------------------------------------------------------
diff --git a/VERSION b/VERSION
index 2e21b72..83ed3cf 100755
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.12.31
+2.12.32
diff --git a/docker/Dockerfile.openonu b/docker/Dockerfile.openonu
index c09f8ed..75bb362 100755
--- a/docker/Dockerfile.openonu
+++ b/docker/Dockerfile.openonu
@@ -15,7 +15,7 @@
 # -------------
 # Build stage
 
-FROM golang:1.23.1-alpine3.20 AS dev
+FROM golang:1.24.5-alpine3.22 AS dev
 
 # Install required packages
 RUN apk add --no-cache build-base=0.5-r3
diff --git a/go.mod b/go.mod
index a2765ae..9abf2d0 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
 module github.com/opencord/voltha-openonu-adapter-go
 
-go 1.23.1
+go 1.24.5
 
 replace (
 	github.com/coreos/bbolt v1.3.4 => go.etcd.io/bbolt v1.3.4
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 {
