diff --git a/doc/help/abenteuerliste b/doc/help/abenteuerliste
index 7ac2ffe..370ddba 100644
--- a/doc/help/abenteuerliste
+++ b/doc/help/abenteuerliste
@@ -4,8 +4,12 @@
  Die Liste der spielbaren Abenteuer haengt in jeder Gilde im MorgenGrauen aus.
  Sie ist mit dem Kommando "liste" abrufbar.
 
+ Will man nur die ungeloesten Quests anzeigen lassen, geht dies mit dem
+ Kommando "liste ungeloest", die Liste der geloesten Quests entsprechend
+ mit "liste geloest".
+
  Die in der Liste verwendeten Abkuerzungen werden im Folgenden erlaeutert:
- 
+
  AP       = Fuer die Quest vergebene Abenteuerpunkte
  Klasse   = Subjektive Einstufung innerhalb der Gruppe bzgl. Arbeitsaufwand,
             Dauer oder Gefahren
@@ -30,5 +34,5 @@
  SIEHE AUCH:
     abenteuer, stufen, stufenpunkte, schlafe, kampf, reset
 
-26.05.2016, Zesstra
+ 06.01.2020, Zesstra
 
diff --git a/secure/questmaster.c b/secure/questmaster.c
index 9007460..6a7d952 100644
--- a/secure/questmaster.c
+++ b/secure/questmaster.c
@@ -434,7 +434,10 @@
     return i[4] > j[4];
 }
 
-varargs string liste(mixed pl) {
+#define FILTER_GELOEST   1
+#define FILTER_UNGELOEST 2
+varargs string liste(mixed pl, int geloest_filter)
+{
   int qgroups, i, j, qrfw;
   mixed *qlists, *qgrouped, *qtmp;
   string str;
@@ -448,7 +451,7 @@
   if(!objectp(pl))
     return "Ohne Spielernamen/Spielerobjekt gibt es auch keine Liste.\n";
 
-  if ( ((string)pl->QueryProp(P_TTY)) == "ansi")
+  if ( (pl->QueryProp(P_TTY)) == "ansi")
   {
       ja = ANSI_GREEN + "ja" + ANSI_NORMAL;
       nein = ANSI_RED + "nein" + ANSI_NORMAL;
@@ -474,20 +477,30 @@
   qgrouped = QueryGroupedKeys();
 
   for (i=sizeof(qgrouped)-1;i>=0; i--)
-    for (j=sizeof(qgrouped[i])-1;j>=0; j--) {
+    for (j=sizeof(qgrouped[i])-1;j>=0; j--)
+    {
       qtmp = QueryQuest(qgrouped[i][j]);
-      qlists[i] += ({ ({
-        qgrouped[i][j],
-        qtmp[Q_QP],
-        QCLASS_STARS(qtmp[Q_CLASS]),
-        capitalize(QATTR_STRINGS[qtmp[Q_ATTR]]),
-        qtmp[Q_DIFF],
-        (qtmp[Q_AVERAGE][1]>10 /*&& IS_ARCH(this_player())*/
-                  ? to_string(to_int(qtmp[Q_AVERAGE][0]))
-                  : "-"),
-        capitalize(qtmp[Q_WIZ]),
-        (int)pl->QueryQuest(qgrouped[i][j]) == OK ? ja : nein
-      }) });
+      int geloest_status = pl->QueryQuest(qgrouped[i][j]);
+      // Quest ausgeben, wenn "kein Filter" gegeben oder Quest geloest und
+      // Filter "geloest" oder Quest ungeloest und Filter "ungeloest".
+      if ( !(geloest_filter & (FILTER_GELOEST|FILTER_UNGELOEST))
+          || ((geloest_filter & FILTER_GELOEST) && geloest_status == OK)
+          || ((geloest_filter & FILTER_UNGELOEST) && geloest_status != OK)
+         )
+      {
+        qlists[i] += ({ ({
+          qgrouped[i][j],
+          qtmp[Q_QP],
+          QCLASS_STARS(qtmp[Q_CLASS]),
+          capitalize(QATTR_STRINGS[qtmp[Q_ATTR]]),
+          qtmp[Q_DIFF],
+          (qtmp[Q_AVERAGE][1]>10
+                    ? to_string(to_int(qtmp[Q_AVERAGE][0]))
+                    : "-"),
+          capitalize(qtmp[Q_WIZ]),
+          geloest_status == OK ? ja : nein
+        }) });
+      }
     }
 
   for( i=0; i<qgroups; i++ )
diff --git a/std/room/gilde.c b/std/room/gilde.c
index d402ac9..a153b96 100644
--- a/std/room/gilde.c
+++ b/std/room/gilde.c
@@ -347,8 +347,18 @@
 {
   if (!this_player())
     return 0;
+  int geloest_filter;
+  switch(arg)
+  {
+    case "geloest":
+      geloest_filter = 1;
+      break;
+    case "ungeloest":
+      geloest_filter = 2;
+      break;
+  }
 
-  string str = QM->liste(this_player());
+  string str = QM->liste(this_player(), geloest_filter);
 
   this_player()->More( str, 0 );
   return 1;
