diff --git a/src/main/java/org/olat/portfolio/manager/InvitationDAO.java b/src/main/java/org/olat/portfolio/manager/InvitationDAO.java
index 2ef57eb5e481691e0bcacb74f1eae8dffbb3586d..f7ed917872345abcf5318a7ed359613b1ef4daf1 100644
--- a/src/main/java/org/olat/portfolio/manager/InvitationDAO.java
+++ b/src/main/java/org/olat/portfolio/manager/InvitationDAO.java
@@ -34,7 +34,6 @@ import org.olat.basesecurity.Group;
 import org.olat.basesecurity.GroupRoles;
 import org.olat.basesecurity.IdentityRef;
 import org.olat.basesecurity.Invitation;
-import org.olat.basesecurity.PolicyImpl;
 import org.olat.basesecurity.SecurityGroup;
 import org.olat.basesecurity.manager.GroupDAO;
 import org.olat.core.commons.persistence.DB;
@@ -201,14 +200,15 @@ public class InvitationDAO {
 
 		StringBuilder sb = new StringBuilder();
 		sb.append("select invitation from ").append(InvitationImpl.class.getName()).append(" as invitation ")
-		  .append(" inner join invitation.securityGroup secGroup ")
+		  .append(" inner join invitation.baseGroup baseGroup ")
 		  .append(" where invitation.creationDate<:dateLimit")//someone can create an invitation but not add it to a policy within millisecond
-		  .append(" and secGroup not in (")
-      //select all valid policies from this security group
-		  .append("  select policy.securityGroup from ").append(PolicyImpl.class.getName()).append(" as policy ")
-		  .append("   where (policy.from is null or policy.from<=:currentDate)")
-		  .append("   and (policy.to is null or policy.to>=:currentDate)")
-		  .append("  )");
+		  .append(" and not exists (")
+		  //select all valid policies from this security group
+		  .append("  select policy.group from structuretogroup as policy ")
+		  .append("   where policy.group=baseGroup ")
+		  .append("   and (policy.validFrom is null or policy.validFrom<=:currentDate)")
+		  .append("   and (policy.validTo is null or policy.validTo>=:currentDate)")
+		  .append(" )");
 
 		List<Invitation> oldInvitations = dbInstance.getCurrentEntityManager()
 				.createQuery(sb.toString(), Invitation.class)
diff --git a/src/test/java/org/olat/portfolio/manager/EPPolicyManagerTest.java b/src/test/java/org/olat/portfolio/manager/EPPolicyManagerTest.java
index cdd7d9f9d16c239977ae29d3b4e685b204b911f4..ef7f9218cf3dfa798b9a0ed96bd956cfeab321fb 100644
--- a/src/test/java/org/olat/portfolio/manager/EPPolicyManagerTest.java
+++ b/src/test/java/org/olat/portfolio/manager/EPPolicyManagerTest.java
@@ -112,9 +112,4 @@ public class EPPolicyManagerTest extends OlatTestCase {
 		boolean visible = epFrontendManager.isMapVisible(invitee, map.getOlatResource());
 		Assert.assertTrue(visible);
 	}
-	
-	
-	
-	
-
-}
+}
\ No newline at end of file
diff --git a/src/test/java/org/olat/portfolio/manager/InvitationDAOTest.java b/src/test/java/org/olat/portfolio/manager/InvitationDAOTest.java
index 50fd1383186b7c35f27de4c05b16416a53675cb1..4c7aad393fd5989c058f43dccfce983d6ee608b4 100644
--- a/src/test/java/org/olat/portfolio/manager/InvitationDAOTest.java
+++ b/src/test/java/org/olat/portfolio/manager/InvitationDAOTest.java
@@ -19,13 +19,18 @@
  */
 package org.olat.portfolio.manager;
 
+import java.util.Collections;
 import java.util.Date;
+import java.util.Locale;
 import java.util.UUID;
 
 import org.junit.Assert;
 import org.junit.Test;
 import org.olat.basesecurity.Invitation;
 import org.olat.core.commons.persistence.DB;
+import org.olat.core.id.Identity;
+import org.olat.portfolio.model.structel.PortfolioStructureMap;
+import org.olat.test.JunitTestHelper;
 import org.olat.test.OlatTestCase;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -43,6 +48,8 @@ public class InvitationDAOTest extends OlatTestCase {
 	private InvitationDAO invitationDao;
 	@Autowired
 	private EPPolicyManager policyManager;
+	@Autowired
+	private EPFrontendManager epFrontendManager;
 	
 	
 	@Test
@@ -100,6 +107,41 @@ public class InvitationDAOTest extends OlatTestCase {
 		Assert.assertEquals("kanu.unchou@frentix.com", reloadedInvitation.getMail());
 	}
 	
+	/**
+	 * Check the HQL code of the the method, and that it doesn't delete to much invitations
+	 */
+	@Test
+	public void cleanUpInvitation() {
+		Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("Policy-User-2-");
+		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(user, "Title", "Description");
+		Invitation invitation = invitationDao.createAndPersistInvitation();
+		dbInstance.commit();
+		
+		invitation.setFirstName("John");
+		invitation.setLastName("Smith Portfolio");
+		EPMapPolicy policy = new EPMapPolicy();
+		policy.setType(EPMapPolicy.Type.invitation);
+		policy.setInvitation(invitation);
+		
+		policyManager.updateMapPolicies(map, Collections.singletonList(policy));
+		dbInstance.commitAndCloseSession();
+		
+		//convert invitation to identity
+		Identity invitee = invitationDao.createIdentityFrom(invitation, Locale.ENGLISH);
+		dbInstance.commitAndCloseSession();
+
+		//and check 
+		boolean visible = epFrontendManager.isMapVisible(invitee, map.getOlatResource());
+		Assert.assertTrue(visible);
+		
+		//clean the invitations
+		invitationDao.cleanUpInvitations();
+		
+		//check that the invitation not was not deleted
+		boolean afterVisible = epFrontendManager.isMapVisible(invitee, map.getOlatResource());
+		Assert.assertTrue(afterVisible);
+	}
+	
 	
 
 }