diff --git a/organizations/forms.py b/organizations/forms.py
index 079d77fd8ed4d265955a448e23a3a8739636faa2..522bf16918f1c219f791da95d1046ba285b7b11e 100644
--- a/organizations/forms.py
+++ b/organizations/forms.py
@@ -2,15 +2,18 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
 __license__ = "AGPL v3"
 
 
+import datetime
+
 from django import forms
 
 from django.contrib.auth.models import User
 from django.contrib.auth.password_validation import validate_password
 from django.core.exceptions import ValidationError
 from django.db import transaction
+from django.utils import timezone
 
-from .constants import ROLE_KINDS
-from .models import Contact
+from .constants import ROLE_GENERAL
+from .models import Contact, ContactRole
 
 from scipost.constants import TITLE_CHOICES
 
@@ -21,6 +24,7 @@ class ContactForm(forms.ModelForm):
     """
     class Meta:
         model = Contact
+        fields = ['title', 'key_expires']
 
 
 class NewContactForm(ContactForm):
@@ -66,18 +70,16 @@ class NewContactForm(ContactForm):
         If existing user is found, link it to the Organization.
         """
         if self.existing_user and self.data.get('confirm_use_existing', '') == 'on':
-            # Do not create new Contact
+            # Create new Contact if it doesn't already exist
             try:
                 # Link Contact to new Organization
                 contact = self.existing_user.org_contact
-                contact.organizations.add(self.organization)
             except Contact.DoesNotExist:
                 # Not yet a 'Contact-User'
                 contact = super().save(commit=False)
                 contact.title = self.existing_user.org_contact.title
                 contact.user = self.existing_user
                 contact.save()
-                contact.organizations.add(self.organization)
             return contact
 
         # Create complete new Account (User + Contact)
@@ -95,11 +97,17 @@ class NewContactForm(ContactForm):
         )
         contact.generate_key()
         contact.save()
-        contact.organizations.add(self.organization)
 
-        # TODOdeprecPartners Send email for activation
-        # PartnerUtils.load({'contact': contact})
-        # PartnerUtils.email_contact_new_for_activation(current_user=current_user)
+        # Create the role with to-be-updated info
+        contactrole = ContactRole(
+            contact=contact,
+            organization=self.organization,
+            kind=[ROLE_GENERAL,],
+            date_from=timezone.now(),
+            date_until=timezone.now() + datetime.timedelta(days=3650)
+        )
+        contactrole.save()
+
         return contact
 
 
