Index: commands/announce.py
===================================================================
--- commands/announce.py	(revision 694d823d4d46ec2914f6e210f8903887e4a72d79)
+++ commands/announce.py	(revision 69dd60cc024063daf1591168a64a32e771bd7f1b)
@@ -13,5 +13,6 @@
 from telegram.ext import ContextTypes
 
-from strings import ANNOUNCEMENT_TEMPLATE, ANNOUNCEMENT_FINISHED_EVENT
+from strings import ANNOUNCEMENT_TEMPLATE, ANNOUNCEMENT_FINISHED_EVENT, \
+    ANNOUNCEMENT_EVENT_NEEDS_EDITING
 from utils import context_init, create_users_string, choose_next_user
 from predicates import has_unfinished_event
@@ -32,5 +33,8 @@
         last_movie = movies[-1]
 
-        genres = " #".join(last_movie["genres"])
+        if last_event["when"] is None or last_event["where"] is None or last_event["movie"] is None:
+            raise error.TelegramError(ANNOUNCEMENT_EVENT_NEEDS_EDITING)
+
+        genres ="#" + " #".join(last_movie["genres"])
 
         await update.message.reply_markdown(
Index: commands/event.py
===================================================================
--- commands/event.py	(revision 694d823d4d46ec2914f6e210f8903887e4a72d79)
+++ commands/event.py	(revision 69dd60cc024063daf1591168a64a32e771bd7f1b)
@@ -14,10 +14,10 @@
 from datetime import datetime
 
-from utils import context_init
-from predicates import is_past, has_finished_event
+from utils import context_init, normalize_username
+from predicates import is_past, has_finished_movie, has_event_without_movie
 from strings import EVENT_ARGS_NOT_PROVIDED, EVENT_INVALID_DATETIME, \
     EVENT_CREATED, EVENT_EDITED, EVENT_CANT_BE_IN_PAST, \
     EVENT_WHERE_NOT_PROVIDED, EVENT_MOVIE_NOT_CHOOSEN, EVENTS_LIST, \
-    EVENT_USER_HAD_EVENT, NO_EVENTS
+    EVENT_FINISHED, NO_EVENTS, EVENTS_LIST_PLANNING, EVENTS_LIST_MOVIE_SET
 
 
@@ -27,15 +27,15 @@
 ) -> None:
     context_init(context)
+    users = context.chat_data["users"]
     events = context.chat_data["events"]
     movies = context.chat_data["movies"]
 
-    username = update.message.from_user.username
     last_movie = movies[-1] if movies != [] else None
 
-    if has_finished_event(context, username):
-        raise error.TelegramError(EVENT_USER_HAD_EVENT)
+    if last_movie is None:
+        raise error.TelegramError(EVENT_MOVIE_NOT_CHOOSEN)
 
-    if last_movie is None or last_movie["user"] != username:
-        raise error.TelegramError(EVENT_MOVIE_NOT_CHOOSEN)
+    if has_finished_movie(context):
+        raise error.TelegramError(EVENT_FINISHED)
 
     if context.args == []:
@@ -62,8 +62,8 @@
         raise error.TelegramError(EVENT_WHERE_NOT_PROVIDED)
 
-    event_where = " ".join(arguments_where)
+    old_when = events[-2]["when"] if len(events) >= 2 else None
+    old_where = events[-2]["where"] if len(events) >= 2 else None
 
-    if event_where == "":
-        event_where = events[-1]["where"]
+    event_where = " ".join(arguments_where) if arguments_where != [] else old_where
 
     event_dict = dict(
@@ -74,26 +74,15 @@
     )
 
