diff --git a/src/core/js/edit_mode.js b/src/core/js/edit_mode.js
index 78e6c66b6b0548f12e0db2ffc8bd6aa2ff2885fd..0de4266e10db1e0ddec970578b152c0ed454d080 100644
--- a/src/core/js/edit_mode.js
+++ b/src/core/js/edit_mode.js
@@ -726,6 +726,10 @@ var edit_mode = new function () {
         $(entities).find(".caosdb-entity-actions-panel").show();
     }
 
+    this._init_select = function (select) {
+        $(select).selectpicker();
+    }
+
     this.make_header_editable = function (entity) {
         var header = $(entity).find('.caosdb-entity-panel-heading');
         var roleElem = $(header).find('.caosdb-f-entity-role');
@@ -774,7 +778,7 @@ var edit_mode = new function () {
         header.append(form);
         // selectpicker is based on bootstrap-select and must be initializes
         // AFTER it had been added to the dom tree.
-        form.find(".selectpicker").selectpicker();
+        edit_mode._init_select(form.find(".selectpicker"));
         edit_mode.add_parent_dropzone(entity);
 
         edit_mode.make_datatype_input_logic(form[0]);
@@ -983,7 +987,7 @@ var edit_mode = new function () {
         } else if (property.datatype == "INTEGER") {
             result = "<input type='number' value='" + property.value + "'></input>";
         } else if (property.datatype == "BOOLEAN") {
-          result = `<select class="selectpicker form-control caosdb-list-${property.datatype}"><option value=""></option><option ${property.value=="FALSE" ? "selected" : ""}>FALSE</option><option ${property.value=="TRUE" ? selected : ""}>TRUE</option></select>`;
+          result = `<select class="selectpicker form-control caosdb-list-${property.datatype}"><option value=""></option><option ${property.value=="FALSE" ? "selected" : ""}>FALSE</option><option ${property.value=="TRUE" ? "selected" : ""}>TRUE</option></select>`;
         } else if (property.reference || property.datatype == "FILE") {
           result = $('<div/>');
           var css = {
@@ -992,6 +996,7 @@ var edit_mode = new function () {
             "display": "inline-block",
           };
           result.css(css);
+          result.append(`<select style="display: none"><option selected>${property.value}</option></select>`);
           result.append(createWaitingNotification(property.value));
 
           const select = $('<select data-container="body" data-virtual-scroll="100" data-window-padding="15" data-live-search="true" class="selectpicker form-control caosdb-list-' + property.datatype + '" data-resolved="false"><option value=""></option></select>');
@@ -999,7 +1004,7 @@ var edit_mode = new function () {
               edit_mode.fill_reference_drop_down(select[0], _options, property.value);
             result.empty();
             result.append(select);
-            select.selectpicker();
+            edit_mode._init_select(select);
           });
 
         } else {
@@ -1214,7 +1219,9 @@ var edit_mode = new function () {
         var editfield = $(element).find(".caosdb-f-property-value");
         editfield.children().remove();
         editfield.append(inputs);
-        editfield.find(".selectpicker").selectpicker();
+        // selectpicker is based on bootstrap-select and must be initializes
+        // AFTER it had been added to the dom tree.
+        edit_mode._init_select(editfield.find(".selectpicker"));
 
         edit_mode.change_property_data_type(element, property.datatype);
 
@@ -1319,7 +1326,7 @@ var edit_mode = new function () {
         editfield.append(inputs);
         // selectpicker is based on bootstrap-select and must be initializes
         // AFTER it had been added to the dom tree.
-        editfield.find(".selectpicker").selectpicker();
+        edit_mode._init_select(editfield.find(".selectpicker"));
 
         // CHECKBOX `List [ ]`
         edit_mode.add_toggle_list_checkbox(element, property.list, property.datatype);
@@ -1794,10 +1801,9 @@ var edit_mode = new function () {
      * @param {String} [current_value] - The value which is to be selected.
      */
     this.fill_reference_drop_down = function (drop_down, options, current_value) {
-        var resolved_options = options;
         drop_down = $(drop_down);
 
-        drop_down.append($(resolved_options).clone());
+        drop_down.append($(options).clone());
         if (current_value) {
             drop_down.val(current_value);
         }
diff --git a/test/core/js/modules/edit_mode.js.js b/test/core/js/modules/edit_mode.js.js
index ae1a51d837348ba0ba9c31f48a28a69ef2c9ad7b..17b32023627cc557e204e4cab3300f7092d78fad 100644
--- a/test/core/js/modules/edit_mode.js.js
+++ b/test/core/js/modules/edit_mode.js.js
@@ -614,9 +614,20 @@ QUnit.test("createElementForProperty", async function (assert) {
             value: data[dt],
         }
 
-        var html = $(edit_mode.createElementForProperty(prop));
+        var options = async () => {
+          return [$(`<option>${data[dt]}</option>`)[0]];
+        }
+        var html = $(edit_mode.createElementForProperty(prop, options()));
+
+        await sleep(100);
+
+        if($(html).find("select").val()) {
+            assert.equal($(html).find("select").val(), data[dt], `${dt} input has correct value`);
+
+        } else {
+            assert.equal($(html).val(), data[dt], `${dt} input has correct value`);
+        }
 
-        assert.equal($(html).val(), data[dt], `${dt} input has correct value`);
 
     }
 });
@@ -810,6 +821,8 @@ QUnit.test("_toggle_list_property", async function (assert) {
         var val = $(single_input).val();
         if (dt == "DATETIME") {
             val = $(single_input).find("[type='date']").val() + "T" + $(single_input).find("[type='time']").val();
+        } else if (["Person", "FILE", "REFERENCE"].indexOf(dt) > -1) {
+            val = $(single_input).find("select").val();
         }
         assert.equal(val, data[`LIST<${dt}>`], `single ${dt} input has correct value`);
     }
@@ -846,49 +859,49 @@ QUnit.test("Bug #95", async function (assert) {
     query_done = assert.async(1); // only called with file
     await edit_mode.retrieve_datatype_list("FILE");
 
-    // old option not deleted when options are empty
-    var resolve_function;
-    var empty_options = new Promise(function (res, err) {
-        resolve_function = res;
-    });
+    var options = async () => { await sleep(100); return [$("<option>1234</option>")[0]]; };
     var property = $("<div/>")
         .append(edit_mode.createElementForProperty({
             reference: true,
             datatype: "REFERENCE",
             list: false,
             value: "1234"
-        }, empty_options));
+        }, options()));
+
     assert.equal($(property).find("select").val(), "1234", "old value before");
     assert.equal($(property).find("option").length, 1, "one option before");
     assert.equal($(property).find(":selected").text(), "1234", "old text before");
 
-    // mimic retrieve_datatype_list with empty result
-    resolve_function([]);
+    await sleep(200);
 
     assert.equal($(property).find("select").val(), "1234", "old value after");
-    assert.equal($(property).find("option").length, 1, "one option after");
+    assert.equal($(property).find("option").length, 2, "two options after (one empty)");
     assert.equal($(property).find(":selected").text(), "1234", "old text after");
 
 
     // now an integration test. A list of options is passed to 
-    var options = edit_mode._create_reference_options(await transformation
-        .transformEntities(str2xml(`
-        <Response>
-          <Record name="RName1" id="RID1"/>
-          <Record name="RName2" id="RID2"/>
-          <Record name="RName1234" id="1234"/>
-        </Response>
-        `)));
+    options = async () => {
+        return edit_mode._create_reference_options(await transformation
+            .transformEntities(str2xml(`
+            <Response>
+              <Record name="RName1" id="RID1"/>
+              <Record name="RName2" id="RID2"/>
+              <Record name="RName1234" id="1234"/>
+            </Response>
+            `))
+        );
+    }
 
-    assert.equal(options.length, 3, "3 entities returned");
     var fill_method_done = assert.async();
     var proxied = edit_mode.fill_reference_drop_down;
-    edit_mode.fill_reference_drop_down = async function (arg1, arg2) {
-        await proxied(arg1, arg2);
+    edit_mode.fill_reference_drop_down = function (arg1, arg2, arg3) {
+        proxied(arg1, arg2, arg3);
+
+        assert.equal($(arg1).val(), "1234", "still old value after");
+        assert.equal($(arg1).find("option").length, 4, "4 options after");
+        assert.equal($(arg1).find(":selected").text(), "Name: RName1234, CaosDB ID: 1234", "new text after");
 
-        assert.equal($(property).find("select").val(), "1234", "still old value after");
-        assert.equal($(property).find("option").length, 3, "3 options after");
-        assert.equal($(property).find(":selected").text(), "Name: RName1234, CaosDB ID: 1234", "new text after");
+        edit_mode.fill_reference_drop_down = proxied;
         fill_method_done();
     }
 
@@ -898,10 +911,7 @@ QUnit.test("Bug #95", async function (assert) {
             datatype: "REFERENCE",
             list: false,
             value: "1234"
-        }, options));
-
-
-    edit_mode.fill_reference_drop_down = proxied;
+        }, options()));
 
 });
 
