diff --git a/app/zoom.py b/app/zoom.py
index 2970535d3dd89154ed95ed1f8cdf3e921663e0f6..41d611fcbda67b5585513f0dfb2d5ef7cf74354a 100644
--- a/app/zoom.py
+++ b/app/zoom.py
@@ -1,5 +1,5 @@
 import json
-from flask import Flask, render_template, request, g
+from flask import Flask, render_template, request, g, request_tearing_down
 import psycopg2
 import psycopg2.extras
 import time
@@ -42,6 +42,17 @@ def db_query(query, args=()):
         db_connect()
         db.execute(query, args)
 
+def db_reset_signal(sender, **extra):
+    # At the end of every request, we have to close the implicitly opened
+    # transaction. Otherwise we end up with serving stale data.
+    if db_connection is not None:
+        try:
+            db_connection.rollback()
+        except:
+            pass
+
+request_tearing_down.connect(db_reset_signal, app)
+
 ### Schedule ###
 
 def get_date():
diff --git a/requirements.txt b/requirements.txt
index 6e41d4050c28b722c2a96e4f228b8d3d1ccfc835..df5d5e7931e3039468c990c89a51d808cf8f9283 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,3 +2,4 @@ zoomus
 psycopg2
 python-dateutil
 Flask
+blinker