diff --git a/src/Controller/CapsuleController.php b/src/Controller/CapsuleController.php
index cb9eecf490e83eb68ec4947e64c2177561f075e6..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,29 +76,53 @@ class CapsuleController extends AbstractController
         $all_capsules = $current_user->getCapsules()->toArray();
         $groups = $this->prependGroupAllToUserGroups($current_user);
 
-        $form = $this->createForm(FilterByGroupFormType::class, ['groups' => $groups]);
-        $form->handleRequest($request);
+        $group_id = $request->query->getInt('group', Group::$GROUP_ALL_ID);
+        $group = $this->getGroupByIdOrNull($groups, $group_id, $groups[0]);
 
-        if ($form->isSubmitted() && $form->isValid()) {
-            $group = $form->getData()['name'];
+        $filter_by_group_form = $this->createForm(
+            FilterByGroupFormType::class,
+            ['groups' => $groups, 'method' => 'GET', 'selected_group' => $group]
+        );
+
+        $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();
-            }
+        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
         );
 
+        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'),
@@ -371,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
             ]);
     }
 
diff --git a/templates/capsule/index.html.twig b/templates/capsule/index.html.twig
index 3bc0322a7a997bf3f38dd9fa719c11deee34f18d..70edbdd9a903756aa6e7c0360e6c1adcba48dbd8 100644
--- a/templates/capsule/index.html.twig
+++ b/templates/capsule/index.html.twig
@@ -13,17 +13,15 @@
                 {{ 'capsule.title'|trans }}
             </h2>
 
-            {% if app.request.query.get('page')|default(1) == 1 %}
-                {% if current_user.getGroups()|length > 1 %}
-                    {{ form_start(filterByGroupForm, {'attr': {novalidate: 'novalidate', 'class': 'd-flex flex-column flex-nowrap'}}) }}
-                    {{ form_widget(filterByGroupForm._token) }}
-                    <div class="input-group">
-                        {{ form_label(filterByGroupForm.name, 'groups.filter.label', { 'label_attr' : { 'class' : 'input-group-text mb-0'}}) }}
-                        {{ form(filterByGroupForm.name, {'attr': {'class': 'choice-auto-submit' }})  }}
-                    </div>
-                    {{ form_end(filterByGroupForm) }}
-                {%  endif %}
-            {% endif %}
+            {% if current_user.getGroups()|length > 1 %}
+                {{ form_start(filterByGroupForm, {'attr': {novalidate: 'novalidate', 'class': 'd-flex flex-column flex-nowrap'}}) }}
+                {{ form_widget(filterByGroupForm._token) }}
+                <div class="input-group">
+                    {{ form_label(filterByGroupForm.name, 'groups.filter.label', { 'label_attr' : { 'class' : 'input-group-text mb-0'}}) }}
+                    {{ form(filterByGroupForm.name, {'attr': {'class': 'choice-auto-submit' }})  }}
+                </div>
+                {{ form_end(filterByGroupForm) }}
+            {%  endif %}
 
             <form class="d-flex mb-4 mb-lg-0">
                 <button class="btn btn-orange text-uppercase" formaction="{{ path('create_capsule') }}">