diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java
index 3d86347e3a10fd748e2b7af406f9b5f2f66f7ecf..4ffeedead0b5329edf58bfa9342518e25f16aba2 100644
--- a/src/main/java/org/olat/repository/RepositoryManager.java
+++ b/src/main/java/org/olat/repository/RepositoryManager.java
@@ -445,6 +445,28 @@ public class RepositoryManager {
 		return displaynames.get(0);
 	}
 	
+    /**
+     * Check if (and which) external IDs already exist.
+     * @param a collection of external IDs to check if already existing
+     * @return a list of already existing external IDs (or an emtpy list).
+     */
+    public List<String> lookupExistingExternalIds(Collection<String> externalIds) {
+            if (externalIds == null || externalIds.isEmpty()) {
+                    return Collections.emptyList();
+            }
+
+            StringBuilder query = new StringBuilder();
+            query.append("select v.externalId from ").append(RepositoryEntry.class.getName()).append(" as v ")
+                    .append("where v.externalId in (:externalIds)");
+
+            List<String> existingExternalIds =
+                    dbInstance.getCurrentEntityManager().createQuery(query.toString(), String.class)
+                    .setParameter("externalIds", externalIds)
+                    .getResultList();
+
+            return existingExternalIds;
+    }
+
 	/**
 	 * Load a list of repository entry without all the security groups ...
 	 * @param resources
diff --git a/src/test/java/org/olat/repository/RepositoryManagerTest.java b/src/test/java/org/olat/repository/RepositoryManagerTest.java
index 6e39d530c89dfaf66de1f0a4efaecda309003f7e..3f97a66e0a0954de9f1151adb172674a4a1889c4 100644
--- a/src/test/java/org/olat/repository/RepositoryManagerTest.java
+++ b/src/test/java/org/olat/repository/RepositoryManagerTest.java
@@ -30,6 +30,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
@@ -205,6 +206,25 @@ public class RepositoryManagerTest extends OlatTestCase {
 		Assert.assertEquals(re.getOlatResource(), resource);
 	}
 	
+	@Test
+	public void lookupExistingExternalIds() {
+		RepositoryEntry re = JunitTestHelper.createAndPersistRepositoryEntry();
+		String externalId = UUID.randomUUID().toString();
+		re.setExternalId(externalId);
+		repositoryService.update(re);
+		dbInstance.commitAndCloseSession();
+		
+		//load
+		String nonExistentExternalId = UUID.randomUUID().toString();
+		List<String> externalIds = new ArrayList<>();
+		externalIds.add(externalId);
+		externalIds.add(nonExistentExternalId);
+		List<String> existentExternalIds = repositoryManager.lookupExistingExternalIds(externalIds);
+		Assert.assertNotNull(existentExternalIds);
+		Assert.assertTrue(existentExternalIds.contains(externalId));
+		Assert.assertFalse(existentExternalIds.contains(nonExistentExternalId));
+	}
+	
 	@Test
 	public void queryByOwner_replaceQueryByEditor() {
 		//create a repository entry with an owner