diff --git a/synapse/storage/stream.py b/synapse/storage/stream.py
index 475e7f20a16090f298afb8070079c6d8a10d541a..a954024678003c1283c21b470c969990ae2e4abd 100644
--- a/synapse/storage/stream.py
+++ b/synapse/storage/stream.py
@@ -253,6 +253,9 @@ class StreamStore(SQLBaseStore):
         if rows:
             topo = rows[-1]["topological_ordering"]
             toke = rows[-1]["stream_ordering"]
+            if direction == 'b':
+                topo -= 1
+                toke -= 1
             next_token = "t%s-%s" % (topo, toke)
         else:
             # TODO (erikj): We should work out what to do here instead.