diff --git a/src/gdpd.cpp b/src/gdpd.cpp
index e33197e51be2acfd0ae97c104e562d5403d33871..4ce1a91029694fc743aaec8c639ad5ce1b7fead5 100644
--- a/src/gdpd.cpp
+++ b/src/gdpd.cpp
@@ -6,6 +6,7 @@ void Gdpd::_register_methods() {
     register_method("init", &Gdpd::init);
     register_method("openfile", &Gdpd::openfile);
     register_method("closefile", &Gdpd::closefile);
+    register_method("subscribe", &Gdpd::subscribe);
     register_method("has_message", &Gdpd::has_message);
     register_method("get_next", &Gdpd::get_next);
     register_method("start_message", &Gdpd::start_message);
@@ -124,6 +125,12 @@ void Gdpd::closefile() {
 	m_pd.closePatch(m_patch);
 }
 
+void Gdpd::subscribe(String symbStr) {
+	std::wstring symbWs = symbStr.unicode_str();
+	std::string symbS(symbWs.begin(), symbWs.end());
+	m_pd.subscribe(symbS.c_str());
+}
+
 bool Gdpd::has_message() {
 	//receive new messages
 	m_pd.receiveMessages();
diff --git a/src/gdpd.hpp b/src/gdpd.hpp
index ef3a1dbb92f683a47b84c5975486bdddc859164f..972d4056a346c00b122ec37e6fbde413c5b08e81 100644
--- a/src/gdpd.hpp
+++ b/src/gdpd.hpp
@@ -44,6 +44,7 @@ public:
 	bool has_message();
 	Array get_next();
 	int blocksize();
+	void subscribe(String symbStr);
 	int start_message(int nbValues);
 	void add_symbol(String symbStr);
 	void add_float(float val);