diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java
index a9eebe460474560b07b08bf8aa7eef72b60f5250..3303cbfa642f7111cb864e4b36f00b17cc07002c 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java
@@ -51,14 +51,15 @@ public class OidcUserServiceImpl implements OidcUserService {
                 .existsBySamlToken(oidcUserSub);
         boolean existUserByUsernameAsSamlToken = userService
                 .existsBySamlToken(oidcUserPreferredUsername);
-        boolean existUserByEmail = userService
-                .existsByEmail(oidcUserEmail);
+        boolean existsUserBySamlTokenAsEmail = userService
+                .existsBySamlToken(oidcUserEmail);
 
         if (existUserBySamlToken) {
             return userService
                     .findBySamlToken(oidcUserSub)
                     .orElseThrow();
-        } else if (existUserByUsernameAsSamlToken) {
+        } else if (existUserByUsernameAsSamlToken
+                || existsUserBySamlTokenAsEmail) {
             User user = userService
                     .findBySamlToken(oidcUserPreferredUsername)
                     .orElseThrow();
@@ -71,7 +72,7 @@ public class OidcUserServiceImpl implements OidcUserService {
                         + oidcUserPreferredUsername
                         + " does not match internal user ");
             }
-        }  else {
+        } else {
             return registerNewUser(oidcUser);
         }
     }
@@ -116,20 +117,13 @@ public class OidcUserServiceImpl implements OidcUserService {
     @Override
     public boolean externalUserRequiredLinking(OidcUser oidcUser) {
 
-        String oidcUserSub = oidcUser.getAttribute("sub");
         String oidcUserEmail = oidcUser.getAttribute("email");
-        String oidcUserPreferredUsername = oidcUser.getAttribute("preferred_username");
-
-        boolean existUserBySamlToken = userService
-                .existsBySamlToken(oidcUserSub);
-        boolean existUserByUsernameAsSamlToken = userService
-                .existsBySamlToken(oidcUserPreferredUsername);
-        boolean existUserByEmail = userService
-                .existsByEmail(oidcUserEmail);
 
-        if(existUserBySamlToken || existUserByUsernameAsSamlToken) {
-            return false;
-        }else return existUserByEmail;
+        if(userService.existsByEmail(oidcUserEmail)){
+            User user = userService.findByEmail(oidcUserEmail);
+            return user.getSamlToken() == null || user.getSamlToken().isEmpty();
+        }
+        return false;
     }
 
     @Override