diff --git a/src/core/js/form_panel.js b/src/core/js/form_panel.js
index 9728a4ccea54c36d85399a3148373b7372108db0..a6c204d77c5c59695e98d1d206b2f7cf80d8a6ed 100644
--- a/src/core/js/form_panel.js
+++ b/src/core/js/form_panel.js
@@ -67,13 +67,26 @@ var form_panel = new function () {
     /**
      * Creates a callback function that toggles the form panel which
      */
-    this.create_show_form_callback = function (panel_id, title, form_config) {
+    this.create_show_form_callback = function (
+        panel_id, title, form_config, form_creator=undefined
+    ) {
         return (e) => {
             logger.trace("enter show_form_panel", e);
 
             const panel = $(form_panel.get_form_panel(panel_id, title));
             if (panel.find("form").length === 0) {
-                const form = form_elements.make_form(form_config);
+                if (form_config != undefined && form_creator!=undefined){
+                    throw new Error("create_show_form_callback takes either a FormConfig or a function that creates the form");
+                }
+
+                var form;
+                if (form_config != undefined ){
+                    form = form_elements.make_form(form_config);
+                } else if (form_creator != undefined ){
+                    form = form_creator();
+                } else {
+                    throw new Error("create_show_form_callback takes a FormConfig or a function that creates the form");
+                }
                 panel.append(form);
                 $(form).find(".selectpicker").selectpicker();