diff --git a/database/Database.php b/database/Database.php
index c067a12d2d4df77810f8f8ea3cd8297b062f988e..bb4698a9762202c256ab73b6419e9cd71904709a 100644
--- a/database/Database.php
+++ b/database/Database.php
@@ -249,7 +249,7 @@ class Database
 
     public function after(int $anchor, int $buffer, int $limit): array
     {
-        $truncatedLimit = max(min($limit + 1, 50), 1);
+        $truncatedLimit = max(min($limit, 50), 0);
 
         $stmt = $this->backend->loadAfter();
 
diff --git a/database/backends/PostgresSmartBackend.php b/database/backends/PostgresSmartBackend.php
index e205f6cafa70c3df5f754bd28978a5091c6e7ac6..451c39ba302e1702bb255a2079c6872318c16719 100644
--- a/database/backends/PostgresSmartBackend.php
+++ b/database/backends/PostgresSmartBackend.php
@@ -218,7 +218,7 @@ class PostgresSmartBackend implements Backend
     public function loadBefore(): \PDOStatement
     {
         return $this->db->prepare("
-            SELECT backlog.messageid,
+            SELECT * FROM (SELECT backlog.messageid,
                    backlog.bufferid,
                    buffer.buffername,
                    sender.sender,
@@ -234,7 +234,8 @@ class PostgresSmartBackend implements Backend
               AND backlog.bufferid = :bufferid
               AND backlog.messageid < :anchor
             ORDER BY backlog.messageid DESC
-            LIMIT :limit;
+            LIMIT :limit) t
+            ORDER BY messageid ASC;
         ");
     }
 }