diff --git a/VERSION b/VERSION
index b77860e..a950b04 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-4.5.1-dev1
+4.5.2-dev1
diff --git a/internal/pkg/core/device_handler.go b/internal/pkg/core/device_handler.go
index 908fb57..e46999c 100755
--- a/internal/pkg/core/device_handler.go
+++ b/internal/pkg/core/device_handler.go
@@ -132,6 +132,7 @@
 
 	isDeviceDeletionInProgress bool
 	heartbeatSignature         uint32
+	prevOperStatus             common.OperStatus_Types
 }
 
 // OnuDevice represents ONU related info
@@ -502,6 +503,7 @@
 	defer func() {
 		dh.lockDevice.Lock()
 		dh.isReadIndicationRoutineActive = false
+		logger.Debugw(ctx, "isReadIndicationRoutineActive set to false", log.Fields{"device-id": dh.device.Id})
 		dh.lockDevice.Unlock()
 	}()
 	indications, err := dh.startOpenOltIndicationStream(ctx)
@@ -519,6 +521,7 @@
 
 	dh.lockDevice.Lock()
 	dh.isReadIndicationRoutineActive = true
+	logger.Debugw(ctx, "isReadIndicationRoutineActive set to true", log.Fields{"device-id": dh.device.Id})
 	dh.lockDevice.Unlock()
 
 Loop:
