diff --git a/Source/CAVEOverlay/Private/CAVEOverlayController.cpp b/Source/CAVEOverlay/Private/CAVEOverlayController.cpp
index 9301e07ffeda2d5434853a42fdf52fd8c9c5d2f6..a28b0e50ad5bb81829b0203d6751fb5d40b1d5fe 100644
--- a/Source/CAVEOverlay/Private/CAVEOverlayController.cpp
+++ b/Source/CAVEOverlay/Private/CAVEOverlayController.cpp
@@ -111,22 +111,6 @@ ACAVEOverlayController::ACAVEOverlayController()
 	Sign_Positive_Y->SetRelativeScale3D(FVector(0.5f));
 	Sign_Negative_X->SetRelativeScale3D(FVector(0.5f));
 	Sign_Positive_X->SetRelativeScale3D(FVector(0.5f));
-
-	IDisplayClusterClusterManager* ClusterManager = IDisplayCluster::Get().GetClusterMgr();
-	if (ClusterManager && !ClusterEventListenerDelegate.IsBound())
-	{
-		ClusterEventListenerDelegate = FOnClusterEventListener::CreateUObject(this, &ACAVEOverlayController::HandleClusterEvent);
-		ClusterManager->AddClusterEventListener(ClusterEventListenerDelegate);
-	}
-}
-
-ACAVEOverlayController::~ACAVEOverlayController()
-{
-	IDisplayClusterClusterManager* ClusterManager = IDisplayCluster::Get().GetClusterMgr();
-	if (ClusterManager && ClusterEventListenerDelegate.IsBound())
-	{
-		ClusterManager->RemoveClusterEventListener(ClusterEventListenerDelegate);
-	}
 }
 
 void ACAVEOverlayController::PostInitializeComponents()
@@ -226,6 +210,12 @@ void ACAVEOverlayController::BeginPlay()
 
 	//Input config
 	InputComponent->BindKey(EKeys::F10, EInputEvent::IE_Pressed, this, &ACAVEOverlayController::CycleDoorType);
+	IDisplayClusterClusterManager* ClusterManager = IDisplayCluster::Get().GetClusterMgr();
+	if (ClusterManager && !ClusterEventListenerDelegate.IsBound())
+	{
+		ClusterEventListenerDelegate = FOnClusterEventListener::CreateUObject(this, &ACAVEOverlayController::HandleClusterEvent);
+		ClusterManager->AddClusterEventListener(ClusterEventListenerDelegate);
+	}
 
 	//Determine the screen-type for later usage
 	if (IDisplayCluster::Get().GetClusterMgr()->GetNodeId().Equals(Screen_Main, ESearchCase::IgnoreCase))
@@ -260,6 +250,17 @@ void ACAVEOverlayController::BeginPlay()
 	}
 }
 
+void ACAVEOverlayController::EndPlay(const EEndPlayReason::Type EndPlayReason)
+{
+	IDisplayClusterClusterManager* ClusterManager = IDisplayCluster::Get().GetClusterMgr();
+	if (ClusterManager && ClusterEventListenerDelegate.IsBound())
+	{
+		ClusterManager->RemoveClusterEventListener(ClusterEventListenerDelegate);
+	}
+
+	Super::EndPlay(EndPlayReason);
+}
+
 float ACAVEOverlayController::CalculateOpacityFromPosition(FVector Position)
 {
 	return FMath::Max(
diff --git a/Source/CAVEOverlay/Public/CAVEOverlayController.h b/Source/CAVEOverlay/Public/CAVEOverlayController.h
index 6daa7e9183abe3cb111e0d9c78f9b9218e9f8651..73760b6a4c562522472332438ded6ec9a52585f6 100644
--- a/Source/CAVEOverlay/Public/CAVEOverlayController.h
+++ b/Source/CAVEOverlay/Public/CAVEOverlayController.h
@@ -22,12 +22,13 @@ UCLASS()
 class CAVEOVERLAY_API ACAVEOverlayController : public AActor
 {
 	GENERATED_BODY()
+	
 public:
 	ACAVEOverlayController();
-	~ACAVEOverlayController();
 protected:
 	// Called when the game starts or when spawned
 	virtual void BeginPlay() override;
+	virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
 	virtual void PostInitializeComponents() override;
 
 private: