diff --git a/ippisite/ippidb/models.py b/ippisite/ippidb/models.py
index 468126a7c69814f769f1400912262061912edc64..5e6c91c5e71d513961da83b18f78ee223aa4cd92 100644
--- a/ippisite/ippidb/models.py
+++ b/ippisite/ippidb/models.py
@@ -8,11 +8,13 @@ import operator
 import re
 
 from django.conf import settings
+from django.contrib.auth import get_user_model
 from django.core.exceptions import ValidationError
 from django.db import models, transaction
 from django.db.models import FloatField, IntegerField, BooleanField
 from django.db.models import Max, Count, F, Q, Case, When
 from django.db.models.functions import Cast
+from django.urls import reverse
 from django.utils.translation import ugettext_lazy as _
 
 from .utils import FingerPrinter, smi2inchi, smi2inchikey
@@ -1246,3 +1248,25 @@ class DrugbankCompoundTanimoto(models.Model):
     drugbank_compound = models.ForeignKey(DrugBankCompound, models.CASCADE)
     tanimoto = models.DecimalField(
         'Tanimoto value', max_digits=5, decimal_places=4)
+
+
+class Contribution(models.Model):
+    contributor = models.ForeignKey(
+        to=get_user_model(),
+        on_delete=models.PROTECT,
+    )
+    ppi = models.ForeignKey(
+        to=Ppi,
+        on_delete=models.SET_NULL,
+        null=True,
+    )
+    bibliography = models.ForeignKey(
+        to=Bibliography,
+        on_delete=models.SET_NULL,
+        null=True,
+    )
+    created_at = models.DateTimeField(auto_now_add=True)
+    updated_at = models.DateTimeField(auto_now=True)
+
+    def get_absolute_url(self):
+        return reverse('contribution-detail', kwargs={'contribution_pk': self.pk})
diff --git a/ippisite/ippidb/templates/contribute-view.html b/ippisite/ippidb/templates/contribute-detail.html
similarity index 72%
rename from ippisite/ippidb/templates/contribute-view.html
rename to ippisite/ippidb/templates/contribute-detail.html
index 2d074ca1d2d0ed62e73949d05420f4cfd870e363..663a1c92602683e5e0bd689fb4d42588419589ce 100644
--- a/ippisite/ippidb/templates/contribute-view.html
+++ b/ippisite/ippidb/templates/contribute-detail.html
@@ -18,9 +18,22 @@
         <div id="main">
             <div id="content" class="main-content">
                 <div class="section row">
-                    {% include "ippidb/bibliography_card.html" with object=bibliography css_class="col-xs-12 col-md-6"%}
-                    {% include "ippidb/ppi_card.html" with object=ppi css_class="col-xs-12 col-md-6" %}
-                    <div class="col-12">
+                    {%if contribution %}
+                    <div class="col-xs-12 col-md-4 col-lg-2 mb-4">
+                        <div class="card">
+                            <div class="card-body">
+                                Contribution of <b>{{contribution.contributor.username}}</b> on {{contribution.created_at}}
+                                {% if contribution.updated_at == contribution.created_at %}
+                                <br/>
+                                Last updated on {{contribution.updated_at}}
+                                {% endif %}
+                            </div>
+                        </div>
+                    </div>
+                    {%endif %}
+                    {% include "ippidb/bibliography_card.html" with object=bibliography css_class="col-xs-12 col-md-8 col-lg-4 mb-4"%}
+                    {% include "ippidb/ppi_card.html" with object=ppi css_class="col-xs-12 col-lg-6 mb-4" %}
+                    <div class="col-12 mb-4">
                         <div class="card">
                             <h5 class="card-header">{{complexes|verbose_name}}</h5>
                             <div class="card-body">
@@ -30,7 +43,7 @@
                             </div>
                         </div>
                     </div>
-                    <div class="col-12">
+                    <div class="col-12 mb-4">
                         <div class="card">
                             <h5 class="card-header">Tests</h5>
                             <div class="card-body">
@@ -46,7 +59,7 @@
                             </div>
                         </div>
                     </div>
