diff --git a/Source/MoCapPlugin/Private/MCController.cpp b/Source/MoCapPlugin/Private/MCController.cpp
index ce9652f59ffc14050452c20e17586e577c14ee4d..140e32289f9f21d101b28e883a3999400279e544 100644
--- a/Source/MoCapPlugin/Private/MCController.cpp
+++ b/Source/MoCapPlugin/Private/MCController.cpp
@@ -55,7 +55,7 @@ void AMCController::BeginPlay() {
 		USteamVRInputDeviceFunctionLibrary::SetCurlsAndSplaysState(true, true);
 	}
 
-	if (!UHeadMountedDisplayFunctionLibrary::IsHeadMountedDisplayEnabled()) {
+	if (SpectatorCam && !UHeadMountedDisplayFunctionLibrary::IsHeadMountedDisplayEnabled()) {
 		Pawn->VRCamera->SetWorldLocation(SpectatorCam->GetActorLocation());
 		Pawn->VRCamera->SetWorldRotation(SpectatorCam->GetActorRotation());
 	}
@@ -153,8 +153,10 @@ void AMCController::SaveToAnimMode() {
 			//AnimSaveState.Pawn->Destroy();
 			AnimSaveState = FAnimSaveState();
 
-			InstructionWidget->FeedbackText->SetText(FText::FromString("Saved!"));
-			InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->StartIndex);
+			if (InstructionWidget) {
+				InstructionWidget->FeedbackText->SetText(FText::FromString("Saved!"));
+				InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->StartIndex);
+			}
 			if (GEngine) {
 				GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Green, FString::Printf(TEXT("Animation Saved!")));
 			}
