diff --git a/src/main/java/eu/simstadt/regionchooser/RegionExtractor.java b/src/main/java/eu/simstadt/regionchooser/RegionExtractor.java
index 192513cdb3071ae79b6ae999fad762fcac9009ff..90991971839088ae4a28ce21a9d29d4c36941c8f 100644
--- a/src/main/java/eu/simstadt/regionchooser/RegionExtractor.java
+++ b/src/main/java/eu/simstadt/regionchooser/RegionExtractor.java
@@ -11,6 +11,7 @@
 import org.locationtech.jts.geom.Geometry;
 import org.locationtech.jts.geom.GeometryFactory;
 import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
 import org.locationtech.jts.io.ParseException;
 import org.locationtech.jts.io.WKTReader;
 import com.ximpleware.NavException;
@@ -54,7 +55,7 @@ static int selectRegionDirectlyFromCityGML(String wktPolygon, String srsName, Wr
 		int cityObjectsCount = 0;
 		int foundBuildingsCount = 0;
 		int otherObjectsCount = 0;
-		Geometry polygon = WKT_READER.read(wktPolygon);
+		Geometry selectionPolygon = WKT_READER.read(wktPolygon);
 
 		CityGmlIterator citygml = null;
 		for (int i = 0; i < citygmlPaths.length; i++) {
@@ -64,13 +65,13 @@ static int selectRegionDirectlyFromCityGML(String wktPolygon, String srsName, Wr
 			citygml = new CityGmlIterator(citygmlPath);
 			for (CityObjectMember cityObjectNode : citygml) {
 				if (cityObjectsCount == 0) {
-					sb.append(replaceEnvelopeInHeader(citygml.getHeader(), polygon.getEnvelopeInternal(), srsName));
+					sb.append(replaceEnvelopeInHeader(citygml.getHeader(), selectionPolygon.getEnvelopeInternal(), srsName));
 				}
 				cityObjectsCount += 1;
 				if (cityObjectNode.hasCoordinates()) {
 					boolean isBuilding = cityObjectNode.isBuilding();
-					boolean shouldBeIncluded = isBuilding ? isBuildingCenterInPolygon(cityObjectNode, polygon)
-							: isBoundingBoxTouching(cityObjectNode, polygon);
+					boolean shouldBeIncluded = isBuilding ? isBuildingCenterInPolygon(cityObjectNode, selectionPolygon)
+							: isBoundingBoxTouching(cityObjectNode, selectionPolygon);
 					if (shouldBeIncluded) {
 						if (isBuilding) {
 							foundBuildingsCount++;
@@ -108,10 +109,15 @@ static int selectRegionDirectlyFromCityGML(String wktPolygon, String srsName, Wr
 	 * which might be desirable for roads or landuse.
 	 */
 	private static boolean isBoundingBoxTouching(CityObjectMember cityObjectNode, Geometry polygon) {
-		return point(cityObjectNode.xMax, cityObjectNode.yMax).within(polygon) ||
-				point(cityObjectNode.xMax, cityObjectNode.yMin).within(polygon) ||
-				point(cityObjectNode.xMin, cityObjectNode.yMin).within(polygon) ||
-				point(cityObjectNode.xMin, cityObjectNode.yMax).within(polygon);
+		Coordinate[] boundingBoxCoordinates = {
+				new Coordinate(cityObjectNode.xMax, cityObjectNode.yMax),
+				new Coordinate(cityObjectNode.xMin, cityObjectNode.yMax),
+				new Coordinate(cityObjectNode.xMin, cityObjectNode.yMin),
+				new Coordinate(cityObjectNode.xMax, cityObjectNode.yMin),
+				new Coordinate(cityObjectNode.xMax, cityObjectNode.yMax),
+		};
+		Polygon boundingBox = GEOMETRY_FACTORY.createPolygon(boundingBoxCoordinates);
+		return boundingBox.intersects(polygon);
 	}