#63380
diff --git a/org.eclipse.text.tests/projection/org/eclipse/text/tests/ProjectionMappingTest.java b/org.eclipse.text.tests/projection/org/eclipse/text/tests/ProjectionMappingTest.java
index fd5652a..58a5534 100644
--- a/org.eclipse.text.tests/projection/org/eclipse/text/tests/ProjectionMappingTest.java
+++ b/org.eclipse.text.tests/projection/org/eclipse/text/tests/ProjectionMappingTest.java
@@ -246,6 +246,22 @@
 		}
 	}
 	
+	public void test3f() {
+		// test toOriginRegion 
+		// test empty slave document
+		
+		fMasterDocument.set("abc\n");
+		fSlaveDocument.set("");
+		addProjection(4, 0, 0);
+		
+		try {
+			IRegion origin= fProjectionMapping.toOriginRegion(new Region(0, 0));
+			assertEquals(new Region(4, 0), origin); // fails, origin is (0, 4)
+		} catch (BadLocationException e) {
+			assertTrue(false);
+		}		
+	}
+	
 	public void test4() {
 		// test toOriginLines
 		
diff --git a/org.eclipse.text/projection/org/eclipse/jface/text/projection/ProjectionMapping.java b/org.eclipse.text/projection/org/eclipse/jface/text/projection/ProjectionMapping.java
index e1c0ecd..98838e2 100644
--- a/org.eclipse.text/projection/org/eclipse/jface/text/projection/ProjectionMapping.java
+++ b/org.eclipse.text/projection/org/eclipse/jface/text/projection/ProjectionMapping.java
@@ -346,8 +346,11 @@
 		int imageLength= imageRegion.getLength();
 		
 		if (imageLength == 0) {
-			if (imageOffset == 0 && getImageLength() == 0)
-				return new Region(0, fMasterDocument.getLength());
+			if (imageOffset == 0) {
+				Position[] fragments= getFragments();
+				if (fragments.length == 0 || (fragments.length == 1 && fragments[0].getOffset() == 0 && fragments[0].getLength() == 0))
+					return new Region(0, fMasterDocument.getLength());
+			}
 			return new Region(toOriginOffset(imageOffset), 0);
 		}