diff --git a/Assets/MackySoft/MackySoft.Navigathena/Tests/Runtime/SceneManagement/AnonymousSceneEntryPoint.cs b/Assets/MackySoft/MackySoft.Navigathena/Tests/Runtime/SceneManagement/AnonymousSceneEntryPoint.cs
index fb0465f..7bbcdbc 100644
--- a/Assets/MackySoft/MackySoft.Navigathena/Tests/Runtime/SceneManagement/AnonymousSceneEntryPoint.cs
+++ b/Assets/MackySoft/MackySoft.Navigathena/Tests/Runtime/SceneManagement/AnonymousSceneEntryPoint.cs
@@ -1,6 +1,7 @@
-using System;
+using Cysharp.Threading.Tasks;
+using System;
+using System.Collections.Generic;
 using System.Threading;
-using Cysharp.Threading.Tasks;
 
 namespace MackySoft.Navigathena.SceneManagement.Tests
 {
@@ -16,15 +17,15 @@ public enum SceneEntryPointCallbackFlags
 		OnFinalize = 1 << 3,
 	}
 
-	public sealed class SceneEntryPointCallbackFlagsStore
+	public interface ISceneEntryPointLifecycleListener
 	{
-		public SceneEntryPointCallbackFlags Value { get; set; }
+		void OnReceive (SceneEntryPointCallbackFlags flags);
 	}
 
 	public sealed class AnonymousSceneEntryPoint : SceneEntryPointBase
 	{
 
-		SceneEntryPointCallbackFlagsStore m_Flags = new();
+		readonly List<ISceneEntryPointLifecycleListener> m_Listeners = new();
 
 		Func<ISceneDataReader, IProgress<IProgressDataStore>, CancellationToken, UniTask> m_OnInitialize;
 		Func<ISceneDataReader, CancellationToken, UniTask> m_OnEnter;
@@ -44,33 +45,42 @@ public void SetCallbacks (
 			m_OnFinalize = onFinalize;
 		}
 
-		public void RegisterFlags (SceneEntryPointCallbackFlagsStore store)
+		public void Register (ISceneEntryPointLifecycleListener listener)
 		{
-			m_Flags = store;
+			m_Listeners.Add(listener);
 		}
 
 		protected override UniTask OnInitialize (ISceneDataReader reader, IProgress<IProgressDataStore> progress, CancellationToken cancellationToken)
 		{
-			m_Flags.Value |= SceneEntryPointCallbackFlags.OnInitialize;
+			Send(SceneEntryPointCallbackFlags.OnInitialize);
 			return m_OnInitialize?.Invoke(reader, progress, cancellationToken) ?? UniTask.CompletedTask;
 		}
 
 		protected override UniTask OnEnter (ISceneDataReader reader, CancellationToken cancellationToken)
 		{
-			m_Flags.Value |= SceneEntryPointCallbackFlags.OnEnter;
+			Send(SceneEntryPointCallbackFlags.OnEnter);
 			return m_OnEnter?.Invoke(reader, cancellationToken) ?? UniTask.CompletedTask;
 		}
 
 		protected override UniTask OnExit (ISceneDataWriter writer, CancellationToken cancellationToken)
 		{
-			m_Flags.Value |= SceneEntryPointCallbackFlags.OnExit;
+			Send(SceneEntryPointCallbackFlags.OnExit);
 			return m_OnExit?.Invoke(writer, cancellationToken) ?? UniTask.CompletedTask;
 		}
 
 		protected override UniTask OnFinalize (ISceneDataWriter writer, IProgress<IProgressDataStore> progress, CancellationToken cancellationToken)
 		{
-			m_Flags.Value |= SceneEntryPointCallbackFlags.OnFinalize;
+			Send(SceneEntryPointCallbackFlags.OnFinalize);
 			return m_OnFinalize?.Invoke(writer, progress, cancellationToken) ?? UniTask.CompletedTask;
 		}
+
+		void Send (SceneEntryPointCallbackFlags flags)
+		{
+			for (int i = 0; i < m_Listeners.Count; i++)
+			{
+				ISceneEntryPointLifecycleListener listener = m_Listeners[i];
+				listener.OnReceive(flags);
+			}
+		}
 	}
 }
