diff --git a/mo/db.py b/mo/db.py
index be88ee55cc85b835f68e35bf85f9e9d60a49dfd4..255173c52339adbac10a92ac46fc1955df075da5 100644
--- a/mo/db.py
+++ b/mo/db.py
@@ -3,6 +3,7 @@
 
 import datetime
 from enum import Enum as PythonEnum, auto
+from mo.util_simple import human_timedelta
 import re
 from sqlalchemy import \
     Boolean, Column, DateTime, ForeignKey, Integer, String, Text, UniqueConstraint, \
@@ -159,7 +160,7 @@ class RoundState(MOEnum):
 
 
 round_state_names = {
-    RoundState.preparing: 'příprava',
+    RoundState.preparing: 'připravuje se',
     RoundState.running: 'běží',
     RoundState.grading: 'opravuje se',
     RoundState.closed: 'ukončeno',
@@ -187,6 +188,23 @@ class Round(Base):
     def round_code(self):
         return f"{self.year}-{self.category}-{self.seq}"
 
+    def has_tasks(self):
+        return self.tasks_file
+
+    def long_state(self) -> str:
+        details = ""
+        if self.state == RoundState.preparing:
+            if self.ct_tasks_start and self.ct_tasks_start > mo.now:
+                details = f" – začne {self.ct_tasks_start:%Y-%m-%d %H:%M} ({human_timedelta(self.ct_tasks_start)})"
+        elif self.state == RoundState.running:
+            if self.ct_tasks_start and self.ct_tasks_start > mo.now:
+                details = f" – zadání bude zveřejněno {self.ct_tasks_start:%Y-%m-%d %H:%M} ({human_timedelta(self.ct_tasks_start)})"
+            elif self.ct_submit_end and self.ct_submit_end < mo.now:
+                details = f" – odevzdávání skončilo {self.ct_submit_end:%Y-%m-%d %H:%M} ({human_timedelta(self.ct_submit_end)})"
+            elif self.ct_submit_end:
+                details = f" – odevzdávejte do {self.ct_submit_end:%Y-%m-%d %H:%M} ({human_timedelta(self.ct_submit_end)})"
+        return self.state.friendly_name() + details
+
     def task_statement_available(self) -> bool:
         # Zde jsme raději přepečliví...
         return (self.state != RoundState.preparing
@@ -194,6 +212,13 @@ class Round(Base):
                 and self.ct_tasks_start is not None
                 and mo.now >= self.ct_tasks_start)
 
+    def can_submit(self) -> bool:
+        return (
+            self.state == RoundState.running and (
+                not self.ct_tasks_start or mo.now >= self.ct_tasks_start
+            )
+        )
+
 
 class User(Base):
     __tablename__ = 'users'