diff --git a/jenetics/src/main/java/io/jenetics/util/StreamPublisher.java b/jenetics/src/main/java/io/jenetics/util/StreamPublisher.java
index <HASH>..<HASH> 100644
--- a/jenetics/src/main/java/io/jenetics/util/StreamPublisher.java
+++ b/jenetics/src/main/java/io/jenetics/util/StreamPublisher.java
@@ -153,17 +153,30 @@ public class StreamPublisher<T> extends SubmissionPublisher<T> {
 			_thread = new Thread(() -> {
 				try {
 					_stream.forEach(this::submit);
+					close();
 				} catch(CancellationException e) {
 					Thread.currentThread().interrupt();
-				} finally {
-					_thread = null;
 					close();
+				} catch (Throwable e) {
+					if (nonFatal(e)) {
+						closeExceptionally(e);
+					} else {
+						throw e;
+					}
 				}
 			});
 			_thread.start();
 		}
 	}
 
+	private static boolean nonFatal(final Throwable throwable) {
+		return
+			!(throwable instanceof VirtualMachineError) &&
+			!(throwable instanceof ThreadDeath) &&
+			!(throwable instanceof InterruptedException) &&
+			!(throwable instanceof LinkageError);
+	}
+
 	/**
 	 * Unless already closed, issues {@code onComplete} signals to current
 	 * subscribers, and disallows subsequent attempts to publish. Upon return,
#<I>: Improve stream reading code.