diff --git a/internal/pkg/application/application.go b/internal/pkg/application/application.go
index 7c61725..f0fa05e 100644
--- a/internal/pkg/application/application.go
+++ b/internal/pkg/application/application.go
@@ -209,20 +209,26 @@
 	MigratingServices            *util.ConcurrentMap //<vnetID,<RequestID, MigrateServicesRequest>>
 	VpvsBySvlan                  *util.ConcurrentMap // map[svlan]map[vnet_port]*VoltPortVnet
 	ConfiguredVlanForDeviceFlows *util.ConcurrentMap //map[string]map[string]bool
-	IgmpDsFlowAppliedForMvlan    map[uint16]bool
-	State                        controller.DeviceState
-	SouthBoundID                 string
-	NniPort                      string
-	Name                         string
-	SerialNum                    string
-	Ports                        sync.Map
-	VlanPortStatus               sync.Map
-	ActiveChannelsPerPon         sync.Map   // [PonPortID]*PonPortCfg
-	PonPortList                  sync.Map   // [PonPortID]map[string]string
-	ActiveChannelCountLock       sync.Mutex // This lock is used to update ActiveIGMPChannels
-	NniDhcpTrapVid               of.VlanType
-	GlobalDhcpFlowAdded          bool
-	icmpv6GroupAdded             bool
+
+	IgmpDsFlowAppliedForMvlan map[uint16]bool
+
+	Ports                sync.Map
+	VlanPortStatus       sync.Map
+	ActiveChannelsPerPon sync.Map // [PonPortID]*PonPortCfg
+	PonPortList          sync.Map // [PonPortID]map[string]string
+
+	State        controller.DeviceState
+	SouthBoundID string
+	NniPort      string
+	Name         string
+	SerialNum    string
+
+	ActiveChannelCountLock sync.Mutex // This lock is used to update ActiveIGMPChannels
+
+	NniDhcpTrapVid of.VlanType
+
+	GlobalDhcpFlowAdded bool
+	icmpv6GroupAdded    bool
 }
 
 type VoltDevInterface interface {
@@ -413,13 +419,13 @@
 type VoltAppInterface interface {
 	AddVnet(cntx context.Context, cfg VnetConfig, oper *VnetOper) error
 	AddService(cntx context.Context, cfg VoltServiceCfg, oper *VoltServiceOper) error
-	AddDeviceConfig(cntx context.Context, serialNum, hardwareIdentifier, nasID, ipAddress, uplinkPort string, nniDhcpTrapID int) error
+	AddDeviceConfig(cntx context.Context, serialNum, hardwareIdentifier, nasID, ipAddress, uplinkPort string, nniDhcpTrapID uint16) error
 	GetFlowProvisionStatus(portNo string) FlowProvisionStatus
 	DelServiceWithPrefix(cntx context.Context, prefix string) error
 	GetDevice(device string) *VoltDevice
 	GetTaskList(device string) map[int]*TaskInfo
 	AddMeterProf(cntx context.Context, cfg VoltMeter)
-	AddMvlanProfile(cntx context.Context, name string, mvlan of.VlanType, ponVlan of.VlanType, groups map[string][]string, isChannelBasedGroup bool, OLTSerialNum []string, activeChannelsPerPon int, proxy map[string]common.MulticastGroupProxy) error
+	AddMvlanProfile(cntx context.Context, name string, mvlan of.VlanType, ponVlan of.VlanType, groups map[string][]string, isChannelBasedGroup bool, OLTSerialNum []string, activeChannelsPerPon uint32, proxy map[string]common.MulticastGroupProxy) error
 	DelMvlanProfile(cntx context.Context, name string) error
 	GetMvlanProfileByTag(vlan of.VlanType) *MvlanProfile
 	AddMcastConfig(cntx context.Context, MvlanProfileID string, IgmpProfileID string, IgmpProxyIP string, OltSerialNum string) error
@@ -498,7 +504,7 @@
 	IPAddress          string `json:"ipAddress"`
 	UplinkPort         string `json:"uplinkPort"`
 	NasID              string `json:"nasId"`
-	NniDhcpTrapVid     int    `json:"nniDhcpTrapVid"`
+	NniDhcpTrapVid     uint16 `json:"nniDhcpTrapVid"`
 }
 
 // PonPortCfg contains NB port config and activeIGMPChannels count
@@ -537,7 +543,10 @@
 			continue
 		}
 		logger.Debugw(ctx, "Port recovered", log.Fields{"port": port})
