diff --git a/Source/DasherVR/DasherVR.Build.cs b/Source/DasherVR/DasherVR.Build.cs
index 9e9656a4f990937515548e0053d9d94cec02365a..d7f74ec1345122dd45a9b6295a765488486a4eb4 100644
--- a/Source/DasherVR/DasherVR.Build.cs
+++ b/Source/DasherVR/DasherVR.Build.cs
@@ -26,7 +26,7 @@ public class DasherVR : ModuleRules
 			{
 				"Core",
 				"Dasher",
-        "InputCore",
+				"InputCore",
 				"DeveloperSettings"
 				// ... add other public dependencies that you statically link with here ...
 			}
diff --git a/Source/DasherVR/Private/DasherFileUtils.cpp b/Source/DasherVR/Private/DasherFileUtils.cpp
index 095ebd51fb7f984bb094239b2772861ca1779b70..8f346a33bc02e3dee5e606b181ea025213995991 100644
--- a/Source/DasherVR/Private/DasherFileUtils.cpp
+++ b/Source/DasherVR/Private/DasherFileUtils.cpp
@@ -1,5 +1,5 @@
 #include "CoreMinimal.h"
-#include "FileUtils.h"
+#include "DasherCoreWrapper.h"
 #include "HAL/FileManagerGeneric.h"
 #include "Misc/FileHelper.h"
 
