diff --git a/src/de/stups/probkodkod/EOFLexer.java b/src/de/stups/probkodkod/EOFLexer.java
index a066969a0f46a017d944b0cc835aeb480309a5c4..1f0d9ebc3350768b04a24bec067dd5dd18271843 100644
--- a/src/de/stups/probkodkod/EOFLexer.java
+++ b/src/de/stups/probkodkod/EOFLexer.java
@@ -19,7 +19,6 @@ import de.stups.probkodkod.parser.node.Token;
  * @author plagge
  */
 public class EOFLexer extends Lexer {
-
 	public EOFLexer(final PushbackReader in) {
 		super(in);
 	}
@@ -39,10 +38,15 @@ public class EOFLexer extends Lexer {
 	}
 
 	private Token filter(Token token) {
-		if (token instanceof TFullstop) {
+		if (token instanceof EOF)
+			throw new AbortException();
+		else if (token instanceof TFullstop) {
 			token = new EOF();
 		}
 		return token;
 	}
 
+	public static class AbortException extends RuntimeException {
+		private static final long serialVersionUID = 4042645224685292559L;
+	}
 }
diff --git a/src/de/stups/probkodkod/KodkodInteraction.java b/src/de/stups/probkodkod/KodkodInteraction.java
index 0bbfd5c8b6e6126add08fc74cfc92295c0fc4df0..4fbecfe5061cce11296e655afb9d54a6a39d36ab 100644
--- a/src/de/stups/probkodkod/KodkodInteraction.java
+++ b/src/de/stups/probkodkod/KodkodInteraction.java
@@ -48,10 +48,14 @@ public class KodkodInteraction {
 		final Lexer lexer = new EOFLexer(in);
 		final Parser parser = new Parser(lexer);
 
-		while (!session.isStopped()) {
-			final Start tree = parser.parse();
-			tree.apply(analysis);
-			pto.flush();
+		try {
+			while (!session.isStopped()) {
+				final Start tree = parser.parse();
+				tree.apply(analysis);
+				pto.flush();
+			}
+		} catch (EOFLexer.AbortException e) {
+			logger.info("EOF reached");
 		}
 
 		logger.info("Kodkod session finished");