diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ConsoleTests.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ConsoleTests.java
index b683fe2..fb05f3e 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ConsoleTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ConsoleTests.java
@@ -65,7 +65,7 @@
 		String testString = "a\r"; //$NON-NLS-1$
 		byte[] testStringBuffer = testString.getBytes(StandardCharsets.UTF_8);
 		TestCase.assertEquals("Test string \"" + testString + "\" should consist of 2 UTF-8 bytes", 2, testStringBuffer.length); //$NON-NLS-1$ //$NON-NLS-2$
-		MessageConsole console = new MessageConsole("Test Console", //$NON-NLS-1$
+		MessageConsole console = new MessageConsole("Test Console 2", //$NON-NLS-1$
 				IConsoleConstants.MESSAGE_CONSOLE_TYPE, null, StandardCharsets.UTF_8.name(), true);
 		IDocument document = console.getDocument();
 		TestHelper.waitForJobs();
@@ -82,4 +82,57 @@
 		TestCase.assertEquals("closing the stream should write the pending \\r", testString, document.get()); //$NON-NLS-1$
 	}
 
+	public void testConsoleOutputStreamDocumentClosed() throws IOException {
+		MessageConsole console = new MessageConsole("Test Console 3", //$NON-NLS-1$
+				IConsoleConstants.MESSAGE_CONSOLE_TYPE, null, StandardCharsets.UTF_8.name(), true);
+		IDocument document = console.getDocument();
+		try (IOConsoleOutputStream outStream = console.newOutputStream()) {
+			outStream.write("write1"); //$NON-NLS-1$
+			document.getDocumentPartitioner().disconnect();
+			try {
+				outStream.write("write2"); //$NON-NLS-1$
+				TestCase.fail("IOException with message \"Document is closed\" expected"); //$NON-NLS-1$
+			} catch (IOException ioe) {
+				TestCase.assertEquals("Document is closed", ioe.getMessage()); //$NON-NLS-1$
+			}
+		}
+	}
+
+	public void testConsoleOutputStreamClosed() throws IOException {
+		MessageConsole console = new MessageConsole("Test Console 4", //$NON-NLS-1$
+				IConsoleConstants.MESSAGE_CONSOLE_TYPE, null, StandardCharsets.UTF_8.name(), true);
+		try (IOConsoleOutputStream outStream = console.newOutputStream()) {
+			outStream.write("test1".getBytes(StandardCharsets.UTF_8)); //$NON-NLS-1$
+			outStream.close();
+			try {
+				outStream.write("test2".getBytes(StandardCharsets.UTF_8)); //$NON-NLS-1$
+				TestCase.fail("IOException with message \"Output Stream is closed\" expected"); //$NON-NLS-1$
+			} catch (IOException ioe) {
+				TestCase.assertEquals("Output Stream is closed", ioe.getMessage()); //$NON-NLS-1$
+			}
+		}
+	}
+
+	public void testConsoleOutputStreamDocumentStreamClosed() throws IOException {
+		MessageConsole console = new MessageConsole("Test Console 5", //$NON-NLS-1$
+				IConsoleConstants.MESSAGE_CONSOLE_TYPE, null, StandardCharsets.UTF_8.name(), true);
+		IDocument document = console.getDocument();
+		try (IOConsoleOutputStream outStream = console.newOutputStream()) {
+			outStream.write("write1"); //$NON-NLS-1$
+			document.getDocumentPartitioner().disconnect();
+			try {
+				outStream.write("write2"); //$NON-NLS-1$
+				TestCase.fail("IOException with message \"Document is closed\" expected"); //$NON-NLS-1$
+			} catch (IOException ioe) {
+				TestCase.assertEquals("Document is closed", ioe.getMessage()); //$NON-NLS-1$
+			}
+			try {
+				outStream.write("write3"); //$NON-NLS-1$
+				TestCase.fail("IOException with message \"Output Stream is closed\" expected"); //$NON-NLS-1$
+			} catch (IOException ioe) {
+				TestCase.assertEquals("Output Stream is closed", ioe.getMessage()); //$NON-NLS-1$
+			}
+		}
+	}
+
 }
diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsoleOutputStream.java b/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsoleOutputStream.java
index 8ee4707..0cba219 100644
--- a/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsoleOutputStream.java
+++ b/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsoleOutputStream.java
@@ -199,6 +199,9 @@
      */
     @Override
 	public synchronized void write(byte[] b, int off, int len) throws IOException {
+		if (closed) {
+			throw new IOException("Output Stream is closed"); //$NON-NLS-1$
+		}
 		StringBuilder builder = new StringBuilder();
 		this.decoder.decode(builder, b, off, len);
 		encodedWrite(builder.toString());
@@ -323,6 +326,9 @@
 	 * @since 3.7
 	 */
 	public synchronized void setCharset(Charset charset) throws IOException {
+		if (closed) {
+			throw new IOException("Output Stream is closed"); //$NON-NLS-1$
+		}
 		StringBuilder builder = new StringBuilder();
 		this.decoder.finish(builder);
 		if (builder.length() > 0) {
