diff --git a/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js b/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js
index 163c2479a07a91b378a57aff4d5db54102776f8c..96efab463b437315182ec6464db22479f84979ca 100644
--- a/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js
+++ b/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js
@@ -4,6 +4,7 @@ var regionChooser = (function(){
 	var fromJavaFX = navigator.userAgent.indexOf('JavaFX') !== -1;
 	var dataPanel = $('#dataPanel');
 	var wgs84Sphere = new ol.Sphere(6378137);
+	var features_by_project;
 	var gmlId;
 	
 	publicScope.init = function(){
@@ -96,6 +97,11 @@ var regionChooser = (function(){
 			feature["name"] = feature.get("name");
 			feature["source"] = "CityGML";
 		});
+		
+		features_by_project = groupBy(kml_source.getFeatures(), "project");
+		
+		// Sort CityGMLs inside each project
+		Object.values(features_by_project).forEach(features => features.sort((a, b) => a.name.localeCompare(b.name)));
 	}
 
 	// The features are not added to a regular vector layer/source,
@@ -190,8 +196,6 @@ var regionChooser = (function(){
 		var polygonArea = sketch.getGeometry().getArea();
 		var intersection_found = false;
 		intersections.clear();
-		//NOTE: getFeatures seems to not be sorted anymore. :-/
-		features_by_project = groupBy(kml_source.getFeatures(), "project");
 		
 		Object.keys(features_by_project).forEach(function(project) {
 			features = features_by_project[project];
@@ -368,7 +372,7 @@ var regionChooser = (function(){
 		updateGMLPolygons();
 		displayHelp();
 		document.documentElement.className = ''; // Stop waiting
-		console.log("READY!");
+		console.log("Ready!");
 	}
 	
 	publicScope.downloadFromSelectedCityGMLs = function() {