diff --git a/Source/CAVEOverlay/Private/CAVEOverlayController.cpp b/Source/CAVEOverlay/Private/CAVEOverlayController.cpp
index f3f10fb2bb8861d8732ebd8a7f7b32874f51ccc3..88a88e682745d372517add4c670e1de0858b8810 100644
--- a/Source/CAVEOverlay/Private/CAVEOverlayController.cpp
+++ b/Source/CAVEOverlay/Private/CAVEOverlayController.cpp
@@ -55,8 +55,8 @@ ACAVEOverlayController::ACAVEOverlayController()
 	loadAsset(TEXT("/CAVEOverlay/StopMaterial"), sign_material_);
 	loadAsset(TEXT("/CAVEOverlay/Plane"), plane_mesh_);
 
-	tape_material_dynamic_ = UMaterialInstanceDynamic::Create(tape_material_, tape_material_);
-	sign_material_dynamic_ = UMaterialInstanceDynamic::Create(sign_material_, sign_material_);
+	tape_material_dynamic_ = UMaterialInstanceDynamic::Create(tape_material_, NULL);
+	sign_material_dynamic_ = UMaterialInstanceDynamic::Create(sign_material_, NULL);
 
 	tape_negative_y = createMeshComponent(FName("TapeNegY"), tape_material_dynamic_, plane_mesh_, tape_root);
 	tape_negative_x = createMeshComponent(FName("TapeNegX"), tape_material_dynamic_, plane_mesh_, tape_root);
@@ -102,24 +102,27 @@ void ACAVEOverlayController::SetDoorMode(DOOR_MODE m)
 	switch (door_current_mode_) {
 	case DOOR_MODE::DOOR_PARTIAL_OPEN:
 		door_current_opening_width_absolute_ = door_opening_width_absolute_;
+		if (screen_type_ == SCREEN_DOOR) overlay_->BlackBox->SetRenderScale(FVector2D(0, 1));
 		if (screen_type_ == SCREEN_DOOR_PARTIAL) overlay_->BlackBox->SetRenderScale(FVector2D(door_opening_width_relative_, 1));
-		if (screen_type_ == SCREEN_MASTER) overlay_->BlackBox->SetRenderScale(FVector2D(door_opening_width_relative_, 1));
+		if (screen_type_ == SCREEN_MASTER) overlay_->BlackBox->SetRenderScale(FVector2D(0, 1));
 		overlay_->BlackBox->SetVisibility(ESlateVisibility::Visible);
 		break;
 	case DOOR_MODE::DOOR_OPEN:
 		door_current_opening_width_absolute_ = wall_distance_ * 2;
+		if (screen_type_ == SCREEN_DOOR) overlay_->BlackBox->SetRenderScale(FVector2D(1, 1));
 		if (screen_type_ == SCREEN_DOOR_PARTIAL) overlay_->BlackBox->SetRenderScale(FVector2D(1, 1));
 		if (screen_type_ == SCREEN_MASTER) overlay_->BlackBox->SetRenderScale(FVector2D(1, 1));
 		overlay_->BlackBox->SetVisibility(ESlateVisibility::Visible);
 		break;
 	case DOOR_MODE::DOOR_CLOSED:
 		door_current_opening_width_absolute_ = 0;
+		if (screen_type_ == SCREEN_DOOR) overlay_->BlackBox->SetRenderScale(FVector2D(0, 1));
 		if (screen_type_ == SCREEN_DOOR_PARTIAL) overlay_->BlackBox->SetRenderScale(FVector2D(0, 1));
 		if (screen_type_ == SCREEN_MASTER) overlay_->BlackBox->SetRenderScale(FVector2D(0, 1));
 		overlay_->BlackBox->SetVisibility(ESlateVisibility::Hidden);
 		break;
 	}
-	if (screen_type_ == SCREEN_DOOR_PARTIAL) overlay_->BlackBox->SetRenderScale(FVector2D(0, 1)); //No black overlay
+	if (screen_type_ == SCREEN_NORMAL) overlay_->BlackBox->SetRenderScale(FVector2D(0, 1)); //no overlay
 
 	UE_LOG(CAVEOverlayLog, Log, TEXT("Switched door state to '%s'. New opening width is %f."), *door_mode_names_[door_current_mode_], door_current_opening_width_absolute_);
 	overlay_->CornerText->SetText(FText::FromString(door_mode_names_[door_current_mode_]));
@@ -141,7 +144,6 @@ void ACAVEOverlayController::BeginPlay()
 	display_cluster_mode_ = IDisplayCluster::Get().GetOperationMode() == EDisplayClusterOperationMode::Cluster;
 
 	//Determine the screentype for later usage
