diff --git a/Source/StudyFrameworkPlugin/Private/Logging/SFLoggingBPLibrary.cpp b/Source/StudyFrameworkPlugin/Private/Logging/SFLoggingBPLibrary.cpp
index 949ceb7d9e2b26792f20a1405714899fb109d718..1a80f5ef549131327bc4fc2b845c98f4eca6002f 100644
--- a/Source/StudyFrameworkPlugin/Private/Logging/SFLoggingBPLibrary.cpp
+++ b/Source/StudyFrameworkPlugin/Private/Logging/SFLoggingBPLibrary.cpp
@@ -13,9 +13,6 @@
      USFCondition* CurrCondition = USFGameInstance::Get()->GetParticipant()->GetCurrentCondition();
      if (!CurrCondition->StoreDependentVariableData(DependentVariableName, Value))
      {
-         FSFLoggingUtils::Log(
-             "Cannot log data '" + Value + "' for dependent variable '" + DependentVariableName +
-             "' since it does not exist for this condition!", true);
          return;
      }
      LogComment("Recorded " + DependentVariableName + ": " + Value);
diff --git a/Source/StudyFrameworkPlugin/Private/SFCondition.cpp b/Source/StudyFrameworkPlugin/Private/SFCondition.cpp
index 1b7dfcae39ac551a04f87fc0f3f401827ecba381..6ac893d1d98477bda4736934806a7520ca2b6a8a 100644
--- a/Source/StudyFrameworkPlugin/Private/SFCondition.cpp
+++ b/Source/StudyFrameworkPlugin/Private/SFCondition.cpp
@@ -3,6 +3,7 @@
 #include "UObject/UObjectGlobals.h"
 
 #include "SFMapFactor.h"
+#include "Logging/SFLoggingUtils.h"
 
 USFCondition::USFCondition()
 {
@@ -104,6 +105,22 @@ bool USFCondition::operator==(USFCondition& Other)
 
 bool USFCondition::StoreDependentVariableData(const FString& VarName, const FString& Value)
 {
+	if(!WasStarted())
+	{
+		FSFLoggingUtils::Log(
+			"Cannot log data '" + Value + "' for dependent variable '" + VarName +
+			"' since condition was not started yet, probably still fading!", true);
+		return false;
+	}
+
+	if (IsFinished())
+	{
+		FSFLoggingUtils::Log(
+			"Cannot log data '" + Value + "' for dependent variable '" + VarName +
+			"' since condition was has finished, probably already fading!", true);
+		return false;
+	}
+
 	for (auto& Var : DependentVariablesValues)
 	{
 		if (Var.Key->Name == VarName)
@@ -112,6 +129,10 @@ bool USFCondition::StoreDependentVariableData(const FString& VarName, const FStr
 			return true;
 		}
 	}
+
+	FSFLoggingUtils::Log(
+		"Cannot log data '" + Value + "' for dependent variable '" + VarName +
+		"' since it does not exist for this condition!", true);
 	return false;
 }
 
diff --git a/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp b/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp
index 789b77531f0e6975d7cfb55608c683ac340acbc6..544162630c1c918571bf89d29101e9c3c2d54f62 100644
--- a/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp
+++ b/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp
@@ -310,9 +310,10 @@ bool USFGameInstance::StartStudy()
 void USFGameInstance::EndStudy()
 {
 	USFCondition* LastCondition = Participant->GetCurrentCondition();
-	if (LastCondition && LastCondition->WasStarted())
-		LastCondition->End();
-
+	if (!LastCondition || !LastCondition->WasStarted() || LastCondition->IsFinished())
+		return;
+		
+	LastCondition->End();
 	Participant->EndStudy();
 
 	UpdateHUD("Study ended");
@@ -327,9 +328,17 @@ void USFGameInstance::EndStudy()
 
 bool USFGameInstance::NextCondition(bool bForced /*=false*/)
 {
+	// Check if is already fading
+	if (FadeHandler->GetIsFading())
+	{
+		FSFLoggingUtils::Log("[USFGameInstance::NextCondition()]: Already Fading between levels", true);
+		return false;
+	}
+
 	USFCondition* NextCondition = Participant->GetNextCondition();
 	if (!NextCondition)
 	{
+		FSFLoggingUtils::Log("[SFGameInstance::NextCondition]: All conditions already ran, no NextCondition", false);
 		EndStudy();
 		return false;
 	}
diff --git a/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp b/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp
index 8d619ff98df6cbd4b81e461dddf873a576930635..5f6080006d607d6ed1b787a117792833096bf4d9 100644
--- a/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp
+++ b/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp
@@ -169,7 +169,6 @@ USFCondition* USFParticipant::GetNextCondition() const
 	// Get next Condition
 	if (CurrentConditionIdx + 1 >= Conditions.Num())
 	{
-		FSFLoggingUtils::Log("[USFParticipant::NextCondition()]: All conditions already ran, no NextCondition", false);
 		return nullptr;
 	}
 	USFCondition* UpcomingCondition = Conditions[CurrentConditionIdx + 1];