diff --git a/keyserver/src/database/search-utils.js b/keyserver/src/database/search-utils.js
--- a/keyserver/src/database/search-utils.js
+++ b/keyserver/src/database/search-utils.js
@@ -142,6 +142,10 @@
   }
   const stemmedQuery = segmentAndStem(query);
 
+  if (stemmedQuery === '') {
+    return '';
+  }
+
   return stemmedQuery
     .split(' ')
     .filter(word => !fulltextOperands.includes(word))
diff --git a/keyserver/src/database/search-utils.test.js b/keyserver/src/database/search-utils.test.js
--- a/keyserver/src/database/search-utils.test.js
+++ b/keyserver/src/database/search-utils.test.js
@@ -65,4 +65,9 @@
   it('should remove + < > ~ from the query', () => {
     expect(processQueryForSearch('+ < > ~')).toBe('');
   });
+  it('should return an empty string, if the input consists only of stopwords', () => {
+    const [stopWord1, stopWord2, stopWord3] = stopwords;
+    expect(processQueryForSearch(stopWord1)).toBe('');
+    expect(segmentAndStem(`${stopWord1} ${stopWord2} ${stopWord3}`)).toBe('');
+  });
 });
diff --git a/keyserver/src/fetchers/message-fetchers.js b/keyserver/src/fetchers/message-fetchers.js
--- a/keyserver/src/fetchers/message-fetchers.js
+++ b/keyserver/src/fetchers/message-fetchers.js
@@ -919,6 +919,13 @@
   }
   const pattern = processQueryForSearch(inputQuery);
 
+  if (pattern === '') {
+    return {
+      endReached: true,
+      messages: [],
+    };
+  }
+
   const query = SQL`
     SELECT m.id, m.thread AS threadID, m.content, m.time, m.type, m.creation,
     m.user AS creatorID, m.target_message as targetMessageID,