diff --git a/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF b/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF
index 5d2171a..a2c871e 100644
--- a/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF
+++ b/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ui.workbench.texteditor; singleton:=true
-Bundle-Version: 3.16.100.qualifier
+Bundle-Version: 3.16.200.qualifier
 Bundle-Activator: org.eclipse.ui.internal.texteditor.TextEditorPlugin
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/EditPosition.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/EditPosition.java
index c59ffc8..012ee48 100644
--- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/EditPosition.java
+++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/EditPosition.java
@@ -71,6 +71,28 @@
 		return fEditorId;
 	}
 
+	@Override
+	public String toString() {
+		StringBuilder builder = new StringBuilder();
+		builder.append("EditPosition ["); //$NON-NLS-1$
+		if (fEditorInput != null) {
+			builder.append("input="); //$NON-NLS-1$
+			builder.append(fEditorInput);
+			builder.append(", "); //$NON-NLS-1$
+		}
+		if (fEditorId != null) {
+			builder.append("editorId="); //$NON-NLS-1$
+			builder.append(fEditorId);
+			builder.append(", "); //$NON-NLS-1$
+		}
+		if (fPosition != null) {
+			builder.append("position="); //$NON-NLS-1$
+			builder.append(fPosition);
+		}
+		builder.append("]"); //$NON-NLS-1$
+		return builder.toString();
+	}
+
 	/**
 	 * Returns the position.
 	 *
diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/HistoryTracker.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/HistoryTracker.java
index 422a2a6..8488a31 100644
--- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/HistoryTracker.java
+++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/HistoryTracker.java
@@ -15,6 +15,9 @@
 package org.eclipse.ui.internal.texteditor;
 
 import java.lang.reflect.Array;
+import java.util.Arrays;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @author Ari Kast
@@ -348,6 +351,33 @@
 	}
 
 	/**
+	 * @return Stream with all non-null history elements, may be empty
+	 */
+	public Stream<T> rawHistory() {
+		return Arrays.asList(fHistory).stream().filter(x -> x != null);
+	}
+
+	@Override
+	public String toString() {
+		StringBuilder builder = new StringBuilder();
+		builder.append("HistoryTracker ["); //$NON-NLS-1$
+		builder.append("history="); //$NON-NLS-1$
+		builder.append(rawHistory().map(x -> x.toString()).collect(Collectors.joining(", "))); //$NON-NLS-1$
+		builder.append(", "); //$NON-NLS-1$
+		if (fBrowsePoint != null) {
+			builder.append("browsePoint="); //$NON-NLS-1$
+			builder.append(fBrowsePoint);
+			builder.append(", "); //$NON-NLS-1$
+		}
+		builder.append("size="); //$NON-NLS-1$
+		builder.append(fSize);
+		builder.append(", circular="); //$NON-NLS-1$
+		builder.append(fUseCircularNavigation);
+		builder.append("]"); //$NON-NLS-1$
+		return builder.toString();
+	}
+
+	/**
 	 * for easy traversing thru history
 	 */
 	public static class Navigator<T> {
diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java
index 840af78..cda1fcf 100644
--- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java
+++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java
@@ -33,6 +33,7 @@
 import java.util.Map;
 import java.util.ResourceBundle;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Stream;
 
 import org.osgi.framework.Bundle;
 
@@ -682,25 +683,25 @@
 
 		@Override
 		public void inputDocumentAboutToBeChanged(IDocument oldInput, IDocument newInput) {
-			HistoryTracker<EditPosition> positionHistory = TextEditorPlugin.getDefault().getEditPositionHistory();
-			if (oldInput != null && !positionHistory.isEmpty()) {
-				for (int i = 0; i < positionHistory.getSize(); i++)
-					oldInput.removePosition(positionHistory.browseBackward().getPosition());
-			}
+			discardHistoryFor(oldInput, newInput);
 		}
 
 		@Override
 		public void inputDocumentChanged(IDocument oldInput, IDocument newInput) {
-			discardHistoryFor(oldInput);
+			discardHistoryFor(oldInput, newInput);
 		}
 
-		private void discardHistoryFor(IDocument input) {
-			HistoryTracker<EditPosition> positionHistory = TextEditorPlugin.getDefault().getEditPositionHistory();
-			if (input != null && !positionHistory.isEmpty()) {
-				for (int i = 0; i < positionHistory.getSize(); i++)
-					input.removePosition(positionHistory.browseBackward().getPosition());
+		private void discardHistoryFor(IDocument oldInput, IDocument newInput) {
+			// Only discard history from document if it is replaced by other real document,
+			// don't care otherwise
+			if (oldInput == null || newInput == null) {
+				return;
 			}
-
+			HistoryTracker<EditPosition> positionHistory = TextEditorPlugin.getDefault().getEditPositionHistory();
+			if (!positionHistory.isEmpty()) {
+				Stream<EditPosition> rawHistory = positionHistory.rawHistory();
+				rawHistory.forEach(p -> oldInput.removePosition(p.getPosition()));
+			}
 		}
 	}
 
