diff --git a/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/JFaceTextTestSuite.java b/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/JFaceTextTestSuite.java
index 5ea29e8..6ff49e9 100644
--- a/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/JFaceTextTestSuite.java
+++ b/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/JFaceTextTestSuite.java
@@ -77,7 +77,8 @@
 		TabsToSpacesConverterTest.class,
 		DefaultTextDoubleClickStrategyTest.class,
 		MultiSelectionTest.class,
-		FindReplaceDocumentAdapterContentProposalProviderTest.class
+		FindReplaceDocumentAdapterContentProposalProviderTest.class,
+		ProjectionViewerTest.class
 })
 public class JFaceTextTestSuite {
 	// see @SuiteClasses
diff --git a/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/ProjectionViewerTest.java b/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/ProjectionViewerTest.java
new file mode 100644
index 0000000..03c3773
--- /dev/null
+++ b/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/ProjectionViewerTest.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2022 Red Hat, Inc. and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+package org.eclipse.jface.text.tests;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Shell;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextOperationTarget;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.text.Position;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.source.AnnotationModel;
+import org.eclipse.jface.text.source.projection.IProjectionPosition;
+import org.eclipse.jface.text.source.projection.ProjectionAnnotation;
+import org.eclipse.jface.text.source.projection.ProjectionViewer;
+
+public class ProjectionViewerTest {
+
+	private static final class ProjectionPosition extends Position implements IProjectionPosition {
+
+		public ProjectionPosition(IDocument document) {
+			super(0, document.getLength());
+		}
+
+		@Override
+		public IRegion[] computeProjectionRegions(IDocument document) throws BadLocationException {
+			int firstNewLine= document.get().indexOf('\n');
+			int secondNewLine= document.get().indexOf('\n', firstNewLine + 1);
+			return new IRegion[] { new Region(0, firstNewLine + 1), new Region(secondNewLine + 1, document.getLength() - secondNewLine - 1) };
+		}
+
+		@Override
+		public int computeCaptionOffset(IDocument document) throws BadLocationException {
+			return document.get().indexOf('\n') + 1;
+		}
+
+	}
+
+	@Test
+	public void testCopyPaste() {
+		Shell shell = new Shell();
+		shell.setLayout(new FillLayout());
+		ProjectionViewer viewer = new ProjectionViewer(shell, null, null, false, SWT.NONE);
+		Document document= new Document("/*\n * content\n */");
+		viewer.setDocument(document, new AnnotationModel());
+		viewer.enableProjection();
+		viewer.getProjectionAnnotationModel().addAnnotation(new ProjectionAnnotation(false), new ProjectionPosition(document));
+		shell.setVisible(true);
+		viewer.getTextOperationTarget().doOperation(ProjectionViewer.COLLAPSE_ALL);
+		viewer.getTextOperationTarget().doOperation(ITextOperationTarget.SELECT_ALL);
+		try {
+			assertEquals(document.get(), ((ITextSelection) viewer.getSelection()).getText());
+			viewer.getTextOperationTarget().doOperation(ITextOperationTarget.COPY);
+			assertEquals(document.get(), new Clipboard(viewer.getTextWidget().getDisplay()).getContents(TextTransfer.getInstance()));
+		} finally {
+			shell.dispose();
+		}
+	}
+}
diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java
index 6107756..60c174a 100644
--- a/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java
+++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java
@@ -2525,9 +2525,9 @@
 		int[] ranges= fTextWidget.getSelectionRanges();
 		IRegion[] selectedRanges= new IRegion[ranges.length / 2];
 		for (int i= 0; i < selectedRanges.length; i++) {
-			int start= widgetOffset2ModelOffset(ranges[2 * i]);
-			int end= widgetOffset2ModelOffset(ranges[2 * i] + ranges[2 * i + 1]);
-			selectedRanges[i]= new Region(start, end - start);
+			Point widgetSelection= new Point(ranges[2 * i], ranges[2 * i + 1]);
+			Point modelSelection= widgetSelection2ModelSelection(widgetSelection);
+			selectedRanges[i]= new Region(modelSelection.x, modelSelection.y);
 		}
 		return toSelection(selectedRanges);
 	}
