diff --git a/src/main/java/at/ac/uibk/course/ExternalCourseSearchListProvider.java b/src/main/java/at/ac/uibk/course/ExternalCourseSearchListProvider.java
index eba004943fe10faea8848f8cbecf8783060a8e1a..d09eff7c4fda758128973b706052dff4c12b7009 100644
--- a/src/main/java/at/ac/uibk/course/ExternalCourseSearchListProvider.java
+++ b/src/main/java/at/ac/uibk/course/ExternalCourseSearchListProvider.java
@@ -20,6 +20,7 @@
 
 package at.ac.uibk.course;
 
+import java.util.Comparator;
 import java.util.List;
 
 import org.olat.core.gui.control.generic.ajax.autocompletion.ListProvider;
@@ -62,11 +63,19 @@ public class ExternalCourseSearchListProvider implements ListProvider {
 		try {
 			final SisCourses courses = SisManager.getInstance().findCourses(userIdentity, searchValue);
 			if (courses != null && courses.getCourses() != null) {
-				List<String> existingCourses = RepositoryManager.getInstance().lookupExistingExternalIds(courses.getSisCourseIds());
-				for (SisCourse c : courses.getCourses()) {
-					receiver.addEntry(c.getSisCourseId(), c.getSisCourseId(), c.getTitle(),
-							existingCourses.contains(c.getSisCourseId()) ? CSSHelper.CSS_CLASS_DISABLED: "");
-				}
+				List<String> existingCourses = RepositoryManager.getInstance()
+						.lookupExistingExternalIds(courses.getSisCourseIds());
+				Comparator<SisCourse> byExisting = (c1, c2) -> Boolean.compare(
+						existingCourses.contains(c1.getSisCourseId()),
+						existingCourses.contains(c2.getSisCourseId()));
+				Comparator<SisCourse> byTitle = (c1, c2)
+						-> c2.getTitle().compareTo(c1.getTitle());
+				courses.getCourses().stream()
+					.sorted(byExisting.thenComparing(byTitle))
+					.forEachOrdered(c -> receiver.addEntry(
+							c.getSisCourseId(), c.getSisCourseId(), c.getTitle(),
+							existingCourses.contains(c.getSisCourseId()) ?
+									CSSHelper.CSS_CLASS_DISABLED: ""));
 			}
 		} catch (SisManagerException ex) {
 			receiver.addEntry("-", "-", backend_errormsg, CSSHelper.CSS_CLASS_ERROR);