diff --git a/src/core/js/form_elements.js b/src/core/js/form_elements.js
index 59397d76f158b931aec61da5a6b66b4b887c4562..8a757e5c9c2973f8ac111b9c3bc69e49c8debdf3 100644
--- a/src/core/js/form_elements.js
+++ b/src/core/js/form_elements.js
@@ -99,7 +99,6 @@ var form_elements = new function () {
     this.logger = log.getLogger("form_elements");
     this.cancel_form_event = new Event("caosdb.form.cancel");
     this.submit_form_event = new Event("caosdb.form.submit");
-    this.form_ready_event = new Event("caosdb.form.ready");
     this.field_changed_event = new Event("caosdb.field.changed");
     this.field_enabled_event = new Event("caosdb.field.enabled");
     this.field_disabled_event = new Event("caosdb.field.disabled");
@@ -776,31 +775,18 @@ var form_elements = new function () {
     this.make_form_wrapper = function (form, config) {
         var wrapper = $('<div class="caosdb-f-form-wrapper"/>');
 
-        var header = this.make_heading(config);
-        wrapper.append(header);
 
-        var loading = $(createWaitingNotification("loading..."));
-        var logger = this.logger;
         var cancel = (e) => {
-            logger.trace("cancel form", e);
+            form_elements.logger.trace("cancel form", e);
             wrapper.remove();
         };
 
-        wrapper.append(loading);
+        wrapper[0].addEventListener(this.cancel_form_event.type, cancel, true);
 
-        Promise.resolve(form).then(form => {
-            // form ready
-            loading.remove();
-            wrapper.append(form);
-            wrapper[0].dispatchEvent(this.form_ready_event);
 
-        }).catch(err => {
-            logger.error("form loading error", err);
-            loading.remove();
-            wrapper.append(err);
-        });
-
-        wrapper[0].addEventListener(this.cancel_form_event.type, cancel, true);
+        var header = this.make_heading(config);
+        wrapper.append(header);
+        wrapper.append(form);
 
         return wrapper[0];
     }
@@ -826,9 +812,9 @@ var form_elements = new function () {
     /**
      * Create a form.
      *
-     * The returned element is a container which will eventually contain a HTML
-     * form element. The container emits a {@link form_ready_event} when the
-     * form is ready.
+     * The returned element is a container which contains a HTML form element.
+     * The fields are ready or the will emit a {@link field_ready_event} when
+     * they are.
      *
      * @param {FormConfig} config
      * @return {HTMLElement}
diff --git a/test/core/js/modules/edit_mode.js.js b/test/core/js/modules/edit_mode.js.js
index 40d2a3b1984109d8caf64fbd181e02a9c3aafa88..2d7a605fd29788d189d2af0d828266e7e3a35f84 100644
--- a/test/core/js/modules/edit_mode.js.js
+++ b/test/core/js/modules/edit_mode.js.js
@@ -486,9 +486,6 @@ QUnit.test("remove_delete_button", function (assert) {
 
 
 {
-    const sleep = function sleep(ms) {
-        return new Promise(resolve => setTimeout(resolve, ms));
-    }
 
     const datamodel = `
 <div><div class=\"btn-group-vertical\"><button type=\"button\" class=\"btn btn-default caosdb-f-edit-panel-new-button new-property\">Create new Property</button><button type=\"button\" class=\"btn btn-default caosdb-f-edit-panel-new-button new-recordtype\">Create new RecordType</button></div><div title=\"Drag and drop Properties from this panel to the Entities on the left.\" class=\"panel panel-default\"><div class=\"panel-heading\"><h5>Existing Properties</h5></div><div class=\"panel-body\"><div class=\"input-group\" style=\"width: 100%;\"><input class=\"form-control\" placeholder=\"filter...\" title=\"Type a name (full or partial).\" oninput=\"edit_mode.filter('properties');\" id=\"caosdb-f-filter-properties\" type=\"text\" /><span class=\"input-group-btn\"><button class=\"btn btn-default caosdb-f-edit-panel-new-button new-property caosdb-f-hide-on-empty-input\" title=\"Create this Property.\"><span class=\"glyphicon glyphicon-plus\"></span></button></span></div><ul class=\"caosdb-v-edit-list\"><li class=\"caosdb-f-edit-drag list-group-item caosdb-v-edit-drag\" id=\"caosdb-f-edit-p-20\">name</li><li class=\"caosdb-f-edit-drag list-group-item caosdb-v-edit-drag\" id=\"caosdb-f-edit-p-21\">unit</li><li class=\"caosdb-f-edit-drag list-group-item caosdb-v-edit-drag\" id=\"caosdb-f-edit-p-24\">description</li></ul></div></div><div title=\"Drag and drop RecordTypes from this panel to the Entities on the left.\" class=\"panel panel-default\"><div class=\"panel-heading\"><h5>Existing RecordTypes</h5></div><div class=\"panel-body\"><div class=\"input-group\" style=\"width: 100%;\"><input class=\"form-control\" placeholder=\"filter...\" title=\"Type a name (full or partial).\" oninput=\"edit_mode.filter('recordtypes');\" id=\"caosdb-f-filter-recordtypes\" type=\"text\" /><span class=\"input-group-btn\"><button class=\"btn btn-default caosdb-f-edit-panel-new-button new-recordtype caosdb-f-hide-on-empty-input\" title=\"Create this RecordType\"><span class=\"glyphicon glyphicon-plus\"></span></button></span></div><ul class=\"caosdb-v-edit-list\"><li class=\"caosdb-f-edit-drag list-group-item caosdb-v-edit-drag\" id=\"caosdb-f-edit-rt-30992\">Test</li><li class=\"caosdb-f-edit-drag list-group-item caosdb-v-edit-drag\" id=\"caosdb-f-edit-rt-31015\">Test2</li></ul></div></div></div>`;
diff --git a/test/core/js/modules/ext_bottom_line.js.js b/test/core/js/modules/ext_bottom_line.js.js
index 610d95d1b00b3a8bf220a6d39e12ed71ecaa9090..48dc64f231c1dc5929eece1f44756d60cb17c0a1 100644
--- a/test/core/js/modules/ext_bottom_line.js.js
+++ b/test/core/js/modules/ext_bottom_line.js.js
@@ -24,10 +24,6 @@
 
 var ext_bottom_line_test_suite = function ($, ext_bottom_line, QUnit) {
 
-    const sleep = (ms) => {
-      return new Promise(res => setTimeout(res, ms))
-    }
-
     var test_config = { "version": 0.1,
       "fallback": "blablabla",
       "creators": [
diff --git a/test/core/js/modules/ext_xls_download.js.js b/test/core/js/modules/ext_xls_download.js.js
index 5426580436933b942cec6750b521747ab62f2d00..195e9c825d9601dc08f29c8f1b2171ff13eeef47 100644
--- a/test/core/js/modules/ext_xls_download.js.js
+++ b/test/core/js/modules/ext_xls_download.js.js
@@ -64,40 +64,35 @@ QUnit.module("ext_xls_download", {
 });
 
 
-{
-  const sleep = function sleep(ms) {
-    return new Promise(resolve => setTimeout(resolve, ms));
-  }
 
-  QUnit.test("call downloadXLS", async function(assert) {
-    var done = assert.async(2);
+QUnit.test("call downloadXLS", async function(assert) {
+  var done = assert.async(2);
 
-    // mock server response (successful)
-    connection.runScript = async function(exec, param){
-        assert.equal(exec, "xls_from_csv.py", "call xls_from_csv.py");
-        done();
-        return str2xml('<response><script code="0" /><stdout>bla</stdout></response>');
-    }
+  // mock server response (successful)
+  connection.runScript = async function(exec, param){
+      assert.equal(exec, "xls_from_csv.py", "call xls_from_csv.py");
+      done();
+      return str2xml('<response><script code="0" /><stdout>bla</stdout></response>');
+  }
 
-    caosdb_table_export.go_to_script_results = function(filename) {
-        assert.equal(filename, "bla", "filename correct");
-        done();
-    }
+  caosdb_table_export.go_to_script_results = function(filename) {
+      assert.equal(filename, "bla", "filename correct");
+      done();
+  }
 
-    var tsv_data = $('<a id="caosdb-f-query-select-data-tsv" />');
-    var modal = $('<div id="downloadModal"><div>');
-    $(document.body).append([tsv_data, modal]);
+  var tsv_data = $('<a id="caosdb-f-query-select-data-tsv" />');
+  var modal = $('<div id="downloadModal"><div>');
+  $(document.body).append([tsv_data, modal]);
 
 
-    var xsl_link = $("<a/>");
-    downloadXLS(xsl_link[0]);
+  var xsl_link = $("<a/>");
+  downloadXLS(xsl_link[0]);
 
-    await sleep(500);
+  await sleep(500);
 
-    tsv_data.remove();
-    modal.remove();
-  });
-}
+  tsv_data.remove();
+  modal.remove();
+});
 
 QUnit.test("_clean_cell", function(assert) {
     assert.equal(caosdb_table_export._clean_cell("\n\t\n\t"), "    ", "No valid content");
diff --git a/test/core/js/modules/form_elements.js.js b/test/core/js/modules/form_elements.js.js
index 1bf83675aa2b5ad8d33834fff31b47cd10158b3d..f72d73156f37ecd24d9bce97e5f91c1c74f39475 100644
--- a/test/core/js/modules/form_elements.js.js
+++ b/test/core/js/modules/form_elements.js.js
@@ -545,11 +545,6 @@ QUnit.test("field_ready", function(assert) {
     });
 });
 
-{
-const sleep = (ms) => {
-  return new Promise(res => setTimeout(res, ms))
-}
-
 QUnit.test("make_alert - cancel", async function(assert) {
     var cancel_callback = assert.async()
     var _alert = form_elements.make_alert({
@@ -688,5 +683,3 @@ QUnit.test("select_input caching", async function (assert) {
     await sleep(200);
     assert.equal(form_elements.get_cache_value(field[0]), "f", "value back to value from cache");
 });
-
-}
diff --git a/test/core/js/modules/query_shortcuts.js.js b/test/core/js/modules/query_shortcuts.js.js
index f088b729001daac8a42ed276507e2370f3e08679..3798c5fe81ea6e860cd176797a9a6959a9a64895 100644
--- a/test/core/js/modules/query_shortcuts.js.js
+++ b/test/core/js/modules/query_shortcuts.js.js
@@ -141,7 +141,9 @@ QUnit.test("init_delete_shortcut_form", function(assert) {
     assert.equal(panel.find(".caosdb-f-form-wrapper").length, 1, "panel has form after");
 
     // test cancel button
-    panel[0].addEventListener("caosdb.form.cancel", function(e) {
+    var done = assert.async();
+    panel[0].addEventListener("caosdb.form.cancel", async function(e) {
+        await sleep(200);
         assert.equal(panel.find("form").length, 0, "form is gone");
         done();
     }, true);
@@ -187,23 +189,17 @@ QUnit.test("make_delete_form", function(assert) {
     }
 
     var form = query_shortcuts.make_delete_form(panel[0], delete_callback);
+    $('body').append(form);
 
-    // wait for form
-    form.addEventListener("caosdb.form.ready", function(e) {
-
-        assert.equal($(form).hasClass("caosdb-f-form-wrapper"), true, "is form");
-        assert.equal($(form).find("input[type='checkbox']").length, 3, "three checkboxes (for three user-defined shortcuts)");
-
-        // check two
-        $(form).find(":checkbox[name='id28']").click();
-        $(form).find(":checkbox[name='id29']").click();
-        $(form).find("[type='submit']").click();
-
-        $(form).find("button.caosdb-f-form-elements-cancel-button").click();
+    assert.equal($(form).hasClass("caosdb-f-form-wrapper"), true, "is form");
+    assert.equal($(form).find("input[type='checkbox']").length, 3, "three checkboxes (for three user-defined shortcuts)");
 
-    }, true);
+    // check two
+    $(form).find(":checkbox[name='id28']").click();
+    $(form).find(":checkbox[name='id29']").click();
+    $(form).find("[type='submit']").click();
 
-    $('body').append(form);
+    $(form).find("button.caosdb-f-form-elements-cancel-button").click();
 
 });
 
@@ -228,31 +224,24 @@ QUnit.test("transform_entities", async function(assert) {
 });
 
 QUnit.test("make_create_form", function(assert) {
-
-    var done = assert.async();
     var panel = $('<div/>');
     var form = query_shortcuts.make_create_form(panel[0], () => {});
     assert.ok($(form).hasClass("caosdb-f-form-wrapper"), "form created");
 
     $('body').append(form);
 
-    form.addEventListener(form_elements.form_ready_event.type, function(e) {
-        $(form).find(":input[name='templateDescription']").val("NEW DESC");
-        $(form).find(":input[name='Query']").val("NEW QUERY");
+    $(form).find(":input[name='templateDescription']").val("NEW DESC");
+    $(form).find(":input[name='Query']").val("NEW QUERY");
 
-        var entity = getEntityXML(form);
-        assert.equal(xml2str(entity), "<Record><Parent name=\"UserTemplate\"/><Property name=\"templateDescription\">NEW DESC</Property><Property name=\"Query\">NEW QUERY</Property></Record>", "entity extracted");
+    var entity = getEntityXML(form);
+    assert.equal(xml2str(entity), "<Record><Parent name=\"UserTemplate\"/><Property name=\"templateDescription\">NEW DESC</Property><Property name=\"Query\">NEW QUERY</Property></Record>", "entity extracted");
 
-        form_elements.dismiss_form(form);
-        done();
+    form_elements.dismiss_form(form);
 
-    }, true);
 
 });
 
 QUnit.test("make_update_form", function(assert) {
-
-    var done = assert.async();
     var panel = $('<div/>');
     var header = $('<span class="h3">Shortcuts</span>');
     var userTemplate1 = query_shortcuts.generate_user_shortcut("the_description", "FIND nothing", "id28");
@@ -271,16 +260,12 @@ QUnit.test("make_update_form", function(assert) {
 
     $('body').append(form);
 
-    form.addEventListener(form_elements.form_ready_event.type, function(e) {
-        $(form).find(":input[name='templateDescription']").val("NEW DESC");
-        $(form).find(":input[name='Query']").val("NEW QUERY");
-
-        var entity = getEntityXML(form);
-        assert.equal(xml2str(entity), "<Record id=\"id28\"><Parent name=\"UserTemplate\"/><Property name=\"templateDescription\">NEW DESC</Property><Property name=\"Query\">NEW QUERY</Property></Record>", "entity extracted");
+    $(form).find(":input[name='templateDescription']").val("NEW DESC");
+    $(form).find(":input[name='Query']").val("NEW QUERY");
 
-        form_elements.dismiss_form(form);
-        done();
+    var entity = getEntityXML(form);
+    assert.equal(xml2str(entity), "<Record id=\"id28\"><Parent name=\"UserTemplate\"/><Property name=\"templateDescription\">NEW DESC</Property><Property name=\"Query\">NEW QUERY</Property></Record>", "entity extracted");
 
-    }, true);
+    form_elements.dismiss_form(form);
 
 });
diff --git a/test/core/js/modules/webcaosdb.js.js b/test/core/js/modules/webcaosdb.js.js
index 7b3f7abf404f261668c18690df337b73794dd8bd..95c4f62d983077374343a099d4d4bcb2680e25d5 100644
--- a/test/core/js/modules/webcaosdb.js.js
+++ b/test/core/js/modules/webcaosdb.js.js
@@ -2008,7 +2008,3 @@ QUnit.test("init_load_history_buttons and init_load_history_buttons", async func
 
     $(html).remove();
 });
-
-const sleep = function sleep(ms) {
-  return new Promise(resolve => setTimeout(resolve, ms));
-}
diff --git a/test/core/js/setup.js b/test/core/js/setup.js
index 9894827988999e89a6388206f10bdd815098e81e..fac4fd78d0c867cf213917b16d874513d1871a09 100644
--- a/test/core/js/setup.js
+++ b/test/core/js/setup.js
@@ -46,3 +46,6 @@ QUnit.done(function( details ) {
     $.post("/done", report);
 });
 
+const sleep = function sleep(ms) {
+    return new Promise(resolve => setTimeout(resolve, ms));
+}