24 KiB
ManagedBehaviour Migration Target List
Generated: November 3, 2025
Purpose: Comprehensive list of MonoBehaviours using legacy patterns that need migration to ManagedBehaviour
Executive Summary
Total Components Identified: 23 unique MonoBehaviours
Migration Priority Groups: 3 groups (Core Services, UI Systems, Gameplay Systems)
Category 1: Core Services (HIGHEST PRIORITY)
These are the foundational systems we modified in Phases 1-2. They need migration first.
1.1 GameManager.cs
Location: Assets/Scripts/Core/GameManager.cs
Current Pattern: MonoBehaviour with BootCompletionService
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Has empty
InitializePostBoot()method (no actual post-boot logic) - ✅ Implements singleton pattern
- ⚠️ Other components register IPausable with this manager
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
10(core infrastructure) - Move Awake logic to
OnManagedAwake() - Remove
RegisterInitActioncall - Delete empty
InitializePostBoot()method - No scene lifecycle hooks needed (persistent singleton)
Dependencies: None (can migrate immediately)
1.2 SceneManagerService.cs
Location: Assets/Scripts/Core/SceneManagerService.cs
Current Pattern: MonoBehaviour with BootCompletionService
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Has
InitializePostBoot()method that sets up loading screen events - ✅ Implements singleton pattern
- ✅ Exposes scene lifecycle events (SceneLoadStarted, SceneLoadCompleted, etc.)
- ⚠️ Multiple components subscribe to its events
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
15(core infrastructure, after GameManager) - Combine Awake + InitializeCurrentSceneTracking + InitializePostBoot →
OnManagedAwake() - Remove
RegisterInitActioncall - Delete
InitializePostBoot()method - No scene lifecycle hooks needed (persistent singleton)
Dependencies:
- LoadingScreenController (needs to be available in OnManagedAwake)
1.3 SaveLoadManager.cs
Location: Assets/Scripts/Core/SaveLoad/SaveLoadManager.cs
Current Pattern: MonoBehaviour with BootCompletionService and SceneManagerService events
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Subscribes to
SceneManagerService.SceneLoadCompletedin InitializePostBoot - ✅ Implements singleton pattern
- ✅ Implements ISaveParticipant itself
- ⚠️ Components register ISaveParticipant with this manager
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
20(core infrastructure, after SceneManagerService) - Move Awake + InitializePostBoot logic →
OnManagedAwake() - Remove
RegisterInitActioncall - REPLACE SceneLoadCompleted subscription with
OnSceneReady()hook - Delete
InitializePostBoot()method - Use
OnSceneReady()for scene-specific restore logic
Dependencies:
- SceneManagerService (for scene events)
- DeveloperSettingsProvider (already available)
Event Migration:
SceneLoadCompletedsubscription →OnSceneReady()lifecycle hook
1.4 ItemManager.cs
Location: Assets/Scripts/Core/ItemManager.cs
Current Pattern: MonoBehaviour with SceneManagerService events
Usage:
- ✅ Subscribes to
SceneManagerService.SceneLoadStartedin Awake - ✅ Has
OnSceneLoadStarted()callback - ❌ No BootCompletionService usage
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
50(gameplay support system) - Keep Awake singleton logic
- REPLACE SceneLoadStarted subscription with
OnSceneUnloading()hook (use for cleanup before scene unloads) - No InitializePostBoot
Event Migration:
SceneLoadStarted→OnSceneUnloading()(cleanup before new scene loads)
1.5 QuickAccess.cs
Location: Assets/Scripts/Core/QuickAccess.cs
Current Pattern: MonoBehaviour with SceneManagerService events
Usage:
- ✅ Subscribes to
SceneManagerService.SceneLoadCompletedconditionally - ✅ Has
OnSceneLoadCompleted()callback - ❌ No BootCompletionService usage
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
60(developer tool) - REPLACE SceneLoadCompleted subscription with
OnSceneReady()hook - Keep conditional subscription logic
Event Migration:
SceneLoadCompleted→OnSceneReady()
1.6 SceneOrientationEnforcer.cs
Location: Assets/Scripts/Core/SceneOrientationEnforcer.cs
Current Pattern: MonoBehaviour with BootCompletionService
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Has
InitializePostBoot()method
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
70(platform-specific utility) - Move Awake + InitializePostBoot →
OnManagedAwake() - Remove
RegisterInitActioncall
Category 2: UI Systems (MEDIUM PRIORITY)
UI components that manage menus, navigation, and visual feedback.
2.1 UIPageController.cs
Location: Assets/Scripts/UI/Core/UIPageController.cs
Current Pattern: MonoBehaviour with BootCompletionService
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Has
InitializePostBoot()method - ✅ Implements singleton pattern
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
50(UI infrastructure) - Move Awake + InitializePostBoot →
OnManagedAwake() - Remove
RegisterInitActioncall - Consider using
RegisterManagedEvent()for UI events
2.2 LoadingScreenController.cs
Location: Assets/Scripts/UI/LoadingScreenController.cs
Current Pattern: MonoBehaviour with BootCompletionService
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Has
InitializePostBoot()method - ✅ Implements singleton pattern
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
45(UI infrastructure, before UIPageController - needed by SceneManagerService) - Move Awake + InitializePostBoot →
OnManagedAwake() - Remove
RegisterInitActioncall
2.3 PauseMenu.cs
Location: Assets/Scripts/UI/PauseMenu.cs
Current Pattern: MonoBehaviour with BootCompletionService and SceneManagerService events
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Has
InitializePostBoot()method - ✅ Subscribes to
SceneManagerService.SceneLoadCompletedin InitializePostBoot - ✅ Has
SetPauseMenuByLevel()callback
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
60(UI component) - Move Awake + InitializePostBoot →
OnManagedAwake() - REPLACE SceneLoadCompleted subscription with
OnSceneReady()hook - Use
RegisterManagedEvent()for any remaining event subscriptions
Event Migration:
SceneLoadCompleted→OnSceneReady()
2.4 CardAlbumUI.cs
Location: Assets/Scripts/UI/CardSystem/CardAlbumUI.cs
Current Pattern: MonoBehaviour with BootCompletionService
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Has
InitializePostBoot()method
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
80(UI feature) - Move Awake + InitializePostBoot →
OnManagedAwake() - Remove
RegisterInitActioncall
2.5 CardSystemSceneVisibility.cs
Location: Assets/Scripts/UI/CardSystem/CardSystemSceneVisibility.cs
Current Pattern: MonoBehaviour with BootCompletionService and SceneManagerService events
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot, priority: 95)in Awake - ✅ Has
InitializePostBoot()method - ✅ Subscribes to
SceneManagerService.SceneLoadCompletedin InitializePostBoot - ✅ Has
OnSceneLoaded()callback
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
95(UI feature, matches current priority) - Move Awake + InitializePostBoot →
OnManagedAwake() - REPLACE SceneLoadCompleted subscription with
OnSceneReady()hook - Use
RegisterManagedEvent()for CardSystemManager events
Event Migration:
SceneLoadCompleted→OnSceneReady()
2.6 DivingTutorial.cs
Location: Assets/Scripts/UI/Tutorial/DivingTutorial.cs
Current Pattern: MonoBehaviour with BootCompletionService
Usage:
- ✅ Uses
RegisterInitAction(InitializeTutorial)in Awake - ✅ Has
InitializeTutorial()method
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
100(tutorial system) - Move Awake + InitializeTutorial →
OnManagedAwake() - Remove
RegisterInitActioncall
Category 3: Gameplay Systems (MEDIUM-LOW PRIORITY)
Core gameplay mechanics and managers.
3.1 AudioManager.cs
Location: Assets/Scripts/Sound/AudioManager.cs
Current Pattern: MonoBehaviour with BootCompletionService and IPausable
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Has
InitializePostBoot()method - ✅ Implements IPausable interface
- ✅ Manually calls
GameManager.Instance.RegisterPausableComponent(this)in InitializePostBoot - ✅ Implements singleton pattern
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
30(audio infrastructure) - Set
AutoRegisterPausable = true(enables auto-registration) - Move Awake + InitializePostBoot →
OnManagedAwake() - REMOVE manual
RegisterPausableComponent()call (auto-handled) - Remove
RegisterInitActioncall
Auto-Registration:
- ✅ Implements IPausable → will auto-register with GameManager
3.2 InputManager.cs
Location: Assets/Scripts/Input/InputManager.cs
Current Pattern: MonoBehaviour with BootCompletionService and SceneManagerService events
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Has
InitializePostBoot()method - ✅ Subscribes to
SceneManagerService.SceneLoadCompletedin InitializePostBoot - ✅ Has
SwitchInputOnSceneLoaded()callback
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
25(input infrastructure) - Move Awake + InitializePostBoot →
OnManagedAwake() - REPLACE SceneLoadCompleted subscription with
OnSceneReady()hook - Remove
RegisterInitActioncall
Event Migration:
SceneLoadCompleted→OnSceneReady()
3.3 PlayerTouchController.cs
Location: Assets/Scripts/Input/PlayerTouchController.cs
Current Pattern: MonoBehaviour with BootCompletionService and ISaveParticipant
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Has
InitializePostBoot()method - ✅ Implements ISaveParticipant interface
- ✅ Manually calls
SaveLoadManager.Instance.RegisterParticipant(this)in InitializePostBoot
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
100(player control) - Move Awake + InitializePostBoot →
OnManagedAwake() - KEEP manual ISaveParticipant registration (global save data)
- Remove
RegisterInitActioncall - Consider adding
OnSaveRequested()/OnRestoreRequested()if level-specific data exists
Note:
- ISaveParticipant is for global persistent data (player state across all levels)
- If component has level-specific data, use OnSaveRequested/OnRestoreRequested hooks instead
3.4 FollowerController.cs
Location: Assets/Scripts/Movement/FollowerController.cs
Current Pattern: MonoBehaviour with BootCompletionService and ISaveParticipant
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Implements ISaveParticipant interface
- ✅ Manually calls
SaveLoadManager.Instance.RegisterParticipant(this)in InitializePostBoot
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
110(NPC behavior) - Move Awake + InitializePostBoot →
OnManagedAwake() - KEEP manual ISaveParticipant registration (global save data - follower state)
- Remove
RegisterInitActioncall - Consider
OnSceneReady()if follower needs scene-specific setup
3.5 PuzzleManager.cs
Location: Assets/Scripts/PuzzleS/PuzzleManager.cs
Current Pattern: MonoBehaviour with BootCompletionService, SceneManagerService events, and ISaveParticipant
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Has
InitializePostBoot()method - ✅ Subscribes to
SceneManagerService.SceneLoadCompletedin InitializePostBoot - ✅ Subscribes to
SceneManagerService.SceneLoadStartedin InitializePostBoot - ✅ Has
OnSceneLoadCompleted()andOnSceneLoadStarted()callbacks - ✅ Uses anonymous
RegisterInitAction()to register ISaveParticipant - ✅ Implements ISaveParticipant interface
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
120(level manager - scene-specific) - Move Awake + InitializePostBoot →
OnManagedAwake() - REPLACE SceneLoadCompleted with
OnSceneReady()hook - REPLACE SceneLoadStarted with
OnSceneUnloading()hook (for cleanup) - CONSIDER: Does puzzle state need to be global (ISaveParticipant) or level-specific (OnSaveRequested/OnRestoreRequested)?
- If puzzle progress persists across game sessions globally → Keep ISaveParticipant
- If puzzle progress resets per-level → Use OnSaveRequested/OnRestoreRequested
- Remove both
RegisterInitActioncalls
Event Migration:
SceneLoadStarted→OnSceneUnloading()(cleanup before leaving level)SceneLoadCompleted→OnSceneReady()(setup when entering level)
3.6 CardSystemManager.cs
Location: Assets/Scripts/Data/CardSystem/CardSystemManager.cs
Current Pattern: MonoBehaviour with BootCompletionService and ISaveParticipant
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Has
InitializePostBoot()method - ✅ Implements ISaveParticipant interface
- ✅ Uses anonymous RegisterInitAction to register ISaveParticipant
- ✅ Implements singleton pattern
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
40(game data manager - persistent across scenes) - Move Awake + InitializePostBoot →
OnManagedAwake() - KEEP manual ISaveParticipant registration (global save data - card collection)
- Remove both
RegisterInitActioncalls - No scene lifecycle hooks needed (persistent singleton)
3.7 DialogueComponent.cs
Location: Assets/Scripts/Dialogue/DialogueComponent.cs
Current Pattern: MonoBehaviour with BootCompletionService
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Has
InitializePostBoot()method
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
150(dialogue system - scene-specific) - Move Awake + InitializePostBoot →
OnManagedAwake() - Remove
RegisterInitActioncall - Consider
OnSceneReady()if dialogue needs scene-specific initialization
3.8 MinigameSwitch.cs
Location: Assets/Scripts/Levels/MinigameSwitch.cs
Current Pattern: MonoBehaviour with BootCompletionService
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Has
InitializePostBoot()method
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
140(level transition - scene-specific) - Move Awake + InitializePostBoot →
OnManagedAwake() - Remove
RegisterInitActioncall - Consider
OnSceneReady()for scene-specific setup
3.9 DivingGameManager.cs
Location: Assets/Scripts/Minigames/DivingForPictures/DivingGameManager.cs
Current Pattern: MonoBehaviour with BootCompletionService and IPausable
Usage:
- ✅ Uses
RegisterInitAction(InitializePostBoot)in Awake - ✅ Has
InitializePostBoot()method - ✅ Implements IPausable interface
- ✅ Manually calls
GameManager.Instance.RegisterPausableComponent(this)conditionally - ✅ Implements singleton pattern
- ⚠️ Also has its own pausable registration system for diving minigame components
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
130(minigame manager - scene-specific) - Set
AutoRegisterPausable = true(conditional logic can stay in OnManagedAwake) - Move Awake + InitializePostBoot →
OnManagedAwake() - REMOVE manual
RegisterPausableComponent()call (auto-handled) - Remove
RegisterInitActioncall - Use
OnSceneReady()for minigame initialization - Use
OnSceneUnloading()for cleanup
3.10 Pickup.cs
Location: Assets/Scripts/Interactions/Pickup.cs
Current Pattern: MonoBehaviour with BootCompletionService
Usage:
- ✅ Uses anonymous
RegisterInitAction()lambda in Awake - ❌ No InitializePostBoot method (inline lambda)
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
160(interactable - scene-specific) - Move anonymous lambda logic into
OnManagedAwake()override - Remove
RegisterInitActioncall
3.11 SaveableInteractable.cs
Location: Assets/Scripts/Interactions/SaveableInteractable.cs
Current Pattern: MonoBehaviour with ISaveParticipant
Usage:
- ✅ Implements ISaveParticipant interface
- ✅ Manually calls
SaveLoadManager.Instance.RegisterParticipant(this)in Awake - ❌ No BootCompletionService usage
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
170(saveable interactable - scene-specific) - Move ISaveParticipant registration into
OnManagedAwake() - CONSIDER: Is this global save (ISaveParticipant) or level-specific (OnSaveRequested)?
- If state persists across all levels globally → Keep ISaveParticipant
- If state is per-level → Use OnSaveRequested/OnRestoreRequested
3.12 AppleMachine.cs
Location: Assets/Scripts/Core/SaveLoad/AppleMachine.cs
Current Pattern: MonoBehaviour with BootCompletionService and ISaveParticipant
Usage:
- ✅ Uses anonymous
RegisterInitAction()lambda in Awake - ✅ Implements ISaveParticipant interface
- ✅ Manually calls
SaveLoadManager.Instance.RegisterParticipant(this)in lambda
Migration Plan:
- Change base class to
ManagedBehaviour - Priority:
90(apple machine - persistent game mechanic) - Move anonymous lambda logic into
OnManagedAwake()override - KEEP manual ISaveParticipant registration (global save data)
- Remove
RegisterInitActioncall
Category 4: Minigame-Specific Components (LOW PRIORITY)
These are diving minigame components that register with DivingGameManager (not global GameManager).
4.1 Diving Minigame IPausable Components
Files:
BottlePauser.cs-Assets/Scripts/Minigames/DivingForPictures/Utilities/RockPauser.cs-Assets/Scripts/Minigames/DivingForPictures/Utilities/ObstacleSpawner.cs-Assets/Scripts/Minigames/DivingForPictures/Obstacles/PlayerController.cs-Assets/Scripts/Minigames/DivingForPictures/Player/TrenchTileSpawner.cs-Assets/Scripts/Minigames/DivingForPictures/Tiles/BubbleSpawner.cs-Assets/Scripts/Minigames/DivingForPictures/Bubbles/
Current Pattern:
- ✅ Implement IPausable interface
- ✅ Manually call
DivingGameManager.Instance.RegisterPausableComponent(this)in Start/Awake - ❌ No BootCompletionService usage
Migration Plan (All):
- Change base class to
ManagedBehaviour - Priority:
200+(minigame components - scene-specific) - Set
AutoRegisterPausable = false(these register with DivingGameManager, not global GameManager) - Move registration logic into
OnManagedAwake()orOnSceneReady() - KEEP manual registration with DivingGameManager (not global)
Note: These components are minigame-specific and register with DivingGameManager's local pause system, not the global GameManager. Auto-registration won't help here.
Summary Statistics
By Category
- Core Services: 6 components
- UI Systems: 6 components
- Gameplay Systems: 12 components
- Minigame Components: 6 components (low priority)
By Pattern Usage
- BootCompletionService.RegisterInitAction: 19 components
- SceneManagerService event subscriptions: 7 components
- ISaveParticipant manual registration: 7 components
- IPausable manual registration (GameManager): 2 components
- IPausable manual registration (DivingGameManager): 6 components
Priority Distribution
- 0-20 (Core Infrastructure): 3 components (GameManager, SceneManagerService, SaveLoadManager)
- 21-50 (Managers & UI Infrastructure): 6 components
- 51-100 (UI Features & Gameplay Support): 7 components
- 101-150 (Gameplay Systems): 5 components
- 151-200+ (Scene-Specific & Minigames): 9 components
Migration Order Recommendation
Phase A: Foundation (Day 1)
- GameManager
- SceneManagerService (depends on LoadingScreenController existing)
- SaveLoadManager
Phase B: Infrastructure (Day 1-2)
- LoadingScreenController (needed by SceneManagerService)
- AudioManager (persistent service)
- InputManager (persistent service)
- CardSystemManager (persistent service)
Phase C: UI Systems (Day 2)
- UIPageController
- PauseMenu
- CardAlbumUI
- CardSystemSceneVisibility
Phase D: Gameplay Core (Day 2-3)
- PlayerTouchController
- FollowerController
- DialogueComponent
- PuzzleManager (complex - has scene lifecycle)
Phase E: Level Systems (Day 3)
- MinigameSwitch
- DivingGameManager
- ItemManager
- QuickAccess
- SceneOrientationEnforcer
- DivingTutorial
Phase F: Interactables & Details (Day 3)
- Pickup
- SaveableInteractable
- AppleMachine
- All 6 diving minigame pausable components
Migration Validation Checklist
For each component migrated, verify:
- Base class changed to
ManagedBehaviour - Priority set appropriately
- Awake + InitializePostBoot logic moved to
OnManagedAwake() - All
RegisterInitAction()calls removed InitializePostBoot()method deleted- Scene event subscriptions replaced with lifecycle hooks
- Auto-registration enabled where appropriate (IPausable)
- Manual registrations kept where needed (ISaveParticipant for global data)
- Scene lifecycle hooks added if component is scene-specific
- Managed events used for any remaining subscriptions
- Component compiles without errors
- Component tested in play mode
- Functionality verified unchanged
Key Migration Patterns
Pattern 1: Simple BootCompletionService User
Before:
void Awake()
{
// Setup
BootCompletionService.RegisterInitAction(InitializePostBoot);
}
private void InitializePostBoot()
{
// Post-boot initialization
}
After:
protected override void OnManagedAwake()
{
// Setup + Post-boot initialization combined
}
Pattern 2: Scene Event Subscriber
Before:
private void InitializePostBoot()
{
SceneManagerService.Instance.SceneLoadCompleted += OnSceneLoaded;
}
void OnDestroy()
{
SceneManagerService.Instance.SceneLoadCompleted -= OnSceneLoaded;
}
private void OnSceneLoaded(string sceneName)
{
// Handle scene load
}
After:
protected override void OnSceneReady()
{
// Handle scene load - no subscription needed!
}
Pattern 3: IPausable Auto-Registration
Before:
private void InitializePostBoot()
{
GameManager.Instance.RegisterPausableComponent(this);
}
void OnDestroy()
{
GameManager.Instance.UnregisterPausableComponent(this);
}
After:
protected override bool AutoRegisterPausable => true;
// That's it! Auto-handled by ManagedBehaviour
Pattern 4: ISaveParticipant (Keep Manual for Global Data)
Before:
private void InitializePostBoot()
{
SaveLoadManager.Instance.RegisterParticipant(this);
}
After:
protected override void OnManagedAwake()
{
// Keep manual registration for global persistent data
SaveLoadManager.Instance.RegisterParticipant(this);
}
Note: If data is level-specific instead, use OnSaveRequested() / OnRestoreRequested() hooks instead of ISaveParticipant.
Questions to Answer During Migration
For each component with ISaveParticipant:
- Is this global persistent data (player inventory, settings, overall progress)?
- → Keep ISaveParticipant pattern
- Is this level-specific data (puzzle state in current level, enemy positions)?
- → Remove ISaveParticipant, use OnSaveRequested/OnRestoreRequested hooks
For each component subscribing to scene events:
- Does it need to run on every scene load?
- → Use
OnSceneReady()
- → Use
- Does it need to clean up before scene unloads?
- → Use
OnSceneUnloading()
- → Use
- Does it need to initialize when component spawns (even mid-game)?
- → Use
OnManagedAwake()
- → Use
End of Migration Target List