diff --git a/ippisite/ippidb/forms.py b/ippisite/ippidb/forms.py
index 77fb57d72d2f6ebde6b05459ca6e8485320d8870..6463079857073b64c28a551fbb2f528cdb1d90ac 100644
--- a/ippisite/ippidb/forms.py
+++ b/ippisite/ippidb/forms.py
@@ -291,7 +291,7 @@ class ComplexCompositionForm(forms.Form):
     )
 
     def __init__(self, protein_ids=None, has_bound=False, has_partner=False, nb_copy_bound=None, nb_per_pocket=None,
-                 nb_copy_partner=None, *args, **kwargs):
+                 nb_copy_partner=None, nb_copies_in_complex=None, *args, **kwargs):
         super(ComplexCompositionForm, self).__init__(*args, **kwargs)
         if protein_ids is not None:
             self.fields['protein'].queryset = Protein.objects.filter(pk__in=protein_ids)
@@ -315,11 +315,14 @@ class ComplexCompositionForm(forms.Form):
         if len(nb_copy) == 1:
             self.fields['ppc_copy_nb'].initial = next(iter(nb_copy))
 
-        nb_per_pocket = set(nb_per_pocket)
         self.fields['ppp_copy_nb_per_p'].widget.attrs['datalist'] = nb_per_pocket
         if len(nb_per_pocket) == 1:
             self.fields['ppp_copy_nb_per_p'].initial = next(iter(nb_per_pocket))
 
+        self.fields['cc_nb'].widget.attrs['datalist'] = nb_copies_in_complex
+        if len(nb_copies_in_complex) == 1:
+            self.fields['cc_nb'].initial = next(iter(nb_copies_in_complex))
+
         self.fields['complex_type'].widget.choices = choices
 
     def full_clean(self):
@@ -347,13 +350,14 @@ class ComplexCompositionBaseFormSet(forms.BaseFormSet):
             self._non_form_errors.append(_("You need at least one bound and one partner"))
 
     def __init__(self, has_bound=False, has_partner=False, form_kwargs=None, nb_copy_bound=None, nb_per_pocket=None,
-                 nb_copy_partner=None, *args, **kwargs):
+                 nb_copy_partner=None, nb_copies_in_complex=None, *args, **kwargs):
         form_kwargs = form_kwargs or {}
         form_kwargs["has_bound"] = has_bound
         form_kwargs["has_partner"] = has_partner
         form_kwargs["nb_copy_bound"] = nb_copy_bound
         form_kwargs["nb_copy_partner"] = nb_copy_partner
         form_kwargs["nb_per_pocket"] = nb_per_pocket
+        form_kwargs["nb_copies_in_complex"] = nb_copies_in_complex
         self.has_partner = has_partner
         self.has_bound = has_bound
         super().__init__(form_kwargs=form_kwargs, *args, **kwargs)
@@ -369,7 +373,10 @@ ComplexCompositionFormSet = formset_factory(
 
 
 class PpiModelForm(ModelForm):
-
+    pockets_nb = IntegerFieldDataList(
+        label=_('Total number of pockets in the complex'),
+        required=True,
+    )
     family_name = CharFieldDataList(
         label = _("PPI Familly"),
         data_class = PpiFamily,
@@ -404,11 +411,15 @@ class PpiModelForm(ModelForm):
             ),
         }
 