diff --git a/organizations/templates/organizations/_organization_card.html b/organizations/templates/organizations/_organization_card.html
index 3f7c7df31ef06b35c13b1d2957ea9de63b4a7435..3b33311f2b74b58be48fe07cd66a9dca90dab808 100644
--- a/organizations/templates/organizations/_organization_card.html
+++ b/organizations/templates/organizations/_organization_card.html
@@ -186,9 +186,12 @@ $(document).ready(function($) {
 	</div>
 	{% endif %}
 
+	{% if perms.scipost.can_manage_organizations %}
 	<div class="tab-pane pt-4" id="contacts-{{ org.id }}" role="tabpanel" aria-labelledby="contacts-{{ org.id }}-tab">
-	  {% if perms.scipost.can_manage_organizations %}
 	  <h3>Contacts (with explicit role)</h3>
+	  <ul>
+	    <li><a href="{% url 'organizations:add_contact' organization_id=org.id %}">Add a new Contact</a></li>
+	  </ul>
 	  <table class="table">
 	    <tr>
 	      <th>Name</th>
@@ -220,11 +223,11 @@ $(document).ready(function($) {
 	    </tr>
 	    {% endfor %}
 	  </table>
-	  {% endif %}
 	</div>
+	{% endif %}
 
+	{% if perms.scipost.can_manage_organizations %}
 	<div class="tab-pane pt-4" id="events-{{ org.id }}" role="tabpanel" aria-labelledby="events-{{ org.id }}-tab">
-	  {% if perms.scipost.can_manage_organizations %}
 	  <h3>Events</h3>
 	  <ul>
 	    {% for event in org.organizationevent_set.all %}
@@ -233,19 +236,20 @@ $(document).ready(function($) {
 	    <li>No event found</li>
 	    {% endfor %}
 	  </ul>
-	  {% endif %}
 	</div>
+	{% endif %}
 
+	{% if perms.scipost.can_manage_organizations %}
 	<div class="tab-pane pt-4" id="manage-{{ org.id }}" role="tabpanel" aria-labelledby="manage-{{ org.id }}-tab">
-	  {% if perms.scipost.can_manage_organizations %}
 	  <h3>Manage this organization:</h3>
 	  <ul>
 	    <li><a href="{% url 'organizations:organization_update' pk=org.id %}">Update</a></li>
 	    <li><a href="{% url 'organizations:organization_delete' pk=org.id %}">Delete</a></li>
 	  </ul>
 	  <hr/>
-	  {% endif %}
 	</div>
+	{% endif %}
+
       </div>
     </div>
   </div>
diff --git a/organizations/templates/organizations/organization_add_contact.html b/organizations/templates/organizations/organization_add_contact.html
new file mode 100644
index 0000000000000000000000000000000000000000..061b24c322ff8f7a29549585d3b227c0dd0ea22b
--- /dev/null
+++ b/organizations/templates/organizations/organization_add_contact.html
@@ -0,0 +1,33 @@
+{% extends 'scipost/base.html' %}
+
+{% block breadcrumb_items %}
+    {{block.super}}
+    <span class="breadcrumb-item">Add Contact</span>
+{% endblock %}
+
+{% block pagetitle %}{{block.super}} Add Contact{% endblock pagetitle %}
+
+{% load bootstrap %}
+
+{% block content %}
+
+<div class="row">
+    <div class="col-12">
+        <h1 class="highlight">Add Contact for Organization {{ organization }}</h1>
+    </div>
+</div>
+
+<div class="row">
+    <div class="col-12">
+      <form method="post">
+        {% csrf_token %}
+        <div class="mb-5">
+            {{ form|bootstrap }}
+        </div>
+
+        <input class="btn btn-primary" type="submit" value="Submit"/>
+      </form>
+    </div>
+</div>
+
+{% endblock content %}
diff --git a/organizations/urls.py b/organizations/urls.py
index 158caa757f935291c05743cc04539092bdb162e7..ea491532d1584d7d1db8323393669bcca2d7530d 100644
--- a/organizations/urls.py
+++ b/organizations/urls.py
@@ -32,6 +32,11 @@ urlpatterns = [
         views.OrganizationDetailView.as_view(),
         name='organization_details'
     ),
+    url(
+        r'^add_contact/(?P<organization_id>[0-9]+)/$',
+        views.organization_add_contact,
+        name='add_contact'
+    ),
     url(
         r'^activate/(?P<activation_key>.+)$',
         views.activate_account,
diff --git a/organizations/views.py b/organizations/views.py
index 4fdb9c6c7cc7c101be668dde39b8cf9994e36dc7..fd59d8c11b6c94de2b4052818015d69db3dfe827 100644
--- a/organizations/views.py
+++ b/organizations/views.py
@@ -15,10 +15,11 @@ from django.views.generic.list import ListView
 from guardian.decorators import permission_required
 
 from .constants import ORGTYPE_PRIVATE_BENEFACTOR
-from .forms import ContactActivationForm
+from .forms import NewContactForm, ContactActivationForm
 from .models import Organization, Contact
 
 from funders.models import Funder
+from mails.views import MailEditingSubView
 from organizations.decorators import has_contact
 from partners.models import ProspectivePartner, Partner
 
@@ -108,9 +109,18 @@ def organization_add_contact(request, organization_id):
     form = NewContactForm(request.POST or None, organization=organization)
     if form.is_valid():
         contact = form.save(current_user=request.user)
-        messages.success(request, '<h3>Created contact: %s</h3>Email has been sent.'
-                                  % str(contact))
-        return redirect(reverse('organizations:dashboard'))
+        mail_request = MailEditingSubView(
+            request,
+            mail_code='org_contacts/email_contact_for_activation',
+            contact=contact)
+        if mail_request.is_valid():
+            mail_request.send()
+            messages.success(request, '<h3>Created contact: %s</h3>Email has been sent.'
+                             % str(contact))
+        else:
+            messages.warning(request, 'The mail request was not valid.')
+        return redirect(reverse('organizations:organization_details',
+                                kwargs={'pk': organization.id}))
     context = {
         'organization': organization,
         'form': form
diff --git a/templates/email/org_contacts/email_contact_for_activation.html b/templates/email/org_contacts/email_contact_for_activation.html
new file mode 100644
index 0000000000000000000000000000000000000000..2419eb7796a0377980731a164e0e3579fae09feb
--- /dev/null
+++ b/templates/email/org_contacts/email_contact_for_activation.html
@@ -0,0 +1,20 @@
+<p>Dear {{contact.get_title_display}} {{contact.user.first_name}} {{contact.user.last_name}},</p>
+
+<p>
+    Many thanks for sponsoring SciPost. We have now created a personal account for you on scipost.org, which will allow you to access all relevant information and functionalities related to sponsoring.
+</p>
+<p>
+    In order to activate your account, please navigate to <a href="https://scipost.org{% url 'organizations:activate_account' contact.activation_key %}?email={{contact.user.email}}">this link</a>. You will be asked to choose a password, after which you will be able to login.
+</p>
+<p>
+    After logging in, you will find a “Org dashboard” link in the top menu, which will take you to your info page.
+</p>
+<p>
+    We are very pleased to welcome you to SciPost, and will be happy to answer any questions you might have.
+</p>
+<p>
+    Sincerely,<br><br>
+    SciPost and its Sponsors Board
+</p>
+
+{% include 'email/_footer.html' %}
diff --git a/templates/email/org_contacts/email_contact_for_activation.json b/templates/email/org_contacts/email_contact_for_activation.json
new file mode 100644
index 0000000000000000000000000000000000000000..93aaedd2bd6b1f37ade694374b5643406860ba30
--- /dev/null
+++ b/templates/email/org_contacts/email_contact_for_activation.json
@@ -0,0 +1,8 @@
+{
+    "subject": "SciPost: account activation",
+    "to_address": "user.email",
+    "bcc_to": "sponsors@scipost.org",
+    "from_address_name": "SciPost Sponsors Admin",
+    "from_address": "sponsors@scipost.org",
+    "context_object": "contact"
+}