\ No newline at end of file
diff --git a/Assets/MackySoft/MackySoft.Navigathena/Tests/Runtime/SceneManagement/SceneEntryPointCallbackFlagsStore.cs b/Assets/MackySoft/MackySoft.Navigathena/Tests/Runtime/SceneManagement/SceneEntryPointCallbackFlagsStore.cs
new file mode 100644
index 0000000..a26a47e
--- /dev/null
+++ b/Assets/MackySoft/MackySoft.Navigathena/Tests/Runtime/SceneManagement/SceneEntryPointCallbackFlagsStore.cs
@@ -0,0 +1,12 @@
+namespace MackySoft.Navigathena.SceneManagement.Tests
+{
+	public sealed class SceneEntryPointCallbackFlagsStore : ISceneEntryPointLifecycleListener
+	{
+		public SceneEntryPointCallbackFlags Value { get; private set; }
+
+		void ISceneEntryPointLifecycleListener.OnReceive (SceneEntryPointCallbackFlags flags)
+		{
+			Value |= flags;
+		}
+	}
+}
\ No newline at end of file
diff --git a/Assets/MackySoft/MackySoft.Navigathena/Tests/Runtime/SceneManagement/SceneEntryPointCallbackFlagsStore.cs.meta b/Assets/MackySoft/MackySoft.Navigathena/Tests/Runtime/SceneManagement/SceneEntryPointCallbackFlagsStore.cs.meta
new file mode 100644
index 0000000..acb387f
--- /dev/null
+++ b/Assets/MackySoft/MackySoft.Navigathena/Tests/Runtime/SceneManagement/SceneEntryPointCallbackFlagsStore.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ed4bcdccdb0e6e44c80073da2b4e8f36
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/MackySoft/MackySoft.Navigathena/Tests/Runtime/SceneManagement/StandardSceneNavigatorTest.cs b/Assets/MackySoft/MackySoft.Navigathena/Tests/Runtime/SceneManagement/StandardSceneNavigatorTest.cs
index cb44978..d5d1de2 100644
--- a/Assets/MackySoft/MackySoft.Navigathena/Tests/Runtime/SceneManagement/StandardSceneNavigatorTest.cs
+++ b/Assets/MackySoft/MackySoft.Navigathena/Tests/Runtime/SceneManagement/StandardSceneNavigatorTest.cs
@@ -48,7 +48,7 @@ public IEnumerator Throw_if_already_initialized () => UniTask.ToCoroutine(async
 		public IEnumerator Push_successfully () => UniTask.ToCoroutine(async () =>
 		{
 			SceneEntryPointCallbackFlagsStore flags = new();
-			var firstSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("FirstScene", x => x.RegisterFlags(flags));
+			var firstSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("FirstScene", x => x.Register(flags));
 			await m_Navigator.Initialize();
 
 			await m_Navigator.Push(firstSceneIdentifier);
@@ -130,7 +130,7 @@ public IEnumerator Pop_successfully () => UniTask.ToCoroutine(async () =>
 		{
 			SceneEntryPointCallbackFlagsStore flags = new();
 			var firstSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("FirstScene");
-			var secondSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("SecondScene", x => x.RegisterFlags(flags));
+			var secondSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("SecondScene", x => x.Register(flags));
 
 			await m_Navigator.Initialize();
 
@@ -188,8 +188,8 @@ public IEnumerator Pop_successfully_if_interrupt_pop () => UniTask.ToCoroutine(a
 			SceneEntryPointCallbackFlagsStore secondFlags = new();
 			SceneEntryPointCallbackFlagsStore thirdFlags = new();
 			var firstSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("FirstScene");
-			var secondSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("SecondScene", x => x.RegisterFlags(secondFlags));
-			var thirdSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("ThirdScene", x => x.RegisterFlags(thirdFlags));
+			var secondSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("SecondScene", x => x.Register(secondFlags));
+			var thirdSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("ThirdScene", x => x.Register(thirdFlags));
 
 			await m_Navigator.Initialize();
 
@@ -221,7 +221,7 @@ public IEnumerator Change_successfully () => UniTask.ToCoroutine(async () =>
 		{
 			SceneEntryPointCallbackFlagsStore flags = new();
 			var firstSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("FirstScene");
-			var secondSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("SecondScene", x => x.RegisterFlags(flags));
+			var secondSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("SecondScene", x => x.Register(flags));
 
 			await m_Navigator.Initialize();
 
@@ -239,7 +239,7 @@ public IEnumerator Change_successfully_if_interrupt_change () => UniTask.ToCorou
 		{
 			SceneEntryPointCallbackFlagsStore secondFlags = new();
 			var firstSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("FirstScene");
-			var secondSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("SecondScene", x => x.RegisterFlags(secondFlags));
+			var secondSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("SecondScene", x => x.Register(secondFlags));
 			var thirdSceneIdentifier = new BlankSceneIdentifier<AnonymousSceneEntryPoint>("ThirdScene");
 
 			await m_Navigator.Initialize();