diff --git a/src/viralhostrange/locale/en/LC_MESSAGES/django.po b/src/viralhostrange/locale/en/LC_MESSAGES/django.po
index ee24e42bc4c606fe42b2abf78d5a225b36024bf9..ce54fd7dcb8d851575179039cfce8ae1ecab63b9 100644
--- a/src/viralhostrange/locale/en/LC_MESSAGES/django.po
+++ b/src/viralhostrange/locale/en/LC_MESSAGES/django.po
@@ -1430,6 +1430,10 @@ msgstr ""
 msgid "Update the data source"
 msgstr ""
 
+#, python-format
+msgid "Data source \"%s\" went private, you can not longer access to it."
+msgstr ""
+
 msgid "History of a data source"
 msgstr ""
 
diff --git a/src/viralhostrange/viralhostrangedb/tests/test_views_data_source.py b/src/viralhostrange/viralhostrangedb/tests/test_views_data_source.py
index 5814f15e25697be9cae5fdab0c1fd94a05bf0db1..66940cb2b66a5b08a7a479d2a0a55ed54161f0fd 100644
--- a/src/viralhostrange/viralhostrangedb/tests/test_views_data_source.py
+++ b/src/viralhostrange/viralhostrangedb/tests/test_views_data_source.py
@@ -181,15 +181,35 @@ class DataSourceUpdateViewTestCase(ViewTestCase):
             set([(gu.user.pk, gu.can_write) for gu in granted_users]),
             set([(gu.user.pk, gu.can_write) for gu in self.public_data_source_of_user.granteduser_set.all()]))
 
-        is_curator = business_process.is_curator(self.user)
+    def test_back_to_private_by_curator(self):
+        url = reverse('viralhostrangedb:data-source-update', args=[self.public_data_source_of_user.pk])
+        granted_users = set(self.public_data_source_of_user.granteduser_set.all())
+
+        self.client.force_login(self.toto)
+        business_process.set_curator(self.toto, True)
+        form_data = dict(
+            name=self.public_data_source_of_user.name,
+            life_domain="bacteria",
+            description="a "*20,
+            public=True,
+            allowed_users_editor=
+            "\n".join(["%s %s;%i;%s" % (gu.user.last_name, gu.user.first_name, gu.user.pk, gu.can_write)
+                       for gu in granted_users]),
+        )
 
-        self.assertEqual(form_data["provider_first_name"] if is_curator else None,
-                         self.public_data_source_of_user.provider_first_name)
-        self.assertEqual(form_data["provider_last_name"] if is_curator else None,
-                         self.public_data_source_of_user.provider_last_name)
+        response = self.client.post(url, form_data)
+        self.write_in_tmp_file(response)
+        self.assertRedirects(
+            response,
+            expected_url=reverse('viralhostrangedb:data-source-detail', args=[self.public_data_source_of_user.pk])
+        )
+        form_data['public'] = False
 
-    def test_update_work_for_curator(self):
-        self.test_update_work()
+        response = self.client.post(url, form_data)
+        self.assertRedirects(
+            response,
+            expected_url=reverse('viralhostrangedb:data-source-list')
+        )
 
     def test_new_user_granted_by_email(self):
         url = reverse('viralhostrangedb:data-source-update', args=[self.public_data_source_of_user.pk])
diff --git a/src/viralhostrange/viralhostrangedb/views.py b/src/viralhostrange/viralhostrangedb/views.py
index 29dcc24aa3991df9c01e14c29aed0e0e19af6461..be3f1e5ccfb68cca65fe59b44141395c81623a89 100644
--- a/src/viralhostrange/viralhostrangedb/views.py
+++ b/src/viralhostrange/viralhostrangedb/views.py
@@ -46,6 +46,7 @@ from viralhostrangedb import forms, business_process, views_api
 from viralhostrangedb import mixins
 from viralhostrangedb import models
 from viralhostrangedb.business_process import MessageImportationObserver
+from viralhostrangedb.templatetags.viralhostrange_tags import can_see
 from viralhostrangedb.utils import order_queryset_specifically
 
 logger = logging.getLogger(__name__)
@@ -372,6 +373,11 @@ class DataSourceUpdateView(mixins.OnlyEditorOrCuratorOrOwnedMixin, UpdateView):
     form_class = forms.DataSourceUserCreateOrUpdateForm
     template_name = 'basetheme_bootstrap/small_form_host.html'
 
+    def get_success_url(self):
+        if can_see(self.request.user, self.object):
+            return super().get_success_url()
+        return reverse('viralhostrangedb:data-source-list')
+
     def get_context_data(self, *, object_list=None, **kwargs):
         context = super().get_context_data(object_list=object_list, **kwargs)
         context["page_title"] = _("Editing a data source")
@@ -396,6 +402,12 @@ class DataSourceUpdateView(mixins.OnlyEditorOrCuratorOrOwnedMixin, UpdateView):
             change_fields=changed_data,
             altered_data=business_process.DataSourceAlteredData.INNER_INFORMATION,
         )
+        if 'public' in changed_data and not self.object.public and not can_see(self.request.user, self.object):
+            messages.add_message(
+                request=self.request,
+                level=messages.SUCCESS,
+                message=ugettext('Data source "%s" went private, you can not longer access to it.') % self.object.name,
+            )
         return r