diff --git a/Source/CoreServices.cpp b/Source/CoreServices.cpp
index 84a668fd697378d7d4e042cf2d1ea5aef302b787..f17620830644cc9276486889f22a137a99c862ed 100644
--- a/Source/CoreServices.cpp
+++ b/Source/CoreServices.cpp
@@ -107,6 +107,16 @@ void setAppendTextToRecordingDir(String text)
     getControlPanel()->setAppendText(text);
 }
 
+String getSelectedRecordEngineId()
+{
+	return getControlPanel()->getSelectedRecordEngineId();
+}
+
+bool setSelectedRecordEngineId(String id)
+{
+	return getControlPanel()->setSelectedRecordEngineId(id);
+}
+
 namespace RecordNode
 {
 void createNewrecordingDir()
@@ -145,7 +155,7 @@ int addSpikeElectrode(SpikeRecordInfo* elec)
 }
 };
 
-PLUGIN_API const char* getApplicationResource(const char* name, int& size)
+const char* getApplicationResource(const char* name, int& size)
 {
 	return BinaryData::getNamedResource(name, size);
 }
diff --git a/Source/CoreServices.h b/Source/CoreServices.h
index 4b46d403afc7ba1d76aefeeecc221147d6487962..b8e254d4a6bdcd85e5e3001b685077b25d145614 100644
--- a/Source/CoreServices.h
+++ b/Source/CoreServices.h
@@ -78,6 +78,14 @@ PLUGIN_API void setPrependTextToRecordingDir(String text);
 /** Manually set the text to be appended to the recording directory */
 PLUGIN_API void setAppendTextToRecordingDir(String text);
 
+/** Gets the ID fo the selected Record Engine*/
+PLUGIN_API String getSelectedRecordEngineId();
+
+/** Sets a specific RecordEngine to be used based on its id. 
+Return true if there is an engine with the specified ID and it's possible to
+change the current engine or false otherwise. */
+PLUGIN_API bool setSelectedRecordEngineId(String id);
+
 namespace RecordNode
 {
 /** Forces creation of new directory on recording */
diff --git a/Source/UI/ControlPanel.cpp b/Source/UI/ControlPanel.cpp
index 987121fc30c86e2740f82e1dfd6e2076ac082bf7..b5328948a98abd20e0f53e1328070471e36d7bce 100755
--- a/Source/UI/ControlPanel.cpp
+++ b/Source/UI/ControlPanel.cpp
@@ -552,6 +552,30 @@ void ControlPanel::updateRecordEngineList()
 		recordSelector->setSelectedId(selectedEngine, sendNotification);
 }
 
+String ControlPanel::getSelectedRecordEngineId()
+{
+	return recordEngines[recordSelector->getSelectedId() - 1]->getID();
+}
+
+bool ControlPanel::setSelectedRecordEngineId(String id)
+{
+	if (getAcquisitionState())
+	{
+		return false;
+	}
+
+	int nEngines = recordEngines.size();
+	for (int i = 0; i < nEngines; ++i)
+	{
+		if (recordEngines[i]->getID() == id)
+		{
+			recordSelector->setSelectedId(i + 1, sendNotificationSync);
+			return true;
+		}
+	}
+	return false;
+}
+
 void ControlPanel::createPaths()
 {
     /*  int w = getWidth() - 325;
diff --git a/Source/UI/ControlPanel.h b/Source/UI/ControlPanel.h
index cec8bc11898f033caea0ed8bc4087bc965136579..f63296ecf6761813a3bc7548691443b6b1384e2d 100755
--- a/Source/UI/ControlPanel.h
+++ b/Source/UI/ControlPanel.h
@@ -365,6 +365,10 @@ public:
 
     void updateRecordEngineList();
 
+	String getSelectedRecordEngineId();
+
+	bool setSelectedRecordEngineId(String id);
+
     ScopedPointer<RecordButton> recordButton;
 private:
     ScopedPointer<PlayButton> playButton;