@@ -13,25 +13,30 @@ namespace Dasher
 	//This doesn't actually Parse all files with the pattern, just the file with exactly the name strPattern in the Project directory
 	void FileUtils::ScanFiles(AbstractParser* parser, const std::string& strPattern)
 	{ 
-		const FString SearchPath = FPaths::ConvertRelativePathToFull(FPaths::ProjectDir(), TEXT("DasherResources"));
+		const TArray<FString> SearchPaths = {
+			FPaths::ConvertRelativePathToFull(FPaths::ProjectDir()),
+			FPaths::ConvertRelativePathToFull(FPaths::ProjectDir(), TEXT("DasherResources"))
+		};
 
-		//Check for explicit file
-		if(IFileManager::Get().FileExists(*FPaths::Combine(SearchPath, FString(strPattern.c_str()))))
-		{
-			parser->ParseFile(TCHAR_TO_UTF8(*FPaths::Combine(SearchPath, FString(strPattern.c_str()))), true);
-			return;
-		}
+		for(FString SearchPath : SearchPaths){
+			//Check for explicit file
+			if(IFileManager::Get().FileExists(*FPaths::Combine(SearchPath, FString(strPattern.c_str()))))
+			{
+				parser->ParseFile(TCHAR_TO_UTF8(*FPaths::Combine(SearchPath, FString(strPattern.c_str()))), true);
+				return;
+			}
 
-		//Search files
-		TArray<FString> Filenames;
-		IFileManager::Get().FindFiles(Filenames, *SearchPath);
-		FString alteredPattern = FString(strPattern.c_str()).Replace(TEXT("*"), TEXT(".*"));
+			//Search files
+			TArray<FString> Filenames;
+			IFileManager::Get().FindFiles(Filenames, *SearchPath);
+			FString alteredPattern = FString(strPattern.c_str()).Replace(TEXT("*"), TEXT(".*"));
 
-		for(FString Filename : Filenames)
-		{
-			if(FRegexMatcher(FRegexPattern(alteredPattern), Filename).FindNext())
+			for(FString Filename : Filenames)
 			{
-				parser->ParseFile(TCHAR_TO_UTF8(*FPaths::Combine(SearchPath, Filename)), true);
+				if(FRegexMatcher(FRegexPattern(alteredPattern), Filename).FindNext())
+				{
+					parser->ParseFile(TCHAR_TO_UTF8(*FPaths::Combine(SearchPath, Filename)), true);
+				}
 			}
 		}
 	}
@@ -39,7 +44,9 @@ namespace Dasher
 	bool FileUtils::WriteUserDataFile(const std::string& filename, const std::string& strNewText, bool append)
 	{
 		if (strNewText.length() == 0) return true;
-		return FFileHelper::SaveStringToFile(FString(strNewText.c_str()), UTF8_TO_TCHAR(filename.c_str()), FFileHelper::EEncodingOptions::AutoDetect, &IFileManager::Get(), (append) ? FILEWRITE_Append : FILEWRITE_None);
+		FString Path = FString(filename.c_str());
+		if(FPaths::IsRelative(Path)) Path = UTF8_TO_TCHAR(GetFullFilenamePath(filename).c_str());
+		return FFileHelper::SaveStringToFile(FString(strNewText.c_str()), *Path, FFileHelper::EEncodingOptions::AutoDetect, &IFileManager::Get(), (append) ? FILEWRITE_Append : FILEWRITE_None);
 	}
 	
 	std::string FileUtils::GetFullFilenamePath(const std::string strFilename){
diff --git a/Source/DasherVR/Private/SDasherWidget.cpp b/Source/DasherVR/Private/SDasherWidget.cpp
index e14114a028f7487e3a6bcaadc913f3879fb0d472..4dd7f642a0335a1a8e7e76ff283a5dd698fa0afa 100644
--- a/Source/DasherVR/Private/SDasherWidget.cpp
+++ b/Source/DasherVR/Private/SDasherWidget.cpp
@@ -113,7 +113,7 @@ void SDasherWidget::Construct(const FArguments& InArgs)
 
 	//Setting up Dasher
 	static Dasher::XMLErrorDisplay display;
-    Dasher::XmlSettingsStore* Settings = new Dasher::XmlSettingsStore("Settings.xml"/*, &fileUtils*/, &display); //Gets deleted somewhere else
+    Dasher::XmlSettingsStore* Settings = new Dasher::XmlSettingsStore("Settings.xml", &display); //Gets deleted somewhere else
     Settings->Load();
 	Settings->Save();
     DasherMainInterface = MakeShared<Dasher::DasherInterface>(Settings);
@@ -122,7 +122,7 @@ void SDasherWidget::Construct(const FArguments& InArgs)
 	DasherMainInterface->SetBoolParameter(BP_AUTO_SPEEDCONTROL, false);  //Auto Speed Control
 	DasherMainInterface->SetLongParameter(LP_DASHER_FONTSIZE, 18);	
 	DasherMainInterface->SetLongParameter(LP_MAX_BITRATE, 400);			//Maximum Speed
-	DasherMainInterface->SetStringParameter(SP_INPUT_FILTER, "Stylus Control");	//On Hold
+	//DasherMainInterface->SetStringParameter(SP_INPUT_FILTER, "Stylus Control");	//On Hold
 	DasherMainInterface->SetStringParameter(SP_ALPHABET_ID, "German without punctuation");
 	DasherMainInterface->SetLongParameter(LP_MIN_NODE_SIZE, 15);
 
diff --git a/Source/DasherVR/Private/UDasherWidget.cpp b/Source/DasherVR/Private/UDasherWidget.cpp
index e26fdb532edace3d85dc3c1f607649e4e0cc1de9..29031715ffeb8bf132a0e7b038f7b8eeec9bfcec 100644
--- a/Source/DasherVR/Private/UDasherWidget.cpp
+++ b/Source/DasherVR/Private/UDasherWidget.cpp
@@ -59,6 +59,7 @@ FString UDasherWidget::GetBuffer()
 void UDasherWidget::ResetBuffer()
 {
 	DasherScreen->ResetBuffer();
+	BufferAltered.Broadcast("");
 }
 
 void UDasherWidget::StartTraining(FString PathToTextFile)
diff --git a/Source/DasherVR/Public/DasherCoreWrapper.h b/Source/DasherVR/Public/DasherCoreWrapper.h
index acf89e9705e0c98dab75c36b0f4ad2d1e16df6d3..97bc90fcf8725524f5afea1ad44e0a11bc8bdd08 100644
--- a/Source/DasherVR/Public/DasherCoreWrapper.h
+++ b/Source/DasherVR/Public/DasherCoreWrapper.h
@@ -14,17 +14,18 @@
 
 	THIRD_PARTY_INCLUDES_START
 	//included first to stop linker errors
-	#include "SettingsStore.h"
-	#include "AbstractXMLParser.h"
-	#include "DasherInterfaceBase.h"
-	#include "DasherScreen.h"
-	#include "DashIntfScreenMsgs.h"	
-	#include "DasherInput.h"
-	#include "UserLog.h"
-	#include "XmlSettingsStore.h"
-	#include "Messages.h"
-	#include "ModuleManager.h"	
-	#include "AppSettingsHeader.h"
+	#include "DasherCore/SettingsStore.h"
+	#include "DasherCore/AbstractXMLParser.h"
+	#include "DasherCore/DasherInterfaceBase.h"
+	#include "DasherCore/FileUtils.h"
+	#include "DasherCore/DasherScreen.h"
+	#include "DasherCore/DashIntfScreenMsgs.h"	
+	#include "DasherCore/DasherInput.h"
+	#include "DasherCore/UserLog.h"
+	#include "DasherCore/XmlSettingsStore.h"
+	#include "DasherCore/Messages.h"
+	#include "DasherCore/ModuleManager.h"	
+	#include "Common/AppSettingsHeader.h"
 	THIRD_PARTY_INCLUDES_END
 #if PLATFORM_LINUX
 #pragma clang diagnostic push
diff --git a/Source/Thirdparty/CMakeLists.txt b/Source/Thirdparty/CMakeLists.txt
index d3216b98683de4053361cb4cb9b4a2a79b005124..4c001d32bb46711687653f3ba04b89fd51750962 100644
--- a/Source/Thirdparty/CMakeLists.txt
+++ b/Source/Thirdparty/CMakeLists.txt
@@ -51,9 +51,12 @@ include(${CMAKE_CURRENT_SOURCE_DIR}/Dasher/DasherCore/CMakeLists.txt)
 #Install header files during make install
 ############################################################################################################
 set(CMAKE_BUILD_TYPE Release)
-set_target_properties(DasherCore PROPERTIES PREFIX "")
-set_target_properties(DasherCore PROPERTIES OUTPUT_NAME "DasherCore")
-set_target_properties(DasherCore PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/../Dasher/Lib)
+set_target_properties(DasherCore     PROPERTIES PREFIX "")
+set_target_properties(DasherCore     PROPERTIES OUTPUT_NAME "DasherCore")
+set_target_properties(DasherCore     PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/Dasher/Lib)
+set_target_properties(DasherCore     PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_CURRENT_SOURCE_DIR}/Dasher/Lib)
+set_target_properties(pugixml-static PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/Dasher/Lib)
+set_target_properties(pugixml-static PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_CURRENT_SOURCE_DIR}/Dasher/Lib)
 
 if(WIN32)
 	set_target_properties(DasherCore PROPERTIES MSVC_RUNTIME_LIBRARY MultiThreaded)
