diff --git a/applications/gui2/src/views/config.cpp b/applications/gui2/src/views/config.cpp
index 3bd9bef3fc665bf03c46e5fe650b383579d02a86..17a0ec07ce8fef46ef3ef0f53a51939263a565b0 100644
--- a/applications/gui2/src/views/config.cpp
+++ b/applications/gui2/src/views/config.cpp
@@ -220,8 +220,9 @@ void ConfigWindow::__addElements(nanogui::FormHelper *form, const std::string &s
 			}
 
 			if (!nuri.empty()) {
-				auto button = form->addButton(key, [form, nuri]() {
-					buildForm(form->window()->screen(), nuri);
+				nanogui::Window *window = form->window();
+				auto button = form->addButton(key, [window, nuri]() {
+					buildForm(window->screen(), nuri);
 				});
 
 				button->setIcon(ENTYPO_ICON_FOLDER);
@@ -236,7 +237,7 @@ void ConfigWindow::__addElements(nanogui::FormHelper *form, const std::string &s
 void ConfigWindow::_buildForm(const std::string &suri) {
 	using namespace nanogui;
 
-	ftl::URI uri(suri);
+	/*ftl::URI uri(suri);
 
 	FormHelper *form = new FormHelper(this->screen());
 	form->addWindow(Vector2i(100,50), uri.getFragment());
@@ -259,19 +260,38 @@ void ConfigWindow::_buildForm(const std::string &suri) {
 	});
 	close->setBackgroundColor({80, 255});
 	form->window()->screen()->performLayout();
-	delete form;
+	delete form;*/
+
+	buildForm(screen(), suri);
 }
 
+static MUTEX config_mtx;
+static std::unordered_map<std::string, nanogui::Window*> existing_configs;
+
 // Static version
 void ConfigWindow::buildForm(nanogui::Screen *screen, const std::string &suri) {
 	using namespace nanogui;
 
+	{
+		UNIQUE_LOCK(config_mtx, lk);
+		auto i = existing_configs.find(suri);
+		if (i != existing_configs.end()) {
+			screen->moveWindowToFront(i->second);
+			return;
+		}
+	}
+
 	ftl::URI uri(suri);
 
 	FormHelper *form = new FormHelper(screen);
 	form->addWindow(Vector2i(100,50), uri.getFragment());
 	//form->window()->setTheme(theme());
 
+	{
+		UNIQUE_LOCK(config_mtx, lk);
+		existing_configs[suri] = form->window();
+	}
+
 	__addElements(form, suri);
 
 	// prevent parent window from being destroyed too early
@@ -283,9 +303,11 @@ void ConfigWindow::buildForm(nanogui::Screen *screen, const std::string &suri) {
 
 	auto *window = form->window();
 
-	close->setCallback([window](){
+	close->setCallback([window, suri](){
 		window->dispose();
 		//decRef();
+		UNIQUE_LOCK(config_mtx, lk);
+		existing_configs.erase(suri);
 	});
 	close->setBackgroundColor({80, 255});
 	form->window()->screen()->performLayout();