diff --git a/plugins/tags-resources/src/components/TagsFilter.svelte b/plugins/tags-resources/src/components/TagsFilter.svelte
index 665b670808..bcca8d8ea4 100644
--- a/plugins/tags-resources/src/components/TagsFilter.svelte
+++ b/plugins/tags-resources/src/components/TagsFilter.svelte
@@ -75,7 +75,7 @@
           }
         : { targetClass: _class }
     objectsPromise = client.findAll(tags.class.TagElement, resultQuery)
-    const _objects = await objectsPromise
+    const _objects = sortFilterValues(await objectsPromise, isSelected)
     if (qid !== queryId) {
       return
     }
@@ -87,7 +87,6 @@
     categories.sort((a, b) => {
       const alen = objects.filter((el) => el.category === a._id && isSelected(el))
       const blen = objects.filter((el) => el.category === b._id && isSelected(el))
-      console.log(alen.length, blen.length, selected.length)
       return blen.length - alen.length
     })
     categories = categories
@@ -182,10 +181,7 @@
         <Loading />
       {:else}
         {#each categories as cat, i}
-          {@const values = sortFilterValues(
-            objects.filter((el) => el.category === cat._id),
-            isSelected
-          )}
+          {@const values = objects.filter((el) => el.category === cat._id)}
           {#if values.length > 0}
             {#if i > 0}<div class="menu-separator" />{/if}
             <div class="sticky-wrapper">
diff --git a/plugins/view-resources/src/components/list/List.svelte b/plugins/view-resources/src/components/list/List.svelte
index e864f64d46..9819564984 100644
--- a/plugins/view-resources/src/components/list/List.svelte
+++ b/plugins/view-resources/src/components/list/List.svelte
@@ -41,8 +41,6 @@
   export let selection: number | undefined = undefined
   export let compactMode: boolean = false
 
-  export let documents: Doc[] | undefined = undefined
-
   const limiter = new RateLimitter(() => ({ rate: 10 }))
 
   let docs: Doc[] = []
@@ -65,54 +63,62 @@
   $: queryNoLookup = noLookup(resultQuery)
 
   let fastQueryIds: Ref<Doc>[] = []
-  $: if (documents === undefined) {
-    docsQuery.query(
-      _class,
-      queryNoLookup,
-      (res) => {
-        fastDocs = res
-        fastQueryIds = res.map((it) => it._id)
-      },
-      {
-        ...resultOptions,
-        projection: {
-          ...resultOptions.projection,
-          _id: 1,
-          _class: 1,
-          ...getProjection(viewOptions.groupBy, queryNoLookup)
-        },
-        limit: 1000
-      }
-    )
-  } else {
-    docsQuery.unsubscribe()
+
+  let categoryQueryOptions: Partial<FindOptions<Doc>>
+  $: categoryQueryOptions = {
+    ...resultOptions,
+    projection: {
+      ...resultOptions.projection,
+      _id: 1,
+      _class: 1,
+      ...getProjection(viewOptions.groupBy, queryNoLookup)
+    }
   }
-  $: if (fastQueryIds.length > 0) {
-    docsQuerySlow.query(
-      _class,
-      { ...queryNoLookup, _id: { $nin: fastQueryIds } },
-      (res) => {
-        slowDocs = res
-      },
-      {
-        ...resultOptions,
-        projection: {
-          ...resultOptions.projection,
-          _id: 1,
-          _class: 1,
-          ...getProjection(viewOptions.groupBy, queryNoLookup)
+  $: docsQuery.query(
+    _class,
+    queryNoLookup,
+    (res) => {
+      fastDocs = res
+      fastQueryIds = res.map((it) => it._id)
+    },
+    { ...categoryQueryOptions, limit: 1000 }
+  )
+  $: {
+    let doQuery = false
+    let _idQuery: DocumentQuery<Doc>['_id'] = { $nin: fastQueryIds }
+
+    if (fastQueryIds.length > 0) {
+      doQuery = true
+
+      if (typeof resultQuery._id === 'object' && resultQuery._id?.$in !== undefined) {
+        const inIds = new Set(resultQuery._id.$in)
+        fastQueryIds.forEach((it) => inIds.delete(it))
+        _idQuery = { $in: Array.from(inIds) }
+        if (inIds.size === 0) {
+          doQuery = false
         }
+      } else if (typeof resultQuery._id === 'object' && resultQuery._id?.$nin !== undefined) {
+        const ninIds = new Set(resultQuery._id.$in)
+        fastQueryIds.forEach((it) => ninIds.add(it))
+        _idQuery = { $nin: Array.from(ninIds) }
       }
-    )
-  } else {
-    docsQuerySlow.unsubscribe()
+    }
+
+    if (doQuery) {
+      docsQuerySlow.query(
+        _class,
+        { ...queryNoLookup, _id: _idQuery },
+        (res) => {
+          slowDocs = res
+        },
+        categoryQueryOptions
+      )
+    } else {
+      docsQuerySlow.unsubscribe()
+    }
   }
 
-  $: if (documents === undefined) {
-    docs = [...fastDocs, ...slowDocs]
-  } else {
-    docs = documents
-  }
+  $: docs = [...fastDocs, ...slowDocs]
 
   function getProjection (fields: string[], query: DocumentQuery<Doc>): Record<string, number> {
     const res: Record<string, number> = {}