diff --git a/changelog.d/4699.bugfix b/changelog.d/4699.bugfix
index 8cd8340cc1..1d7f3174e7 100644
--- a/changelog.d/4699.bugfix
+++ b/changelog.d/4699.bugfix
@@ -1 +1 @@
-Fix attempting to paginate in rooms where server cannot see any events.
+Fix attempting to paginate in rooms where server cannot see any events, to avoid unnecessarily pulling in lots of redacted events.
diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py
index bf2989aefd..72b63d64d0 100644
--- a/synapse/handlers/federation.py
+++ b/synapse/handlers/federation.py
@@ -862,9 +862,9 @@ class FederationHandler(BaseHandler):
# as otherwise we'll just spend a lot of resources to get redacted
# events.
#
- # We do this by filtering all the extremities and seeing if any remain.
- # Given we don't have the extremity events themselves, we need to
- # actually check the events that reference them.
+ # We do this by filtering all the backwards extremities and seeing if
+ # any remain. Given we don't have the extremity events themselves, we
+ # need to actually check the events that reference them.
#
# *Note*: the spec wants us to keep backfilling until we reach the start
# of the room in case we are allowed to see some of the history. However
@@ -873,13 +873,16 @@ class FederationHandler(BaseHandler):
# there is its often sufficiently long ago that clients would stop
# attempting to paginate before backfill reached the visible history.
#
- # TODO: If we do do a backfill the we should filter the extremities to
- # only include those that point to visible portions of history.
+ # TODO: If we do do a backfill then we should filter the backwards
+ # extremities to only include those that point to visible portions of
+ # history.
#
# TODO: Correctly handle the case where we are allowed to see the
- # forward event but not the extremity, e.g. in the case of initial
- # join of the server where we are allowed to see the join event but
- # not anything before it.
+ # forward event but not the backward extremity, e.g. in the case of
+ # initial join of the server where we are allowed to see the join
+ # event but not anything before it. This would require looking at the
+ # state *before* the event, ignoring the special casing certain event
+ # types have.
forward_events = yield self.store.get_successor_events(
list(extremities),
diff --git a/synapse/visibility.py b/synapse/visibility.py
index e9dc73c25e..efec21673b 100644
--- a/synapse/visibility.py
+++ b/synapse/visibility.py
@@ -277,7 +277,7 @@ def filter_events_for_server(store, server_name, events, redact=True,
return True
- # Next lets check to see if all the events have a history visibility
+ # Lets check to see if all the events have a history visibility
# of "shared" or "world_readable". If thats the case then we don't
# need to check membership (as we know the server is in the room).
event_to_state_ids = yield store.get_state_ids_for_events(
|