@@ -626,7 +628,7 @@ bool AMCController::PreprocessRecording() {
 	int amount = 0;
 	int start = 0;
 
-	for (int i = 0; i < AnimSaveState.AnimData.Num() && LockFeet; i++) {
+	for (int i = 0; i < AnimSaveState.AnimData.Num() && LockFeet && LeftFootPlane && RightFootPlane; i++) {
 
 		FProcessedAnimData& AnimData = AnimSaveState.AnimData[i];
 
@@ -720,7 +722,9 @@ void AMCController::InputNextFrame() {
 				AI->SnapshotAnimations.Last().StartTime = Entry.Timestamp;
 				AnimSaveState.CurrentMarker++;
 
-				FeedbackWidget->RecordingStateText->SetText(FText::FromString("Converting Anim " + FString::FromInt(AnimSaveState.CurrentMarker) + "..."));
+				if (FeedbackWidget) {
+					FeedbackWidget->RecordingStateText->SetText(FText::FromString("Converting Anim " + FString::FromInt(AnimSaveState.CurrentMarker) + "..."));
+				}
 			}
 			else { // if (Type == "End")
 				AnimSaveState.CurrentEntryIndex++;
@@ -744,8 +748,9 @@ void AMCController::InputNextFrame() {
 				AnimSaveState.WaitForAnimInstance = true;
 			}
 
-			FeedbackWidget->ProgBar->SetPercent((float)AnimSaveState.CurrentEntryIndex / (float)AnimSaveState.AnimData.Num());
-
+			if (FeedbackWidget) {
+				FeedbackWidget->ProgBar->SetPercent((float)AnimSaveState.CurrentEntryIndex / (float)AnimSaveState.AnimData.Num());
+			}
 		}
 		
 
@@ -756,8 +761,9 @@ void AMCController::InputNextFrame() {
 
 void AMCController::SaveAnimSnapshots() {
 
-	FeedbackWidget->RecordingStateText->SetText(FText::FromString("Saving anim data to asset files..."));
-
+	if (FeedbackWidget) {
+		FeedbackWidget->RecordingStateText->SetText(FText::FromString("Saving anim data to asset files..."));
+	}
 	const TArray<FSnapshotAnimations>& Anims = AnimSaveState.Pawn->GetAnimInstance()->SnapshotAnimations;
 
 	FString FolderName;
@@ -792,8 +798,10 @@ void AMCController::SaveAnimSnapshots() {
 		AnimSaveState.AnimSequences.Add(AnimSequence);
 	}
 
-	FeedbackWidget->RecordingStateText->SetText(FText::FromString("Done!"));
-	FeedbackWidget->ProgBar->SetPercent(1);
+	if (FeedbackWidget) {
+		FeedbackWidget->RecordingStateText->SetText(FText::FromString("Done!"));
+		FeedbackWidget->ProgBar->SetPercent(1);
+	}
 
 }
 
@@ -1087,7 +1095,7 @@ void AMCController::ToggleRecording() {
 		LogHandler.NewLog("DataLog" + FString::FromInt(CurRecordingInSession));
 		LogHandler.StartRecording();
 		Pawn->CalcSensorOffsets(LogHandler, UseLastOffsets, DebugMode);
-		if (DebugMode) {
+		if (DebugMode || KeepPawnVisible) {
 			Pawn->SetMeshVisibility(true);
 		}
 		else {
@@ -1096,12 +1104,16 @@ void AMCController::ToggleRecording() {
 
 		AnimSaveState.CurrentMarker = 0;
 
-		InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->RecordIndex);
-		FeedbackWidget->RecordingStateText->SetText(FText::FromString("Press 'SetMarker' to begin!"));
-		FeedbackWidget->RecordingStateText->SetColorAndOpacity(FSlateColor(FLinearColor::White));
-		FeedbackWidget->SensorBox->SetVisibility(ESlateVisibility::Visible);
-		FeedbackWidget->AnimNameText->SetText(FText::FromString(NameOfRecording));
-		FeedbackWidget->ProgBar->SetVisibility(ESlateVisibility::Hidden);
+		if (InstructionWidget) {
+			InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->RecordIndex);
+		}
+		if (FeedbackWidget) {
+			FeedbackWidget->RecordingStateText->SetText(FText::FromString("Press 'SetMarker' to begin!"));
+			FeedbackWidget->RecordingStateText->SetColorAndOpacity(FSlateColor(FLinearColor::White));
+			FeedbackWidget->SensorBox->SetVisibility(ESlateVisibility::Visible);
+			FeedbackWidget->AnimNameText->SetText(FText::FromString(NameOfRecording));
+			FeedbackWidget->ProgBar->SetVisibility(ESlateVisibility::Hidden);
+		}
 	}
 	else {
 		if (!KeepPawnInvisible) {
@@ -1113,19 +1125,25 @@ void AMCController::ToggleRecording() {
 		LogHandler.CopyLogToRecordings(NameOfRecording);
 
 		if (OldName != NameOfRecording) {
-			InstructionWidget->FeedbackText->SetText(FText::FromString("Recording Done!\nNameOfRecording changed to " + NameOfRecording));
+			if (InstructionWidget) {
+				InstructionWidget->FeedbackText->SetText(FText::FromString("Recording Done!\nNameOfRecording changed to " + NameOfRecording));
+			}
 			if (OutputMsgOnScreen) {
 				GEngine->AddOnScreenDebugMessage(-1, 30.0f, FColor::Yellow, FString::Printf(TEXT("NameOfRecording changed to %s. If you want to use this recording in future play sessions, please update the property on MCController."), *NameOfRecording));
 			}
 		}
 
-		InstructionWidget->FeedbackText->SetText(FText::FromString("Recording Done!"));
-		InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->StartIndex);
-		FeedbackWidget->RecordingStateText->SetText(FText::FromString(""));
-		FeedbackWidget->SensorBox->SetVisibility(ESlateVisibility::Hidden);
-		FeedbackWidget->LeftFingerText->SetText(FText::FromString(""));
-		FeedbackWidget->RightFingerText->SetText(FText::FromString(""));
-		FeedbackWidget->AnimNameText->SetText(FText::FromString(""));
+		if (InstructionWidget) {
+			InstructionWidget->FeedbackText->SetText(FText::FromString("Recording Done!"));
+			InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->StartIndex);
+		}
+		if (FeedbackWidget) {
+			FeedbackWidget->RecordingStateText->SetText(FText::FromString(""));
+			FeedbackWidget->SensorBox->SetVisibility(ESlateVisibility::Hidden);
+			FeedbackWidget->LeftFingerText->SetText(FText::FromString(""));
+			FeedbackWidget->RightFingerText->SetText(FText::FromString(""));
+			FeedbackWidget->AnimNameText->SetText(FText::FromString(""));
+		}
 
 		CurRecordingInSession++;
 	}
@@ -1144,8 +1162,10 @@ void AMCController::SetMarker() {
 	if (IsRecording) {
 		AnimSaveState.CurrentMarker++;
 		LogHandler.SetMarker();
-		FeedbackWidget->RecordingStateText->SetText(FText::FromString("Recording Anim " + FString::FromInt(AnimSaveState.CurrentMarker)));
-		FeedbackWidget->RecordingStateText->SetColorAndOpacity(FSlateColor(FLinearColor::Yellow));
+		if (FeedbackWidget) {
+			FeedbackWidget->RecordingStateText->SetText(FText::FromString("Recording Anim " + FString::FromInt(AnimSaveState.CurrentMarker)));
+			FeedbackWidget->RecordingStateText->SetColorAndOpacity(FSlateColor(FLinearColor::Yellow));
+		}
 	}
 }
 
@@ -1191,14 +1211,18 @@ void AMCController::SaveAnimation() {
 		PathSaved = PathSaved + "/DataLog.log";
 	}
 
-	InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->SavingIndex);
+	if (InstructionWidget) {
+		InstructionWidget->WidgetSwitcher->SetActiveWidgetIndex(InstructionWidget->SavingIndex);
+	}
 	if (GEngine) {
 		GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Green, FString::Printf(TEXT("Saving Animation...")));
 	}
 
-	FeedbackWidget->ProgBar->SetVisibility(ESlateVisibility::Visible);
-	FeedbackWidget->ProgBar->SetPercent(0);
-	FeedbackWidget->AnimNameText->SetText(FText::FromString(NameOfRecording));
+	if (FeedbackWidget) {
+		FeedbackWidget->ProgBar->SetVisibility(ESlateVisibility::Visible);
+		FeedbackWidget->ProgBar->SetPercent(0);
+		FeedbackWidget->AnimNameText->SetText(FText::FromString(NameOfRecording));
+	}
 
 	FFileHelper::LoadFileToStringArray(AnimSaveState.StringData, *PathSaved);
 
diff --git a/Source/MoCapPlugin/Public/MCController.h b/Source/MoCapPlugin/Public/MCController.h
index a7510f8b4e8c34619252f3575606dca1f096417a..64098b335aeead1ff9e20844e0e871634b51a776 100644
--- a/Source/MoCapPlugin/Public/MCController.h
+++ b/Source/MoCapPlugin/Public/MCController.h
@@ -52,15 +52,14 @@ class MOCAPPLUGIN_API AMCController : public AActor
 {
 	GENERATED_BODY()
 
-protected:
+public:
 
 	bool DebugMode = false;
 	bool UseLastOffsets = false;
 	bool SetControls = true;
 	bool KeepPawnInvisible = false;
+	bool KeepPawnVisible = false;
 	bool OutputMsgOnScreen = true;
-	
-public:	
 
 	AMCController();
 	virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
@@ -73,9 +72,6 @@ public:
 
 	virtual void Tick(float DeltaTime) override;
 
-
-protected:
-
 	UFUNCTION(BlueprintCallable)
 	void ToggleRecording();
 
@@ -94,6 +90,8 @@ protected:
 	UFUNCTION(BlueprintCallable)
 	void FinishEditAnim();
 
+protected:
+
 	void RecordMode();
 	void SaveToAnimMode();