diff --git a/src/Controller/RegistrationController.php b/src/Controller/RegistrationController.php
index abd35e4d0d10fe269f21252802f479de1ebfc02b..392f2fa5b691da67f6c21e62a57e953b77f52f78 100755
--- a/src/Controller/RegistrationController.php
+++ b/src/Controller/RegistrationController.php
@@ -3,17 +3,15 @@
 namespace App\Controller;
 
 use App\Builder\UserBuilder;
-use App\Entity\Capsule;
-use App\Entity\PendingEditorInvitation;
 use App\Entity\User;
+use App\Event\UserRegistrationEvent;
 use App\Form\RegistrationFormType;
-use App\Repository\CapsuleRepository;
-use App\Repository\PendingEditorInvitationRepository;
 use App\Repository\UserRepository;
 use App\Security\EmailVerifier;
 use Doctrine\ORM\EntityManagerInterface;
 use Symfony\Bridge\Twig\Mime\TemplatedEmail;
 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\RequestStack;
 use Symfony\Component\HttpFoundation\Response;
@@ -28,16 +26,15 @@ class RegistrationController extends AbstractController
         private EmailVerifier $email_verifier,
         private RequestStack $request_stack,
         private EntityManagerInterface $entity_manager,
-        private CapsuleRepository $capsule_repository,
-        private UserRepository $user_repository,
-        private PendingEditorInvitationRepository $pending_editor_invitation_repository
+        private UserRepository $user_repository
     ) {
     }
 
     #[Route('/register', name:'app_register')]
     public function register(
         Request $request,
-        UserPasswordHasherInterface $user_password_hasher
+        UserPasswordHasherInterface $user_password_hasher,
+        EventDispatcherInterface $event_dispatcher
     ): Response {
         if ($this->getUser()) {
             return $this->redirectToRoute('capsule_list');
@@ -53,6 +50,9 @@ class RegistrationController extends AbstractController
             $this->entity_manager->persist($userBuilder->createUser());
             $this->entity_manager->flush();
 
+            $event = new UserRegistrationEvent($user);
+            $event_dispatcher->dispatch($event);
+
             // generate a signed url and email it to the user
             $this->email_verifier->sendEmailConfirmation(
                 'app_verify_email',
@@ -97,8 +97,6 @@ class RegistrationController extends AbstractController
             return $this->redirectToRoute('app_register');
         }
 
-        $this->addCapsuleToConfirmedPreviousPendingEditor($user);
-
         $this->addFlash(
             'success',
             $translator->trans('registration.email_verified_success')
@@ -118,54 +116,4 @@ class RegistrationController extends AbstractController
             ['user' =>  $user]
         );
     }
-
-    private function addCapsuleToConfirmedPreviousPendingEditor(User $user): void
-    {
-        $pending_editor_invitations = $this->pending_editor_invitation_repository->findBy(
-            ['email' => $user->getEmail()]
-        );
-
-        if (! is_array($pending_editor_invitations)) {
-            return;
-        }
-
-        $capsules_ids = $this->removeInvitations($pending_editor_invitations);
-        $this->addEditorToCapsules($capsules_ids, $user);
-    }
-
-    /**
-     * @param array<PendingEditorInvitation> $pending_editor_invitations
-     * @return array<int>
-     */
-    private function removeInvitations(array $pending_editor_invitations): array
-    {
-        $capsules_ids = [];
-
-        foreach ($pending_editor_invitations as $invitation) {
-            if (! $invitation instanceof PendingEditorInvitation) {
-                return $capsules_ids;
-            }
-            $capsules_ids[] = $invitation->getCapsuleId();
-            $this->entity_manager->remove($invitation);
-        }
-
-        return $capsules_ids;
-    }
-
-    /**
-     * @param array<int> $capsules_ids
-     */
-    private function addEditorToCapsules(array $capsules_ids, User $user): void
-    {
-        $capsules = $this->capsule_repository->findBy(['id' => $capsules_ids]);
-
-        foreach ($capsules as $capsule) {
-            if (! $capsule instanceof Capsule) {
-                return;
-            }
-            $capsule->addEditor($user);
-            $this->entity_manager->persist($capsule);
-        }
-        $this->entity_manager->flush();
-    }
 }
