diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp
index 81bbb5770..04ca79364 100644
--- a/es-core/src/InputManager.cpp
+++ b/es-core/src/InputManager.cpp
@@ -348,6 +348,10 @@ void InputManager::writeDeviceConfig(InputConfig* config)
 
 	config->writeToXML(root);
 	doc.save_file(path.c_str());
+	
+	// execute any onFinish commands and re-load the config for changes
+	doOnFinish();
+	loadInputConfig(config);
 }
 
 void InputManager::doOnFinish()
diff --git a/es-core/src/guis/GuiDetectDevice.cpp b/es-core/src/guis/GuiDetectDevice.cpp
index b7fae1365..bf8e8e4cb 100644
--- a/es-core/src/guis/GuiDetectDevice.cpp
+++ b/es-core/src/guis/GuiDetectDevice.cpp
@@ -107,7 +107,6 @@ void GuiDetectDevice::update(int deltaTime)
 		// If ES starts and if a known device is connected after startup skip controller configuration
 		if(mFirstRun && fs::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0)
 		{
-			InputManager::getInstance()->doOnFinish(); // execute possible onFinish commands
 			if(mDoneCallback)
 				mDoneCallback();
 			delete this; // delete GUI element
diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp
index 78f598ff1..f03144e11 100644
--- a/es-core/src/guis/GuiInputConfig.cpp
+++ b/es-core/src/guis/GuiInputConfig.cpp
@@ -259,7 +259,6 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi
 	std::vector< std::shared_ptr<ButtonComponent> > buttons;
 	buttons.push_back(std::make_shared<ButtonComponent>(mWindow, "OK", "ok", [this, okCallback] { 
 		InputManager::getInstance()->writeDeviceConfig(mTargetConfig); // save
-        InputManager::getInstance()->doOnFinish();  // execute possible onFinish commands
 		if(okCallback)
 			okCallback();
 		delete this; 
@@ -388,4 +387,4 @@ bool GuiInputConfig::assign(Input input, int inputId)
 void GuiInputConfig::clearAssignment(int inputId)
 {
 	mTargetConfig->unmapInput(inputName[inputId]);
-}
\ No newline at end of file
+}