diff --git a/portal/listeners.py b/portal/listeners.py
index 2e691f293d5407549e9ea3bfdc404e664981c44c..9ae6d7b6dd4b64f9935dd01d1680599dab916af9 100644
--- a/portal/listeners.py
+++ b/portal/listeners.py
@@ -3,10 +3,12 @@ from django.db.models.signals import post_save, post_delete
 from django.contrib.auth.signals import user_logged_in
 from django.dispatch import receiver
 from django_auth_ldap.backend import LDAPBackend, populate_user
+from django.db import transaction
 
 from .models import Profile, Lab
 
 @receiver(user_logged_in)
+@transaction.atomic
 def user_login(sender, user, **kwargs):
     """ User logged in (any method)
         Update user association with IRIC labs. External lab associations are to be managed manually.
@@ -25,12 +27,10 @@ def user_login(sender, user, **kwargs):
 
     if hasattr(user, 'ldapuser') or azuread_groups:
         user.profile.labs.remove(*Lab.objects.filter(ldap__startswith='iric-'))
-
         if hasattr(user, 'ldapuser'):
             user.profile.labs.add(*Lab.objects.filter(ldap__in=user.ldap_user.group_names))
         elif azuread_groups:
             user.profile.labs.add(*Lab.objects.filter(ldap__in=azuread_groups))
-
     user.profile.save()