-                    <div class="col-12">
+                    <div class="col-12 mb-4">
                         <div class="card">
                             <h5 class="card-header">{{refcompoundbiblio|verbose_name}}</h5>
                             <div class="card-body">
diff --git a/ippisite/ippidb/urls.py b/ippisite/ippidb/urls.py
index 72880c1e0e1d681e9dfd35e19f8c5deca3336eab..765d98b8a396d7aebfdddf3c11d42a34fc0ed989 100644
--- a/ippisite/ippidb/urls.py
+++ b/ippisite/ippidb/urls.py
@@ -3,9 +3,9 @@ iPPI-DB URLs routing module
 """
 
 from django.conf.urls import include, url
-from . import views
-from ippidb.forms import *
+
 from ippidb.views import IppiWizard, FORMS
+from . import views
 
 ippidb_wizard = IppiWizard.as_view(FORMS,
                                    url_name='ippidb_step')
@@ -25,6 +25,11 @@ urlpatterns = [
     url(r'^contribute/view/(?P<bibli_pk>\d+)-(?P<ppi_pk>\d+)/$', views.admin_session_view, name='admin-session-view'),
     url(r'^contribute/view/(?P<bibli_pk>\d+)-/$', views.admin_session_view, {'ppi_pk': None}),
     url(r'^contribute/view/-(?P<ppi_pk>\d+)/$', views.admin_session_view, {'bibli_pk': None}),
+    url(r'^contribute/view/(?P<contribution_pk>\d+)/$',
+        views.admin_session_view,
+        {'ppi_pk': None, 'bibli_pk': None},
+        name='contribution-detail',
+        ),
     url(r'^contribute/update/$', views.update, name='admin-session-update'),
     url(r'^utils/mol2smi$', views.convert_mol2smi, name='mol2smi'),
     url(r'^utils/smi2mol$', views.convert_smi2mol, name='smi2mol'),
diff --git a/ippisite/ippidb/views/contribute.py b/ippisite/ippidb/views/contribute.py
index 2639b9d7de3c5d636fd99697c85321f50bc11760..1c9411591cde9e3c97a3dc99c9ec3575111feb03 100644
--- a/ippisite/ippidb/views/contribute.py
+++ b/ippisite/ippidb/views/contribute.py
@@ -309,14 +309,34 @@ class IppiWizard(LoginRequiredMixin, NamedUrlSessionWizardView):
 
             # re-save the ppi to update its name
             ppi.save()
-            super().done(form_list=form_list, **kwargs)
-        return admin_session_view(self.request, bibliography.pk, ppi.pk)
 
+            # get/build the contribution object
+            contribution, created = models.Contribution.objects.get_or_create(
+                contributor=self.request.user,
+                ppi=ppi,
+                bibliography=bibliography,
+            )
+            if not created:
+                # update its date of modification
+                contribution.save()
+            # super().done(form_list=form_list, **kwargs)
+        return admin_session_view(self.request, bibli_pk=None, ppi_pk=None, contribution_pk=contribution.pk)
 
-def admin_session_view(request, bibli_pk, ppi_pk):
+
+def admin_session_view(request, bibli_pk, ppi_pk, contribution_pk=None):
     context = {}
+    if contribution_pk:
+        contribution = get_object_or_404(models.Contribution, pk=contribution_pk)
+        bibliography = contribution.bibliography
+        ppi = contribution.ppi
+        context["contribution"] = contribution
+    else:
+        bibliography = None
+        ppi = None
+
     if bibli_pk:
         bibliography = get_object_or_404(models.Bibliography, pk=bibli_pk)
+    if bibliography:
         context["bibliography"] = bibliography
         context["testactivitydescription"] = bibliography.testactivitydescription_set.all()
         context["testcytotoxdescription"] = bibliography.testcytotoxdescription_set.all()
@@ -325,7 +345,8 @@ def admin_session_view(request, bibli_pk, ppi_pk):
 
     if ppi_pk:
         ppi = get_object_or_404(models.Ppi, pk=ppi_pk)
+    if ppi:
         context["ppi"] = ppi
         context["complexes"] = ppi.ppicomplex_set.all()
 
-    return render(request, 'contribute-view.html', context=context)
+    return render(request, 'contribute-detail.html', context=context)