diff --git a/apps/member/forms.py b/apps/member/forms.py
index ab24ded62c2d72d6b30379089f74229dd33c6ca3..3e9765761ec279f92a467654a46077bf68a03d0d 100644
--- a/apps/member/forms.py
+++ b/apps/member/forms.py
@@ -47,6 +47,12 @@ class ProfileForm(forms.ModelForm):
 
     last_report = forms.DateTimeField(required=False, disabled=True, label=_("Last report date"))
 
+    VSS_charter_read = forms.BooleanField(
+        required=True,
+        label=_("Anti-VSS charter read and approved"),
+        help_text=_("Tick after having read and accepted the anti-VSS charter <a href=https://perso.crans.org/club-bde/Charte-anti-VSS.pdf target=_blank> available in pdf</a>")
+    )
+
     def clean_promotion(self):
         promotion = self.cleaned_data["promotion"]
         if promotion > timezone.now().year:
diff --git a/apps/member/migrations/0011_profile_vss_charter_read.py b/apps/member/migrations/0011_profile_vss_charter_read.py
new file mode 100644
index 0000000000000000000000000000000000000000..502cc6e074695e77eac84c9e3c9810207ec0d0b7
--- /dev/null
+++ b/apps/member/migrations/0011_profile_vss_charter_read.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.2.28 on 2023-08-31 09:50
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('member', '0010_new_default_year'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='profile',
+            name='VSS_charter_read',
+            field=models.BooleanField(default=False, verbose_name='VSS charter read'),
+        ),
+    ]
diff --git a/apps/member/models.py b/apps/member/models.py
index 3706e47f7e366e71bbda7d091d4b06e1a44744f6..5e0da5bce7aec1fd8fa0b5476cd30498ab8dd1b2 100644
--- a/apps/member/models.py
+++ b/apps/member/models.py
@@ -134,6 +134,11 @@ class Profile(models.Model):
         default=False,
     )
 
+    VSS_charter_read = models.BooleanField(
+        verbose_name=_("VSS charter read"),
+        default=False
+    )
+
     @property
     def ens_year(self):
         """
diff --git a/apps/member/tests/test_memberships.py b/apps/member/tests/test_memberships.py
index b26475514f1438e344d14662bedb6d5b911419c7..de9f3d3d6db25f675c1d6f26c0752ae9c580a0f5 100644
--- a/apps/member/tests/test_memberships.py
+++ b/apps/member/tests/test_memberships.py
@@ -335,6 +335,7 @@ class TestMemberships(TestCase):
             ml_sports_registration=True,
             ml_art_registration=True,
             report_frequency=7,
+            VSS_charter_read=True
         ))
         self.assertRedirects(response, self.user.profile.get_absolute_url(), 302, 200)
         self.assertTrue(User.objects.filter(username="toto changed").exists())
diff --git a/apps/registration/forms.py b/apps/registration/forms.py
index 6761da437e9bad66b32e0742ac67fe526537f5a4..ef5867a3ec2c41cdeb6787c611a8800b9f2de65a 100644
--- a/apps/registration/forms.py
+++ b/apps/registration/forms.py
@@ -22,6 +22,7 @@ class SignUpForm(UserCreationForm):
         self.fields['last_name'].required = True
         self.fields['email'].required = True
         self.fields['email'].help_text = _("This address must be valid.")
+#        self.fields['VSS_charter_read'].required = True
 
         # Give some example
         self.fields['first_name'].widget.attrs.update({"placeholder": "Sacha"})
diff --git a/apps/registration/tests/test_registration.py b/apps/registration/tests/test_registration.py
index 0b28efcb5dcfc0f3167c1dbecac4382dcd728342..69ab52d570e6ce12bd6e506f0f9a90bc4da96d7f 100644
--- a/apps/registration/tests/test_registration.py
+++ b/apps/registration/tests/test_registration.py
@@ -48,6 +48,7 @@ class TestSignup(TestCase):
             ml_events_registration="en",
             ml_sport_registration=True,
             ml_art_registration=True,
+            VSS_charter_read=True
         ))
         self.assertRedirects(response, reverse("registration:email_validation_sent"), 302, 200)
         self.assertTrue(User.objects.filter(username="toto").exists())
@@ -105,6 +106,7 @@ class TestSignup(TestCase):
             ml_events_registration="en",
             ml_sport_registration=True,
             ml_art_registration=True,
+            VSS_charter_read=True
         ))
         self.assertTrue(response.status_code, 200)
 
@@ -124,6 +126,7 @@ class TestSignup(TestCase):
             ml_events_registration="en",
             ml_sport_registration=True,
             ml_art_registration=True,
+            VSS_charter_read=True
         ))
         self.assertTrue(response.status_code, 200)
 
@@ -143,6 +146,27 @@ class TestSignup(TestCase):
             ml_events_registration="en",
             ml_sport_registration=True,
             ml_art_registration=True,
+            VSS_charter_read=True
+        ))
+        self.assertTrue(response.status_code, 200)
+
+        # The VSS charter is not read
+        response = self.client.post(reverse("registration:signup"), dict(
+            first_name="Toto",
+            last_name="TOTO",
+            username="Ihaveanotherusername",
+            email="othertoto@example.com",
+            password1="toto1234",
+            password2="toto1234",
+            phone_number="+33123456789",
+            department="EXT",
+            promotion=Club.objects.get(name="BDE").membership_start.year,
+            address="Earth",
+            paid=False,
+            ml_events_registration="en",
+            ml_sport_registration=True,
+            ml_art_registration=True,
+            VSS_charter_read=False
         ))
         self.assertTrue(response.status_code, 200)