diff --git a/demo/addons/gdpd/patches/gdpd.pd b/demo/addons/gdpd/patches/gdpd.pd
index a0843bc7bb6e8f312ae3e9bb1a4e3cf9d447f2d2..99faa5f136e354096f96cd4225af423d24ee1f50 100644
Binary files a/demo/addons/gdpd/patches/gdpd.pd and b/demo/addons/gdpd/patches/gdpd.pd differ
diff --git a/demo/addons/gdpd/patches/gdpd_send.pd b/demo/addons/gdpd/patches/gdpd_send.pd
index 61e18c7c8ea264bcef5e1d3525271bb6a4d40f0f..4bb09c4e684c9164cebcf772004c572872c4d9a4 100644
Binary files a/demo/addons/gdpd/patches/gdpd_send.pd and b/demo/addons/gdpd/patches/gdpd_send.pd differ
diff --git a/patches/gdpd.pd b/patches/gdpd.pd
index a0843bc7bb6e8f312ae3e9bb1a4e3cf9d447f2d2..99faa5f136e354096f96cd4225af423d24ee1f50 100644
Binary files a/patches/gdpd.pd and b/patches/gdpd.pd differ
diff --git a/patches/gdpd_send.pd b/patches/gdpd_send.pd
index 61e18c7c8ea264bcef5e1d3525271bb6a4d40f0f..4bb09c4e684c9164cebcf772004c572872c4d9a4 100644
Binary files a/patches/gdpd_send.pd and b/patches/gdpd_send.pd differ
diff --git a/src/gdpd.cpp b/src/gdpd.cpp
index ceef2acb018e1dff70ba0732f7bee3ca616543ad..9b4e75ed5872fb80e73af9e246f14f8239d1a8d9 100644
--- a/src/gdpd.cpp
+++ b/src/gdpd.cpp
@@ -63,6 +63,17 @@ void GdPd::_bind_methods() {
     ClassDB::bind_method(D_METHOD("get_pd_patch"), 
                          &GdPd::get_pd_patch);
 
+    ClassDB::bind_method(D_METHOD("set_addon_patches_folder", 
+                         "p_addon_patches_folder"), 
+                         &GdPd::set_addon_patches_folder);
+    ClassDB::bind_method(D_METHOD("get_addon_patches_folder"), 
+                         &GdPd::get_addon_patches_folder);
+
+    ClassDB::bind_method(D_METHOD("set_application_name", 
+                         "p_application_name"), 
+                         &GdPd::set_application_name);
+    ClassDB::bind_method(D_METHOD("get_application_name"), 
+                         &GdPd::get_application_name);
 
     ClassDB::bind_method(D_METHOD("send"), &GdPd::send);
 
@@ -75,6 +86,10 @@ void GdPd::_bind_methods() {
                  "set_osc_address", "get_osc_address");
     ADD_PROPERTY(PropertyInfo(Variant::STRING, "pd_patch", PROPERTY_HINT_FILE), 
                  "set_pd_patch", "get_pd_patch");
+    ADD_PROPERTY(PropertyInfo(Variant::STRING, "addon_patches_folder"), 
+                 "set_addon_patches_folder", "get_addon_patches_folder");
+    ADD_PROPERTY(PropertyInfo(Variant::STRING, "application_name"), 
+                 "set_application_name", "get_application_name");
 
 	ADD_SIGNAL(MethodInfo("got_message", 
                 PropertyInfo(Variant::STRING, "address"), 
@@ -88,6 +103,8 @@ GdPd::GdPd() {
     m_rtDefaults=true;
     m_player=NULL;
     osc_address = String(MULTICAST_ADDRESS.c_str());
+    addon_patches_folder = "res://addons/gdpd/patches";
+    m_applicationNameStr = "patch";
 }
 
 GdPd::~GdPd() {}
@@ -95,7 +112,7 @@ GdPd::~GdPd() {}
 
 int GdPd::audioCallback(void *outputBuffer, void *inputBuffer, 
 					    unsigned int nBufferFrames, double streamTime, 
-						RtAudioStreamStatus status, void *userData){
+						RtAudioStreamStatus status, void *userData) {
 	GdPd* gdpd = static_cast<GdPd*>(userData);
 	gdpd->processAudio(outputBuffer, inputBuffer, nBufferFrames);
 	return 0;
@@ -184,8 +201,8 @@ int GdPd::start() {
         //FIXME add local port in addition to multicast
         m_receiver = lo_server_new_multicast(
                             MULTICAST_ADDRESS.c_str(), 
-                            std::to_string(RECEIVER_PORT).c_str(),
-                            errorHandler);
+                            std::to_string(RECEIVER_PORT).c_str(),NULL);
+                            //errorHandler);
         /*
         m_receiver = lo_server_new_with_proto(
                             std::to_string(RECEIVER_PORT).c_str(),
@@ -342,13 +359,13 @@ void GdPd::send(String address, Array arguments) {
         }
         
         std::string addrStr(address.utf8().get_data());
-        addrStr = std::string("/gdpd/patch/")+addrStr;
+        addrStr = std::string("/gdpd/")+m_applicationNameStr+"/"+addrStr;
         lo_send_message(m_destination, addrStr.c_str(), msg);
     }
     else {
         libpd_start_message(arguments.size()+2);
         libpd_add_symbol("gdpd");
-        libpd_add_symbol("patch");
+        libpd_add_symbol(m_applicationNameStr.c_str());
         libpd_add_symbol(String(address).utf8().get_data());
         for(int i=0; i<arguments.size(); ++i) {
             switch(arguments[i].get_type()) {
@@ -372,10 +389,9 @@ void GdPd::_process(double delta) {
     if(!m_init) {
         return;
     }
-
     if(mode==OSC) {
         if(m_receiver!=NULL) {
-            lo_server_recv_noblock(m_receiver, 1);
+            lo_server_recv_noblock(m_receiver, 10);
         }
     }
     else {
@@ -410,22 +426,21 @@ void GdPd::processAudio(void *outputBuffer, void *inputBuffer,
 }
 
 bool GdPd::open_patch() {
-    std::string pdPatchStr;
-    std::string pdDirStr;
 
     //If opening from editor, just set the paths
     if(OS::get_singleton()->has_feature("editor")) {
-        print("Loading patch from editor");
 		String fullpath = ProjectSettings::get_singleton()
                             ->globalize_path(pd_patch);
 
-        
-
 		String pat = fullpath.get_slice("/",fullpath.get_slice_count("/")-1);
 		String dir = fullpath.trim_suffix(pat);
 
-        pdPatchStr = std::string(pat.utf8().get_data());
-        pdDirStr = std::string(dir.utf8().get_data());
+        m_pdPatchStr = std::string(pat.utf8().get_data());
+        m_pdDirStr = std::string(dir.utf8().get_data());
+
+        print("Loading patch "+m_pdPatchStr
+                +" from editor at path "
+                +m_pdDirStr);
     }
     else {
         // Otherwise, copy the files to user folder
@@ -435,9 +450,11 @@ bool GdPd::open_patch() {
 
 		if(OS::get_singleton()->get_name() == "Android") {
             print("On Android, so start copying files to user folder");
-            String packageName = "com.example.gdpd";
+            String packageName = ProjectSettings::get_singleton()
+                    ->globalize_path("user://").trim_suffix("/").rsplit("/")[2];
+
+            print(packageName.utf8().get_data());
 
-            //FIXME get Android package name
             userPath = String("/sdcard/Android/data/")
                         + packageName
                         + String("/files/");
@@ -454,39 +471,38 @@ bool GdPd::open_patch() {
         //Recursively copy this folder from res to user directory
         recurseCopy("res://"+patchDir, userPath+patchDir);
 
-        //Also copy gdpd patches
+        //Also copy gdpd patches from patches folder
         std::vector<String> gdpdFiles{"gdpd.pd", "gdpd_send.pd", 
                                       "gdpd_receive.pd"};
         for(auto& f : gdpdFiles) {
             Ref<DirAccess> diracc = DirAccess::open("res://");
-            diracc->copy("res://addons/gdpd/patches/"+f,
+            diracc->copy(addon_patches_folder+"/"+f,
                          userPath+patchDir+"/"+f);
         }
 
         //Define new paths
-        pdPatchStr = std::string(patch.utf8().get_data());
-        pdDirStr = std::string((userPath+patchDir).utf8().get_data());
+        m_pdPatchStr = std::string(patch.utf8().get_data());
+        m_pdDirStr = std::string((userPath+patchDir).utf8().get_data());
     }
 
-
     // Open the patch
     m_patchOpened=false;
-	pd::Patch p1 = m_pd.openPatch(pdPatchStr.c_str(), pdDirStr.c_str());
+	pd::Patch p1 = m_pd.openPatch(m_pdPatchStr.c_str(), m_pdDirStr.c_str());
+    /*
 	if(!p1.isValid()) {
-		print("Could not open patch "+pdPatchStr);
+		print("Could not open patch "+m_pdPatchStr);
         return false;
 	}
 	else {
-		print("Opened patch "+pdPatchStr);
+		print("Opened patch "+m_pdPatchStr);
         m_patchOpened=true;
         std::string patchStr(pd_patch.utf8().get_data());
         m_patchsMap[patchStr] = p1;
-	}
+	}*/
     return true;
 }
 
 void GdPd::recurseCopy(String fromPath, String toPath) {
-
     //Create the toPath folder
     DirAccess::make_dir_absolute(toPath);
 
@@ -505,7 +521,6 @@ void GdPd::recurseCopy(String fromPath, String toPath) {
         String dirName = dirs[i];
         recurseCopy(fromPath+"/"+dirName, toPath+"/"+dirName);
     }
-
 }
 
 void GdPd::close_patch() {
diff --git a/src/gdpd.h b/src/gdpd.h
index 4d8b67e371c6fc81b719e2e88b1a334550e6d5b6..74d278a992c1f700c77d6ce60a3e459808103504 100644
--- a/src/gdpd.h
+++ b/src/gdpd.h
@@ -58,7 +58,6 @@ protected:
                             lo_arg ** argv,
                             int argc, lo_message msg, void *user_data) {
         GdPd* gdpd = (GdPd*)user_data; 
-        std::cout<<"got osc message"<<std::endl;
         gdpd->handleOSC(path, types, argv, argc, msg);
         return 0;
     }
@@ -97,6 +96,12 @@ private:
     String pd_patch;
     String pd_folder;
     bool m_patchOpened;
+    String addon_patches_folder;
+    std::string m_pdPatchStr;
+    std::string m_pdDirStr;
+
+    String application_name;
+    std::string m_applicationNameStr;
 
     const int SENDER_PORT = 9211;
     const int RECEIVER_PORT = 9212;
@@ -133,6 +138,16 @@ public:
     inline String get_pd_folder() const{return pd_folder;}
     inline void set_pd_patch(const String p_patch){pd_patch=p_patch;}
     inline String get_pd_patch() const{return pd_patch;}
+    inline void set_addon_patches_folder(const String p_addon_patches_folder){
+        addon_patches_folder=p_addon_patches_folder;
+    }
+    inline String get_addon_patches_folder() const{return addon_patches_folder;}
+
+    inline void set_application_name(const String p_application_name){
+        application_name=p_application_name;
+        m_applicationNameStr = application_name.utf8().get_data();
+    }
+    inline String get_application_name() const{return application_name;}
 
     inline void set_osc_address(const String p_osc_address) { 
         osc_address = p_osc_address;
diff --git a/src/rtaudio/RtAudio.os b/src/rtaudio/RtAudio.os
deleted file mode 100644
index 1ec3e45a8b107c72164645ecd3c180df9bc90664..0000000000000000000000000000000000000000
Binary files a/src/rtaudio/RtAudio.os and /dev/null differ