@@ -918,12 +928,9 @@ QUnit.test("fill_reference_drop_down", async function (assert) {
 
     assert.equal(options.length, 3, "3 entities returned");
     assert.ok($(options).is("option"), "options contains options");
-    var select = $('<select><option class="caosdb-f-option-default" selected value="1234">1234</option></select>');
-    assert.equal(select.find("option").length, 1, "one option before");
-    assert.equal(select.val(), "1234", "old value before");
-    assert.equal(select.find(":selected").text(), "1234", "oldtext before");
 
-    await edit_mode.fill_reference_drop_down(select[0], options);
+    var select = $('<select></select>');
+    edit_mode.fill_reference_drop_down(select[0], options, "1234");
 
     assert.equal(select.find("option").length, 3, "3 options after");
     assert.equal(select.val(), "1234", "old value after");
diff --git a/test/core/js/modules/ext_xls_download.js.js b/test/core/js/modules/ext_xls_download.js.js
index 74cdb244dcf0f5c2238c8d2503a3194580c35d90..c0343828b3e4df976b006d8375936c8a339ea496 100644
--- a/test/core/js/modules/ext_xls_download.js.js
+++ b/test/core/js/modules/ext_xls_download.js.js
@@ -153,7 +153,6 @@ QUnit.test("_get_property_value", function (assert) {
 
 
     var summary = resolve_references.add_summary_field(property);
-    $(summary).find(".coasdb-property-value").append("summary bla");
 
     ret = f(property);
     assert.equal(ret.pretty, "bla, bla, bla, bla, bla, bla, bla, bla, bla", "pretty shows list of reference info text");