-	screen_type_ = SCREEN_NORMAL;
 	if (IDisplayCluster::Get().GetClusterMgr()->GetNodeId().Equals(screen_main, ESearchCase::IgnoreCase)) {
 		screen_type_ = SCREEN_MASTER;
 	}
@@ -151,6 +153,9 @@ void ACAVEOverlayController::BeginPlay()
 	else if (containsFString(screens_door_partial_, IDisplayCluster::Get().GetClusterMgr()->GetNodeId())) {
 		screen_type_ = SCREEN_DOOR_PARTIAL;
 	}
+	else {
+		screen_type_ = SCREEN_NORMAL;
+	}
 
 	overlay_ = CreateWidget<UDoorOverlayData>(GetWorld()->GetFirstPlayerController(), overlay_class_);
 	overlay_->AddToViewport(0);
@@ -158,12 +163,7 @@ void ACAVEOverlayController::BeginPlay()
 	overlay_->CornerText->SetText(FText::FromString("")); //Set Text to "" until someone presses the key for the first time
 
 	player_pawn_ = Cast<AVirtualRealityPawn>(GetWorld()->GetFirstPlayerController()->GetPawn());
-	TArray<UDisplayClusterSceneComponent*> pawn_components;
-	player_pawn_->GetComponents<UDisplayClusterSceneComponent>(pawn_components);
-	for (UDisplayClusterSceneComponent* c : pawn_components) {
-		if (c->GetName().Equals("cave_origin", ESearchCase::IgnoreCase)) cave_origin_ = c;
-		if (c->GetName().Equals("shutter_glasses", ESearchCase::IgnoreCase)) cave_origin_ = c;
-	}
+	refreshPawnComponents();
 }
 
 float ACAVEOverlayController::calculateOpacityFromPosition(FVector position) {
@@ -175,6 +175,15 @@ bool ACAVEOverlayController::positionInDoorOpening(FVector position) {
 		&& FMath::IsWithinInclusive(position.Y, wall_distance_ + 10 - door_current_opening_width_absolute_, wall_distance_ + 10); //Overlap one side 10cm
 }
 
+void ACAVEOverlayController::refreshPawnComponents(){
+	static TArray<UDisplayClusterSceneComponent*> pawn_components;
+	player_pawn_->GetComponents<UDisplayClusterSceneComponent>(pawn_components);
+	for (UDisplayClusterSceneComponent* c : pawn_components) {
+		if (c->GetName().Equals("cave_origin", ESearchCase::IgnoreCase)) cave_origin_ = c;
+		if (c->GetName().Equals("shutter_glasses", ESearchCase::IgnoreCase)) shutter_glasses_ = c;
+	}
+}
+
 // Called every frame
 void ACAVEOverlayController::Tick(float DeltaTime)
 {
@@ -182,6 +191,9 @@ void ACAVEOverlayController::Tick(float DeltaTime)
 
 	if (hmd_mode_ || !display_cluster_mode_) return; // Not our business
 
+	refreshPawnComponents();
+	if (!cave_origin_ || !shutter_glasses_) return; //Display Cluster not initialized
+
 	//Move complete actor around
 	SetActorLocationAndRotation(cave_origin_->GetComponentLocation(), cave_origin_->GetComponentQuat());
 
@@ -208,7 +220,7 @@ void ACAVEOverlayController::Tick(float DeltaTime)
 
 	//Sign Logic
 	UDisplayClusterSceneComponent* flystick = IDisplayCluster::Get().GetGameMgr()->GetNodeById(TEXT("flystick"));
-	if (flystick) {
+	if (flystick != nullptr) {
 		FVector flystick_position = flystick->GetRelativeTransform().GetLocation();
 		bool flystick_in_door = positionInDoorOpening(flystick_position);
 		float sign_opacity = calculateOpacityFromPosition(flystick_position);
diff --git a/Source/CAVEOverlay/Public/CAVEOverlayController.h b/Source/CAVEOverlay/Public/CAVEOverlayController.h
index d6621d956ff8e4d1feb4166b78c820886f983cc3..dabd850f425014e4fcb3951b3c2e12f7f9d500f2 100644
--- a/Source/CAVEOverlay/Public/CAVEOverlayController.h
+++ b/Source/CAVEOverlay/Public/CAVEOverlayController.h
@@ -71,6 +71,7 @@ private:
 	bool positionInDoorOpening(FVector position);
 
 	//Pawn Components
+	void refreshPawnComponents();
 	AVirtualRealityPawn* player_pawn_;
 	UDisplayClusterSceneComponent* cave_origin_;
 	UDisplayClusterSceneComponent* shutter_glasses_;