diff --git a/src/api/client_server/sync.rs b/src/api/client_server/sync.rs
index bc89a4c3..fed4fb73 100644
--- a/src/api/client_server/sync.rs
+++ b/src/api/client_server/sync.rs
@@ -23,7 +23,7 @@ use ruma::{
     uint, DeviceId, OwnedDeviceId, OwnedUserId, RoomId, UInt, UserId,
 };
 use std::{
-    collections::{hash_map::Entry, BTreeMap, BTreeSet, HashMap, HashSet},
+    collections::{hash_map::Entry, BTreeMap, HashMap, HashSet},
     sync::Arc,
     time::Duration,
 };
@@ -1246,6 +1246,18 @@ pub async fn sync_events_v4_route(
         let (timeline_pdus, limited) =
             load_timeline(&sender_user, &room_id, sincecount, timeline_limit)?;
 
+        let prev_batch = timeline_pdus
+            .first()
+            .map_or(Ok::<_, Error>(None), |(pdu_count, _)| {
+                Ok(Some(match pdu_count {
+                    PduCount::Backfilled(_) => {
+                        error!("timeline in backfill state?!");
+                        "0".to_owned()
+                    }
+                    PduCount::Normal(c) => c.to_string(),
+                }))
+            })?;
+
         let room_events: Vec<_> = timeline_pdus
             .iter()
             .map(|(_, pdu)| pdu.to_sync_room_event())
@@ -1277,7 +1289,7 @@ pub async fn sync_events_v4_route(
                 },
                 timeline: room_events,
                 required_state,
-                prev_batch: None,
+                prev_batch,
                 limited,
                 joined_count: Some(
                     (services()