-    def __init__(self, symmetry=None,*args, **kwargs):
+    def __init__(self, symmetry=None, nb_pockets=None, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.fields["diseases"].queryset=self.fields["diseases"].queryset.order_by(Upper("name"))
         self.fields["pdb_id"].widget.attrs["readonly"] = True
         self.fields["symmetry"].empty_choice = None
+        if nb_pockets is not None:
+            self.fields['pockets_nb'].widget.attrs['datalist'] = nb_pockets
+            if len(nb_pockets) == 1:
+                self.fields['pockets_nb'].initial = next(iter(nb_pockets))
         if symmetry is not None:
             self.fields["symmetry"].queryset = symmetry
             if symmetry.count() == 1:
diff --git a/ippisite/ippidb/views/contribute.py b/ippisite/ippidb/views/contribute.py
index 9447c10aa48f9c9eb56a9060b84f04eb671f775c..70e5b9de1f3882b0cb2807648417fc6b2455b9f9 100644
--- a/ippisite/ippidb/views/contribute.py
+++ b/ippisite/ippidb/views/contribute.py
@@ -87,6 +87,8 @@ ARCHITECTURE = {
         nb_per_pocket=[1],
         has_partner=True,
         nb_copy_partner=[1],
+        nb_pockets=[1],
+        nb_copies_in_complex=[1],
         symmetry=['AS']
     ),
     'Inhib_Homo2merA2': dict(
@@ -94,13 +96,17 @@ ARCHITECTURE = {
         nb_copy_bound=[1],
         nb_per_pocket=[1],
         has_partner=False,
-        symmetry=['C2','D2']
+        nb_pockets=[1],
+        nb_copies_in_complex=[2],
+        symmetry=['C2', 'D2']
     ),
     'Inhib_Custom': dict(
         has_bound=True,
         nb_copy_bound=[],
         nb_per_pocket=[],
         has_partner=False,
+        nb_pockets=[],
+        nb_copies_in_complex=[],
         symmetry=[]
     ),
     'Stab_Hetero2merAB': dict(
@@ -108,6 +114,8 @@ ARCHITECTURE = {
         nb_copy_bound=[1],
         nb_per_pocket=[1],
         has_partner=False,
+        nb_pockets=[1],
+        nb_copies_in_complex=[1],
         symmetry=['AS']
     ),
     'Stab_Homo2merA2': dict(
@@ -115,21 +123,27 @@ ARCHITECTURE = {
         nb_copy_bound=[2],
         nb_per_pocket=[2],
         has_partner=False,
-        symmetry=['C2','D2']
+        nb_pockets=[1, 2],
+        nb_copies_in_complex=[1],
+        symmetry=['C2', 'D2']
     ),
     'Stab_HomoLike2mer': dict(
         has_bound=True,
-        nb_copy_bound=[1,2],
+        nb_copy_bound=[1, 2],
         nb_per_pocket=[1],
         has_partner=False,
-        symmetry=['C2','D2']
+        nb_pockets=[2],
+        nb_copies_in_complex=[1],
+        symmetry=['C2', 'D2']
     ),
     'Stab_Homo3merA3': dict(
         has_bound=True,
         nb_copy_bound=[3],
         nb_per_pocket=[3],
         has_partner=False,
-        symmetry=['C3','D3']
+        nb_pockets=[1],
+        nb_copies_in_complex=[1],
+        symmetry=['C3', 'D3']
     ),
     'Stab_Homo3merA2': dict(
         has_bound=True,
@@ -137,34 +151,44 @@ ARCHITECTURE = {
         nb_per_pocket=[2],
         has_partner=True,
         nb_copy_partner=[1],
-        symmetry=['C3','D3']
+        nb_pockets=[1],
+        nb_copies_in_complex=[1],
+        symmetry=['C3', 'D3']
     ),
     'Stab_Homo4merA4': dict(
         has_bound=True,
         nb_copy_bound=[4],
         nb_per_pocket=[2],
         has_partner=False,
-        symmetry=['C2','D2','C4','D4']
+        nb_pockets=[1],
+        nb_copies_in_complex=[1],
+        symmetry=['C2', 'D2', 'C4', 'D4']
     ),
     'Stab_RingHomo3mer': dict(
         has_bound=True,
         nb_copy_bound=[3],
         nb_per_pocket=[2],
         has_partner=False,
-        symmetry=['C3','D3']
+        nb_pockets=[3, 6],
+        nb_copies_in_complex=[1],
+        symmetry=['C3', 'D3']
     ),
     'Stab_RingHomo5mer': dict(
         has_bound=True,
         nb_copy_bound=[5],
         nb_per_pocket=[2],
         has_partner=False,
-        symmetry=['C5','D5']
+        nb_pockets=[5, 10],
+        nb_copies_in_complex=[1],
+        symmetry=['C5', 'D5']
     ),
     'Stab_Custom': dict(
         has_bound=True,
         nb_copy_bound=[],
         nb_per_pocket=[],
         has_partner=False,
+        nb_pockets=[],
+        nb_copies_in_complex=[],
         symmetry=[]
     ),
 }
@@ -251,6 +275,7 @@ class IppiWizard(LoginRequiredMixin, NamedUrlSessionWizardView):
                 'nb_copy_bound',
                 'nb_per_pocket',
                 'nb_copy_partner',
+                'nb_copies_in_complex',
             ]:
                 try:
                     kwargs[k] = arch[k]
@@ -261,6 +286,7 @@ class IppiWizard(LoginRequiredMixin, NamedUrlSessionWizardView):
                 self.storage.get_step_data('ProteinDomainComplexTypeForm')
                     .get('ProteinDomainComplexTypeForm-complexType', "")
             ]
+            kwargs['nb_pockets']=arch['nb_pockets']
             if len(arch["symmetry"]) != 0:
                 kwargs["symmetry"] = models.Symmetry.objects.filter(code__in=arch["symmetry"])
         elif step == 'ActivityDescriptionFormSet':