diff --git a/models/database.py b/models/database.py
index e3b3c5a3b9ffcfee7d28f5a97ca0c6a29a3deeb5..1fdab1fee1c48e064ae244d0fb5f58218d494f13 100644
--- a/models/database.py
+++ b/models/database.py
@@ -89,9 +89,6 @@ class ProtocolType(db.Model):
                 or (self.private_group != "" and self.private_group in user.groups))))
 
     def has_private_view_right(self, user):
-        print(user, self.private_group)
-        if user is not None:
-            print(user.groups)
         return (user is not None and self.private_group != "" and self.private_group in user.groups)
 
     def has_modify_right(self, user):
diff --git a/requirements.txt b/requirements.txt
index 499eb51498e3c0c923bd48fcc5ab4269c23f7c4e..6cd3d29ea3a7eb551c7058bf79611ba5409c0206 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -29,6 +29,7 @@ MarkupSafe==0.23
 nose==1.3.7
 packaging==16.8
 pathtools==0.1.2
+pkg-resources==0.0.0
 psycopg2==2.6.2
 Pygments==2.2.0
 pyldap==2.4.28
@@ -46,6 +47,7 @@ requests==2.13.0
 six==1.10.0
 SQLAlchemy==1.1.5
 tzlocal==1.3
+uwsgidecorators==1.1.0
 vine==1.1.3
 vobject==0.9.4.1
 watchdog==0.8.3
diff --git a/server.py b/server.py
index 08dcecd64e7469fc1925cc2699f06f43bd3ed833..e8fec94e7826d651e1faedda17dfd366d294651f 100755
--- a/server.py
+++ b/server.py
@@ -9,9 +9,9 @@ from flask_migrate import Migrate, MigrateCommand
 #from flask_socketio import SocketIO
 from celery import Celery
 from sqlalchemy import or_, and_
-from apscheduler.schedulers.background import BackgroundScheduler
-from apscheduler.triggers.cron import CronTrigger
-from apscheduler.triggers.interval import IntervalTrigger
+#from apscheduler.schedulers.background import BackgroundScheduler
+#from apscheduler.triggers.cron import CronTrigger
+#from apscheduler.triggers.interval import IntervalTrigger
 import atexit
 from io import StringIO, BytesIO
 import os
@@ -45,16 +45,16 @@ celery = make_celery(app, config)
 #    return socketio
 #socketio = make_socketio(app, config)
 
-def make_scheduler(app, config, function):
-    scheduler = BackgroundScheduler()
-    scheduler.start()
-    scheduler.add_job(
-        func=function,
-        trigger=CronTrigger(hour='*', minute=30),
-        id="scheduler",
-        name="Do an action regularly",
-        replace_existing=True)
-    atexit.register(scheduler.shutdown)
+#def make_scheduler(app, config, function):
+#    scheduler = BackgroundScheduler()
+#    scheduler.start()
+#    scheduler.add_job(
+#        func=function,
+#        trigger=CronTrigger(hour='*', minute=23),
+#        id="scheduler",
+#        name="Do an action regularly",
+#        replace_existing=True)
+#    atexit.register(scheduler.shutdown)
 
 app.jinja_env.trim_blocks = True
 app.jinja_env.lstrip_blocks = True
@@ -1226,25 +1226,33 @@ def logout():
         flash("You are not logged in.", "alert-error")
     return redirect(url_for(".index"))
 
-def check_and_send_reminders():
-    if not config.MAIL_ACTIVE:
-        return
-    with app.app_context():
-        current_time = datetime.now()
-        current_day = current_time.date()
-        print("regular action for reminders")
-        for protocol in Protocol.query.filter(Protocol.done == False).all():
-            day_difference = (protocol.date - current_day).days
-            usual_time = protocol.protocoltype.usual_time
-            protocol_time = datetime(1, 1, 1, usual_time.hour, usual_time.minute)
-            hour_difference = (protocol_time - current_time).seconds // 3600
-            print("diff: {} days, {} hours".format(day_difference, hour_difference))
-            for reminder in protocol.protocoltype.reminders:
-                print(reminder)
-                if day_difference == reminder.days_before and hour_difference == 0:
-                    print("reminder matching, sending")
-                    tasks.send_reminder(reminder, protocol)
+def make_scheduler():
+    from uwsgidecorators import timer as uwsgitimer, signal as uwsgisignal, cron as uwsgicron
+    @uwsgicron(30, -1, -1, -1, -1, target="mule")
+    def uwsgi_timer(signum):
+        if signum == 0:
+            check_and_send_reminders()
+
+    def check_and_send_reminders():
+        print("check and send reminders")
+        if not config.MAIL_ACTIVE:
+            return
+        with app.app_context():
+            current_time = datetime.now()
+            current_day = current_time.date()
+            print("regular action for reminders")
+            for protocol in Protocol.query.filter(Protocol.done == False).all():
+                day_difference = (protocol.date - current_day).days
+                usual_time = protocol.protocoltype.usual_time
+                protocol_time = datetime(1, 1, 1, usual_time.hour, usual_time.minute)
+                hour_difference = (protocol_time - current_time).seconds // 3600
+                print("diff: {} days, {} hours".format(day_difference, hour_difference))
+                for reminder in protocol.protocoltype.reminders:
+                    print(reminder)
+                    if day_difference == reminder.days_before and hour_difference == 0:
+                        print("reminder matching, sending")
+                        tasks.send_reminder(reminder, protocol)
 
 if __name__ == "__main__":
-    make_scheduler(app, config, check_and_send_reminders)
+    make_scheduler()
     manager.run()
diff --git a/shared.py b/shared.py
index 98747554c9d90fb4bc1c8bc15960e4607931557b..3900c2da402ddd7b8929c9160c99bd25be29eb9b 100644
--- a/shared.py
+++ b/shared.py
@@ -74,7 +74,7 @@ def date_filter_long(date):
 def date_filter_short(date):
     return date.strftime("%d.%m.%Y")
 def time_filter(time):
-    return time.strftime("%H:%M")
+    return time.strftime("%H:%M Uhr")
 
 def needs_date_test(todostate):
     return todostate.needs_date()
diff --git a/views/tables.py b/views/tables.py
index 682aa92c0ddebdea163ef99a5023daadaeba0026..f60995ecf2bb82765765ce033672a43b70875cbd 100644
--- a/views/tables.py
+++ b/views/tables.py
@@ -78,7 +78,6 @@ class ProtocolsTable(Table):
             result.append("Fertig" if protocol.is_done() else "Geplant")
         elif protocol in self.search_results:
             result.append(Markup(self.search_results[protocol]))
-        print(user, protocol.protocoltype.has_private_view_right(user))
         if check_login():
             if user is not None and protocol.protocoltype.has_private_view_right(user):
                 result.append(Table.link(url_for("show_type", type_id=protocol.protocoltype.id), protocol.protocoltype.short_name))