diff --git a/club/models.py b/club/models.py
index 00c9239d..250d584f 100644
--- a/club/models.py
+++ b/club/models.py
@@ -276,18 +276,6 @@ class Membership(models.Model):
         _("description"), max_length=128, null=False, blank=True
     )
 
-    def clean(self):
-        sub = User.objects.filter(pk=self.user.pk).first()
-        if sub is None or not sub.is_subscribed:
-            raise ValidationError(_("User must be subscriber to take part to a club"))
-        if (
-            Membership.objects.filter(user=self.user)
-            .filter(club=self.club)
-            .filter(end_date=None)
-            .exists()
-        ):
-            raise ValidationError(_("User is already member of that club"))
-
     def __str__(self):
         return (
             self.club.name
diff --git a/club/tests.py b/club/tests.py
index c0409a9f..b9130bb4 100644
--- a/club/tests.py
+++ b/club/tests.py
@@ -44,7 +44,7 @@ class ClubTest(TestCase):
         self.client.login(username="root", password="plop")
         self.client.post(
             reverse("club:club_members", kwargs={"club_id": self.bdf.id}),
-            {"user": self.skia.id, "start_date": "12/06/2016", "role": 3},
+            {"users": self.skia.id, "start_date": "12/06/2016", "role": 3},
         )
         response = self.client.get(
             reverse("club:club_members", kwargs={"club_id": self.bdf.id})
@@ -55,14 +55,37 @@ class ClubTest(TestCase):
             in str(response.content)
         )
 
+    def test_create_add_multiple_user_to_club_from_root_ok(self):
+        self.client.login(username="root", password="plop")
+        self.client.post(
+            reverse("club:club_members", kwargs={"club_id": self.bdf.id}),
+            {
+                "users": "|%d|%d|" % (self.skia.id, self.rbatsbak.id),
+                "start_date": "12/06/2016",
+                "role": 3,
+            },
+        )
+        response = self.client.get(
+            reverse("club:club_members", kwargs={"club_id": self.bdf.id})
+        )
+        self.assertTrue(response.status_code == 200)
+        content = str(response.content)
+        self.assertTrue(
+            "S' Kia\\n                
Responsable info" in content
+        )
+        self.assertTrue(
+            "Richard Batsbak\\n | Responsable info"
+            in content
+        )
+
     def test_create_add_user_to_club_from_root_fail_not_subscriber(self):
         self.client.login(username="root", password="plop")
         response = self.client.post(
             reverse("club:club_members", kwargs={"club_id": self.bdf.id}),
-            {"user": self.guy.id, "start_date": "12/06/2016", "role": 3},
+            {"users": self.guy.id, "start_date": "12/06/2016", "role": 3},
         )
         self.assertTrue(response.status_code == 200)
-        self.assertTrue(' | - ' in str(response.content))
+        self.assertTrue('- ' in str(response.content))
         response = self.client.get(
             reverse("club:club_members", kwargs={"club_id": self.bdf.id})
         )
@@ -75,7 +98,7 @@ class ClubTest(TestCase):
         self.client.login(username="root", password="plop")
         self.client.post(
             reverse("club:club_members", kwargs={"club_id": self.bdf.id}),
-            {"user": self.skia.id, "start_date": "12/06/2016", "role": 3},
+            {"users": self.skia.id, "start_date": "12/06/2016", "role": 3},
         )
         response = self.client.get(
             reverse("club:club_members", kwargs={"club_id": self.bdf.id})
@@ -86,7 +109,7 @@ class ClubTest(TestCase):
         )
         response = self.client.post(
             reverse("club:club_members", kwargs={"club_id": self.bdf.id}),
-            {"user": self.skia.id, "start_date": "12/06/2016", "role": 4},
+            {"users": self.skia.id, "start_date": "12/06/2016", "role": 4},
         )
         self.assertTrue(response.status_code == 200)
         self.assertFalse(
@@ -94,16 +117,40 @@ class ClubTest(TestCase):
             in str(response.content)
         )
 
+    def test_create_add_user_non_existent_to_club_from_root_fail(self):
+        self.client.login(username="root", password="plop")
+        response = self.client.post(
+            reverse("club:club_members", kwargs={"club_id": self.bdf.id}),
+            {"users": [9999], "start_date": "12/06/2016", "role": 3},
+        )
+        self.assertTrue(response.status_code == 200)
+        content = str(response.content)
+        self.assertTrue('- ' in content)
+        self.assertFalse("| Responsable info" in content)
+        self.client.login(username="root", password="plop")
+        response = self.client.post(
+            reverse("club:club_members", kwargs={"club_id": self.bdf.id}),
+            {
+                "users": "|%d|%d|" % (self.skia.id, 9999),
+                "start_date": "12/06/2016",
+                "role": 3,
+            },
+        )
+        self.assertTrue(response.status_code == 200)
+        content = str(response.content)
+        self.assertTrue(' | - ' in content)
+        self.assertFalse("| Responsable info" in content)
+
     def test_create_add_user_to_club_from_skia_ok(self):
         self.client.login(username="root", password="plop")
         self.client.post(
             reverse("club:club_members", kwargs={"club_id": self.bdf.id}),
-            {"user": self.skia.id, "start_date": "12/06/2016", "role": 10},
+            {"users": self.skia.id, "start_date": "12/06/2016", "role": 10},
         )
         self.client.login(username="skia", password="plop")
         self.client.post(
             reverse("club:club_members", kwargs={"club_id": self.bdf.id}),
-            {"user": self.rbatsbak.id, "start_date": "12/06/2016", "role": 9},
+            {"users": self.rbatsbak.id, "start_date": "12/06/2016", "role": 9},
         )
         response = self.client.get(
             reverse("club:club_members", kwargs={"club_id": self.bdf.id})
@@ -118,12 +165,12 @@ class ClubTest(TestCase):
         self.client.login(username="root", password="plop")
         self.client.post(
             reverse("club:club_members", kwargs={"club_id": self.bdf.id}),
-            {"user": self.rbatsbak.id, "start_date": "12/06/2016", "role": 3},
+            {"users": self.rbatsbak.id, "start_date": "12/06/2016", "role": 3},
         )
         self.client.login(username="rbatsbak", password="plop")
         response = self.client.post(
             reverse("club:club_members", kwargs={"club_id": self.bdf.id}),
-            {"user": self.skia.id, "start_date": "12/06/2016", "role": 10},
+            {"users": self.skia.id, "start_date": "12/06/2016", "role": 10},
         )
         self.assertTrue(response.status_code == 200)
         self.assertTrue(
diff --git a/club/views.py b/club/views.py
index 5b7e1349..64b5e301 100644
--- a/club/views.py
+++ b/club/views.py
@@ -326,8 +326,9 @@ class ClubMemberForm(forms.Form):
         self.request_user = kwargs.pop("request_user")
         super(ClubMemberForm, self).__init__(*args, **kwargs)
 
-        # Using a ModelForm forces a save and we don't want that
+        # Using a ModelForm binds too much the form with the model and we don't want that
         # We want the view to process the model creation since they are multiple users
+        # We also want the form to handle bulk deletion
         self.fields.update(
             forms.fields_for_model(
                 Membership,
@@ -341,6 +342,7 @@ class ClubMemberForm(forms.Form):
     def clean_users(self):
         """
             Check that the user is not trying to add an user already in the club
+            Also check that the user is valid and has a valid subscription
         """
         cleaned_data = super(ClubMemberForm, self).clean()
         users = []
@@ -348,13 +350,17 @@ class ClubMemberForm(forms.Form):
             user = User.objects.filter(id=user_id).first()
             if not user:
                 raise forms.ValidationError(
-                    _("One of the selected users doesn't exist", code="invalid")
+                    _("One of the selected users doesn't exist"), code="invalid"
+                )
+            if not user.is_subscribed:
+                raise forms.ValidationError(
+                    _("User must be subscriber to take part to a club"), code="invalid"
                 )
-            users.append(user)
             if self.club.get_membership_for(user):
                 raise forms.ValidationError(
                     _("You can not add the same user twice"), code="invalid"
                 )
+            users.append(user)
         return users
 
     def clean(self):
@@ -364,7 +370,6 @@ class ClubMemberForm(forms.Form):
         cleaned_data = super(ClubMemberForm, self).clean()
         request_user = self.request_user
         membership = self.club.get_membership_for(request_user)
-        print(request_user.is_root)
         if not (
             cleaned_data["role"] <= SITH_MAXIMUM_FREE_ROLE
             or (membership is not None and membership.role >= cleaned_data["role"]) |