diff --git a/src/Event/UserRegistrationEvent.php b/src/Event/UserRegistrationEvent.php
new file mode 100644
index 0000000000000000000000000000000000000000..f9fa19d666e388a0148d204ef341942115eade32
--- /dev/null
+++ b/src/Event/UserRegistrationEvent.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace App\Event;
+
+use App\Entity\User;
+use Symfony\Contracts\EventDispatcher\Event;
+
+class UserRegistrationEvent extends Event
+{
+    public function __construct(private User $user)
+    {
+    }
+
+    public function getUser(): User
+    {
+        return $this->user;
+    }
+}
diff --git a/src/EventSubscriber/UserRegistrationSubscriber.php b/src/EventSubscriber/UserRegistrationSubscriber.php
new file mode 100644
index 0000000000000000000000000000000000000000..bbed128cfa3f17da974b7be5e079a2c50ee3e3f5
--- /dev/null
+++ b/src/EventSubscriber/UserRegistrationSubscriber.php
@@ -0,0 +1,95 @@
+<?php
+
+namespace App\EventSubscriber;
+
+use App\Entity\Capsule;
+use App\Entity\PendingEditorInvitation;
+use App\Entity\User;
+use App\Event\UserRegistrationEvent;
+use App\Repository\CapsuleRepository;
+use App\Repository\PendingEditorInvitationRepository;
+use Doctrine\ORM\EntityManagerInterface;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+class UserRegistrationSubscriber implements EventSubscriberInterface
+{
+    public function __construct(
+        private PendingEditorInvitationRepository $pending_editor_invitation_repository,
+        private CapsuleRepository $capsule_repository,
+        private EntityManagerInterface $entity_manager
+    ) {
+    }
+
+    public static function getSubscribedEvents(): array
+    {
+        return [
+            UserRegistrationEvent::class => [
+                'onPendingEditorRegistration', 1
+            ]
+        ];
+    }
+
+    public function onPendingEditorRegistration(UserRegistrationEvent $event): void
+    {
+        $user = $event->getUser();
+
+        $this->addCapsuleToConfirmedPreviousPendingEditor($user);
+    }
+
+    public function addCapsuleToConfirmedPreviousPendingEditor(User $user): void
+    {
+        $pending_editor_invitations = $this->pending_editor_invitation_repository->findBy(
+            ['email' => $user->getEmail()]
+        );
+
+        if (! is_array($pending_editor_invitations)) {
+            return;
+        }
+
+        $capsules_ids = $this->getCapsulesIds($pending_editor_invitations);
+        $this->removeInvitations($pending_editor_invitations);
+        $this->addEditorToCapsules($capsules_ids, $user);
+    }
+
+    /**
+     * @param PendingEditorInvitation[] $pending_editor_invitations
+     * @return int[]
+     */
+    private function getCapsulesIds(array $pending_editor_invitations): array
+    {
+        $capsules_ids = [];
+
+        foreach ($pending_editor_invitations as $invitation) {
+            $capsules_ids[] = $invitation->getCapsuleId();
+        }
+
+        return $capsules_ids;
+    }
+
+    /**
+     * @param PendingEditorInvitation[] $pending_editor_invitations
+     */
+    private function removeInvitations(array $pending_editor_invitations): void
+    {
+        foreach ($pending_editor_invitations as $invitation) {
+            $this->entity_manager->remove($invitation);
+        }
+    }
+
+    /**
+     * @param array<int> $capsules_ids
+     */
+    private function addEditorToCapsules(array $capsules_ids, User $user): void
+    {
+        $capsules = $this->capsule_repository->findBy(['id' => $capsules_ids]);
+
+        foreach ($capsules as $capsule) {
+            if (! $capsule instanceof Capsule) {
+                return;
+            }
+            $capsule->addEditor($user);
+            $this->entity_manager->persist($capsule);
+        }
+        $this->entity_manager->flush();
+    }
+}