diff --git a/Source/StudyFrameworkPlugin/Private/Help/SFUtils.cpp b/Source/StudyFrameworkPlugin/Private/Help/SFUtils.cpp
index f3f8f9b0869c2a01231c9efddc78797848bbbf47..ba1644085c08be7123da9f2cdbbb0458651a6d8e 100644
--- a/Source/StudyFrameworkPlugin/Private/Help/SFUtils.cpp
+++ b/Source/StudyFrameworkPlugin/Private/Help/SFUtils.cpp
@@ -49,20 +49,14 @@ TSharedPtr<FJsonObject> FSFUtils::StringToJson(FString String)
 
 void FSFUtils::WriteJsonToFile(TSharedPtr<FJsonObject> Json, FString FilePath)
 {
-	if (FPaths::IsRelative(GetStudyFrameworkPath()))
-	{
-		FilePath = GetStudyFrameworkPath() + FilePath;
-	}
+	FilePath = GetStudyFrameworkPath() + FilePath;
 	FFileHelper::SaveStringToFile(JsonToString(Json), *(FilePath));
 }
 
 TSharedPtr<FJsonObject> FSFUtils::ReadJsonFromFile(FString FilePath)
 {
 	FString JsonString;
-	if (FPaths::IsRelative(GetStudyFrameworkPath()))
-	{
-		FilePath = GetStudyFrameworkPath() + FilePath;
-	}
+	FilePath = GetStudyFrameworkPath() + FilePath;
 	if(!FFileHelper::LoadFileToString(JsonString, *(FilePath)))
 	{
 		return nullptr;
diff --git a/Source/StudyFrameworkPlugin/Private/SFStudySetup.cpp b/Source/StudyFrameworkPlugin/Private/SFStudySetup.cpp
index 4c1eed0f879ed134824b9df1ec85cf4566581ab7..062d09c8d057c9785469f13ccf52c1c34f1698a0 100644
--- a/Source/StudyFrameworkPlugin/Private/SFStudySetup.cpp
+++ b/Source/StudyFrameworkPlugin/Private/SFStudySetup.cpp
@@ -7,6 +7,7 @@
 #include "Logging/SFLoggingUtils.h"
 #include "Developer/DesktopPlatform/Public/IDesktopPlatform.h"
 #include "Developer/DesktopPlatform/Public/DesktopPlatformModule.h"
+#include "Kismet/KismetStringLibrary.h"
 
 ASFStudySetup::ASFStudySetup()
 {
@@ -28,6 +29,51 @@ ASFStudySetup::ASFStudySetup()
 #endif // WITH_EDITORONLY_DATA
 }
 
+void ASFStudySetup::PostActorCreated()
+{
+	Super::PostActorCreated();
+
+	// PostActorCreated() is called twice when actor is drag-'n'-dropped into level because:
+	// First a preview actor with transient values is created when dragging out of list
+	// Then the final actor is created once dropped into map.
+	// We only want to execute the code for the latter actor -> Workaround:
+	if (!HasAllFlags(RF_Transient))
+	{
+		int uniqueFileExtension = 0;
+		int NumOfDigitsExtension;
+		while (FPaths::FileExists(FSFUtils::GetStudyFrameworkPath() + JsonFile))
+		{
+			NumOfDigitsExtension = FString::FromInt(uniqueFileExtension).Len();
+			JsonFile.RemoveFromEnd(".json");
+
+			// Filename ends with number to iterate
+			if (JsonFile.Right(NumOfDigitsExtension).IsNumeric())
+			{
+				uniqueFileExtension = UKismetStringLibrary::Conv_StringToInt(JsonFile.Right(NumOfDigitsExtension));
+			}
+
+			// Filename ends with number but with fewer digits, e.g. file9.json exists but not file10.json
+			else if (NumOfDigitsExtension > 1)
+			{
+				uniqueFileExtension = UKismetStringLibrary::Conv_StringToInt(JsonFile.Right(NumOfDigitsExtension - 1));
+			}
+
+			// There is no number at the end that should be removed before adding larger number
+			else
+			{
+				JsonFile = JsonFile + "1" + ".json";
+				continue;
+			}
+
+			JsonFile.RemoveFromEnd(FString::FromInt(uniqueFileExtension));
+			JsonFile.AppendInt(uniqueFileExtension + 1);
+			JsonFile.Append(".json");
+			FSFLoggingUtils::Log("Attempting to use " + JsonFile);
+		}
+		SaveToJson();
+	}
+}
+
 void ASFStudySetup::BeginPlay()
 {
 	Super::BeginPlay();
diff --git a/Source/StudyFrameworkPlugin/Public/SFStudySetup.h b/Source/StudyFrameworkPlugin/Public/SFStudySetup.h
index fdad39e6951ac19cadf63e949d2723c298580fb2..13eb9042fd9354f2237d7458f2bee63147e806f6 100644
--- a/Source/StudyFrameworkPlugin/Public/SFStudySetup.h
+++ b/Source/StudyFrameworkPlugin/Public/SFStudySetup.h
@@ -22,6 +22,8 @@ class STUDYFRAMEWORKPLUGIN_API ASFStudySetup : public AActor
 public:
 	ASFStudySetup();
 
+	virtual void PostActorCreated() override;
+
 	virtual void BeginPlay() override;
 
 	virtual void PostLoad() override;