-    if events == [] or is_past(events[-1]["when"]):
-        events.append(event_dict)
-        await update.message.reply_text(
-            EVENT_CREATED.format(
-                when=event_when,
-                movie=event_dict["movie"],
-            )
+    events[-1] = event_dict
+
+    await update.message.reply_text(
+        EVENT_EDITED.format(
+            old_when=old_when,
+            old_where=old_where,
+            when=event_when,
+            where=event_where,
+            movie=event_dict["movie"],
         )
-    else:
-        old_when = events[-1]["when"]
-        old_where = events[-1]["where"]
-        events[-1] = event_dict
-
-        await update.message.reply_text(
-            EVENT_EDITED.format(
-                old_when=old_when,
-                old_where=old_where,
-                when=event_when,
-                where=event_where,
-                movie=event_dict["movie"],
-            )
-        )
+    )
 
 
@@ -104,19 +93,39 @@
     context_init(context)
 
+    users = context.chat_data["users"]
     events = context.chat_data["events"]
+    last_event = events[-1] if events != [] else None
+
+    if last_event and last_event["movie"] is None:
+        last_event["user"] = normalize_username(users[0])
 
     events_formatted: str = ""
 
     for event in events:
-        event_finished = "FINISHED" \
+        event_status = "FINISHED" \
             if is_past(event["when"]) else "PLANNED"
 
-        events_formatted += EVENTS_LIST.format(
-            movie=event["movie"],
-            user=event["user"],
-            when=event["when"],
-            where=event["where"],
-            finished=event_finished
-        )
+        if event["movie"] is None:
+            breakpoint()
+            event_status = "PLANNING"
+            events_formatted += EVENTS_LIST_PLANNING.format(
+                user=event["user"],
+                status=event_status
+            )
+        elif event["when"] is None or event["where"] is None:
+            event_status = "PLANNING"
+            events_formatted += EVENTS_LIST_MOVIE_SET.format(
+                user=event["user"],
+                movie=event["movie"],
+                status=event_status
+            )
+        else:
+            events_formatted += EVENTS_LIST.format(
+                movie=event["movie"],
+                user=event["user"],
+                when=event["when"],
+                where=event["where"],
+                status=event_status
+            )
 
     if events_formatted == "":
Index: commands/movie.py
===================================================================
--- commands/movie.py	(revision 694d823d4d46ec2914f6e210f8903887e4a72d79)
+++ commands/movie.py	(revision 69dd60cc024063daf1591168a64a32e771bd7f1b)
@@ -14,6 +14,7 @@
 from imdb import Cinemagoer
 
-from utils import context_init, choose_next_user
-from predicates import has_finished_event
+from utils import context_init, choose_next_user, normalize_username, \
+    init_new_event
+from predicates import has_finished_movie
 from strings import MOVIE_NOT_PROVIDED, EXPECTED_ONE_MOVIE, \
     MOVIE_ANOTHER_USER, FETCHING_MOVIE, FETCHING_ERROR, \
@@ -38,7 +39,6 @@
     username = update.message.from_user.username
 
-    if has_finished_event(context, chooser):
-        users = context.chat_data["users"] = choose_next_user(users)
-        raise error.TelegramError(MOVIE_ANOTHER_USER.format(users[0]))
+    if has_finished_movie(context):
+        users = context.chat_data["users"] = choose_next_user(context)
 
     if "@"+username != chooser:
@@ -64,5 +64,4 @@
         id=movie.getID(),
         user=update.effective_user.username,
-        poster=movie.data.get("cover url"),
         rating=movie.data.get("rating"),
         genres=movie.data.get("genres"),
@@ -81,4 +80,5 @@
             context.chat_data["events"][-1] = last_event
     else:
+        init_new_event(context, users[0], movie_dict["title"])
         context.chat_data["movies"].append(movie_dict)
 
@@ -101,5 +101,4 @@
         movies_formatted += MOVIES_LIST.format(
             title=movie["title"],
-            id=movie["id"],
             user=movie["user"]
         )
Index: commands/users.py
===================================================================
--- commands/users.py	(revision 694d823d4d46ec2914f6e210f8903887e4a72d79)
+++ commands/users.py	(revision 69dd60cc024063daf1591168a64a32e771bd7f1b)
@@ -17,7 +17,8 @@
     EXPECTED_ONE_USER, USER_SET, USER_REMOVE, ADD_MORE_USERS, \
     NEXT_MOVIE_USER, USER_NOT_FOUND, USER_CHOOSE, NO_USERS, \
-    EVENT_USER_HAD_EVENT, NEXT_MOVIE
-from utils import context_init, create_users_string, choose_next_user
-from predicates import has_finished_event
+    NEXT_MOVIE
+from utils import context_init, create_users_string, choose_next_user, \
+    normalize_username
+from predicates import has_finished_movie, has_event_without_movie
 
 
@@ -61,9 +62,10 @@
     if users == []:
         await update.message.reply_text(NO_USERS)
-    else:
-        if has_finished_event(context, users[0]):
-            users = context.chat_data["users"] = choose_next_user(users)
+        return
 
-        await update.message.reply_markdown(create_users_string(users))
+    if has_finished_movie(context):
+        users = context.chat_data["users"] = choose_next_user(context)
+
+    await update.message.reply_markdown(create_users_string(users))
 
 
@@ -83,13 +85,13 @@
         raise error.TelegramError(ADD_MORE_USERS)
 
-    if has_finished_event(context, users[0]):
-        users = context.chat_data["users"] = choose_next_user(users)
+    if has_finished_movie(context):
+        users = context.chat_data["users"] = choose_next_user(context)
 
     next_user_string = NEXT_MOVIE_USER.format(user=users[0])
 
-    last_movie = context.chat_data["movies"][0] \
+    last_movie = context.chat_data["movies"][-1] \
         if context.chat_data["movies"] != [] else None
 
-    if last_movie and last_movie["user"] == users[0]:
+    if last_movie and last_movie["user"] == normalize_username(users[0]):
         next_user_string += NEXT_MOVIE.format(movie=last_movie["title"])
 
@@ -142,9 +144,9 @@
     context.chat_data["users"] = users
 
-    if has_finished_event(context, users[0]):
-        await update.message.reply_text(
-            EVENT_USER_HAD_EVENT.format(user=users[0])
-        )
-        users = context.chat_data["users"] = choose_next_user(users)
+    if has_finished_movie(context):
+        users = context.chat_data["users"] = choose_next_user(context)
+
+    if has_event_without_movie(context):
+        context.chat_data["events"][-1]["user"] = users[0]
 
     await update.message.reply_text(USER_CHOOSE.format(user=users[0]))