diff --git a/Source/Thirdparty/Dasher/Dasher.Build.cs b/Source/Thirdparty/Dasher/Dasher.Build.cs
index fd0d3f918403627286c52a31b980824e8c3ded41..fbaf4ffc6ef0f8aa75057032b7366e932ea0025b 100644
--- a/Source/Thirdparty/Dasher/Dasher.Build.cs
+++ b/Source/Thirdparty/Dasher/Dasher.Build.cs
@@ -12,38 +12,30 @@ public class Dasher : ModuleRules
 		Type = ModuleType.External;
 
 		PrivateDefinitions.Add("HAVE_OWN_FILEUTILS");
-
-		PublicIncludePaths.AddRange(new string[] {});
-				
-		
-		PrivateIncludePaths.AddRange(new string[] {});
+		PublicDefinitions.Add("HAVE_ROUND=1");
 
 
-		PublicDependencyModuleNames.AddRange(new string[]{"Core"});
-			
-		
-		PrivateDependencyModuleNames.AddRange(
+		PublicDependencyModuleNames.AddRange(
 			new string[]
 			{
+				"Core",
 				"CoreUObject",
 				"Engine",
 				"Slate",
 				"SlateCore"
             }
-			);
-			
-		PublicDefinitions.Add("HAVE_ROUND=1");
+		);
 		
 		DynamicallyLoadedModuleNames.AddRange(new string[]{});
