diff --git a/synapse/replication/slave/storage/events.py b/synapse/replication/slave/storage/events.py
index f8965c73a018127d882bd948e48393226243d7a6..842ced02d6635b31cf14b34a84d25622599c92c5 100644
--- a/synapse/replication/slave/storage/events.py
+++ b/synapse/replication/slave/storage/events.py
@@ -173,7 +173,7 @@ class SlavedEventStore(BaseSlavedStore):
     get_room_max_stream_ordering = DataStore.get_room_max_stream_ordering.__func__
 
     get_forward_extremeties_for_room = (
-        DataStore.get_forward_extremeties_for_room.__func__
+        EventFederationStore.__dict__["get_forward_extremeties_for_room"]
     )
 
     def stream_positions(self):
diff --git a/synapse/storage/event_federation.py b/synapse/storage/event_federation.py
index ec6dbe5492ce5ba4bb2b2048d56a8f8abe0511db..050b78d6526ce2ef327863959a538b0776bf3539 100644
--- a/synapse/storage/event_federation.py
+++ b/synapse/storage/event_federation.py
@@ -344,6 +344,7 @@ class EventFederationStore(SQLBaseStore):
                 self.get_latest_event_ids_in_room.invalidate, (room_id,)
             )
 
+    @cached(max_entries=5000, num_args=2)
     def get_forward_extremeties_for_room(self, room_id, stream_ordering):
         """For a given room_id and stream_ordering, return the forward
         extremeties of the room at that point in "time".