diff --git a/src/Controller/CapsuleController.php b/src/Controller/CapsuleController.php
index 19d03946061ce6ed580a73db2609cd2e23577310..6fbd799131d62149fc04229d95a78c87bf046a69 100755
--- a/src/Controller/CapsuleController.php
+++ b/src/Controller/CapsuleController.php
@@ -13,6 +13,7 @@ use App\Repository\CapsuleRepository;
 use App\Builder\CapsuleBuilder;
 use App\Form\CreateCapsuleFormType;
 use Doctrine\ORM\EntityManagerInterface;
+use Knp\Bundle\PaginatorBundle\Pagination\SlidingPagination;
 use Knp\Component\Pager\PaginatorInterface;
 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
 use Symfony\Component\Filesystem\Filesystem;
@@ -75,45 +76,53 @@ class CapsuleController extends AbstractController
         $all_capsules = $current_user->getCapsules()->toArray();
         $groups = $this->prependGroupAllToUserGroups($current_user);
 
-        $form = $this->createForm(FilterByGroupFormType::class, ['groups' => $groups, 'method' => 'GET']);
+        $group_id = $request->query->getInt('group', Group::$GROUP_ALL_ID);
+        $group = $this->getGroupByIdOrNull($groups, $group_id, $groups[0]);
 
-        // Retrieve group from GET data and update form data if required
-        $paginatorGroupName = $request->query->get('group', '');
-        $forceForm = false;
-        if ($paginatorGroupName != '') {
-            $form->submit(['name' => $paginatorGroupName]);
-            $forceForm = true;
-        } else {
-            $form->handleRequest($request);
-        }
+        $filter_by_group_form = $this->createForm(
+            FilterByGroupFormType::class,
+            ['groups' => $groups, 'method' => 'GET', 'selected_group' => $group]
+        );
 
-        if ($forceForm || $form->isSubmitted() && $form->isValid()) {
-            $group = $form->getData()['name'];
+        $filter_by_group_form->handleRequest($request);
+        if ($filter_by_group_form->isSubmitted() && $filter_by_group_form->isValid()) {
+            $group = $filter_by_group_form->getData()['name'];
 
             if (! $group instanceof Group) {
                 throw new \Exception('Group not found');
             }
+        }
 
-            if ($group->getId() !== Group::$GROUP_ALL_ID) {
-                $all_capsules = $group->getCapsules()->toArray();
-            }
-        } else {
-            $group = null;
+        if ($group instanceof Group && $group->getId() !== Group::$GROUP_ALL_ID) {
+            $all_capsules = $group->getCapsules()->toArray();
         }
 
+        $nb_elements_per_page = 5;
+
+        // Fix the current page.
+        // For example, the user is on the page 5 without filter and apply a filter that reduce the number of pages.
+        // We display the last page.
+        $current_page = min(
+            [
+                intval((count($all_capsules) / $nb_elements_per_page) + 1),
+                $request->query->getInt('page', 1)
+            ]
+        );
+        $request->query->set('page', $current_page);
+
+        // Pass group param to the paginator (it will be sent as GET data)
         $capsules = $paginator->paginate(
             $all_capsules,
-            $request->query->getInt('page', 1),
-            5
+            $current_page,
+            $nb_elements_per_page
         );
 
-        // Pass group param to the paginator (it will be sent as GET data)
-        if ($group) {
-            $capsules->setParam('group', $group->getName());
+        if ($capsules instanceof SlidingPagination) {
+            $capsules->setParam('group', $group->getId());
         }
 
         return $this->renderForm('capsule/index.html.twig', [
-            'filterByGroupForm' => $form,
+            'filterByGroupForm' => $filter_by_group_form,
             'capsules' => $capsules,
             'current_user' => $current_user,
             'legacy_url' => $this->getParameter('app.legacy_external_prefix'),
@@ -387,4 +396,25 @@ class CapsuleController extends AbstractController
 
         return $groups;
     }
+
+    /**
+     * @param array<Group> $groups
+     * @param int|null $id
+     * @param Group $defaultGroup The returned group if current groups isn't found
+     * @return Group
+     */
+    private function getGroupByIdOrNull(array $groups, ?int $id, Group $defaultGroup): Group
+    {
+        if (null === $id) {
+            return $defaultGroup;
+        }
+
+        foreach ($groups as $g) {
+            if ($g->getId() === $id) {
+                return $g;
+            }
+        }
+
+        return $defaultGroup;
+    }
 }
diff --git a/src/Form/FilterByGroupFormType.php b/src/Form/FilterByGroupFormType.php
index e2f8087a1df2c0d3783d688355eb9bbb7a59cefc..2e19fb28a02e40526267e017b6fd1c95ede51a4e 100644
--- a/src/Form/FilterByGroupFormType.php
+++ b/src/Form/FilterByGroupFormType.php
@@ -15,7 +15,7 @@ class FilterByGroupFormType extends AbstractType
     public function buildForm(FormBuilderInterface $builder, array $options): void
     {
         $groups = $options['data']['groups'];
-
+        $selected_group = $options['data']['selected_group'];
         $builder
             ->add('name', ChoiceType::class, [
                 'choices' => $groups,
@@ -24,9 +24,10 @@ class FilterByGroupFormType extends AbstractType
                 'choice_label' => function (?Group $entity) {
                     return $entity ? $entity->getName() : '';
                 },
-                'choice_value' => 'name',
-                'choice_name' => 'name',
-                'expanded' => false
+                'choice_value' => 'id',
+                'choice_name' => 'id',
+                'expanded' => false,
+                'data' => $selected_group
             ]);
     }