-		
+
 		PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "DasherCore"));
         PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "DasherCore", "Src"));
-        PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "DasherCore", "Src", "Common"));
+		PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "DasherCore", "Src", "Common"));
 		PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "DasherCore", "Src", "Common", "Allocators"));
 		PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "DasherCore", "Src", "Common", "Platform"));
 		PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "DasherCore", "Src", "Common", "Unicode"));
-        PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "DasherCore", "Src", "DasherCore"));
-        PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "DasherCore", "Src", "DasherCore", "Alphabet"));
+		PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "DasherCore", "Src", "DasherCore"));
+		PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "DasherCore", "Src", "DasherCore", "Alphabet"));
 		PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "DasherCore", "Src", "DasherCore", "LanguageModelling"));
 		PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "DasherCore", "Thirdparty", "pugixml", "src"));
 		
diff --git a/Source/Thirdparty/Dasher/DasherCore b/Source/Thirdparty/Dasher/DasherCore
index 64c1349282b38d9fa4ddde9c04311ed45d689598..a94a47badf40d9b7f7e8c80c08b015c41d1ecc90 160000
--- a/Source/Thirdparty/Dasher/DasherCore
+++ b/Source/Thirdparty/Dasher/DasherCore
@@ -1 +1 @@
-Subproject commit 64c1349282b38d9fa4ddde9c04311ed45d689598
+Subproject commit a94a47badf40d9b7f7e8c80c08b015c41d1ecc90
diff --git a/Source/Thirdparty/Dasher/Lib/DasherCore.lib b/Source/Thirdparty/Dasher/Lib/DasherCore.lib
index 4795fb8055a9734e55dcb5221cc39ab435da30a5..649532f6b3811d45e73e539ecfa9f151629881ba 100644
--- a/Source/Thirdparty/Dasher/Lib/DasherCore.lib
+++ b/Source/Thirdparty/Dasher/Lib/DasherCore.lib
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:4e82346aa89a5ca870402e023dfc5bd9b8177ded44f48ce21cd2b4f91706c49a
-size 8366106
+oid sha256:d51488c01a9dd197c65a23d33c65ff5f7f0cbf9853d0f9d634fa31423f90d56c
+size 17686042
diff --git a/Source/Thirdparty/Dasher/Lib/DasherCore.pdb b/Source/Thirdparty/Dasher/Lib/DasherCore.pdb
index bcca2c35111a9b9734e3c5f6dbcff3d3feec07fd..f6044a85dcead2424134c4c7695360f57f29db1e 100644
Binary files a/Source/Thirdparty/Dasher/Lib/DasherCore.pdb and b/Source/Thirdparty/Dasher/Lib/DasherCore.pdb differ
diff --git a/Source/Thirdparty/Dasher/Lib/pugixml.lib b/Source/Thirdparty/Dasher/Lib/pugixml.lib
index 30f404a0edfac9f7f11df566e7824433a7ae29d1..cce3a4936cd35ce16565522cefeb54f99f96efc2 100644
--- a/Source/Thirdparty/Dasher/Lib/pugixml.lib
+++ b/Source/Thirdparty/Dasher/Lib/pugixml.lib
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:9058b270bd4951d95bd56f6e08bae9ed254b9343643566695236ec65a135360e
-size 708098
+oid sha256:af6d87774854f597e9a3dc390060d76ab870e9dde54b5935d8029e336ac2eed2
+size 1463018
diff --git a/Source/Thirdparty/Dasher/Lib/pugixml.pdb b/Source/Thirdparty/Dasher/Lib/pugixml.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..dc52d69d6d2a95beb29cb8419f2dadf1eb8b7be3
Binary files /dev/null and b/Source/Thirdparty/Dasher/Lib/pugixml.pdb differ