diff --git a/src/core/js/edit_mode.js b/src/core/js/edit_mode.js
index 5cde9729e69da8a3f7b31103ff817035ec950b3f..d4e5f189a0a0e16db0ef2c021fd2e396650a18eb 100644
--- a/src/core/js/edit_mode.js
+++ b/src/core/js/edit_mode.js
@@ -1867,11 +1867,11 @@ var edit_mode = new function () {
      *     which can be referenced by the property.
      */
     this.retrieve_datatype_list = async function (datatype) {
-        var find_entity = ["FILE", "REFERENCE"].includes(datatype) ? "" : `"${datatype}"`;
+        var find_entity = ["FILE", "REFERENCE"].includes(datatype)? "" : `"${datatype}"`;
         const max_options = 25;
         // TODO cache this?
-        var n_entities = datatype !== "FILE" ? $(await connection.get(`Entity/?query=COUNT RECORD ${find_entity}`)).find('Query').attr('results') : 0;
-        var n_files =$(await connection.get(`Entity/?query=COUNT FILE ${find_entity}`)).find('Query').attr('results');
+        var n_entities = datatype !== "FILE" ? edit_mode.query(`COUNT Record ${find_entity}`, true) : 0;
+        var n_files =edit_mode.query(`COUNT File ${find_entity}`, true);
         var entities = datatype !== "FILE" ? edit_mode.query(`FIND Record ${find_entity}&P=0L${max_options}`, true) : [];
         var files = edit_mode.query(`FIND File ${find_entity}&P=0L${max_options}`, true);
 
@@ -2128,11 +2128,16 @@ var edit_mode = new function () {
 
     const query_cache = {};
 
-    this.query = (str, use_cache) => {
+    this.query = async (str, use_cache) => {
         if (use_cache && query_cache[str]) {
             return query_cache[str];
         }
-        const result = query(str);
+        if (str.toUpperCase().startsWith('COUNT')){
+            const res = await connection.get(`Entity/?query=${str}`);
+            const result = $(res).find('Query').attr('results')
+        } else {
+            const result = query(str);
+        }
         if (use_cache) {
             query_cache[str] = result;
         }
diff --git a/test/core/js/modules/edit_mode.js.js b/test/core/js/modules/edit_mode.js.js
index 2009ad0229ad1922d48fe24fcf3efb83b8dc227a..c6f3de7888a313c459fe4acc4812c50d1da9fec0 100644
--- a/test/core/js/modules/edit_mode.js.js
+++ b/test/core/js/modules/edit_mode.js.js
@@ -405,22 +405,12 @@ QUnit.test("retrieve_datatype_list", async function (assert) {
     var query_done;
 
     edit_mode.query = function (query) {
-        var re = /^FIND (Record|File) "IceCore"/g;
+        var re = /^(FIND|COUNT) (Record|File) "Ice Core"/g;
         assert.ok(query.match(re), `${query} should match ${re}`);
         query_done();
         return [];
     }
-    query_done = assert.async(2);
-    await edit_mode.retrieve_datatype_list("IceCore");
-
-
-    edit_mode.query = function (query) {
-        var re = /^FIND (Record|File) "Ice Core"/g;
-        assert.ok(query.match(re), `${query} should match ${re}`);
-        query_done();
-        return [];
-    }
-    query_done = assert.async(2);
+    query_done = assert.async(4);
     await edit_mode.retrieve_datatype_list("Ice Core");
 });
 
@@ -847,16 +837,16 @@ QUnit.test("_toggle_list_property", async function (assert) {
 QUnit.test("Bug #95", async function (assert) {
     var query_done;
     edit_mode.query = function (query) {
-        var re = /^FIND (Record|File)\s*$/g;
+        var re = /^(COUNT|FIND) (Record|File)\s*/g;
         assert.ok(query.match(re), `${query} should match ${re}`);
         query_done();
         return [];
     }
 
     // retrieve_datatype_list calls edit_mode.query with correct query string.
-    query_done = assert.async(2);
+    query_done = assert.async(4);
     await edit_mode.retrieve_datatype_list("REFERENCE");
-    query_done = assert.async(1); // only called with file
+    query_done = assert.async(2); // only called with file
     await edit_mode.retrieve_datatype_list("FILE");
 
     var options = async () => { await sleep(100); return [$("<option>1234</option>")[0]]; };