diff --git a/prog/communication.py b/prog/communication.py
index be0d89bba90f0082f4632f41a0460d6e567826e7..0f7a974df2684c1d5208f5ce6d37a453611b54e9 100644
--- a/prog/communication.py
+++ b/prog/communication.py
@@ -237,17 +237,17 @@ class MainServer(FuncCaller):
             self._download_server = download_server.DownloadServer(s)
         return self._download_server
 
-    async def _tree_walker(self, condition, worker):
+    async def _tree_walker(self, condition, worker, reverse=False):
         d = "data/realtime"
-        for d_Y_m_d in sorted(os.listdir(d)):
+        for d_Y_m_d in sorted(os.listdir(d), reverse=reverse):
             path = d_Y_m_d
             dt = path_to_dt(path)
             if await condition(dt, datetime.timedelta(days=1)):
-                for d_H in sorted(os.listdir(d+"/"+path)):
+                for d_H in sorted(os.listdir(d+"/"+path), reverse=reverse):
                     path = d_Y_m_d+"/"+d_H
                     dt = path_to_dt(path)
                     if await condition(dt, datetime.timedelta(hours=1)):
-                        for d_M_S in sorted(os.listdir(d+"/"+path)):
+                        for d_M_S in sorted(os.listdir(d+"/"+path), reverse=reverse):
                             path = d_Y_m_d+"/"+d_H+"/"+d_M_S
                             dt = path_to_dt(path)
                             await worker(dt)
@@ -278,6 +278,21 @@ class MainServer(FuncCaller):
             return r.val
         return None
 
+    async def list_prev_realtime_data(self, dt_from: datetime):
+        class Return(Exception):
+            def __init__(self, val):
+                self.val = val
+        async def condition(dt, delta):
+            return dt_intersect(dt_minf, dt_from, dt, delta)
+        async def worker(dt):
+            if dt < dt_from:
+                raise Return(dt)
+        try:
+            await self._tree_walker(condition, worker, reverse=True)
+        except Return as r:
+            return r.val
+        return None
+
     @server_exec()
     async def get_data(self, dt: datetime.datetime):
         path = "data/realtime/"+dt_to_path(dt)
@@ -298,6 +313,14 @@ class MainServer(FuncCaller):
         else:
             return next_dt, await self.get_data(dt)
 
+    @server_exec()
+    async def get_prev_data(self, dt: datetime.datetime):
+        prev_dt = await self.list_prev_realtime_data(dt)
+        if prev_dt is None:
+            return None
+        else:
+            return prev_dt, await self.get_data(dt)
+
     @server_exec()
     async def get_preprocessed_data(self, dt: datetime.datetime, route_id: str):
         assert all(i.isalnum() for i in route_id)