diff --git a/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/TextMultiCaretSelectionCommandsTest.java b/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/TextMultiCaretSelectionCommandsTest.java
index 3165209..1f700b1 100644
--- a/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/TextMultiCaretSelectionCommandsTest.java
+++ b/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/TextMultiCaretSelectionCommandsTest.java
@@ -381,12 +381,12 @@
 	@Test
 	public void testStopMultiSelection_withMultiSelectionAndCaretAtBeginning_revokesSelectionAndKeepsFirstCaretOffset()
 			throws Exception {
-		setSelection(new IRegion[] { new Region(0, 0), new Region(0, 7), new Region(L1_LEN, 7) });
-		assertEquals(0, widget.getCaretOffset());
+		setSelection(new IRegion[] { new Region(0, 7), new Region(L1_LEN, 7) });
+		assertEquals(7, widget.getCaretOffset());
 
 		executeCommand(STOP_MULTI_SELECTION);
-		assertEquals(0, widget.getCaretOffset());
-		assertArrayEquals(new IRegion[] { new Region(0, 0) }, getSelection());
+		assertEquals(7, widget.getCaretOffset());
+		assertArrayEquals(new IRegion[] { new Region(7, 0) }, getSelection());
 	}
 
 	@Test
diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/multiselection/AbstractMultiSelectionHandler.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/multiselection/AbstractMultiSelectionHandler.java
index f16c20b..e8f7a40 100644
--- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/multiselection/AbstractMultiSelectionHandler.java
+++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/multiselection/AbstractMultiSelectionHandler.java
@@ -221,11 +221,15 @@
 	}
 
 	protected int getCaretOffset() {
-		return getWidget().getCaretOffset();
+		IRegion[] regions = getSelectedRegions();
+		if (regions == null) {
+			return -1;
+		}
+		return regions[0].getOffset() + regions[0].getLength();
 	}
 
-	protected void setCaretOffset(int offset) {
-		getWidget().setCaretOffset(offset);
+	protected void setCaretOffset(int caretOffset) {
+		selectRegion(offsetAsCaretRegion(caretOffset));
 	}
 
 	protected IRegion findNextMatch(IRegion region) throws ExecutionException {
diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/multiselection/StopMultiSelectionHandler.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/multiselection/StopMultiSelectionHandler.java
index 3672da1..46a75dc 100644
--- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/multiselection/StopMultiSelectionHandler.java
+++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/multiselection/StopMultiSelectionHandler.java
@@ -32,7 +32,6 @@
 	private void stopMultiSelection() throws ExecutionException {
 		int caretOffset = getCaretOffset();
 		selectRegion(offsetAsCaretRegion(caretOffset));
-		setCaretOffset(caretOffset);
 		setAnchorRegion(null);
 	}
 }
