diff --git a/internal/pkg/onuadaptercore/alarm_manager.go b/internal/pkg/onuadaptercore/alarm_manager.go
index dcf3a18..1efc819 100644
--- a/internal/pkg/onuadaptercore/alarm_manager.go
+++ b/internal/pkg/onuadaptercore/alarm_manager.go
@@ -54,6 +54,7 @@
 	onuAlarmManagerLock        sync.RWMutex
 	processMessage             bool
 	activeAlarms               alarms
+	onuEventsList              map[onuDevice]onuDeviceEvent
 }
 
 type onuDevice struct {
@@ -76,12 +77,7 @@
 	alarmManager.stopProcessingOmciMessages = make(chan bool)
 	alarmManager.processMessage = false
 	alarmManager.activeAlarms = make(map[alarmInfo]struct{})
-	return &alarmManager
-}
-
-// getDeviceEventData returns the event data for a device
-func (am *onuAlarmManager) getDeviceEventData(ctx context.Context, classID me.ClassID, alarmNo uint8) (onuDeviceEvent, error) {
-	onuEventsList := map[onuDevice]onuDeviceEvent{
+	alarmManager.onuEventsList = map[onuDevice]onuDeviceEvent{
 		{classID: circuitPackClassID, alarmno: 0}: {EventName: "ONU_EQUIPMENT",
 			EventCategory: voltha.EventCategory_EQUIPMENT, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu equipment"},
 		{classID: circuitPackClassID, alarmno: 2}: {EventName: "ONU_SELF_TEST_FAIL",
@@ -119,20 +115,28 @@
 		{classID: aniGClassID, alarmno: 6}: {EventName: "ONU_LASER_BIAS_CURRENT",
 			EventCategory: voltha.EventCategory_EQUIPMENT, EventSubCategory: voltha.EventSubCategory_ONU, EventDescription: "onu laser bias current"},
 	}
-	if onuEventDetails, ok := onuEventsList[onuDevice{classID: classID, alarmno: alarmNo}]; ok {
+	return &alarmManager
+}
+
+// getDeviceEventData returns the event data for a device
+func (am *onuAlarmManager) getDeviceEventData(ctx context.Context, classID me.ClassID, alarmNo uint8) (onuDeviceEvent, error) {
+	if onuEventDetails, ok := am.onuEventsList[onuDevice{classID: classID, alarmno: alarmNo}]; ok {
 		return onuEventDetails, nil
 	}
 	return onuDeviceEvent{}, errors.New("onu Event Detail not found")
-
 }
 
 func (am *onuAlarmManager) startOMCIAlarmMessageProcessing(ctx context.Context) {
 	am.onuAlarmManagerLock.Lock()
 	am.processMessage = true
+	if am.activeAlarms == nil {
+		am.activeAlarms = make(map[alarmInfo]struct{})
+	}
 	am.onuAlarmManagerLock.Unlock()
 	if stop := <-am.stopProcessingOmciMessages; stop {
 		am.onuAlarmManagerLock.Lock()
 		am.processMessage = false
+		am.activeAlarms = nil
 		am.onuAlarmManagerLock.Unlock()
 	}
 }
@@ -176,6 +180,10 @@
 	alarmBitmap := msg.AlarmBitmap
 	logger.Debugw(ctx, "processing-alarm-data", log.Fields{"class-id": classID, "instance-id": meInstance,
 		"alarmBitMap": alarmBitmap, "sequence-no": sequenceNo})
+	if _, present := am.pDeviceHandler.pOnuOmciDevice.pOnuDB.meDb[classID][meInstance]; !present {
+		logger.Errorw(ctx, "me-class-instance-not-present", log.Fields{"class-id": classID, "instance-id": meInstance})
+		return fmt.Errorf("me-class-%d-instance-%d-not-present", classID, meInstance)
+	}
 	/*
 		if sequenceNo > 0 {
 			// TODO Need Auditing if sequence no does not matches, after incrementing the last sequence no by 1
diff --git a/internal/pkg/onuadaptercore/device_handler.go b/internal/pkg/onuadaptercore/device_handler.go
index 91f9a8d..c452fe5 100644
--- a/internal/pkg/onuadaptercore/device_handler.go
+++ b/internal/pkg/onuadaptercore/device_handler.go
@@ -198,6 +198,8 @@
 	collectorIsRunning         bool
 	mutexCollectorFlag         sync.RWMutex
 	stopCollector              chan bool
+	alarmManagerIsRunning      bool
+	mutextAlarmManagerFlag     sync.RWMutex
 	stopAlarmManager           chan bool
 	stopHeartbeatCheck         chan bool
 	uniEntityMap               map[uint32]*onuUniPort
@@ -226,6 +228,7 @@
 	dh.deviceEntrySet = make(chan bool, 1)
 	dh.collectorIsRunning = false
 	dh.stopCollector = make(chan bool, 2)
+	dh.alarmManagerIsRunning = false
 	dh.stopAlarmManager = make(chan bool, 2)
 	dh.stopHeartbeatCheck = make(chan bool, 2)
 	//dh.metrics = pmmetrics.NewPmMetrics(cloned.Id, pmmetrics.Frequency(150), pmmetrics.FrequencyOverride(false), pmmetrics.Grouped(false), pmmetrics.Metrics(pmNames))
@@ -1465,7 +1468,9 @@
 		// Start PM collector routine
 		go dh.startCollector(ctx)
 	}
-	go dh.startAlarmManager(ctx)
+	if !dh.getAlarmManagerIsRunning() {
+		go dh.startAlarmManager(ctx)
+	}
 
 	return nil
 }
@@ -1591,7 +1596,10 @@
 		// Stop collector routine
 		dh.stopCollector <- true
 	}
-	dh.stopAlarmManager <- true
+	if dh.getAlarmManagerIsRunning() {
+		dh.stopAlarmManager <- true
+	}
+
 	return nil
 }
 
@@ -2857,6 +2865,9 @@
 		// Start PM collector routine
 		go dh.startCollector(ctx)
 	}
+	if !dh.getAlarmManagerIsRunning() {
+		go dh.startAlarmManager(ctx)
+	}
 	dh.uniEntityMap = make(map[uint32]*onuUniPort)
 	dh.startReconciling(ctx)
 }
@@ -2874,14 +2885,30 @@
 	return flagValue
 }
 
+func (dh *deviceHandler) setAlarmManagerIsRunning(flagValue bool) {
+	dh.mutextAlarmManagerFlag.Lock()
+	dh.alarmManagerIsRunning = flagValue
+	dh.mutextAlarmManagerFlag.Unlock()
+}
+
+func (dh *deviceHandler) getAlarmManagerIsRunning() bool {
+	dh.mutextAlarmManagerFlag.RLock()
+	flagValue := dh.alarmManagerIsRunning
+	dh.mutextAlarmManagerFlag.RUnlock()
+	return flagValue
+}
+
 func (dh *deviceHandler) startAlarmManager(ctx context.Context) {
 	logger.Debugf(ctx, "startingAlarmManager")
 
 	// Start routine to process OMCI GET Responses
 	go dh.pAlarmMgr.startOMCIAlarmMessageProcessing(ctx)
+	dh.setAlarmManagerIsRunning(true)
 	if stop := <-dh.stopAlarmManager; stop {
 		logger.Debugw(ctx, "stopping-collector-for-onu", log.Fields{"device-id": dh.device.Id})
 		dh.pAlarmMgr.stopProcessingOmciMessages <- true // Stop the OMCI routines if any
+		dh.setAlarmManagerIsRunning(false)
+
 	}
 }
 func (dh *deviceHandler) startReconciling(ctx context.Context) {