-		ponPortID, _ := strconv.Atoi(key)
+		ponPortID, err := strconv.ParseUint(key, 10, 32)
+		if err != nil {
+			logger.Errorw(ctx, "Error converting string to uint32:", log.Fields{"deviceID": deviceID, "error": err})
+		}
 		nbDevice.PonPorts.Store(uint32(ponPortID), &port)
 	}
 	va.NbDevice.Store(deviceID, nbDevice)
@@ -612,7 +621,7 @@
 	return nil
 }
 
-func (va *VoltApplication) AddDeviceConfig(cntx context.Context, serialNum, hardwareIdentifier, nasID, ipAddress, uplinkPort string, nniDhcpTrapID int) error {
+func (va *VoltApplication) AddDeviceConfig(cntx context.Context, serialNum, hardwareIdentifier, nasID, ipAddress, uplinkPort string, nniDhcpTrapID uint16) error {
 	logger.Debugw(ctx, "Received Add device config", log.Fields{"SerialNumber": serialNum, "HardwareIdentifier": hardwareIdentifier, "NasID": nasID, "IPAddress": ipAddress, "UplinkPort": uplinkPort, "NniDhcpTrapID": nniDhcpTrapID})
 	var dc *DeviceConfig
 
@@ -754,11 +763,12 @@
 // AddIgmpGroups to add Igmp groups.
 func (va *VoltApplication) AddIgmpGroups(numOfGroups uint32) {
 	logger.Debugw(ctx, "AddIgmpGroups", log.Fields{"NumOfGroups": numOfGroups})
+	var i uint32
 	//TODO: Temp change to resolve group id issue in pOLT
 	//for i := 1; uint32(i) <= numOfGroups; i++ {
-	for i := 2; uint32(i) <= (numOfGroups + 1); i++ {
+	for i = 2; i <= (numOfGroups + 1); i++ {
 		ig := IgmpGroup{}
-		ig.GroupID = uint32(i)
+		ig.GroupID = i
 		va.IgmpGroupIds = append(va.IgmpGroupIds, &ig)
 	}
 }
@@ -1788,7 +1798,7 @@
 // CheckAndDeactivateService - check if the attempts for flow delete has reached threshold or not
 func (va *VoltApplication) CheckAndDeactivateService(ctx context.Context, flow *of.VoltSubFlow, devSerialNum string, devID string) {
 	logger.Debugw(ctx, "Check and Deactivate service", log.Fields{"Cookie": flow.Cookie, "FlowCount": flow.FlowCount, "DeviceSerial": devSerialNum})
-	if flow.FlowCount >= controller.GetController().GetMaxFlowRetryAttempt() {
+	if flow.FlowCount >= uint32(controller.GetController().GetMaxFlowRetryAttempt()) {
 		devConfig := va.GetDeviceConfig(devSerialNum)
 		if devConfig != nil {
 			portNo := util.GetUniPortFromFlow(devConfig.UplinkPort, flow)
diff --git a/internal/pkg/application/application_test.go b/internal/pkg/application/application_test.go
index 4c2fe4c..3372266 100644
--- a/internal/pkg/application/application_test.go
+++ b/internal/pkg/application/application_test.go
@@ -1307,7 +1307,7 @@
 		nasID              string
 		ipAddress          string
 		uplinkPort         string
-		nniDhcpTrapID      int
+		nniDhcpTrapID      uint16
 	}
 	dvcConfg := &DeviceConfig{
 		SerialNumber:       "SDX6320031",
diff --git a/internal/pkg/application/flowevent_test.go b/internal/pkg/application/flowevent_test.go
index 8621521..9736ac3 100644
--- a/internal/pkg/application/flowevent_test.go
+++ b/internal/pkg/application/flowevent_test.go
@@ -162,6 +162,7 @@
 		flowStatus   intf.FlowStatus
 		flowEventMap *util.ConcurrentMap
 	}
+
 	vs := &VoltService{
 		VoltServiceCfg: VoltServiceCfg{},
 	}
@@ -249,6 +250,7 @@
 		flowStatus   intf.FlowStatus
 		flowEventMap *util.ConcurrentMap
 	}
+
 	vs := &VoltService{
 		VoltServiceCfg: VoltServiceCfg{},
 	}
diff --git a/internal/pkg/application/igmp.go b/internal/pkg/application/igmp.go
index a531619..4ce9849 100644
--- a/internal/pkg/application/igmp.go
+++ b/internal/pkg/application/igmp.go
@@ -659,7 +659,12 @@
 		}
 		if portChannels, ok := igd.PortChannelMap.Load(uniPort); ok {
 			channelList := portChannels.([]net.IP)
-			activeChannelCount += uint32(len(channelList))
+			channelLength := len(channelList)
+			// Check if the length exceeds uint32's maximum value
+			if channelLength > int(^uint32(0)) {
+				logger.Error(ctx, "Error converting string to uint32")
+			}
+			activeChannelCount += uint32(channelLength)
 		}
 		return true
 	}
@@ -1207,7 +1212,7 @@
 }
 
 // UpdateMvlanProfile - only channel groups be updated
-func (va *VoltApplication) UpdateMvlanProfile(cntx context.Context, name string, vlan of.VlanType, groups map[string][]string, activeChannelCount int, proxy map[string]common.MulticastGroupProxy) error {
+func (va *VoltApplication) UpdateMvlanProfile(cntx context.Context, name string, vlan of.VlanType, groups map[string][]string, activeChannelCount uint32, proxy map[string]common.MulticastGroupProxy) error {
 	mvpIntf, ok := va.MvlanProfilesByName.Load(name)
 	if !ok {
 		logger.Error(ctx, "Update Mvlan Failed: Profile does not exist")
@@ -1485,7 +1490,7 @@
 
 // AddMvlanProfile for addition of a MVLAN profile
 func (va *VoltApplication) AddMvlanProfile(cntx context.Context, name string, mvlan of.VlanType, ponVlan of.VlanType,
-	groups map[string][]string, isChannelBasedGroup bool, OLTSerialNum []string, activeChannelsPerPon int, proxy map[string]common.MulticastGroupProxy) error {
+	groups map[string][]string, isChannelBasedGroup bool, OLTSerialNum []string, activeChannelsPerPon uint32, proxy map[string]common.MulticastGroupProxy) error {
 	var mvp *MvlanProfile
 
 	if mvp = va.GetMvlanProfileByTag(mvlan); mvp != nil {
@@ -1504,7 +1509,7 @@
 	}
 
 	if mvp == nil {
-		mvp = NewMvlanProfile(name, mvlan, ponVlan, isChannelBasedGroup, OLTSerialNum, uint32(activeChannelsPerPon))
+		mvp = NewMvlanProfile(name, mvlan, ponVlan, isChannelBasedGroup, OLTSerialNum, activeChannelsPerPon)
 	}
 
 	va.storeMvlansMap(mvlan, name, mvp)
@@ -1712,10 +1717,10 @@
 	}
 
 	igmpProfile.ProfileID = igmpProfileConfig.ProfileID
-	igmpProfile.UnsolicitedTimeOut = uint32(igmpProfileConfig.UnsolicitedTimeOut)
-	igmpProfile.MaxResp = uint32(igmpProfileConfig.MaxResp)
+	igmpProfile.UnsolicitedTimeOut = igmpProfileConfig.UnsolicitedTimeOut
+	igmpProfile.MaxResp = igmpProfileConfig.MaxResp
 
-	keepAliveInterval := uint32(igmpProfileConfig.KeepAliveInterval)
+	keepAliveInterval := igmpProfileConfig.KeepAliveInterval
 
 	// KeepAliveInterval should have a min of 10 seconds
 	if keepAliveInterval < MinKeepAliveInterval {
@@ -1724,12 +1729,12 @@
 	}
 	igmpProfile.KeepAliveInterval = keepAliveInterval
 
-	igmpProfile.KeepAliveCount = uint32(igmpProfileConfig.KeepAliveCount)
-	igmpProfile.LastQueryInterval = uint32(igmpProfileConfig.LastQueryInterval)
-	igmpProfile.LastQueryCount = uint32(igmpProfileConfig.LastQueryCount)
+	igmpProfile.KeepAliveCount = igmpProfileConfig.KeepAliveCount
+	igmpProfile.LastQueryInterval = igmpProfileConfig.LastQueryInterval
+	igmpProfile.LastQueryCount = igmpProfileConfig.LastQueryCount
 	igmpProfile.FastLeave = *igmpProfileConfig.FastLeave
 	igmpProfile.PeriodicQuery = *igmpProfileConfig.PeriodicQuery
-	igmpProfile.IgmpCos = uint8(igmpProfileConfig.IgmpCos)
+	igmpProfile.IgmpCos = igmpProfileConfig.IgmpCos
 	igmpProfile.WithRAUpLink = *igmpProfileConfig.WithRAUpLink
 	igmpProfile.WithRADownLink = *igmpProfileConfig.WithRADownLink
 
diff --git a/internal/pkg/application/igmpgroupchannel.go b/internal/pkg/application/igmpgroupchannel.go
index d8a2644..56f189c 100644
--- a/internal/pkg/application/igmpgroupchannel.go
+++ b/internal/pkg/application/igmpgroupchannel.go
@@ -674,6 +674,7 @@
 }
 
 // NumReceivers returns total number of receivers left on the group
+// #nosec G115
 func (igc *IgmpGroupChannel) NumReceivers() uint32 {
 	return uint32(len(igc.CurReceivers) + len(igc.NewReceivers))
 }
diff --git a/internal/pkg/application/igmpponportchannel.go b/internal/pkg/application/igmpponportchannel.go
index 4f858e8..22ef806 100644
--- a/internal/pkg/application/igmpponportchannel.go
+++ b/internal/pkg/application/igmpponportchannel.go
@@ -56,6 +56,7 @@
 
 // GetActiveChannelCount returns the number of active channel count
 // for this pon port in the current group.
+// #nosec G115
 func (ponPortChannels *PonPortChannels) GetActiveChannelCount() uint32 {
 	return uint32(ponPortChannels.ChannelList.Length())
 }
diff --git a/internal/pkg/application/minor_upgrade.go b/internal/pkg/application/minor_upgrade.go
index 096d7b5..428ca5e 100644
--- a/internal/pkg/application/minor_upgrade.go
+++ b/internal/pkg/application/minor_upgrade.go
@@ -79,7 +79,7 @@
 		}
 	}
 	param.Name = newKey
-	if param.DevicesList == nil || len(param.DevicesList) == 0 {
+	if len(param.DevicesList) == 0 {
 		param.DevicesList = append(param.DevicesList, "") // Empty OLT serial number as of now since submgr won't have proper serial num
 	}
 	return nil
@@ -115,7 +115,7 @@
 func updateMvlans(cntx context.Context, hash string, value interface{}) error {
 	logger.Debugw(ctx, "Update Mvlans", log.Fields{"Hash": hash})
 	param := value.(*MvlanProfile)
-	if param.DevicesList == nil || len(param.DevicesList) == 0 {
+	if len(param.DevicesList) == 0 {
 		param.DevicesList = make(map[string]OperInProgress) // Empty OLT serial number as of now since submgr won't have proper serial num
 		if err := param.WriteToDb(cntx); err != nil {
 			logger.Errorw(ctx, "Mvlan profile write to DB failed", log.Fields{"ProfileName": param.Name})
diff --git a/internal/pkg/application/service.go b/internal/pkg/application/service.go
index e060548..ae6f313 100644
--- a/internal/pkg/application/service.go
+++ b/internal/pkg/application/service.go
@@ -82,7 +82,8 @@
 // MacAddress -	The MAC hardware address learnt on the UNI interface
 // MacAddresses - Not yet implemented. To be used to learn more MAC addresses
 type VoltServiceCfg struct {
-	DsRemarkPbitsMap           map[int]int // Ex: Remark case {0:0,1:0} and No-remark case {1:1}
+	FlowPushCount              map[string]int64 // Tracks the number of flow install/delete failure attempts per cookie in order to throttle flow auditing
+	DsRemarkPbitsMap           map[int]int      // Ex: Remark case {0:0,1:0} and No-remark case {1:1}
 	Name                       string
 	CircuitID                  string
 	Port                       string
@@ -94,9 +95,9 @@
 	RemoteIDType               string
 	DataRateAttr               string
 	ServiceType                string
-	MacAddr                    net.HardwareAddr
-	RemoteID                   []byte
 	Pbits                      []of.PbitType
+	RemoteID                   []byte
+	MacAddr                    net.HardwareAddr
 	Trigger                    ServiceTrigger
 	MacLearning                MacLearningType
 	ONTEtherTypeClassification int
@@ -155,8 +156,8 @@
 
 // VoltService structure
 type VoltService struct {
-	VoltServiceOper
 	Version string
+	VoltServiceOper
 	VoltServiceCfg
 }
 
@@ -214,6 +215,7 @@
 	vs.Ipv6Addr = net.ParseIP("::")
 	vs.PendingFlows = make(map[string]bool)
 	vs.AssociatedFlows = make(map[string]bool)
+	vs.FlowPushCount = make(map[string]int64)
 	return &vs
 }
 
