diff --git a/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/FilterParserInput.java b/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/FilterParserInput.java
index 8a63d54..18781d4 100644
--- a/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/FilterParserInput.java
+++ b/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/FilterParserInput.java
@@ -125,7 +125,7 @@
 				if (!updateBuffer(offset + 1)) {
 					checkOffset(offset);
 					int index= getStopIndex();
-					if (index == Integer.MIN_VALUE) {
+					if (index == NA_INDEX) {
 						index= this.bufferBeginIndexes[getEndIdx()];
 					}
 					setConsume(offset, index);
diff --git a/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/OffsetStringParserInput.java b/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/OffsetStringParserInput.java
index 50743be..b4701ac 100644
--- a/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/OffsetStringParserInput.java
+++ b/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/OffsetStringParserInput.java
@@ -49,7 +49,7 @@
 	}
 	
 	public OffsetStringParserInput initAtOffset() {
-		super.init(this.sourceOffset, Integer.MIN_VALUE);
+		super.init(this.sourceOffset, NA_INDEX);
 		return this;
 	}
 	
diff --git a/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/TextParserInput.java b/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/TextParserInput.java
index 504cd2a..29af45a 100644
--- a/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/TextParserInput.java
+++ b/jcommons/org.eclipse.statet.jcommons.text.core/src/org/eclipse/statet/jcommons/text/core/input/TextParserInput.java
@@ -16,6 +16,7 @@
 
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
+import org.eclipse.statet.jcommons.lang.ObjectUtils.ToStringBuilder;
 import org.eclipse.statet.jcommons.string.CharArrayString;
 import org.eclipse.statet.jcommons.string.StringFactory;
 import org.eclipse.statet.jcommons.text.core.BasicTextRegion;
@@ -39,11 +40,17 @@
 	
 	public static final int EOF= -1;
 	
+	public static final int NA_INDEX= Integer.MIN_VALUE;
+	
 	
 	protected static final int DEFAULT_BUFFER_SIZE= 0x800;
 	
 	protected static final char[] NO_INPUT= new char[0];
 	
+	protected static final String indexToString(final int index) {
+		return (index != NA_INDEX) ? Integer.toString(index) : "<NA>"; //$NON-NLS-1$
+	}
+	
 	
 	private final CharArrayString tmpCharString= new CharArrayString();
 	
@@ -61,21 +68,21 @@
 	protected TextParserInput(final int defaultBufferLength) {
 		this.defaultBufferLength= defaultBufferLength;
 		this.buffer= NO_INPUT;
-		this.stopIndex= Integer.MIN_VALUE;
-		this.currentIndex= Integer.MIN_VALUE;
+		this.stopIndex= NA_INDEX;
+		this.currentIndex= NA_INDEX;
 	}
 	
 	
 	protected void reset() {
 		this.startIndex= 0;
-		this.stopIndex= Integer.MIN_VALUE;
-		this.currentIndex= Integer.MIN_VALUE;
+		this.stopIndex= NA_INDEX;
+		this.currentIndex= NA_INDEX;
 		this.currentIdx= 0;
 		this.endIdx= 0;
 	}
 	
 	public TextParserInput init() {
-		init(0, Integer.MIN_VALUE);
+		init(0, NA_INDEX);
 		
 		return this;
 	}
@@ -88,7 +95,7 @@
 			if (stopIndex > sourceStopIndex) {
 				throw new IndexOutOfBoundsException("stopIndex= " + stopIndex); //$NON-NLS-1$
 			}
-			else if (stopIndex == Integer.MIN_VALUE) {
+			else if (stopIndex == NA_INDEX) {
 				stopIndex= sourceStopIndex;
 			}
 			if (startIndex < sourceStartIndex | startIndex > sourceStopIndex) {
@@ -472,22 +479,27 @@
 	
 	protected final void checkOffset(final int offset) {
 		if (this.currentIdx + offset > this.endIdx) {
-			throw new IndexOutOfBoundsException("offset= " + offset);
+			throw new IndexOutOfBoundsException("offset= " + offset); //$NON-NLS-1$
 		}
 	}
 	
 	
 	@Override
 	public String toString() {
-		final StringBuilder sb= new StringBuilder(getClass().getName());
+		final ToStringBuilder sb= new ToStringBuilder(TextParserInput.class, getClass());
+		sb.addProp("region", "[%1$s, %2$s)", //$NON-NLS-1$ //$NON-NLS-2$
+				indexToString(getStartIndex()), indexToString(getStopIndex()) );
 		final String s= getSourceString();
 		if (s != null) {
 			final int index= getSourceStringIndex();
-			sb.append("\n~~~ [").append(index).append(", ").append(index + s.length()).append("] ~~~");
-			sb.append(getSourceStringIndex());
-			sb.append("\n~~~\n");
+			sb.addProp("source"); //$NON-NLS-1$
+			sb.getStringBuilder()
+					.append("\n~~~ [").append(index).append(", ").append(index + s.length()) //$NON-NLS-1$ //$NON-NLS-2$
+					.append("] ~~~\n") //$NON-NLS-1$
+					.append(s)
+					.append("\n~~~\n"); //$NON-NLS-1$
 		}
-		return super.toString();
+		return sb.toString();
 	}
 	
 }
