diff --git a/GdpdExample/Main.tscn b/GdpdExample/Main.tscn
index 08937250694234a885585ed12aa719e7df34c1dd..fd759a5edab940885595187a4b7f457500da9ec3 100644
--- a/GdpdExample/Main.tscn
+++ b/GdpdExample/Main.tscn
@@ -4,17 +4,10 @@
 script/source = "extends Control
 
 var gdpd = load(\"res://addons/gdpd/bin/gdpd.gdns\")
-var patch
+#var patch
 
 func _ready():
-	#initialize pd 
-	patch = gdpd.new()
 
-	#retrieve 
-	var inps = patch.get_available_input_devices()
-	var outs = patch.get_available_output_devices()
-	patch.init_devices(inps[0], outs[0])
-	
 	#the patch path should be the absolute one
 	_load_patch(ProjectSettings.globalize_path(\"res://patch1.pd\"))
 	_load_patch(ProjectSettings.globalize_path(\"res://patch2.pd\"))
@@ -25,6 +18,15 @@ func _load_patch(pd_patch) :
 	var patch_name = pd_patch.split(\"/\")[-1]
 	var patch_dir = pd_patch.trim_suffix(patch_name)
 	
+	#initialize pd 
+	var patch = gdpd.new()
+
+	#retrieve 
+	var inps = patch.get_available_input_devices()
+	var outs = patch.get_available_output_devices()
+	patch.init_devices(inps[0], outs[0])
+	
+	
 	#load patch
 	patch.openfile(patch_name, patch_dir)
 "
diff --git a/GdpdExample/addons/gdpd/bin/libgdpd.gdnlib b/GdpdExample/addons/gdpd/bin/libgdpd.gdnlib
index 99933eb516a4329aa7aa2bac6c7b395a3b48338d..048e4afda8844119f77b118645465d3907cd9c32 100644
--- a/GdpdExample/addons/gdpd/bin/libgdpd.gdnlib
+++ b/GdpdExample/addons/gdpd/bin/libgdpd.gdnlib
@@ -1,7 +1,7 @@
 [general]
 
 singleton=false
-load_once=true
+load_once=false
 symbol_prefix="godot_"
 reloadable=true
 
@@ -13,6 +13,6 @@ OSX.64="res://addons/gdpd/bin/osx/libgdpd.dylib"
 
 [dependencies]
 
-X11.64=[]
+X11.64=[  ]
 Windows.64=[  ]
 OSX.64=[  ]
diff --git a/src/gdpd.cpp b/src/gdpd.cpp
index 0d53f63c024cef9bfef3f66fe45ed9a4853fa774..551b1a6ee4133bdffe5b368d86e4effa5b0c5a5f 100644
--- a/src/gdpd.cpp
+++ b/src/gdpd.cpp
@@ -156,7 +156,7 @@ int Gdpd::start() {
 void Gdpd::stop() {
 	m_audio.stopStream();
 	m_audio.closeStream();
-	m_pd.closePatch(m_patch);
+	m_pd.clear();
 	m_pd.computeAudio(false);
 	print("Stopped");
 }
@@ -181,13 +181,16 @@ void Gdpd::openfile(godot::String baseStr, godot::String dirStr) {
 	std::string dirS(dirWs.begin(), dirWs.end());
 
 	//libpd_openfile(baseS.c_str(), dirS.c_str());
-	m_patch = m_pd.openPatch(baseS.c_str(), dirS.c_str());
+	//m_patch = m_pd.openPatch(baseS.c_str(), dirS.c_str());
+	m_pd.openPatch(baseS.c_str(), dirS.c_str());
 
 	print("Opened patch");
 }
 
-void Gdpd::closefile() {
-	m_pd.closePatch(m_patch);
+void Gdpd::closefile(godot::String baseStr) {
+	std::wstring baseWs = baseStr.unicode_str();
+	std::string baseS(baseWs.begin(), baseWs.end());
+	m_pd.closePatch(baseS.c_str());
 }
 
 void Gdpd::subscribe(String symbStr) {
diff --git a/src/gdpd.hpp b/src/gdpd.hpp
index ae00d9f62d6fe66cbd90e9bd3e1c8eb5cde5992b..2bedbb99c3ea5c445e9fa1a73237277bb787afd6 100644
--- a/src/gdpd.hpp
+++ b/src/gdpd.hpp
@@ -48,7 +48,7 @@ public:
 	int start();
 	void stop();
 	void openfile(String basename, String dirname);
-	void closefile();
+	void closefile(String basename);
 	bool has_message();
 	Array get_next();
 	int blocksize();
diff --git a/src/rtaudio/RtAudio.os b/src/rtaudio/RtAudio.os
index e6c362417eea4c66694fb6a7fd4727c23093c67a..067f8bb431a651b59d9ae5deccc671021129c206 100644
Binary files a/src/rtaudio/RtAudio.os and b/src/rtaudio/RtAudio.os differ