diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/preferences/ConsolePreviewSourceViewerConfiguration.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/preferences/ConsolePreviewSourceViewerConfiguration.java
index e080765..6c2a762 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/preferences/ConsolePreviewSourceViewerConfiguration.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/preferences/ConsolePreviewSourceViewerConfiguration.java
@@ -17,10 +17,8 @@
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.text.source.ISourceViewer;
 
-import org.eclipse.statet.jcommons.collections.ImCollections;
-
-import org.eclipse.statet.ecommons.text.core.sections.AbstractDocContentSections;
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.BasicDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 import org.eclipse.statet.ecommons.text.ui.presentation.SingleTokenScanner;
 import org.eclipse.statet.ecommons.text.ui.settings.TextStyleManager;
 
@@ -30,8 +28,8 @@
 public class ConsolePreviewSourceViewerConfiguration extends SourceEditorViewerConfiguration {
 	
 	
-	private static final IDocContentSections CONTENT_INFO= new AbstractDocContentSections(ConsoleTextStylesPreviewPartitioner.PARTITIONING,
-			ConsoleTextStylesPreviewPartitioner.PARTITIONING, ImCollections.newList(ConsoleTextStylesPreviewPartitioner.PARTITIONING)) {
+	private static final DocContentSections CONTENT_INFO= new BasicDocContentSections(ConsoleTextStylesPreviewPartitioner.PARTITIONING,
+			ConsoleTextStylesPreviewPartitioner.PARTITIONING) {
 		@Override
 		public String getTypeByPartition(final String contentType) {
 			return ConsoleTextStylesPreviewPartitioner.PARTITIONING;
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/ConsolePageEditor.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/ConsolePageEditor.java
index e9a0070..c612bcc 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/ConsolePageEditor.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/ConsolePageEditor.java
@@ -71,7 +71,7 @@
 import org.eclipse.statet.ecommons.io.FileUtil;
 import org.eclipse.statet.ecommons.preferences.core.util.PreferenceUtils;
 import org.eclipse.statet.ecommons.text.ICharPairMatcher;
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 import org.eclipse.statet.ecommons.text.core.util.AbstractFragmentDocument;
 import org.eclipse.statet.ecommons.text.ui.InformationDispatchHandler;
 import org.eclipse.statet.ecommons.text.ui.TextHandlerUtil;
@@ -982,7 +982,7 @@
 	}
 	
 	@Override
-	public IDocContentSections getDocumentContentInfo() {
+	public DocContentSections getDocumentContentInfo() {
 		return this.configurator.getDocumentContentInfo();
 	}
 	
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsoleSourceUnit.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsoleSourceUnit.java
index 205426e..cf603f0 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsoleSourceUnit.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsoleSourceUnit.java
@@ -19,7 +19,7 @@
 
 import org.eclipse.core.runtime.IProgressMonitor;
 
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 import org.eclipse.statet.ecommons.text.core.util.AbstractFragmentDocument;
 import org.eclipse.statet.ecommons.text.core.util.TextUtils;
 
@@ -69,7 +69,7 @@
 	}
 	
 	@Override
-	public IDocContentSections getDocumentContentInfo() {
+	public DocContentSections getDocumentContentInfo() {
 		return RDocumentContentInfo.INSTANCE;
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceUnit.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceUnit.java
index b18ee2a..b90071f 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceUnit.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceUnit.java
@@ -17,7 +17,7 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IProgressMonitor;
 
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 
 import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
@@ -49,7 +49,7 @@
 	}
 	
 	@Override
-	public IDocContentSections getDocumentContentInfo() {
+	public DocContentSections getDocumentContentInfo() {
 		return RDocumentContentInfo.INSTANCE;
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RResourceUnit.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RResourceUnit.java
index fc72b35..0a961ca 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RResourceUnit.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RResourceUnit.java
@@ -18,7 +18,7 @@
 
 import org.eclipse.core.resources.IFile;
 
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 
 import org.eclipse.statet.ltk.core.ElementName;
 import org.eclipse.statet.ltk.model.core.impl.AbstractFilePersistenceSourceUnitFactory;
@@ -45,7 +45,7 @@
 				return modelTypeId;
 			}
 			@Override
-			public IDocContentSections getDocumentContentInfo() {
+			public DocContentSections getDocumentContentInfo() {
 				return null;
 			}
 		};
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RChunkHeuristicTokenScanner.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RChunkHeuristicTokenScanner.java
index 22949ef..e6c103a 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RChunkHeuristicTokenScanner.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RChunkHeuristicTokenScanner.java
@@ -21,14 +21,14 @@
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
 import org.eclipse.statet.ecommons.text.core.PartitionConstraint;
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionUtils;
 
 
 public class RChunkHeuristicTokenScanner extends RHeuristicTokenScanner {
 	
 	
-	public RChunkHeuristicTokenScanner(final IDocContentSections documentContentInfo) {
+	public RChunkHeuristicTokenScanner(final DocContentSections documentContentInfo) {
 		super(documentContentInfo);
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RDocumentContentInfo.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RDocumentContentInfo.java
index 7f6f1ab..6664836 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RDocumentContentInfo.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RDocumentContentInfo.java
@@ -14,23 +14,23 @@
 
 package org.eclipse.statet.r.core.source;
 
-import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
-import org.eclipse.statet.ecommons.text.core.sections.AbstractDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.BasicDocContentSections;
 
 
-public class RDocumentContentInfo extends AbstractDocContentSections {
+@NonNullByDefault
+public class RDocumentContentInfo extends BasicDocContentSections {
 	
 	
-	public static final String R=                              IRDocumentConstants.R_PARTITIONING;
+	public static final String R=                           IRDocumentConstants.R_PARTITIONING;
 	
 	
 	public static final RDocumentContentInfo INSTANCE= new RDocumentContentInfo();
 	
 	
 	public RDocumentContentInfo() {
-		super(IRDocumentConstants.R_PARTITIONING, R,
-				ImCollections.newList(R) );
+		super(IRDocumentConstants.R_PARTITIONING, R);
 	}
 	
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RHeuristicTokenScanner.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RHeuristicTokenScanner.java
index 52e3475..85d489b 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RHeuristicTokenScanner.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RHeuristicTokenScanner.java
@@ -20,7 +20,7 @@
 import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.ecommons.text.BasicHeuristicTokenScanner;
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 
 import org.eclipse.statet.r.core.rlang.RTokens;
 
@@ -52,14 +52,14 @@
 		}
 	}
 	
-	public static RHeuristicTokenScanner create(final IDocContentSections documentContentInfo) {
+	public static RHeuristicTokenScanner create(final DocContentSections documentContentInfo) {
 		return (documentContentInfo.getPrimaryType() == IRDocumentConstants.R_PARTITIONING) ?
 				new RHeuristicTokenScanner(documentContentInfo) :
 				new RChunkHeuristicTokenScanner(documentContentInfo);
 	}
 	
 	
-	protected RHeuristicTokenScanner(final IDocContentSections documentContentInfo) {
+	protected RHeuristicTokenScanner(final DocContentSections documentContentInfo) {
 		super(documentContentInfo, IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT);
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RPartitionNodeScanner.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RPartitionNodeScanner.java
index 92329a6..7f875fd 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RPartitionNodeScanner.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RPartitionNodeScanner.java
@@ -14,7 +14,7 @@
 
 package org.eclipse.statet.r.core.source;
 
-import static org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode.END_UNCLOSED;
+import static org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNode.END_UNCLOSED;
 
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
@@ -24,20 +24,20 @@
 
 import org.eclipse.statet.ecommons.text.CharacterScannerReader;
 import org.eclipse.statet.ecommons.text.core.rules.BufferedDocumentScanner;
-import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode;
-import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNodeScan;
-import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNodeScanner;
+import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNode;
+import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNodeScan;
+import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNodeScanner;
 
 
 /**
  * This scanner recognizes the comments, platform specif., verbatim-like section
  * (and other/usual Rd code).
  */
-public class RPartitionNodeScanner implements ITreePartitionNodeScanner {
+public class RPartitionNodeScanner implements TreePartitionNodeScanner {
 	
 	
-	public static final @Nullable ITreePartitionNode findRRootNode(@Nullable ITreePartitionNode node) {
-		ITreePartitionNode rNode;
+	public static final @Nullable TreePartitionNode findRRootNode(@Nullable TreePartitionNode node) {
+		TreePartitionNode rNode;
 		while (true) {
 			if (node == null) {
 				return null;
@@ -48,7 +48,7 @@
 			}
 			node= node.getParent();
 		}
-		ITreePartitionNode parentNode;
+		TreePartitionNode parentNode;
 		while ((parentNode= rNode.getParent()) != null
 				&& parentNode.getType() instanceof RPartitionNodeType) {
 			rNode= parentNode;
@@ -82,12 +82,12 @@
 	protected final CharacterScannerReader reader= new CharacterScannerReader(
 			new BufferedDocumentScanner(1024) );
 	
-	private ITreePartitionNodeScan scan;
+	private TreePartitionNodeScan scan;
 	
-	private ITreePartitionNode rootNode;
+	private TreePartitionNode rootNode;
 	
 	/** The current node */
-	private ITreePartitionNode node;
+	private TreePartitionNode node;
 	/** The current node type */
 	private RPartitionNodeType type;
 	/** The last significant characters read. */
@@ -100,7 +100,7 @@
 	
 	
 	@Override
-	public int getRestartOffset(final ITreePartitionNode node, final IDocument document,
+	public int getRestartOffset(final TreePartitionNode node, final IDocument document,
 			final int offset) throws BadLocationException {
 		return offset;
 	}
@@ -111,7 +111,7 @@
 	}
 	
 	@Override
-	public void execute(final ITreePartitionNodeScan scan) {
+	public void execute(final TreePartitionNodeScan scan) {
 		this.scan= scan;
 		
 		this.rootNode= null;
@@ -124,7 +124,7 @@
 		process();
 	}
 	
-	protected final ITreePartitionNodeScan getScan() {
+	protected final TreePartitionNodeScan getScan() {
 		return this.scan;
 	}
 	
@@ -134,7 +134,7 @@
 	}
 	
 	protected void init() {
-		final ITreePartitionNode beginNode= getScan().getBeginNode();
+		final TreePartitionNode beginNode= getScan().getBeginNode();
 		if (beginNode.getType() instanceof RPartitionNodeType) {
 			initNode(beginNode, (RPartitionNodeType) beginNode.getType());
 		}
@@ -145,7 +145,7 @@
 		}
 	}
 	
-	protected final ITreePartitionNode getRootNode() {
+	protected final TreePartitionNode getRootNode() {
 		return this.rootNode;
 	}
 	
@@ -172,7 +172,7 @@
 	}
 	
 	
-	protected final void initNode(final ITreePartitionNode node, final RPartitionNodeType type) {
+	protected final void initNode(final TreePartitionNode node, final RPartitionNodeType type) {
 		if (this.node != null) {
 			throw new IllegalStateException();
 		}
@@ -186,7 +186,7 @@
 		this.type= type;
 	}
 	
-	protected final ITreePartitionNode getNode() {
+	protected final TreePartitionNode getNode() {
 		return this.node;
 	}
 	
@@ -201,7 +201,7 @@
 		this.type= (RPartitionNodeType) this.node.getType();
 	}
 	
-	protected final void exitNodesTo(final ITreePartitionNode stopNode,
+	protected final void exitNodesTo(final TreePartitionNode stopNode,
 			final int offset, final int flags) {
 		while (this.node != stopNode) {
 			exitNode(offset, flags);
@@ -446,7 +446,7 @@
 	}
 	
 	protected void handleEOF(final RPartitionNodeType type) {
-		final ITreePartitionNode rootNode= getRootNode();
+		final TreePartitionNode rootNode= getRootNode();
 		final int offset= this.reader.getOffset();
 		exitNodesTo(rootNode, offset, END_UNCLOSED);
 		this.scan.expand(rootNode, offset, END_UNCLOSED, true);
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RPartitionNodeType.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RPartitionNodeType.java
index c5b232c..336ff0c 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RPartitionNodeType.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RPartitionNodeType.java
@@ -16,11 +16,14 @@
 
 import org.eclipse.jface.text.IDocument;
 
-import org.eclipse.statet.ecommons.text.core.treepartitioner.AbstractPartitionNodeType;
-import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ecommons.text.core.treepartitioner.BasicPartitionNodeType;
+import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNode;
 
 
-public abstract class RPartitionNodeType extends AbstractPartitionNodeType {
+@NonNullByDefault
+public abstract class RPartitionNodeType extends BasicPartitionNodeType {
 	
 	
 	public static final RPartitionNodeType DEFAULT_ROOT= new RPartitionNodeType() {
@@ -36,12 +39,12 @@
 		}
 		
 		@Override
-		public boolean prefereAtBegin(final ITreePartitionNode node, final IDocument document) {
+		public boolean prefereAtBegin(final TreePartitionNode node, final IDocument document) {
 			return true;
 		}
 		
 		@Override
-		public boolean prefereAtEnd(final ITreePartitionNode node, final IDocument document) {
+		public boolean prefereAtEnd(final TreePartitionNode node, final IDocument document) {
 			return true;
 		}
 		
@@ -131,7 +134,7 @@
 		
 		
 		@Override
-		public boolean prefereAtEnd(final ITreePartitionNode node, final IDocument document) {
+		public boolean prefereAtEnd(final TreePartitionNode node, final IDocument document) {
 			return true;
 		}
 		
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RdDocumentContentInfo.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RdDocumentContentInfo.java
index 7ff4f57..c121a73 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RdDocumentContentInfo.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RdDocumentContentInfo.java
@@ -14,12 +14,13 @@
 
 package org.eclipse.statet.r.core.source;
 
-import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
-import org.eclipse.statet.ecommons.text.core.sections.AbstractDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.BasicDocContentSections;
 
 
-public class RdDocumentContentInfo extends AbstractDocContentSections {
+@NonNullByDefault
+public class RdDocumentContentInfo extends BasicDocContentSections {
 	
 	
 	public static final String RDOC=                        IRDocumentConstants.RDOC_PARTITIONING;
@@ -29,8 +30,7 @@
 	
 	
 	public RdDocumentContentInfo() {
-		super(IRDocumentConstants.RDOC_PARTITIONING, RDOC,
-				ImCollections.newList(RDOC) );
+		super(IRDocumentConstants.RDOC_PARTITIONING, RDOC);
 	}
 	
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorUriSourceUnit.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorUriSourceUnit.java
index da15de1..3c2c90c 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorUriSourceUnit.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorUriSourceUnit.java
@@ -19,7 +19,7 @@
 import org.eclipse.core.filesystem.IFileStore;
 import org.eclipse.core.runtime.SubMonitor;
 
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 
 import org.eclipse.statet.ltk.core.LTK;
 import org.eclipse.statet.ltk.core.WorkingContext;
@@ -59,7 +59,7 @@
 	}
 	
 	@Override
-	public IDocContentSections getDocumentContentInfo() {
+	public DocContentSections getDocumentContentInfo() {
 		return RDocumentContentInfo.INSTANCE;
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RFragmentSourceUnit.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RFragmentSourceUnit.java
index 95c61a8..5eee98b 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RFragmentSourceUnit.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RFragmentSourceUnit.java
@@ -18,7 +18,7 @@
 
 import org.eclipse.statet.ecommons.preferences.core.PreferenceAccess;
 import org.eclipse.statet.ecommons.text.ISourceFragment;
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 
 import org.eclipse.statet.ltk.core.LTK;
 import org.eclipse.statet.ltk.core.WorkingContext;
@@ -58,7 +58,7 @@
 	}
 	
 	@Override
-	public IDocContentSections getDocumentContentInfo() {
+	public DocContentSections getDocumentContentInfo() {
 		return RDocumentContentInfo.INSTANCE;
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java
index ce6424c..a246406 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java
@@ -30,7 +30,7 @@
 import org.eclipse.statet.jcommons.text.core.input.OffsetStringParserInput;
 
 import org.eclipse.statet.ecommons.text.core.FragmentDocument;
-import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode;
+import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNode;
 import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionUtils;
 
 import org.eclipse.statet.ltk.ast.core.AstInfo;
@@ -148,7 +148,7 @@
 		if (this.scannedArgs == null || this.scannedArgsStamp != stamp) {
 			try {
 				FCall.Args args= null;
-				final ITreePartitionNode rRootNode= RPartitionNodeScanner.findRRootNode(
+				final TreePartitionNode rRootNode= RPartitionNodeScanner.findRRootNode(
 						TreePartitionUtils.getNode(document, this.sourceEditor.getDocumentContentInfo().getPartitioning(),
 								docStartOffset, true));
 				if (rRootNode != null) {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/help/EnrichedRHelpContext.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/help/EnrichedRHelpContext.java
index aedd953..1b31883 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/help/EnrichedRHelpContext.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/help/EnrichedRHelpContext.java
@@ -35,7 +35,7 @@
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.ui.IWorkbenchPart3;
 
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 import org.eclipse.statet.ecommons.ui.util.MessageUtils;
 
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
@@ -86,7 +86,7 @@
 	}
 	
 	private static String getPlaintextFromDocument(final IDocument document,
-			final IDocContentSections contentInfo, final ISelectionProvider selectionProvider)
+			final DocContentSections contentInfo, final ISelectionProvider selectionProvider)
 			throws BadLocationException {
 		final ITextSelection textSelection = (ITextSelection) selectionProvider.getSelection();
 		final RHeuristicTokenScanner scanner= RHeuristicTokenScanner.create(contentInfo);
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java
index 727fd12..21233ce 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java
@@ -59,7 +59,7 @@
 import org.eclipse.statet.ecommons.text.ITokenScanner;
 import org.eclipse.statet.ecommons.text.IndentUtil;
 import org.eclipse.statet.ecommons.text.TextUtil;
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartition;
 import org.eclipse.statet.ecommons.text.ui.BracketLevel.InBracketPosition;
 import org.eclipse.statet.ecommons.ui.util.UIAccess;
@@ -136,7 +136,7 @@
 	
 	private final ISourceEditor editor;
 	private final ITextEditorExtension3 editor3;
-	private final IDocContentSections documentContentInfo;
+	private final DocContentSections documentContentInfo;
 	private final SourceViewer viewer;
 	private final RealTypeListener typeListener;
 	
@@ -209,7 +209,7 @@
 		return this.document;
 	}
 	
-	protected final IDocContentSections getDocumentContentInfo() {
+	protected final DocContentSections getDocumentContentInfo() {
 		return this.documentContentInfo;
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RBracketLevel.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RBracketLevel.java
index 04fd10f..5c0682f 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RBracketLevel.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RBracketLevel.java
@@ -24,7 +24,7 @@
 import org.eclipse.statet.jcommons.collections.ImCollections;
 
 import org.eclipse.statet.ecommons.text.TextUtil;
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 import org.eclipse.statet.ecommons.text.ui.BracketLevel;
 
 
@@ -229,7 +229,7 @@
 	
 	
 	public RBracketLevel(final LinkedModeModel model,
-			final IDocument document, final IDocContentSections documentContentInfo,
+			final IDocument document, final DocContentSections documentContentInfo,
 			final InBracketPosition position,
 			final boolean consoleMode, final boolean autoDelete) {
 		this(model, document, documentContentInfo,
@@ -238,7 +238,7 @@
 	}
 	
 	public RBracketLevel(final LinkedModeModel model,
-			final IDocument document, final IDocContentSections documentContentInfo,
+			final IDocument document, final DocContentSections documentContentInfo,
 			final List<LinkedPosition> positions, final int mode) {
 		super(model, document, documentContentInfo, positions, mode);
 	}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RSourceViewerConfiguration.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RSourceViewerConfiguration.java
index d20d638..a8b6a59 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RSourceViewerConfiguration.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RSourceViewerConfiguration.java
@@ -35,7 +35,7 @@
 import org.eclipse.statet.ecommons.preferences.core.util.PreferenceUtils;
 import org.eclipse.statet.ecommons.text.ICharPairMatcher;
 import org.eclipse.statet.ecommons.text.IIndentSettings;
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 import org.eclipse.statet.ecommons.text.ui.presentation.SingleTokenScanner;
 import org.eclipse.statet.ecommons.text.ui.settings.TextStyleManager;
 import org.eclipse.statet.ecommons.ui.ColorManager;
@@ -98,7 +98,7 @@
 		this(RDocumentContentInfo.INSTANCE, flags, null, null, store, null);
 	}
 	
-	public RSourceViewerConfiguration(final IDocContentSections documentContentInfo, final int flags,
+	public RSourceViewerConfiguration(final DocContentSections documentContentInfo, final int flags,
 			final IRSourceEditor sourceEditor,
 			final IRCoreAccess access,
 			final IPreferenceStore preferenceStore, final TextStyleManager textStyles) {
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/internal/redocs/r/ui/debug/SubmitRChunkDirectLaunchShortcut.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/internal/redocs/r/ui/debug/SubmitRChunkDirectLaunchShortcut.java
index f4e1563..d50deb5 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/internal/redocs/r/ui/debug/SubmitRChunkDirectLaunchShortcut.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/internal/redocs/r/ui/debug/SubmitRChunkDirectLaunchShortcut.java
@@ -36,7 +36,7 @@
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
 import org.eclipse.statet.ecommons.text.TextUtil;
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 import org.eclipse.statet.ecommons.ui.util.UIAccess;
 
 import org.eclipse.statet.internal.redocs.r.Messages;
@@ -112,7 +112,7 @@
 						final SourceViewer viewer= sourceEditor.getViewer();
 						if (UIAccess.isOkToUse(viewer)) {
 							data.document= (AbstractDocument) viewer.getDocument();
-							final IDocContentSections docContentInfo= sourceEditor.getDocumentContentInfo();
+							final DocContentSections docContentInfo= sourceEditor.getDocumentContentInfo();
 							if (docContentInfo instanceof DocContentSectionsRweaveExtension) {
 								data.docContentSections= (DocContentSectionsRweaveExtension) docContentInfo;
 							}
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/AbstractRChunkPartitionNodeScanner.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/AbstractRChunkPartitionNodeScanner.java
index f9d6f06..6d04b30 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/AbstractRChunkPartitionNodeScanner.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/AbstractRChunkPartitionNodeScanner.java
@@ -14,12 +14,12 @@
 
 package org.eclipse.statet.redocs.r.core.source;
 
-import static org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode.END_UNCLOSED;
+import static org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNode.END_UNCLOSED;
 
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.rules.ICharacterScanner;
 
-import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode;
+import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNode;
 
 import org.eclipse.statet.r.core.source.RPartitionNodeScanner;
 import org.eclipse.statet.r.core.source.RPartitionNodeType;
@@ -61,12 +61,12 @@
 		}
 		
 		@Override
-		public boolean prefereAtBegin(final ITreePartitionNode node, final IDocument document) {
+		public boolean prefereAtBegin(final TreePartitionNode node, final IDocument document) {
 			return true;
 		}
 		
 		@Override
-		public boolean prefereAtEnd(final ITreePartitionNode node, final IDocument document) {
+		public boolean prefereAtEnd(final TreePartitionNode node, final IDocument document) {
 			return true;
 		}
 		
@@ -85,7 +85,7 @@
 		}
 		
 		@Override
-		public boolean prefereAtBegin(final ITreePartitionNode node, final IDocument document) {
+		public boolean prefereAtBegin(final TreePartitionNode node, final IDocument document) {
 			return true;
 		}
 		
@@ -98,7 +98,7 @@
 	protected static final byte STOP_LINE= 3;
 	
 	
-	private ITreePartitionNode chunkNode;
+	private TreePartitionNode chunkNode;
 	
 	private byte chunkLine;
 	
@@ -113,14 +113,14 @@
 		
 		super.init();
 		
-		final ITreePartitionNode rootNode= getRootNode();
+		final TreePartitionNode rootNode= getRootNode();
 		if (rootNode.getType().getPartitionType() == RweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE) {
 			this.chunkNode= rootNode;
 		}
 		this.chunkLine= NONE;
 	}
 	
-	protected final ITreePartitionNode getChunkNode() {
+	protected final TreePartitionNode getChunkNode() {
 		return this.chunkNode;
 	}
 	
@@ -138,7 +138,7 @@
 	
 	@Override
 	protected void handleEOF(final RPartitionNodeType type) {
-		final ITreePartitionNode rootNode= getRootNode();
+		final TreePartitionNode rootNode= getRootNode();
 		final int offset= this.reader.getOffset();
 		exitNodesTo(rootNode, offset, END_UNCLOSED);
 		getScan().expand(rootNode, offset, (this.chunkLine == STOP_LINE) ? 0 : END_UNCLOSED, true);
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/DocContentSectionsRweaveExtension.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/DocContentSectionsRweaveExtension.java
index e0a6292..73c1802 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/DocContentSectionsRweaveExtension.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/DocContentSectionsRweaveExtension.java
@@ -20,28 +20,32 @@
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.IRegion;
 
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
-import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
+import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNode;
 
 
-public interface DocContentSectionsRweaveExtension extends IDocContentSections {
+@NonNullByDefault
+public interface DocContentSectionsRweaveExtension extends DocContentSections {
 	
 	
-	ITreePartitionNode getRChunkRegion(final IDocument document, final int offset)
+	@Nullable TreePartitionNode getRChunkRegion(final IDocument document, final int offset)
 			throws BadLocationException;
 	
-	List<ITreePartitionNode> getRChunkRegions(final IDocument document,
+	List<TreePartitionNode> getRChunkRegions(final IDocument document,
 			final int offset, final int length)
 			throws BadLocationException;
 	
-	IRegion getRChunkContentRegion(final IDocument document, final int offset)
+	@Nullable IRegion getRChunkContentRegion(final IDocument document, final int offset)
 			throws BadLocationException;
 	
-	List<ITreePartitionNode> getRChunkCodeRegions(final IDocument document,
+	List<TreePartitionNode> getRChunkCodeRegions(final IDocument document,
 			final int offset, final int length)
 			throws BadLocationException;
 	
-	ITreePartitionNode getRCodeRegion(final IDocument document, final int offset)
+	@Nullable TreePartitionNode getRCodeRegion(final IDocument document, final int offset)
 			throws BadLocationException;
 	
 }
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/RweaveDocSectionTreePartImpl.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/RweaveDocSectionTreePartImpl.java
index 1dd7134..13088d6 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/RweaveDocSectionTreePartImpl.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/RweaveDocSectionTreePartImpl.java
@@ -22,56 +22,60 @@
 import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.Region;
 
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
-import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
+import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNode;
 import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionUtils;
 
 import org.eclipse.statet.r.core.source.IRDocumentConstants;
 
 
+@NonNullByDefault
 public class RweaveDocSectionTreePartImpl {
 	
 	
-	private final IDocContentSections sections;
+	private final DocContentSections sections;
 	
 	
-	public RweaveDocSectionTreePartImpl(final IDocContentSections sections) {
+	public RweaveDocSectionTreePartImpl(final DocContentSections sections) {
 		this.sections= sections;
 	}
 	
 	
-	public IDocContentSections getSections() {
+	public DocContentSections getSections() {
 		return this.sections;
 	}
 	
-	public ITreePartitionNode getRChunkRegion(final IDocument document, final int offset)
+	public @Nullable TreePartitionNode getRChunkRegion(final IDocument document, final int offset)
 			throws BadLocationException {
 		return TreePartitionUtils.searchNode(document, this.sections.getPartitioning(), offset, false,
 				RweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE );
 	}
 	
-	public List<ITreePartitionNode> getRChunkRegions(final IDocument document,
+	public List<TreePartitionNode> getRChunkRegions(final IDocument document,
 			final int offset, final int length) throws BadLocationException {
-		final List<ITreePartitionNode> nodes= new ArrayList<>();
-		final ITreePartitionNode root= TreePartitionUtils.getRootNode(document, this.sections.getPartitioning());
+		final List<TreePartitionNode> nodes= new ArrayList<>();
+		final TreePartitionNode root= TreePartitionUtils.getRootNode(document, this.sections.getPartitioning());
 		
 		addRChunkRegions(root, offset, offset + length, nodes);
 		
 		return nodes;
 	}
 	
-	private void addRChunkRegions(final ITreePartitionNode node, final int startOffset, final int endOffset,
-			final List<ITreePartitionNode> nodes) {
+	private void addRChunkRegions(final TreePartitionNode node, final int startOffset, final int endOffset,
+			final List<TreePartitionNode> nodes) {
 		final int childCount= node.getChildCount();
 		int childIdx= 0;
 		for (; childIdx < childCount; childIdx++) {
-			final ITreePartitionNode child= node.getChild(childIdx);
+			final TreePartitionNode child= node.getChild(childIdx);
 			if (child.getEndOffset() > startOffset) {
 				break;
 			}
 		}
 		for (; childIdx < childCount; childIdx++) {
-			final ITreePartitionNode child= node.getChild(childIdx);
+			final TreePartitionNode child= node.getChild(childIdx);
 			if (child.getStartOffset() >= endOffset) {
 				break;
 			}
@@ -84,9 +88,9 @@
 		}
 	}
 	
-	public IRegion getRChunkContentRegion(final IDocument document, final int offset)
+	public @Nullable IRegion getRChunkContentRegion(final IDocument document, final int offset)
 			throws BadLocationException {
-		final ITreePartitionNode rChunk= getRChunkRegion(document, offset);
+		final TreePartitionNode rChunk= getRChunkRegion(document, offset);
 		if (rChunk == null || rChunk.getLength() <= 2) {
 			return null;
 		}
@@ -113,24 +117,24 @@
 		}
 	}
 	
-	public List<ITreePartitionNode> getRChunkCodeRegions(final IDocument document,
+	public List<TreePartitionNode> getRChunkCodeRegions(final IDocument document,
 			final int offset, final int length) throws BadLocationException {
-		final List<ITreePartitionNode> rChunks= getRChunkRegions(document, offset, length);
-		final List<ITreePartitionNode> nodes= new ArrayList<>(rChunks.size());
+		final List<TreePartitionNode> rChunks= getRChunkRegions(document, offset, length);
+		final List<TreePartitionNode> nodes= new ArrayList<>(rChunks.size());
 		
 		final int endOffset= offset + length;
 		for (int i= 0; i < rChunks.size(); i++) {
-			final ITreePartitionNode node= rChunks.get(i);
+			final TreePartitionNode node= rChunks.get(i);
 			final int childCount= node.getChildCount();
 			int childIdx= 0;
 			for (; childIdx < childCount; childIdx++) {
-				final ITreePartitionNode child= node.getChild(childIdx);
+				final TreePartitionNode child= node.getChild(childIdx);
 				if (child.getEndOffset() > offset) {
 					break;
 				}
 			}
 			for (; childIdx < childCount; childIdx++) {
-				final ITreePartitionNode child= node.getChild(childIdx);
+				final TreePartitionNode child= node.getChild(childIdx);
 				if (child.getStartOffset() >= endOffset) {
 					break;
 				}
@@ -143,7 +147,7 @@
 		return nodes;
 	}
 	
-	public ITreePartitionNode getRCodeRegion(final IDocument document, final int offset)
+	public @Nullable TreePartitionNode getRCodeRegion(final IDocument document, final int offset)
 			throws BadLocationException {
 		return TreePartitionUtils.searchNode(document, this.sections.getPartitioning(), offset, true,
 				IRDocumentConstants.R_DEFAULT_CONTENT_TYPE );
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveResourceSourceUnit.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveResourceSourceUnit.java
index bfbefca..bf432de 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveResourceSourceUnit.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveResourceSourceUnit.java
@@ -17,7 +17,7 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IProgressMonitor;
 
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 
 import org.eclipse.statet.docmlet.tex.core.TexCoreAccess;
 import org.eclipse.statet.docmlet.tex.core.model.TexWorkspaceSourceUnit;
@@ -56,7 +56,7 @@
 	}
 	
 	@Override
-	public IDocContentSections getDocumentContentInfo() {
+	public DocContentSections getDocumentContentInfo() {
 		return LtxRweaveDocumentContentInfo.INSTANCE;
 	}
 	
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweaveDocumentContentInfo.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweaveDocumentContentInfo.java
index 30cd0d7..b432a1d 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweaveDocumentContentInfo.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweaveDocumentContentInfo.java
@@ -21,9 +21,11 @@
 import org.eclipse.jface.text.IRegion;
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.ecommons.text.core.sections.AbstractDocContentSections;
-import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode;
+import org.eclipse.statet.ecommons.text.core.sections.BasicDocContentSections;
+import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNode;
 
 import org.eclipse.statet.docmlet.tex.core.source.TexDocumentConstants;
 import org.eclipse.statet.r.core.source.IRDocumentConstants;
@@ -31,7 +33,8 @@
 import org.eclipse.statet.redocs.r.core.source.RweaveDocSectionTreePartImpl;
 
 
-public class LtxRweaveDocumentContentInfo extends AbstractDocContentSections
+@NonNullByDefault
+public class LtxRweaveDocumentContentInfo extends BasicDocContentSections
 		implements DocContentSectionsRweaveExtension {
 	
 	
@@ -67,32 +70,32 @@
 	
 	
 	@Override
-	public ITreePartitionNode getRChunkRegion(final IDocument document, final int offset)
+	public @Nullable TreePartitionNode getRChunkRegion(final IDocument document, final int offset)
 			throws BadLocationException {
 		return this.rweaveImpl.getRChunkRegion(document, offset);
 	}
 	
 	@Override
-	public List<ITreePartitionNode> getRChunkRegions(final IDocument document,
+	public List<TreePartitionNode> getRChunkRegions(final IDocument document,
 			final int offset, final int length)
 			throws BadLocationException {
 		return this.rweaveImpl.getRChunkCodeRegions(document, offset, length);
 	}
 	
 	@Override
-	public IRegion getRChunkContentRegion(final IDocument document, final int offset)
+	public @Nullable IRegion getRChunkContentRegion(final IDocument document, final int offset)
 			throws BadLocationException {
 		return this.rweaveImpl.getRChunkContentRegion(document, offset);
 	}
 	
 	@Override
-	public ITreePartitionNode getRCodeRegion(final IDocument document, final int offset)
+	public @Nullable TreePartitionNode getRCodeRegion(final IDocument document, final int offset)
 			throws BadLocationException {
 		return this.rweaveImpl.getRCodeRegion(document, offset);
 	}
 	
 	@Override
-	public List<ITreePartitionNode> getRChunkCodeRegions(final IDocument document,
+	public List<TreePartitionNode> getRChunkCodeRegions(final IDocument document,
 			final int offset, final int length)
 			throws BadLocationException {
 		return this.rweaveImpl.getRChunkCodeRegions(document, offset, length);
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweavePartitionNodeScanner.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweavePartitionNodeScanner.java
index ad9d124..0b3a2d7 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweavePartitionNodeScanner.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweavePartitionNodeScanner.java
@@ -14,13 +14,13 @@
 
 package org.eclipse.statet.redocs.tex.r.core.source;
 
-import static org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode.END_UNCLOSED;
+import static org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNode.END_UNCLOSED;
 
 import org.eclipse.jface.text.rules.ICharacterScanner;
 
-import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode;
-import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNodeScan;
-import org.eclipse.statet.ecommons.text.core.treepartitioner.WrappedPartitionScan;
+import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNode;
+import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNodeScan;
+import org.eclipse.statet.ecommons.text.core.treepartitioner.WrappedPartitionNodeScan;
 
 import org.eclipse.statet.docmlet.tex.core.source.LtxPartitionNodeScanner;
 import org.eclipse.statet.docmlet.tex.core.source.LtxPartitionNodeType;
@@ -67,10 +67,10 @@
 	
 	private final RChunkPartitionNodeScanner rScanner= new RChunkPartitionNodeScanner();
 	
-	private WrappedPartitionScan rScan;
+	private WrappedPartitionNodeScan rScan;
 	
 	private int rStartOffset;
-	private ITreePartitionNode rStartNode;
+	private TreePartitionNode rStartNode;
 	
 	
 	public LtxRweavePartitionNodeScanner() {
@@ -83,8 +83,8 @@
 	
 	
 	@Override
-	public void execute(final ITreePartitionNodeScan scan) {
-		this.rScan= new WrappedPartitionScan(scan);
+	public void execute(final TreePartitionNodeScan scan) {
+		this.rScan= new WrappedPartitionNodeScan(scan);
 		
 		super.execute(scan);
 		
@@ -94,12 +94,12 @@
 	
 	@Override
 	protected void init() {
-		final ITreePartitionNode beginNode= getScan().getBeginNode();
+		final TreePartitionNode beginNode= getScan().getBeginNode();
 		if (beginNode.getType() instanceof RPartitionNodeType) {
 			this.rStartOffset= getScan().getStartOffset();
 			this.rStartNode= beginNode;
 			
-			final ITreePartitionNode rRootNode= RPartitionNodeScanner.findRRootNode(beginNode);
+			final TreePartitionNode rRootNode= RPartitionNodeScanner.findRRootNode(beginNode);
 			if (rRootNode.getType() == RChunkPartitionNodeScanner.R_CHUNK_BASE_TYPE) {
 				initNode(rRootNode, RCHUNK_LTX_TYPE);
 			}
@@ -148,7 +148,7 @@
 	
 	@Override
 	protected void processExt(final LtxPartitionNodeType type) {
-		final ITreePartitionNode node;
+		final TreePartitionNode node;
 		switch (type.getScannerState()) {
 		
 		case S_RVERB:
@@ -172,7 +172,7 @@
 			this.rScanner.execute(this.rScan);
 			this.rScan.exit();
 			
-			final ITreePartitionNode chunkNode= getNode();
+			final TreePartitionNode chunkNode= getNode();
 			exitNode();
 			setRange(chunkNode.getEndOffset(), getScan().getDocument().getLength());
 			return;
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/sourceediting/LtxRweaveSourceViewerConfiguration.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/sourceediting/LtxRweaveSourceViewerConfiguration.java
index c6d9aa4..29528c6 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/sourceediting/LtxRweaveSourceViewerConfiguration.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/sourceediting/LtxRweaveSourceViewerConfiguration.java
@@ -31,7 +31,7 @@
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
 import org.eclipse.statet.ecommons.text.ICharPairMatcher;
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartition;
 import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionUtils;
 import org.eclipse.statet.ecommons.text.ui.presentation.SingleTokenScanner;
@@ -80,7 +80,7 @@
 	
 	private static class LtxConfiguration extends LtxSourceViewerConfiguration {
 		
-		public LtxConfiguration(final IDocContentSections documentContentInfo, final int flags,
+		public LtxConfiguration(final DocContentSections documentContentInfo, final int flags,
 				final ISourceEditor editor,
 				final TexCoreAccess texCoreAccess,
 				final IPreferenceStore preferenceStore) {
@@ -128,7 +128,7 @@
 	
 	private static class RChunkConfiguration extends RSourceViewerConfiguration {
 		
-		public RChunkConfiguration(final IDocContentSections documentContentInfo, final int flags,
+		public RChunkConfiguration(final DocContentSections documentContentInfo, final int flags,
 				final IRSourceEditor sourceEditor,
 				final IRCoreAccess coreAccess,
 				final IPreferenceStore preferenceStore) {
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveResourceSourceUnit.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveResourceSourceUnit.java
index 0185d15..152428b 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveResourceSourceUnit.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveResourceSourceUnit.java
@@ -17,7 +17,7 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IProgressMonitor;
 
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 
 import org.eclipse.statet.docmlet.wikitext.core.WikitextCore;
 import org.eclipse.statet.docmlet.wikitext.core.WikitextCoreAccess;
@@ -56,7 +56,7 @@
 	}
 	
 	@Override
-	public IDocContentSections getDocumentContentInfo() {
+	public DocContentSections getDocumentContentInfo() {
 		return WikidocRweaveDocumentContentInfo.INSTANCE;
 	}
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweaveDocumentContentInfo.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweaveDocumentContentInfo.java
index 3a73710..448fe61 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweaveDocumentContentInfo.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweaveDocumentContentInfo.java
@@ -21,9 +21,11 @@
 import org.eclipse.jface.text.IRegion;
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.ecommons.text.core.sections.AbstractDocContentSections;
-import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode;
+import org.eclipse.statet.ecommons.text.core.sections.BasicDocContentSections;
+import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNode;
 
 import org.eclipse.statet.docmlet.tex.core.source.TexDocumentConstants;
 import org.eclipse.statet.docmlet.wikitext.core.source.WikitextDocumentConstants;
@@ -33,7 +35,8 @@
 import org.eclipse.statet.yaml.core.source.YamlDocumentConstants;
 
 
-public class WikidocRweaveDocumentContentInfo extends AbstractDocContentSections
+@NonNullByDefault
+public class WikidocRweaveDocumentContentInfo extends BasicDocContentSections
 		implements DocContentSectionsRweaveExtension {
 	
 	
@@ -77,32 +80,32 @@
 	
 	
 	@Override
-	public ITreePartitionNode getRChunkRegion(final IDocument document, final int offset)
+	public @Nullable TreePartitionNode getRChunkRegion(final IDocument document, final int offset)
 			throws BadLocationException {
 		return this.rweaveImpl.getRChunkRegion(document, offset);
 	}
 	
 	@Override
-	public List<ITreePartitionNode> getRChunkRegions(final IDocument document,
+	public List<TreePartitionNode> getRChunkRegions(final IDocument document,
 			final int offset, final int length)
 			throws BadLocationException {
 		return this.rweaveImpl.getRChunkCodeRegions(document, offset, length);
 	}
 	
 	@Override
-	public IRegion getRChunkContentRegion(final IDocument document, final int offset)
+	public @Nullable IRegion getRChunkContentRegion(final IDocument document, final int offset)
 			throws BadLocationException {
 		return this.rweaveImpl.getRChunkContentRegion(document, offset);
 	}
 	
 	@Override
-	public ITreePartitionNode getRCodeRegion(final IDocument document, final int offset)
+	public @Nullable TreePartitionNode getRCodeRegion(final IDocument document, final int offset)
 			throws BadLocationException {
 		return this.rweaveImpl.getRCodeRegion(document, offset);
 	}
 	
 	@Override
-	public List<ITreePartitionNode> getRChunkCodeRegions(final IDocument document,
+	public List<TreePartitionNode> getRChunkCodeRegions(final IDocument document,
 			final int offset, final int length)
 			throws BadLocationException {
 		return this.rweaveImpl.getRChunkCodeRegions(document, offset, length);
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweavePartitionNodeScanner.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweavePartitionNodeScanner.java
index 57ea766..e8283ed 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweavePartitionNodeScanner.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweavePartitionNodeScanner.java
@@ -16,8 +16,8 @@
 
 import static org.eclipse.statet.redocs.r.core.source.AbstractRChunkPartitionNodeScanner.R_CHUNK_BASE_TYPE;
 
-import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode;
-import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNodeType;
+import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNode;
+import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNodeType;
 
 import org.eclipse.statet.docmlet.wikitext.core.markup.WikitextMarkupLanguage;
 import org.eclipse.statet.docmlet.wikitext.core.source.EmbeddingAttributes;
@@ -55,7 +55,7 @@
 			}
 		}
 		
-		final ITreePartitionNode beginNode= getScan().getBeginNode();
+		final TreePartitionNode beginNode= getScan().getBeginNode();
 		if (beginNode.getType() instanceof RPartitionNodeType) {
 			assert (false);
 //			this.rBeginNode= beginNode;
@@ -88,7 +88,7 @@
 	}
 	
 	@Override
-	protected void endEmbeddingBlock(final ITreePartitionNodeType type, final Embedding embedding) {
+	protected void endEmbeddingBlock(final TreePartitionNodeType type, final Embedding embedding) {
 		if (type instanceof RPartitionNodeType) {
 //			embedded.setContentEndOffset(getScan().getDocument().getLength());
 			embedding.executeForeignScanner(this.rScanner);
@@ -112,7 +112,7 @@
 	}
 	
 	@Override
-	protected void endEmbeddingSpan(final ITreePartitionNodeType type, final Embedding embedding) {
+	protected void endEmbeddingSpan(final TreePartitionNodeType type, final Embedding embedding) {
 		if (type instanceof RPartitionNodeType) {
 			if (embedding.getContentEndOffset() < 0) {
 				embedding.setContentEndOffset(getEventEndOffset() - 1);
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikidocRweaveSourceViewerConfiguration.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikidocRweaveSourceViewerConfiguration.java
index f5ca7f6..1596757 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikidocRweaveSourceViewerConfiguration.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikidocRweaveSourceViewerConfiguration.java
@@ -32,7 +32,7 @@
 
 import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
 import org.eclipse.statet.ecommons.text.ICharPairMatcher;
-import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
+import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartition;
 import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionUtils;
 import org.eclipse.statet.ecommons.text.ui.presentation.SingleTokenScanner;
@@ -83,7 +83,7 @@
 	
 	private static class WikidocConfiguration extends WikidocSourceViewerConfiguration {
 		
-		public WikidocConfiguration(final IDocContentSections documentContentInfo, final int flags,
+		public WikidocConfiguration(final DocContentSections documentContentInfo, final int flags,
 				final ISourceEditor editor,
 				final WikitextCoreAccess wikitextCoreAccess,
 				final IPreferenceStore preferenceStore) {
@@ -136,7 +136,7 @@
 	
 	private static class RChunkConfiguration extends RSourceViewerConfiguration {
 		
-		public RChunkConfiguration(final IDocContentSections documentContentInfo, final int flags,
+		public RChunkConfiguration(final DocContentSections documentContentInfo, final int flags,
 				final IRSourceEditor sourceEditor,
 				final IRCoreAccess coreAccess, final IPreferenceStore preferenceStore) {
 			super(documentContentInfo, flags, sourceEditor, coreAccess, preferenceStore, null);
