diff --git a/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java b/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java
index 92bf767a2e1c775d97ef0810e2bf962df713a03b..208940363aeacd437653dd3e571c674268a993eb 100644
--- a/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java
+++ b/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java
@@ -10,7 +10,6 @@
 import java.util.prefs.Preferences;
 import org.locationtech.jts.io.ParseException;
 import com.ximpleware.NavException;
-import com.ximpleware.XPathEvalException;
 import com.ximpleware.XPathParseException;
 import eu.simstadt.regionchooser.fast_xml_parser.ConvexHullCalculator;
 import javafx.application.Platform;
@@ -30,6 +29,7 @@
 public class RegionChooserBrowser extends Region
 {
 	private static final Logger LOGGER = Logger.getLogger(RegionChooserBrowser.class.getName());
+	private static final int BUFFER = 1024;
 
 	/**
 	 * JavaFX Backend for RegionChooser. Inside simstadt_openlayers.js frontend, this class is available as `fxapp`.
@@ -70,15 +70,19 @@ public Void call() throws IOException {
 		}
 
 		public void downloadRegionFromCityGML(String wktPolygon, String project, String citygml, String srsName)
-				throws IOException, ParseException, XPathParseException, NavException, XPathEvalException {
+				throws IOException, ParseException, XPathParseException, NavException {
 			StringBuilder sb = RegionExtractor.selectRegionDirectlyFromCityGML(wktPolygon, srsName,
 					citygmlPath(project, citygml));
 
 			File buildingIdsFile = selectSaveFileWithDialog(project, citygml, "selected_region");
 			if (buildingIdsFile != null) {
 				try (BufferedWriter writer = Files.newBufferedWriter(buildingIdsFile.toPath())) {
-					//NOTE: isn't there a better way??
-					writer.write(sb.toString());
+					char[] chars = new char[BUFFER];
+					for (int aPosStart = 0; aPosStart < sb.length(); aPosStart += BUFFER) {
+						int chunk = Math.min(BUFFER, sb.length() - aPosStart);
+						sb.getChars(aPosStart, aPosStart + chunk, chars, 0);
+						writer.write(chars, 0, chunk);
+					}
 				}
 			}
 		}