diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index 57b73ef43b..109adba969 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -658,6 +658,7 @@
+
#ifdef MIXBUS
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 15b06d5554..ec477ed98e 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -169,6 +169,7 @@
#include "gui_object.h"
#include "gui_thread.h"
#include "idleometer.h"
+#include "io_plugin_window.h"
#include "keyboard.h"
#include "keyeditor.h"
#include "location_ui.h"
@@ -342,6 +343,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
, export_video_dialog (X_("video-export"), _("Video Export Dialog"))
, lua_script_window (X_("script-manager"), _("Script Manager"))
, idleometer (X_("idle-o-meter"), _("Idle'o'Meter"))
+ , io_plugin_window (X_("io-plugins"), _("I/O Plugins"))
, plugin_manager_ui (X_("plugin-manager"), _("Plugin Manager"))
, plugin_dsp_load_window (X_("plugin-dsp-load"), _("Plugin DSP Load"))
, dsp_statistics_window (X_("dsp-statistics"), _("Performance Meters"))
@@ -520,6 +522,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
export_video_dialog.set_state (*ui_xml, 0);
lua_script_window.set_state (*ui_xml, 0);
idleometer.set_state (*ui_xml, 0);
+ io_plugin_window.set_state (*ui_xml, 0);
plugin_manager_ui.set_state (*ui_xml, 0);
plugin_dsp_load_window.set_state (*ui_xml, 0);
dsp_statistics_window.set_state (*ui_xml, 0);
@@ -550,6 +553,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
WM::Manager::instance().register_window (&midi_port_matrix);
WM::Manager::instance().register_window (&luawindow);
WM::Manager::instance().register_window (&idleometer);
+ WM::Manager::instance().register_window (&io_plugin_window);
WM::Manager::instance().register_window (&plugin_manager_ui);
WM::Manager::instance().register_window (&plugin_dsp_load_window);
WM::Manager::instance().register_window (&dsp_statistics_window);
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 7845c1a9ea..d6475446c1 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -141,6 +141,7 @@ class SessionOptionEditor;
class SpeakerDialog;
class GlobalPortMatrixWindow;
class IdleOMeter;
+class IOPluginWindow;
class PluginDSPLoadWindow;
class PluginManagerUI;
class DspStatisticsWindow;
@@ -740,6 +741,7 @@ private:
WM::Proxy export_video_dialog;
WM::Proxy lua_script_window;
WM::Proxy idleometer;
+ WM::Proxy io_plugin_window;
WM::Proxy plugin_manager_ui;
WM::Proxy plugin_dsp_load_window;
WM::Proxy dsp_statistics_window;
diff --git a/gtk2_ardour/io_plugin_window.cc b/gtk2_ardour/io_plugin_window.cc
new file mode 100644
index 0000000000..ca726dddce
--- /dev/null
+++ b/gtk2_ardour/io_plugin_window.cc
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2022 Robin Gareus
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+
+#include "io_plugin_window.h"
+
+#include "pbd/i18n.h"
+
+using namespace ARDOUR;
+using namespace Gtkmm2ext;
+using namespace Gtk;
+
+IOPluginWindow::IOPluginWindow()
+ : ArdourWindow (_("I/O Plugins"))
+{
+ set_size_request (100,100);
+}
+
+IOPluginWindow::~IOPluginWindow ()
+{
+}
+
+void
+IOPluginWindow::set_session (Session* s)
+{
+ printf ("IOPluginWindow::set_session %p\n", s);
+}
+
+void
+IOPluginWindow::on_show ()
+{
+ ArdourWindow::on_show ();
+}
+
+void
+IOPluginWindow::on_hide ()
+{
+ ArdourWindow::on_hide ();
+}
diff --git a/gtk2_ardour/io_plugin_window.h b/gtk2_ardour/io_plugin_window.h
new file mode 100644
index 0000000000..e952f247b9
--- /dev/null
+++ b/gtk2_ardour/io_plugin_window.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2022 Robin Gareus
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef _gtkardour_ioplugin_window_h_
+#define _gtkardour_ioplugin_window_h_
+
+#include "ardour_window.h"
+
+class IOPluginWindow : public ArdourWindow
+{
+public:
+ IOPluginWindow ();
+ ~IOPluginWindow ();
+
+ void set_session (ARDOUR::Session*);
+
+protected:
+
+ void on_show ();
+ void on_hide ();
+
+private:
+};
+
+#endif
+
diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript
index 8283a3d234..449a655ac7 100644
--- a/gtk2_ardour/wscript
+++ b/gtk2_ardour/wscript
@@ -142,6 +142,7 @@ gtk2_ardour_sources = [
'instrument_selector.cc',
'interthread_progress_window.cc',
'io_button.cc',
+ 'io_plugin_window.cc',
'io_selector.cc',
'hit.cc',
'keyboard.cc',