diff --git a/src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java b/src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java
index 1589440de29aa6f97e7571687400888c35f295dd..9c462faba9d40813e2d2cb5ccc8c80e7d92b749a 100644
--- a/src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java
+++ b/src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java
@@ -6,11 +6,12 @@
 import java.nio.file.Paths;
 import java.util.Scanner;
 import java.util.concurrent.Callable;
-import java.util.logging.Logger;
 import org.osgeo.proj4j.CoordinateReferenceSystem;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
+import picocli.CommandLine.Model.CommandSpec;
 import picocli.CommandLine.Option;
+import picocli.CommandLine.Spec;
 
 // Example usage:
 // --input /home/ricou/Desktop/CGSC_Repository/Würzburg.proj/LoD2_566_5516_2_BY.gml,/home/ricou/Desktop/CGSC_Repository/Würzburg.proj/LoD2_568_5516_2_BY.gml
@@ -21,8 +22,10 @@
 @Command(name = "region_chooser", mixinStandardHelpOptions = true, version = "regionChooser x.x", description = "Extracts a region from one or more citygmls.", sortOptions = false)
 class RegionChooserCommandLineInterface implements Callable<Integer>
 {
+	@Spec
+	CommandSpec spec;
 
-	private static final Logger LOGGER = Logger.getLogger(RegionChooserCommandLineInterface.class.getName());
+	//TODO: Add --gui?
 
 	@Option(names = { "-i",
 			"--input" }, required = true, split = ",", description = "Citygml files to extract from", paramLabel = "input.gml")
@@ -53,7 +56,7 @@ public Integer call() throws Exception {
 		} else {
 			localCRS = RegionChooserUtils.crsFromSrsName("EPSG:" + espgId);
 		}
-		LOGGER.info("Coordinate system: " + localCRS);
+		logInfo("Coordinate system: " + localCRS);
 
 		String wktPolygon;
 
@@ -75,7 +78,7 @@ public Integer call() throws Exception {
 			wktPolygon = RegionChooserUtils.wktPolygonToLocalCRS(wktPolygon, localCRS);
 		}
 
-		LOGGER.info("WKT Polygon expressed in local coordinates: " + wktPolygon);
+		logInfo("WKT Polygon expressed in local coordinates: " + wktPolygon);
 
 		StringBuilder sb = RegionExtractor.selectRegionDirectlyFromCityGML(wktPolygon, localCRS.toString(), citygmls);
 
@@ -84,6 +87,10 @@ public Integer call() throws Exception {
 		return 0;
 	}
 
+	private void logInfo(String message) {
+		spec.commandLine().getErr().println(message);
+	}
+
 	private static String getInput() {
 		try (Scanner myObj = new Scanner(System.in)) {
 			return myObj.nextLine();
diff --git a/src/test/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterfaceTest.java b/src/test/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterfaceTest.java
index 36cf66c086d39b4c6c68a79e05f4c61fe28f76f2..b67dce3fe36a42291258349cd1130437505ab0d4 100644
--- a/src/test/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterfaceTest.java
+++ b/src/test/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterfaceTest.java
@@ -1,5 +1,7 @@
 package eu.simstadt.regionchooser;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import java.io.BufferedWriter;
 import java.io.ByteArrayInputStream;
@@ -43,7 +45,6 @@ public void restoreStreams() {
 	@Test
 	void testNoInput() {
 		new CommandLine(new RegionChooserCommandLineInterface()).execute("");
-		//		originalOut.println(err.toString());
 		String expectedErr = "Missing required options: '--input=input.gml', '--output=output.gml', '--wkt=polygon.wkt'";
 		assertTrue(err.toString().contains(expectedErr), err.toString() + " should contain " + expectedErr);
 	}
@@ -58,11 +59,12 @@ void testExtractRegionFromTwoCitygmls() throws IOException {
 		try (BufferedWriter wkt = Files.newBufferedWriter(inWKT)) {
 			wkt.write(wktPolygon);
 		}
+		assertFalse(Files.exists(outGML));
 		new CommandLine(new RegionChooserCommandLineInterface()).execute("--input=" + citygml1 + "," + citygml2,
 				"--output=" + outGML, "--wkt=" + inWKT, "--epsg=31463", "--local");
-		String expectedLog = "Buildings found in selected region 20";
-		assertTrue(err.toString().contains(expectedLog), err.toString() + " should contain " + expectedLog);
+		assertTrue(Files.exists(outGML));
 		assertTrue(Files.size(outGML) > 600_000);
+		assertEquals(20, countBuildings(outGML));
 	}
 
 
@@ -76,13 +78,18 @@ void testExtractRegionFromTwoCitygmlsInWGS84() throws IOException {
 		try (BufferedWriter wkt = Files.newBufferedWriter(inWKT)) {
 			wkt.write(wktPolygon);
 		}
+		assertFalse(Files.exists(outGML));
 		new CommandLine(new RegionChooserCommandLineInterface()).execute("--input=" + citygml1 + "," + citygml2,
 				"--output=" + outGML, "--wkt=" + inWKT);
 		String expectedLog = "EPSG:31463";
 		assertTrue(err.toString().contains(expectedLog), err.toString() + " should contain " + expectedLog);
-		expectedLog = "Buildings found in selected region 22";
-		assertTrue(err.toString().contains(expectedLog), err.toString() + " should contain " + expectedLog);
+		assertTrue(Files.exists(outGML));
 		assertTrue(Files.size(outGML) > 300_000);
+		assertEquals(22, countBuildings(outGML));
+	}
+
+	private long countBuildings(Path outGML) throws IOException {
+		return Files.readAllLines(outGML).stream().filter(line -> line.contains("bldg:Building gml:id=")).count();
 	}
 
 	@Test
@@ -92,13 +99,13 @@ void testExtractRegionWithStandardInput() throws IOException {
 		Path outGML = Files.createTempFile("output", ".gml");
 		InputStream stdin = new ByteArrayInputStream(wktPolygon.getBytes(StandardCharsets.UTF_8));
 		System.setIn(stdin);
+		assertFalse(Files.exists(outGML));
 		new CommandLine(new RegionChooserCommandLineInterface()).execute("--input=" + citygml, "--output=" + outGML,
 				"--wkt=-");
 		String expectedLog = "EPSG:32118";
-		originalOut.println(err.toString());
-		assertTrue(err.toString().contains(expectedLog), err.toString() + " should contain " + expectedLog);
-		expectedLog = "Buildings found in selected region 2";
 		assertTrue(err.toString().contains(expectedLog), err.toString() + " should contain " + expectedLog);
+		assertTrue(Files.exists(outGML));
+		assertEquals(2, countBuildings(outGML));
 	}
 
 	@Test
@@ -116,6 +123,7 @@ void testExtractRegionWithMissingInput() throws IOException {
 		assertTrue(err.toString().contains(expectedLog), err.toString() + " should contain " + expectedLog);
 		expectedLog = "Please provide \"POLYGON((x1 y1, x2 y2, ...))\" to standard input.";
 		assertTrue(err.toString().contains(expectedLog), err.toString() + " should contain " + expectedLog);
+		assertFalse(Files.exists(outGML));
 	}
 }