diff --git a/finances/templates/finances/_subsidy_card.html b/finances/templates/finances/_subsidy_card.html
index d3e0a2291bcd5d50dfe2f7a3086c737b5f55869c..21b131fbcf2842fff593aff21bbf1acfdf09b32f 100644
--- a/finances/templates/finances/_subsidy_card.html
+++ b/finances/templates/finances/_subsidy_card.html
@@ -16,7 +16,7 @@
 
       <table class="table">
 	<tr>
-	  <td>From:</td><td><a href="{{ subsidy.organization.get_absolute_url }}">{{ subsidy.organization }}</a></td>
+	  <td>From:</td><td>{% if subsidy.organization.details_publicly_viewable or perms.scipost.can_manage_organizations %}<a href="{{ subsidy.organization.get_absolute_url }}">{{ subsidy.organization }}</a>{% else %}{{ subsidy.organization }}{% endif %}</td>
 	</tr>
 	<tr>
 	  <td>Type:</td><td>{{ subsidy.get_subsidy_type_display }}</td>
diff --git a/organizations/models.py b/organizations/models.py
index f47a81b1210f0a44306228ae95a01b089c9928f4..291f8203e494316af8e9f1f2846ca652eb2d33e4 100644
--- a/organizations/models.py
+++ b/organizations/models.py
@@ -12,7 +12,8 @@ from django.urls import reverse
 
 from django_countries.fields import CountryField
 
-from .constants import ORGANIZATION_TYPES, ORGANIZATION_STATUSES, ORGSTATUS_ACTIVE
+from .constants import ORGANIZATION_TYPES, ORGTYPE_PRIVATE_BENEFACTOR,\
+    ORGANIZATION_STATUSES, ORGSTATUS_ACTIVE
 from .managers import OrganizationQuerySet
 
 from scipost.models import Contributor
@@ -90,6 +91,10 @@ class Organization(models.Model):
     def get_absolute_url(self):
         return reverse('organizations:organization_details', kwargs = {'pk': self.id})
 
+    @property
+    def details_publicly_viewable(self):
+        return self.orgtype != ORGTYPE_PRIVATE_BENEFACTOR
+
     def get_publications(self):
         org_and_children_ids = [k['id'] for k in list(self.children.all().values('id'))]
         org_and_children_ids += [self.id]
diff --git a/organizations/views.py b/organizations/views.py
index d145686b9e83589de12b55f335da75614f61d89d..30dfbff9c0da0a16686f571080a7e2599de326d2 100644
--- a/organizations/views.py
+++ b/organizations/views.py
@@ -81,3 +81,12 @@ class OrganizationDetailView(DetailView):
         context = super().get_context_data(*args, **kwargs)
         context['pubyears'] = range(int(timezone.now().strftime('%Y')), 2015, -1)
         return context
+
+    def get_queryset(self):
+        """
+        Restrict view to permitted people if Organization details not publicly viewable.
+        """
+        queryset = super().get_queryset()
+        if not self.request.user.has_perm('scipost.can_manage_organizations'):
+            queryset = queryset.exclude(orgtype=ORGTYPE_PRIVATE_BENEFACTOR)
+        return queryset