@@ -940,18 +943,63 @@
 // doStateUp handle the olt up indication and update to voltha core
 func (dh *DeviceHandler) doStateUp(ctx context.Context) error {
 	//starting the stat collector
+	// Declare deviceStateFilter to be used later
+	var deviceStateFilter *ca.DeviceStateFilter
 	go startCollector(ctx, dh)
 	device, err := dh.getDeviceFromCore(ctx, dh.device.Id)
-	if err == nil {
-		if device.OperStatus == voltha.OperStatus_RECONCILING {
-			err = dh.reconcileOnus(ctx)
-			if err != nil {
-				logger.Error(ctx, "unable to reconcile onu", log.Fields{"eeror": err})
-			}
-			err = dh.reconcilePonPorts(ctx)
-			if err != nil {
-				logger.Error(ctx, "unable to reconcile pon ports", log.Fields{"eeror": err})
-			}
+	if err != nil {
+		return fmt.Errorf("failed to get device from core: %w", err)
+	}
+	logger.Info(ctx, "Device state", log.Fields{
+		"device-id":      device.Id,
+		"CurrOperStatus": device.OperStatus,
+		"CurrConnStatus": device.ConnectStatus,
+	})
+	// Perform cleanup if the device's operational status is REBOOTED
+	if device.OperStatus == voltha.OperStatus_RECONCILING && dh.prevOperStatus == voltha.OperStatus_REBOOTED {
+		// Log the device's operational status if it's REBOOTED
+		logger.Info(ctx, "Device is transitioning from REBOOTED to RECONCILING", log.Fields{
+			"device-id":  device.Id,
+			"OperStatus": device.OperStatus,
+		})
+		dh.lockDevice.RLock()
+		// Stop the read indication only if it the routine is active
+		// The read indication would have already stopped due to failure on the gRPC stream following OLT going unreachable
+		// Sending message on the 'stopIndication' channel again will cause the readIndication routine to immediately stop
+		// on next execution of the readIndication routine.
+		if dh.isHeartbeatCheckActive {
+			dh.stopHeartbeatCheck <- true
+		}
+		if dh.isReadIndicationRoutineActive {
+			dh.stopIndications <- true
+		}
+		dh.lockDevice.RUnlock()
+		if err := dh.cleanupDeviceResources(ctx); err != nil {
+			logger.Error(ctx, "unable to clean up device resources", log.Fields{"error": err})
+			return fmt.Errorf("cleanup device resources failed: %w", err)
+		}
+		if err := dh.initializeDeviceHandlerModules(ctx); err != nil {
+			return olterrors.NewErrAdapter("device-handler-initialization-failed", log.Fields{"device-id": dh.device.Id}, err).LogAt(log.ErrorLevel)
+		}
+		go startHeartbeatCheck(ctx, dh)
+
+		//dh.lockDevice.RUnlock()
+
+	} else if device.OperStatus == voltha.OperStatus_RECONCILING {
+		// Log the device's operational status if it's RECONCILING
+		logger.Info(ctx, "Device is being reconciled", log.Fields{
+			"device-id":  device.Id,
+			"OperStatus": device.OperStatus,
+		})
+
+		// Perform reconciliation steps
+		err = dh.reconcileOnus(ctx)
+		if err != nil {
+			logger.Error(ctx, "unable to reconcile onu", log.Fields{"error": err})
+		}
+		err = dh.reconcilePonPorts(ctx)
+		if err != nil {
+			logger.Error(ctx, "unable to reconcile pon ports", log.Fields{"error": err})
 		}
 	}
 	// instantiate the mcast handler routines.
@@ -967,13 +1015,20 @@
 			go dh.mcastFlowOrGroupChannelHandlerRoutine(i, dh.incomingMcastFlowOrGroup[i], dh.stopMcastHandlerRoutine[i])
 		}
 	}
-
-	// Synchronous call to update device state - this method is run in its own go routine
-	if err := dh.updateDeviceStateInCore(ctx, &ca.DeviceStateFilter{
+	// Create DeviceStateFilter with the desired operational and connection statuses
+	deviceStateFilter = &ca.DeviceStateFilter{
 		DeviceId:   dh.device.Id,
 		OperStatus: voltha.OperStatus_ACTIVE,
 		ConnStatus: voltha.ConnectStatus_REACHABLE,
-	}); err != nil {
+	}
+	// Log DeviceStateFilter for debugging purposes
+	logger.Info(ctx, "DeviceStateFilter", log.Fields{
+		"DeviceId":   deviceStateFilter.DeviceId,
+		"OperStatus": deviceStateFilter.OperStatus,
+		"ConnStatus": deviceStateFilter.ConnStatus,
+	})
+	// Synchronous call to update device state - this method is run in its own go routine
+	if err := dh.updateDeviceStateInCore(ctx, deviceStateFilter); err != nil {
 		return olterrors.NewErrAdapter("device-state-update-failed", log.Fields{"device-id": dh.device.Id}, err)
 	}
 
diff --git a/internal/pkg/core/openolt.go b/internal/pkg/core/openolt.go
index b9f68dc..a30b3e0 100644
--- a/internal/pkg/core/openolt.go
+++ b/internal/pkg/core/openolt.go
@@ -175,12 +175,35 @@
 	var handler *DeviceHandler
 	if handler = oo.getDeviceHandler(device.Id); handler == nil {
 		//Setting state to RECONCILING
+		// Fetch previous state
+		//here we are fetching the previous operation states of the device,so to check which operation state it was previously for proper transition and proper clean up of the resources.
+		PrevOperStatus := device.OperStatus
+
+		// Log previous state
+		logger.Infow(ctx, "previous-device-state", log.Fields{
+			"device-id":           device.Id,
+			"previous-operStatus": PrevOperStatus,
+			"Device-connStatus":   device.ConnectStatus,
+		})
 		cgClient, err := oo.coreClient.GetCoreServiceClient()
 		if err != nil {
 			return nil, err
 		}
 		subCtx, cancel := context.WithTimeout(log.WithSpanFromContext(context.Background(), ctx), oo.rpcTimeout)
 		defer cancel()
+		// Create DeviceStateFilter with new state
+		deviceStateFilter := &ca.DeviceStateFilter{
+			DeviceId:   device.Id,
+			OperStatus: voltha.OperStatus_RECONCILING,
+			ConnStatus: device.ConnectStatus,
+		}
+
+		// Log the new state being set
+		logger.Infow(ctx, "setting-new-device-state", log.Fields{
+			"device-id":      deviceStateFilter.DeviceId,
+			"new-operStatus": deviceStateFilter.OperStatus,
+			"new-connStatus": deviceStateFilter.ConnStatus,
+		})
 		if _, err := cgClient.DeviceStateUpdate(subCtx, &ca.DeviceStateFilter{
 			DeviceId:   device.Id,
 			OperStatus: voltha.OperStatus_RECONCILING,
@@ -195,10 +218,11 @@
 		device.ConnectStatus = voltha.ConnectStatus_UNREACHABLE
 		handler := NewDeviceHandler(oo.coreClient, oo.eventProxy, device, oo, oo.configManager, oo.config)
 		handler.adapterPreviouslyConnected = true
+		handler.prevOperStatus = PrevOperStatus
 		oo.addDeviceHandlerToMap(handler)
 		handler.transitionMap = NewTransitionMap(handler)
 
-		handler.transitionMap.Handle(log.WithSpanFromContext(context.Background(), ctx), DeviceInit)
+		go handler.transitionMap.Handle(log.WithSpanFromContext(context.Background(), ctx), DeviceInit)
 	} else {
 		logger.Warnf(ctx, "device-already-reconciled-or-active", log.Fields{"device-id": device.Id})
 		return &empty.Empty{}, status.Errorf(codes.AlreadyExists, "handler exists: %s", device.Id)
