diff --git a/redocs/org.eclipse.statet.redocs.r/plugin.xml b/redocs/org.eclipse.statet.redocs.r/plugin.xml
index e3fe3ba..9a8de6c 100644
--- a/redocs/org.eclipse.statet.redocs.r/plugin.xml
+++ b/redocs/org.eclipse.statet.redocs.r/plugin.xml
@@ -35,7 +35,7 @@
          <with
                variable="activePart">
             <instanceof
-                  value="org.eclipse.statet.redocs.r.ui.sourceediting.IRweaveEditor">
+                  value="org.eclipse.statet.redocs.r.ui.sourceediting.RweaveEditor">
             </instanceof>
          </with>
       </definition>
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 2a13aa6..f4e1563 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
@@ -44,7 +44,7 @@
 import org.eclipse.statet.r.launching.RCodeLaunching;
 import org.eclipse.statet.r.ui.RUI;
 import org.eclipse.statet.redocs.r.RedocsRweave;
-import org.eclipse.statet.redocs.r.core.source.IDocContentSectionsRweaveExtension;
+import org.eclipse.statet.redocs.r.core.source.DocContentSectionsRweaveExtension;
 
 
 /**
@@ -69,7 +69,7 @@
 		
 		private AbstractDocument document;
 		
-		private IDocContentSectionsRweaveExtension docContentSections;
+		private DocContentSectionsRweaveExtension docContentSections;
 		
 		private ITextSelection selection;
 		
@@ -113,8 +113,8 @@
 						if (UIAccess.isOkToUse(viewer)) {
 							data.document= (AbstractDocument) viewer.getDocument();
 							final IDocContentSections docContentInfo= sourceEditor.getDocumentContentInfo();
-							if (docContentInfo instanceof IDocContentSectionsRweaveExtension) {
-								data.docContentSections= (IDocContentSectionsRweaveExtension) docContentInfo;
+							if (docContentInfo instanceof DocContentSectionsRweaveExtension) {
+								data.docContentSections= (DocContentSectionsRweaveExtension) docContentInfo;
 							}
 							data.selection= (ITextSelection) viewer.getSelection();
 						}
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 110abb1..f9d6f06 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
@@ -38,7 +38,7 @@
 		
 		@Override
 		public String getPartitionType() {
-			return IRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE;
+			return RweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE;
 		}
 		
 		@Override
@@ -52,7 +52,7 @@
 		
 		@Override
 		public String getPartitionType() {
-			return IRweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE;
+			return RweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE;
 		}
 		
 		@Override
@@ -76,7 +76,7 @@
 		
 		@Override
 		public String getPartitionType() {
-			return IRweaveDocumentConstants.RCHUNK_COMMENT_CONTENT_TYPE;
+			return RweaveDocumentConstants.RCHUNK_COMMENT_CONTENT_TYPE;
 		}
 		
 		@Override
@@ -114,7 +114,7 @@
 		super.init();
 		
 		final ITreePartitionNode rootNode= getRootNode();
-		if (rootNode.getType().getPartitionType() == IRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE) {
+		if (rootNode.getType().getPartitionType() == RweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE) {
 			this.chunkNode= rootNode;
 		}
 		this.chunkLine= NONE;
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/IDocContentSectionsRweaveExtension.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/DocContentSectionsRweaveExtension.java
similarity index 69%
rename from redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/IDocContentSectionsRweaveExtension.java
rename to redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/DocContentSectionsRweaveExtension.java
index 511a5fc..e0a6292 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/IDocContentSectionsRweaveExtension.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/DocContentSectionsRweaveExtension.java
@@ -24,22 +24,24 @@
 import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode;
 
 
-public interface IDocContentSectionsRweaveExtension extends IDocContentSections {
+public interface DocContentSectionsRweaveExtension extends IDocContentSections {
 	
 	
-	ITreePartitionNode getRChunkRegion(IDocument document, int offset)
+	ITreePartitionNode getRChunkRegion(final IDocument document, final int offset)
 			throws BadLocationException;
 	
-	List<ITreePartitionNode> getRChunkRegions(IDocument document, int offset, int length)
+	List<ITreePartitionNode> getRChunkRegions(final IDocument document,
+			final int offset, final int length)
 			throws BadLocationException;
 	
-	IRegion getRChunkContentRegion(IDocument document, int offset)
+	IRegion getRChunkContentRegion(final IDocument document, final int offset)
 			throws BadLocationException;
 	
-	List<ITreePartitionNode> getRChunkCodeRegions(IDocument document, int offset, int length)
+	List<ITreePartitionNode> getRChunkCodeRegions(final IDocument document,
+			final int offset, final int length)
 			throws BadLocationException;
 	
-	ITreePartitionNode getRCodeRegion(IDocument document, int offset)
+	ITreePartitionNode 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 13057b2..1dd7134 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
@@ -47,7 +47,7 @@
 	public ITreePartitionNode getRChunkRegion(final IDocument document, final int offset)
 			throws BadLocationException {
 		return TreePartitionUtils.searchNode(document, this.sections.getPartitioning(), offset, false,
-				IRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE );
+				RweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE );
 	}
 	
 	public List<ITreePartitionNode> getRChunkRegions(final IDocument document,
@@ -75,7 +75,7 @@
 			if (child.getStartOffset() >= endOffset) {
 				break;
 			}
-			if (child.getType().getPartitionType() == IRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE) {
+			if (child.getType().getPartitionType() == RweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE) {
 				nodes.add(child);
 			}
 			else {
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/IRweaveDocumentConstants.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/RweaveDocumentConstants.java
similarity index 93%
rename from redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/IRweaveDocumentConstants.java
rename to redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/RweaveDocumentConstants.java
index 123f387..6909890 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/IRweaveDocumentConstants.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/source/RweaveDocumentConstants.java
@@ -16,11 +16,13 @@
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
 import org.eclipse.statet.ecommons.text.core.IPartitionConstraint;
 
 
-public interface IRweaveDocumentConstants {
+@NonNullByDefault
+public interface RweaveDocumentConstants {
 	
 	
 	String RCHUNK_BASE_CONTENT_TYPE= "RweaveChunk.Base"; //$NON-NLS-1$
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/debug/RweaveSubmitContentHandler.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/debug/RweaveSubmitContentHandler.java
index 0ec9976..81bb804 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/debug/RweaveSubmitContentHandler.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/debug/RweaveSubmitContentHandler.java
@@ -27,7 +27,7 @@
 import org.eclipse.statet.ecommons.text.TextUtil;
 
 import org.eclipse.statet.r.launching.ICodeSubmitContentHandler;
-import org.eclipse.statet.redocs.r.core.source.IDocContentSectionsRweaveExtension;
+import org.eclipse.statet.redocs.r.core.source.DocContentSectionsRweaveExtension;
 
 
 public class RweaveSubmitContentHandler implements ICodeSubmitContentHandler {
@@ -35,11 +35,11 @@
 	
 	private final IDocumentSetupParticipant docSetup;
 	
-	private final IDocContentSectionsRweaveExtension docContentSections;
+	private final DocContentSectionsRweaveExtension docContentSections;
 	
 	
 	public RweaveSubmitContentHandler(final IDocumentSetupParticipant docSetup,
-			final IDocContentSectionsRweaveExtension docContentSections) {
+			final DocContentSectionsRweaveExtension docContentSections) {
 		this.docSetup= docSetup;
 		this.docContentSections= docContentSections;
 	}
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RConsoleOperationContext.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RConsoleOperationContext.java
index 744c546..9996423 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RConsoleOperationContext.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RConsoleOperationContext.java
@@ -31,7 +31,7 @@
 
 import org.eclipse.statet.ecommons.ts.ui.ToolRunnableDecorator;
 
-import org.eclipse.statet.docmlet.base.ui.DocBaseUI;
+import org.eclipse.statet.docmlet.base.ui.DocmlBaseUI;
 import org.eclipse.statet.docmlet.base.ui.processing.DocProcessingToolOperationContext;
 import org.eclipse.statet.docmlet.base.ui.processing.DocProcessingToolProcess;
 import org.eclipse.statet.internal.redocs.r.Messages;
@@ -80,7 +80,7 @@
 			switch (event) {
 			case REMOVING_FROM:
 			case BEING_ABANDONED:
-				RConsoleOperationContext.this.toolProcess.log(new CancelStatus(DocBaseUI.BUNDLE_ID,
+				RConsoleOperationContext.this.toolProcess.log(new CancelStatus(DocmlBaseUI.BUNDLE_ID,
 						Messages.ProcessingOperationContext_RConsole_RTask_Canceled_label) );
 				cleanR();
 				cancel();
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RunRCmdToolOperation.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RunRCmdToolOperation.java
index c13061e..b94e293 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RunRCmdToolOperation.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/processing/RunRCmdToolOperation.java
@@ -28,10 +28,10 @@
 import org.eclipse.statet.ecommons.variables.core.VariableText2;
 import org.eclipse.statet.ecommons.variables.core.VariableUtils;
 
-import org.eclipse.statet.docmlet.base.ui.DocBaseUI;
+import org.eclipse.statet.docmlet.base.ui.DocmlBaseUI;
 import org.eclipse.statet.docmlet.base.ui.processing.DocProcessingConfig;
 import org.eclipse.statet.docmlet.base.ui.processing.operations.AbstractLaunchConfigOperation;
-import org.eclipse.statet.docmlet.base.ui.processing.operations.RunExternalProgramOperation.IExternalProgramLaunchConfig;
+import org.eclipse.statet.docmlet.base.ui.processing.operations.RunExternalProgramOperation.ExternalProgramLaunchConfig;
 import org.eclipse.statet.internal.redocs.r.Messages;
 import org.eclipse.statet.r.cmd.ui.launching.RCmdLaunching;
 
@@ -72,15 +72,15 @@
 			if (value.isEmpty()) {
 				value= VariableUtils.getValue(getStepConfig().getToolConfig().getVariables()
 						.get(DocProcessingConfig.WD_LOC_VAR_NAME) );
-				additionalAttributes.put(IExternalProgramLaunchConfig.WORKING_DIRECTORY_ATTR_NAME, value);
+				additionalAttributes.put(ExternalProgramLaunchConfig.WORKING_DIRECTORY_ATTR_NAME, value);
 			}
 			else {
 				value= variableResolver.performStringSubstitution(value, null);
-				additionalAttributes.put(IExternalProgramLaunchConfig.ARGUMENTS_ATTR_NAME, value);
+				additionalAttributes.put(ExternalProgramLaunchConfig.ARGUMENTS_ATTR_NAME, value);
 			}
 		}
 		catch (final CoreException e) {
-			throw new CoreException(new Status(IStatus.ERROR, DocBaseUI.BUNDLE_ID,
+			throw new CoreException(new Status(IStatus.ERROR, DocmlBaseUI.BUNDLE_ID,
 					NLS.bind(Messages.ProcessingOperation_RunRCmdTool_Wd_error_SpecInvalid_message,
 							e.getMessage() )));
 		}
@@ -89,11 +89,11 @@
 			String value= config.getAttribute(RCmdLaunching.R_CMD_RESOURCE_ATTR_NAME, ""); //$NON-NLS-1$
 			if (!value.isEmpty()) {
 				value= variableResolver.performStringSubstitution(value, null);
-				additionalAttributes.put(IExternalProgramLaunchConfig.ARGUMENTS_ATTR_NAME, value);
+				additionalAttributes.put(ExternalProgramLaunchConfig.ARGUMENTS_ATTR_NAME, value);
 			}
 		}
 		catch (final CoreException e) {
-			throw new CoreException(new Status(IStatus.ERROR, DocBaseUI.BUNDLE_ID,
+			throw new CoreException(new Status(IStatus.ERROR, DocmlBaseUI.BUNDLE_ID,
 					NLS.bind(Messages.ProcessingOperation_RunRCmdTool_RCmdResource_error_SpecInvalid_message,
 							e.getMessage() )));
 		}
@@ -102,11 +102,11 @@
 			String value= config.getAttribute(RCmdLaunching.R_CMD_OPTIONS_ATTR_NAME, ""); //$NON-NLS-1$
 			if (!value.isEmpty()) {
 				value= variableResolver.performStringSubstitution(value, null);
-				additionalAttributes.put(IExternalProgramLaunchConfig.ARGUMENTS_ATTR_NAME, value);
+				additionalAttributes.put(ExternalProgramLaunchConfig.ARGUMENTS_ATTR_NAME, value);
 			}
 		}
 		catch (final CoreException e) {
-			throw new CoreException(new Status(IStatus.ERROR, DocBaseUI.BUNDLE_ID,
+			throw new CoreException(new Status(IStatus.ERROR, DocmlBaseUI.BUNDLE_ID,
 					NLS.bind(Messages.ProcessingOperation_RunRCmdTool_RCmdOptions_error_SpecInvalid_message,
 							e.getMessage() )));
 		}
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/sourceediting/IRweaveEditor.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/sourceediting/RweaveEditor.java
similarity index 74%
rename from redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/sourceediting/IRweaveEditor.java
rename to redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/sourceediting/RweaveEditor.java
index f0a14a1..78acf6f 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/sourceediting/IRweaveEditor.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/sourceediting/RweaveEditor.java
@@ -14,14 +14,17 @@
 
 package org.eclipse.statet.redocs.r.ui.sourceediting;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.r.ui.editors.IRSourceEditor;
-import org.eclipse.statet.redocs.r.core.source.IDocContentSectionsRweaveExtension;
+import org.eclipse.statet.redocs.r.core.source.DocContentSectionsRweaveExtension;
 
 
-public interface IRweaveEditor extends IRSourceEditor {
+@NonNullByDefault
+public interface RweaveEditor extends IRSourceEditor {
 	
 	
 	@Override
-	IDocContentSectionsRweaveExtension getDocumentContentInfo();
+	DocContentSectionsRweaveExtension getDocumentContentInfo();
 	
 }
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/sourceediting/actions/RweaveToggleCommentHandler.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/sourceediting/actions/RweaveToggleCommentHandler.java
index 333cf25..0cfe9fd 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/sourceediting/actions/RweaveToggleCommentHandler.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/ui/sourceediting/actions/RweaveToggleCommentHandler.java
@@ -25,7 +25,7 @@
 import org.eclipse.statet.ltk.ui.EditorUtils;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor1;
 import org.eclipse.statet.ltk.ui.sourceediting.actions.ToggleCommentHandler;
-import org.eclipse.statet.redocs.r.ui.sourceediting.IRweaveEditor;
+import org.eclipse.statet.redocs.r.ui.sourceediting.RweaveEditor;
 
 
 public abstract class RweaveToggleCommentHandler extends ToggleCommentHandler {
@@ -33,7 +33,7 @@
 	
 	public RweaveToggleCommentHandler(final SourceEditor1 editor) {
 		super(editor);
-		assert (editor instanceof IRweaveEditor);
+		assert (editor instanceof RweaveEditor);
 	}
 	
 	
@@ -67,7 +67,7 @@
 			throws BadLocationException, BadPartitioningException {
 		final IRegion block= EditorUtils.getTextBlockFromSelection(document,
 				selection.getOffset(), selection.getLength() );
-		final IRegion rContent= ((IRweaveEditor) getEditor()).getDocumentContentInfo()
+		final IRegion rContent= ((RweaveEditor) getEditor()).getDocumentContentInfo()
 				.getRChunkContentRegion(document, block.getOffset());
 		return (rContent == null || block.getOffset() < rContent.getOffset()
 				|| block.getOffset() + block.getLength() > rContent.getOffset() + rContent.getLength() );
diff --git a/redocs/org.eclipse.statet.redocs.tex.r.debug/plugin.xml b/redocs/org.eclipse.statet.redocs.tex.r.debug/plugin.xml
index d0eb0e2..7b8164d 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r.debug/plugin.xml
+++ b/redocs/org.eclipse.statet.redocs.tex.r.debug/plugin.xml
@@ -21,7 +21,7 @@
    <extension
          point="org.eclipse.core.runtime.adapters">
       <factory
-            adaptableType="org.eclipse.statet.internal.redocs.tex.r.ui.editors.LtxRweaveEditor"
+            adaptableType="org.eclipse.statet.internal.redocs.tex.r.ui.editors.LtxRweaveDocEditor"
             class="org.eclipse.statet.internal.redocs.tex.r.ui.debug.RetargettableActionAdapterFactory">
          <adapter
                type="org.eclipse.debug.ui.actions.IToggleBreakpointsTarget">
diff --git a/redocs/org.eclipse.statet.redocs.tex.r.debug/src/org/eclipse/statet/internal/redocs/tex/r/ui/debug/ToggleBreakpointAdapter.java b/redocs/org.eclipse.statet.redocs.tex.r.debug/src/org/eclipse/statet/internal/redocs/tex/r/ui/debug/ToggleBreakpointAdapter.java
index be0c61e..c9adc8c 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r.debug/src/org/eclipse/statet/internal/redocs/tex/r/ui/debug/ToggleBreakpointAdapter.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r.debug/src/org/eclipse/statet/internal/redocs/tex/r/ui/debug/ToggleBreakpointAdapter.java
@@ -30,7 +30,7 @@
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.r.core.source.IRDocumentConstants;
 import org.eclipse.statet.r.debug.ui.actions.RToggleBreakpointAdapter;
-import org.eclipse.statet.redocs.tex.r.ui.editors.ILtxRweaveEditor;
+import org.eclipse.statet.redocs.tex.r.ui.editors.LtxRweaveEditor;
 
 
 public class ToggleBreakpointAdapter implements IToggleBreakpointsTargetExtension {
@@ -46,7 +46,7 @@
 	
 	@Override
 	public boolean canToggleLineBreakpoints(final IWorkbenchPart part, final ISelection selection) {
-		final ILtxRweaveEditor editor= getREditor(part, selection);
+		final LtxRweaveEditor editor= getREditor(part, selection);
 		return (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
 				&& selection instanceof ITextSelection );
 	}
@@ -54,7 +54,7 @@
 	@Override
 	public void toggleLineBreakpoints(final IWorkbenchPart part, final ISelection selection)
 			throws CoreException {
-		final ILtxRweaveEditor editor= getREditor(part, selection);
+		final LtxRweaveEditor editor= getREditor(part, selection);
 		if (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
 				&& selection instanceof ITextSelection) {
 			if (isRChunk(editor, (ITextSelection) selection) ) {
@@ -68,14 +68,14 @@
 	
 	@Override
 	public boolean canToggleMethodBreakpoints(final IWorkbenchPart part, final ISelection selection) {
-		final ILtxRweaveEditor editor= getREditor(part, selection);
+		final LtxRweaveEditor editor= getREditor(part, selection);
 		return (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
 				&& selection instanceof ITextSelection );
 	}
 	
 	@Override
 	public void toggleMethodBreakpoints(final IWorkbenchPart part, final ISelection selection) throws CoreException {
-		final ILtxRweaveEditor editor= getREditor(part, selection);
+		final LtxRweaveEditor editor= getREditor(part, selection);
 		if (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
 				&& selection instanceof ITextSelection) {
 			if (isRChunk(editor, (ITextSelection) selection) ) {
@@ -99,7 +99,7 @@
 	
 	@Override
 	public boolean canToggleBreakpoints(final IWorkbenchPart part, final ISelection selection) {
-		final ILtxRweaveEditor editor= getREditor(part, selection);
+		final LtxRweaveEditor editor= getREditor(part, selection);
 		return (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
 				&& selection instanceof ITextSelection );
 	}
@@ -107,7 +107,7 @@
 	@Override
 	public void toggleBreakpoints(final IWorkbenchPart part, final ISelection selection)
 			throws CoreException {
-		final ILtxRweaveEditor editor= getREditor(part, selection);
+		final LtxRweaveEditor editor= getREditor(part, selection);
 		if (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
 				&& selection instanceof ITextSelection) {
 			if (isRChunk(editor, (ITextSelection) selection) ) {
@@ -119,18 +119,18 @@
 		}
 	}
 	
-	private ILtxRweaveEditor getREditor(final IWorkbenchPart part, final ISelection selection) {
-		if (part instanceof ILtxRweaveEditor) {
-			return (ILtxRweaveEditor) part;
+	private LtxRweaveEditor getREditor(final IWorkbenchPart part, final ISelection selection) {
+		if (part instanceof LtxRweaveEditor) {
+			return (LtxRweaveEditor) part;
 		}
 		final Object adapter= part.getAdapter(ISourceEditor.class);
-		if (adapter instanceof ILtxRweaveEditor) {
-			return (ILtxRweaveEditor) adapter;
+		if (adapter instanceof LtxRweaveEditor) {
+			return (LtxRweaveEditor) adapter;
 		}
 		return null;
 	}
 	
-	private boolean isRChunk(final ILtxRweaveEditor editor, final ITextSelection selection) {
+	private boolean isRChunk(final LtxRweaveEditor editor, final ITextSelection selection) {
 		final SourceViewer viewer= editor.getViewer();
 		if (viewer != null) {
 			try {
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/plugin.xml b/redocs/org.eclipse.statet.redocs.tex.r/plugin.xml
index b1e0f34..1145ae0 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/plugin.xml
+++ b/redocs/org.eclipse.statet.redocs.tex.r/plugin.xml
@@ -136,7 +136,7 @@
          <with
                variable="activeEditor">
             <instanceof
-                  value="org.eclipse.statet.redocs.tex.r.ui.editors.ILtxRweaveEditor">
+                  value="org.eclipse.statet.redocs.tex.r.ui.editors.LtxRweaveEditor">
             </instanceof>
          </with>
       </definition>
@@ -148,7 +148,7 @@
          <with
                variable="activePart">
             <instanceof
-                  value="org.eclipse.statet.redocs.tex.r.ui.editors.ILtxRweaveEditor">
+                  value="org.eclipse.statet.redocs.tex.r.ui.editors.LtxRweaveEditor">
             </instanceof>
          </with>
       </definition>
@@ -158,7 +158,7 @@
          point="org.eclipse.ui.editors">
       <editor
             id="org.eclipse.statet.redocs.editors.LtxRweave"
-            class="org.eclipse.statet.internal.redocs.tex.r.ui.editors.LtxRweaveEditor"
+            class="org.eclipse.statet.internal.redocs.tex.r.ui.editors.LtxRweaveDocEditor"
             contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
             default="true"
             icon="icons/obj_16/ltx_rweave-file.png"
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/Messages.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/Messages.java
index 1b37fcd..79880b9 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/Messages.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/Messages.java
@@ -16,7 +16,11 @@
 
 import org.eclipse.osgi.util.NLS;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+
+@NonNullByDefault
+@SuppressWarnings("null")
 public class Messages extends NLS {
 	
 	public static String LtxCommand_SweaveOpts_description;
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/core/CurlyExpandEmbeddedScanner.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/core/CurlyExpandEmbeddedScanner.java
index 99258e3..0e37dca 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/core/CurlyExpandEmbeddedScanner.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/core/CurlyExpandEmbeddedScanner.java
@@ -14,19 +14,21 @@
 
 package org.eclipse.statet.internal.redocs.tex.r.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.text.core.input.TextParserInput;
 
-import org.eclipse.statet.docmlet.tex.core.parser.ICustomScanner;
+import org.eclipse.statet.docmlet.tex.core.parser.CustomScanner;
 import org.eclipse.statet.docmlet.tex.core.parser.LtxLexer;
 
 
 /**
  * Scanner supporting expand variables {{ ... }}.
  */
-public class CurlyExpandEmbeddedScanner implements ICustomScanner {
+@NonNullByDefault
+public class CurlyExpandEmbeddedScanner implements CustomScanner {
 	
 	
-	protected static final ICustomScanner INSTANCE= new CurlyExpandEmbeddedScanner();
+	protected static final CustomScanner INSTANCE= new CurlyExpandEmbeddedScanner();
 	
 	
 	protected CurlyExpandEmbeddedScanner() {
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/core/LtxRweavePersistenceUnitFactory.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/core/LtxRweavePersistenceUnitFactory.java
index 63522bf..79f9ee4 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/core/LtxRweavePersistenceUnitFactory.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/core/LtxRweavePersistenceUnitFactory.java
@@ -16,7 +16,7 @@
 
 import org.eclipse.core.resources.IFile;
 
-import org.eclipse.statet.internal.redocs.tex.r.model.LtxRweaveSourceUnit;
+import org.eclipse.statet.internal.redocs.tex.r.model.LtxRweaveResourceSourceUnit;
 import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
 import org.eclipse.statet.ltk.model.core.impl.AbstractFilePersistenceSourceUnitFactory;
 
@@ -30,7 +30,7 @@
 	
 	@Override
 	protected ISourceUnit createSourceUnit(final String id, final IFile file) {
-		return new LtxRweaveSourceUnit(id, file);
+		return new LtxRweaveResourceSourceUnit(id, file);
 	}
 	
 }
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/core/ISweaveLtxCommands.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/core/SweaveLtxCommands.java
similarity index 87%
rename from redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/core/ISweaveLtxCommands.java
rename to redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/core/SweaveLtxCommands.java
index 5be6bc9..f052f96 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/core/ISweaveLtxCommands.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/core/SweaveLtxCommands.java
@@ -15,16 +15,18 @@
 package org.eclipse.statet.internal.redocs.tex.r.core;
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
 import org.eclipse.statet.docmlet.tex.core.commands.Argument;
 import org.eclipse.statet.docmlet.tex.core.commands.TexCommand;
 import org.eclipse.statet.docmlet.tex.core.commands.TexEmbedCommand;
-import org.eclipse.statet.docmlet.tex.core.parser.ICustomScanner;
+import org.eclipse.statet.docmlet.tex.core.parser.CustomScanner;
 import org.eclipse.statet.internal.redocs.tex.r.Messages;
 import org.eclipse.statet.r.core.model.RModel;
 
 
-public interface ISweaveLtxCommands {
+@NonNullByDefault
+public interface SweaveLtxCommands {
 	
 	
 	TexCommand SWEAVE_SweaveOpts_COMMANDS= new TexCommand(0,
@@ -38,7 +40,7 @@
 			), Messages.LtxCommand_Sexpr_description) {
 		
 		@Override
-		public ICustomScanner getArgumentScanner(final int argIdx) {
+		public CustomScanner getArgumentScanner(final int argIdx) {
 			return CurlyExpandEmbeddedScanner.INSTANCE;
 		}
 		
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRChunkReconciler.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRChunkReconciler.java
index 3dd5af9..f16495b 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRChunkReconciler.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRChunkReconciler.java
@@ -18,11 +18,11 @@
 
 import org.eclipse.statet.docmlet.tex.core.model.ILtxModelInfo;
 import org.eclipse.statet.redocs.r.core.model.RChunkReconciler;
-import org.eclipse.statet.redocs.tex.r.core.model.ILtxRweaveSourceUnit;
+import org.eclipse.statet.redocs.tex.r.core.model.LtxRweaveSourceUnit;
 
 
 class LtxRChunkReconciler extends RChunkReconciler
-		<ILtxRweaveSourceUnit, ILtxModelInfo, LtxRweaveSuModelContainer> {
+		<LtxRweaveSourceUnit, ILtxModelInfo, LtxRweaveSuModelContainer> {
 	
 	
 	private static LtxRChunkReconciler INSTANCE;
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveEditorWorkingCopy.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveEditorWorkingCopy.java
index 7a4f0bd..03e9e1d 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveEditorWorkingCopy.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveEditorWorkingCopy.java
@@ -16,20 +16,20 @@
 
 import org.eclipse.core.runtime.IProgressMonitor;
 
-import org.eclipse.statet.docmlet.tex.core.ITexCoreAccess;
-import org.eclipse.statet.docmlet.tex.core.model.ITexWorkspaceSourceUnit;
+import org.eclipse.statet.docmlet.tex.core.TexCoreAccess;
+import org.eclipse.statet.docmlet.tex.core.model.TexWorkspaceSourceUnit;
 import org.eclipse.statet.ltk.model.core.IModelManager;
 import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
 import org.eclipse.statet.ltk.ui.GenericEditorWorkspaceSourceUnitWorkingCopy2;
 import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.redocs.tex.r.core.model.ILtxRweaveSourceUnit;
+import org.eclipse.statet.redocs.tex.r.core.model.LtxRweaveSourceUnit;
 
 
 public class LtxRweaveEditorWorkingCopy
 		extends GenericEditorWorkspaceSourceUnitWorkingCopy2<LtxRweaveSuModelContainer>
-		implements ILtxRweaveSourceUnit, ITexWorkspaceSourceUnit, IRWorkspaceSourceUnit {
+		implements LtxRweaveSourceUnit, TexWorkspaceSourceUnit, IRWorkspaceSourceUnit {
 	
 	
 	public LtxRweaveEditorWorkingCopy(final IRWorkspaceSourceUnit from) {
@@ -43,13 +43,13 @@
 	
 	
 	@Override
-	public ITexCoreAccess getTexCoreAccess() {
-		return ((ILtxRweaveSourceUnit) getUnderlyingUnit()).getTexCoreAccess();
+	public TexCoreAccess getTexCoreAccess() {
+		return ((LtxRweaveSourceUnit) getUnderlyingUnit()).getTexCoreAccess();
 	}
 	
 	@Override
 	public IRCoreAccess getRCoreAccess() {
-		return ((ILtxRweaveSourceUnit) getUnderlyingUnit()).getRCoreAccess();
+		return ((LtxRweaveSourceUnit) getUnderlyingUnit()).getRCoreAccess();
 	}
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveSourceUnit.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveResourceSourceUnit.java
similarity index 85%
rename from redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveSourceUnit.java
rename to redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveResourceSourceUnit.java
index 9f406fc..bfbefca 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveSourceUnit.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveResourceSourceUnit.java
@@ -19,8 +19,8 @@
 
 import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
 
-import org.eclipse.statet.docmlet.tex.core.ITexCoreAccess;
-import org.eclipse.statet.docmlet.tex.core.model.ITexWorkspaceSourceUnit;
+import org.eclipse.statet.docmlet.tex.core.TexCoreAccess;
+import org.eclipse.statet.docmlet.tex.core.model.TexWorkspaceSourceUnit;
 import org.eclipse.statet.ltk.model.core.IModelManager;
 import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
 import org.eclipse.statet.ltk.model.core.impl.GenericResourceSourceUnit2;
@@ -31,16 +31,16 @@
 import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.redocs.tex.r.core.TexRweaveCore;
-import org.eclipse.statet.redocs.tex.r.core.model.ILtxRweaveSourceUnit;
+import org.eclipse.statet.redocs.tex.r.core.model.LtxRweaveSourceUnit;
 import org.eclipse.statet.redocs.tex.r.core.model.TexRweaveModel;
 import org.eclipse.statet.redocs.tex.r.core.source.LtxRweaveDocumentContentInfo;
 
 
-public class LtxRweaveSourceUnit extends GenericResourceSourceUnit2<LtxRweaveSuModelContainer> 
-		implements ILtxRweaveSourceUnit, ITexWorkspaceSourceUnit, IRWorkspaceSourceUnit {
+public class LtxRweaveResourceSourceUnit extends GenericResourceSourceUnit2<LtxRweaveSuModelContainer> 
+		implements LtxRweaveSourceUnit, TexWorkspaceSourceUnit, IRWorkspaceSourceUnit {
 	
 	
-	public LtxRweaveSourceUnit(final String id, final IFile file) {
+	public LtxRweaveResourceSourceUnit(final String id, final IFile file) {
 		super(id, file);
 	}
 	
@@ -61,7 +61,7 @@
 	}
 	
 	@Override
-	public ITexCoreAccess getTexCoreAccess() {
+	public TexCoreAccess getTexCoreAccess() {
 		return TexRweaveCore.TEX_WORKBENCH_ACCESS;
 	}
 	
@@ -105,7 +105,7 @@
 	@Override
 	@SuppressWarnings("unchecked")
 	public <T> T getAdapter(final Class<T> adapterType) {
-		if (adapterType == ITexCoreAccess.class) {
+		if (adapterType == TexCoreAccess.class) {
 			return (T) getTexCoreAccess();
 		}
 		if (adapterType == IRCoreAccess.class) {
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveSuModelContainer.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveSuModelContainer.java
index 09bfa9a..bc1ea4a 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveSuModelContainer.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveSuModelContainer.java
@@ -29,15 +29,15 @@
 import org.eclipse.statet.ltk.core.SourceContent;
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.redocs.tex.r.core.model.ILtxRweaveSourceUnit;
+import org.eclipse.statet.redocs.tex.r.core.model.LtxRweaveSourceUnit;
 import org.eclipse.statet.redocs.tex.r.core.model.TexRweaveModel;
 
 
-public class LtxRweaveSuModelContainer extends LtxSuModelContainer<ILtxRweaveSourceUnit>
+public class LtxRweaveSuModelContainer extends LtxSuModelContainer<LtxRweaveSourceUnit>
 		implements ILtxSuModelContainerEmbeddedExtension {
 	
 	
-	public LtxRweaveSuModelContainer(final ILtxRweaveSourceUnit su) {
+	public LtxRweaveSuModelContainer(final LtxRweaveSourceUnit su) {
 		super(su);
 	}
 	
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveTexBuildParticipant.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveTexBuildParticipant.java
index e736bf1..86aef4e 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveTexBuildParticipant.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveTexBuildParticipant.java
@@ -24,13 +24,13 @@
 import org.eclipse.statet.jcommons.collections.ImList;
 
 import org.eclipse.statet.docmlet.tex.core.TexBuildParticipant;
-import org.eclipse.statet.docmlet.tex.core.model.ITexWorkspaceSourceUnit;
 import org.eclipse.statet.docmlet.tex.core.model.LtxSuModelContainer;
+import org.eclipse.statet.docmlet.tex.core.model.TexWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.RProject;
 import org.eclipse.statet.r.core.RProjects;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.r.core.model.RModelIndexUpdate;
-import org.eclipse.statet.redocs.tex.r.core.model.ILtxRweaveSourceUnit;
+import org.eclipse.statet.redocs.tex.r.core.model.LtxRweaveSourceUnit;
 import org.eclipse.statet.redocs.tex.r.core.model.TexRweaveModel;
 
 
@@ -67,10 +67,10 @@
 	}
 	
 	@Override
-	public void ltxUnitUpdated(final ITexWorkspaceSourceUnit sourceUnit,
+	public void ltxUnitUpdated(final TexWorkspaceSourceUnit sourceUnit,
 			final IProgressMonitor monitor) throws CoreException {
-		if (sourceUnit instanceof ILtxRweaveSourceUnit) {
-			final ILtxRweaveSourceUnit unit= (ILtxRweaveSourceUnit) sourceUnit;
+		if (sourceUnit instanceof LtxRweaveSourceUnit) {
+			final LtxRweaveSourceUnit unit= (LtxRweaveSourceUnit) sourceUnit;
 			final LtxRweaveSuModelContainer modelContainer= (LtxRweaveSuModelContainer) unit.getAdapter(LtxSuModelContainer.class);
 			if (modelContainer != null) {
 				this.rIndexUpdate.update(unit,
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveEditor.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveDocEditor.java
similarity index 93%
rename from redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveEditor.java
rename to redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveDocEditor.java
index 35810b7..7c5c9af 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveEditor.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveDocEditor.java
@@ -43,8 +43,8 @@
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
 import org.eclipse.statet.base.ui.IStatetUIMenuIds;
-import org.eclipse.statet.docmlet.base.ui.DocBaseUI;
-import org.eclipse.statet.docmlet.base.ui.sourceediting.IDocEditor;
+import org.eclipse.statet.docmlet.base.ui.DocmlBaseUI;
+import org.eclipse.statet.docmlet.base.ui.sourceediting.DocEditor;
 import org.eclipse.statet.docmlet.tex.core.ast.TexAstNode;
 import org.eclipse.statet.docmlet.tex.core.model.TexModel;
 import org.eclipse.statet.docmlet.tex.ui.TexUI;
@@ -73,14 +73,14 @@
 import org.eclipse.statet.r.ui.editors.RDefaultFoldingProvider;
 import org.eclipse.statet.r.ui.editors.RMarkOccurrencesLocator;
 import org.eclipse.statet.r.ui.sourceediting.InsertAssignmentHandler;
-import org.eclipse.statet.redocs.r.core.source.IDocContentSectionsRweaveExtension;
+import org.eclipse.statet.redocs.r.core.source.DocContentSectionsRweaveExtension;
 import org.eclipse.statet.redocs.r.ui.RedocsRUI;
 import org.eclipse.statet.redocs.r.ui.sourceediting.actions.RweaveToggleCommentHandler;
 import org.eclipse.statet.redocs.tex.r.core.TexRweaveCore;
-import org.eclipse.statet.redocs.tex.r.core.model.ILtxRweaveSourceUnit;
+import org.eclipse.statet.redocs.tex.r.core.model.LtxRweaveSourceUnit;
 import org.eclipse.statet.redocs.tex.r.core.source.LtxRweaveDocumentContentInfo;
 import org.eclipse.statet.redocs.tex.r.ui.TexRweaveUI;
-import org.eclipse.statet.redocs.tex.r.ui.editors.ILtxRweaveEditor;
+import org.eclipse.statet.redocs.tex.r.ui.editors.LtxRweaveEditor;
 import org.eclipse.statet.redocs.tex.r.ui.sourceediting.LtxRweaveSourceViewerConfiguration;
 import org.eclipse.statet.redocs.tex.r.ui.sourceediting.LtxRweaveSourceViewerConfigurator;
 import org.eclipse.statet.rj.renv.core.REnv;
@@ -89,12 +89,12 @@
 /**
  * Editor for Sweave (LaTeX+R) code.
  */
-public class LtxRweaveEditor extends SourceEditor1 implements ILtxRweaveEditor, IDocEditor {
+public class LtxRweaveDocEditor extends SourceEditor1 implements LtxRweaveEditor, DocEditor {
 	
 	
 	private static final ImList<String> KEY_CONTEXTS= ImCollections.newIdentityList(
 			TexUI.EDITOR_CONTEXT_ID,
-			DocBaseUI.DOC_EDITOR_CONTEXT_ID,
+			DocmlBaseUI.DOC_EDITOR_CONTEXT_ID,
 			RedocsRUI.RWEAVE_EDITOR_CONTEXT_ID );
 			
 	private static final ImList<String> CONTEXT_IDS= ImCollections.concatList(
@@ -144,7 +144,7 @@
 	private LtxRweaveSourceViewerConfigurator combinedConfig;
 	
 	
-	public LtxRweaveEditor() {
+	public LtxRweaveDocEditor() {
 		super(TexRweaveCore.LTX_R_CONTENT_TYPE);
 	}
 	
@@ -194,20 +194,20 @@
 	}
 	
 	@Override
-	public IDocContentSectionsRweaveExtension getDocumentContentInfo() {
-		return (IDocContentSectionsRweaveExtension) super.getDocumentContentInfo();
+	public DocContentSectionsRweaveExtension getDocumentContentInfo() {
+		return (DocContentSectionsRweaveExtension) super.getDocumentContentInfo();
 	}
 	
 	@Override
-	public ILtxRweaveSourceUnit getSourceUnit() {
-		return (ILtxRweaveSourceUnit) super.getSourceUnit();
+	public LtxRweaveSourceUnit getSourceUnit() {
+		return (LtxRweaveSourceUnit) super.getSourceUnit();
 	}
 	
 	@Override
 	protected void setupConfiguration(final IEditorInput newInput) {
 		super.setupConfiguration(newInput);
 		
-		final ILtxRweaveSourceUnit su= getSourceUnit();
+		final LtxRweaveSourceUnit su= getSourceUnit();
 		this.combinedConfig.setSource(
 				(su != null) ? su.getTexCoreAccess() : TexRweaveCore.TEX_WORKBENCH_ACCESS,
 				(su != null) ? su.getRCoreAccess() : RCore.WORKBENCH_ACCESS );
@@ -285,7 +285,7 @@
 	@Override
 	protected void editorContextMenuAboutToShow(final IMenuManager m) {
 		super.editorContextMenuAboutToShow(m);
-		final ILtxRweaveSourceUnit su= getSourceUnit();
+		final LtxRweaveSourceUnit su= getSourceUnit();
 		
 		m.insertBefore(ADDITIONS_GROUP_ID, new Separator(IStatetUIMenuIds.GROUP_SUBMIT_MENU_ID));
 		final IContributionItem additions= m.find(ADDITIONS_GROUP_ID);
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveDocumentProvider.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveDocumentProvider.java
index 8ce1a66..bc6c02e 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveDocumentProvider.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveDocumentProvider.java
@@ -39,12 +39,12 @@
 import org.eclipse.statet.ltk.ui.sourceediting.SourceProblemAnnotation;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.r.ui.editors.REditorBuild;
-import org.eclipse.statet.redocs.tex.r.core.model.ILtxRweaveSourceUnit;
+import org.eclipse.statet.redocs.tex.r.core.model.LtxRweaveSourceUnit;
 import org.eclipse.statet.redocs.tex.r.core.model.TexRweaveModel;
 import org.eclipse.statet.redocs.tex.r.core.source.LtxRweaveDocumentSetupParticipant;
 
 
-public class LtxRweaveDocumentProvider extends SourceDocumentProvider<ILtxRweaveSourceUnit>
+public class LtxRweaveDocumentProvider extends SourceDocumentProvider<LtxRweaveSourceUnit>
 		implements Disposable {
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveEditorTemplatesPage.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveEditorTemplatesPage.java
index ae8deb1..39123c1 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveEditorTemplatesPage.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveEditorTemplatesPage.java
@@ -34,11 +34,11 @@
 import org.eclipse.statet.r.ui.editors.templates.REditorContext;
 import org.eclipse.statet.r.ui.editors.templates.REditorTemplateContextType;
 import org.eclipse.statet.r.ui.sourceediting.RTemplateSourceViewerConfigurator;
-import org.eclipse.statet.redocs.tex.r.core.source.ITexRweaveDocumentConstants;
+import org.eclipse.statet.redocs.tex.r.core.source.TexRweaveDocumentConstants;
 
 
 /**
- * Page for {@link LtxRweaveEditor} / {@link TemplatesView}
+ * Page for {@link LtxRweaveDocEditor} / {@link TemplatesView}
  * 
  * At moment only for R templates.
  */
@@ -48,7 +48,7 @@
 	private SourceEditorViewerConfigurator rPreviewConfigurator;
 	
 	
-	public LtxRweaveEditorTemplatesPage(final LtxRweaveEditor editor, final ISourceViewer viewer) {
+	public LtxRweaveEditorTemplatesPage(final LtxRweaveDocEditor editor, final ISourceViewer viewer) {
 		super(RUIPlugin.getInstance().getREditorTemplateStore(), editor, viewer);
 	}
 	
@@ -66,7 +66,7 @@
 	@Override
 	protected String[] getContextTypeIds(final IDocument document, final int offset) {
 		try {
-			final String contentType= TextUtilities.getContentType(document, ITexRweaveDocumentConstants.LTX_R_PARTITIONING, offset, true);
+			final String contentType= TextUtilities.getContentType(document, TexRweaveDocumentConstants.LTX_R_PARTITIONING, offset, true);
 			if (IRDocumentConstants.R_ANY_CONTENT_CONSTRAINT.matches(contentType)) {
 				return new String[] { REditorTemplateContextType.RCODE_CONTEXTTYPE_ID };
 			}
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/sourceediting/LtxRweaveTemplateViewerConfigurator.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/sourceediting/LtxRweaveTemplateViewerConfigurator.java
index b214623..74df5eb 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/sourceediting/LtxRweaveTemplateViewerConfigurator.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/sourceediting/LtxRweaveTemplateViewerConfigurator.java
@@ -18,7 +18,7 @@
 
 import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
 
-import org.eclipse.statet.docmlet.tex.core.ITexCoreAccess;
+import org.eclipse.statet.docmlet.tex.core.TexCoreAccess;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfiguration;
 import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.redocs.tex.r.core.source.LtxRweaveDocumentSetupParticipant;
@@ -29,7 +29,7 @@
 public class LtxRweaveTemplateViewerConfigurator extends LtxRweaveSourceViewerConfigurator {
 	
 	
-	public LtxRweaveTemplateViewerConfigurator(final ITexCoreAccess texCore, final IRCoreAccess rCore,
+	public LtxRweaveTemplateViewerConfigurator(final TexCoreAccess texCore, final IRCoreAccess rCore,
 			final TemplateVariableProcessor processor) {
 		super(texCore, rCore, new LtxRweaveSourceViewerConfiguration(SourceEditorViewerConfiguration.TEMPLATE_MODE) {
 			@Override
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/TexRweaveCore.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/TexRweaveCore.java
index 56639f5..468421a 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/TexRweaveCore.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/TexRweaveCore.java
@@ -14,15 +14,20 @@
 
 package org.eclipse.statet.redocs.tex.r.core;
 
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.content.IContentType;
 import org.eclipse.core.runtime.content.IContentTypeManager;
 
-import org.eclipse.statet.docmlet.tex.core.ITexCoreAccess;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.docmlet.tex.core.TexCore;
+import org.eclipse.statet.docmlet.tex.core.TexCoreAccess;
 import org.eclipse.statet.redocs.tex.r.core.util.TexRweaveCoreAccessWrapper;
 
 
+@NonNullByDefault
 public class TexRweaveCore {
 	
 	
@@ -38,11 +43,11 @@
 	
 	static {
 		final IContentTypeManager contentTypeManager= Platform.getContentTypeManager();
-		LTX_R_CONTENT_TYPE= contentTypeManager.getContentType(LTX_R_CONTENT_ID);
+		LTX_R_CONTENT_TYPE= nonNullAssert(contentTypeManager.getContentType(LTX_R_CONTENT_ID));
 	}
 	
 	
-	public static final ITexCoreAccess TEX_WORKBENCH_ACCESS= new TexRweaveCoreAccessWrapper(
+	public static final TexCoreAccess TEX_WORKBENCH_ACCESS= new TexRweaveCoreAccessWrapper(
 			TexCore.WORKBENCH_ACCESS );
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/model/ILtxRweaveSourceUnit.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/model/LtxRweaveSourceUnit.java
similarity index 78%
rename from redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/model/ILtxRweaveSourceUnit.java
rename to redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/model/LtxRweaveSourceUnit.java
index 7551266..6bf79c4 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/model/ILtxRweaveSourceUnit.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/model/LtxRweaveSourceUnit.java
@@ -14,11 +14,14 @@
 
 package org.eclipse.statet.redocs.tex.r.core.model;
 
-import org.eclipse.statet.docmlet.tex.core.model.ITexSourceUnit;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.docmlet.tex.core.model.TexSourceUnit;
 import org.eclipse.statet.r.core.model.IRSourceUnit;
 
 
-public interface ILtxRweaveSourceUnit extends IRSourceUnit, ITexSourceUnit {
+@NonNullByDefault
+public interface LtxRweaveSourceUnit extends IRSourceUnit, TexSourceUnit {
 	
 	
 }
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweaveBracketPairMatcher.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweaveBracketPairMatcher.java
index cedcb92..7fc8375 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweaveBracketPairMatcher.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweaveBracketPairMatcher.java
@@ -31,7 +31,7 @@
 		return new RBracketPairMatcher(scanner,
 				new String[] {
 					IRDocumentConstants.R_DEFAULT_CONTENT_TYPE,
-					ITexRweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE
+					TexRweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE
 				} );
 	}
 	
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 56e7b1a..30cd0d7 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
@@ -25,29 +25,29 @@
 import org.eclipse.statet.ecommons.text.core.sections.AbstractDocContentSections;
 import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode;
 
-import org.eclipse.statet.docmlet.tex.core.source.ITexDocumentConstants;
+import org.eclipse.statet.docmlet.tex.core.source.TexDocumentConstants;
 import org.eclipse.statet.r.core.source.IRDocumentConstants;
-import org.eclipse.statet.redocs.r.core.source.IDocContentSectionsRweaveExtension;
+import org.eclipse.statet.redocs.r.core.source.DocContentSectionsRweaveExtension;
 import org.eclipse.statet.redocs.r.core.source.RweaveDocSectionTreePartImpl;
 
 
 public class LtxRweaveDocumentContentInfo extends AbstractDocContentSections
-		implements IDocContentSectionsRweaveExtension {
+		implements DocContentSectionsRweaveExtension {
 	
 	
-	public static final String LTX=                         ITexDocumentConstants.LTX_PARTITIONING;
+	public static final String LTX=                         TexDocumentConstants.LTX_PARTITIONING;
 	public static final String R_CHUNK_CONTROL=             "org.eclipse.statet.LtxR-ChunkControl"; //$NON-NLS-1$
 	public static final String R=                           IRDocumentConstants.R_PARTITIONING;
 	
 	
-	public static final IDocContentSectionsRweaveExtension INSTANCE= new LtxRweaveDocumentContentInfo();
+	public static final DocContentSectionsRweaveExtension INSTANCE= new LtxRweaveDocumentContentInfo();
 	
 	
 	private final RweaveDocSectionTreePartImpl rweaveImpl;
 	
 	
 	public LtxRweaveDocumentContentInfo() {
-		super(ITexRweaveDocumentConstants.LTX_R_PARTITIONING, LTX,
+		super(TexRweaveDocumentConstants.LTX_R_PARTITIONING, LTX,
 				ImCollections.newList(LTX, R_CHUNK_CONTROL, R) );
 		
 		this.rweaveImpl= new RweaveDocSectionTreePartImpl(this);
@@ -59,7 +59,7 @@
 		if (IRDocumentConstants.R_ANY_CONTENT_CONSTRAINT.matches(contentType)) {
 			return R;
 		}
-		if (ITexRweaveDocumentConstants.RCHUNK_PARTITION_CONSTRAINT.matches(contentType)) {
+		if (TexRweaveDocumentConstants.RCHUNK_PARTITION_CONSTRAINT.matches(contentType)) {
 			return R_CHUNK_CONTROL;
 		}
 		return LTX;
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweaveDocumentSetupParticipant.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweaveDocumentSetupParticipant.java
index a0b0b84..d4d75aa 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweaveDocumentSetupParticipant.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/LtxRweaveDocumentSetupParticipant.java
@@ -40,14 +40,14 @@
 	
 	@Override
 	public String getPartitioningId() {
-		return ITexRweaveDocumentConstants.LTX_R_PARTITIONING;
+		return TexRweaveDocumentConstants.LTX_R_PARTITIONING;
 	}
 	
 	@Override
 	protected IDocumentPartitioner createDocumentPartitioner() {
 		return new TreePartitioner(getPartitioningId(),
 				new LtxRweavePartitionNodeScanner(this.templateMode),
-				ITexRweaveDocumentConstants.LTX_R_CONTENT_TYPES );
+				TexRweaveDocumentConstants.LTX_R_CONTENT_TYPES );
 	}
 	
 }
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 03cd31d..ad9d124 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
@@ -53,7 +53,7 @@
 		
 		@Override
 		public String getPartitionType() {
-			return ITexRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE;
+			return TexRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE;
 		}
 		
 		@Override
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/ITexRweaveDocumentConstants.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/TexRweaveDocumentConstants.java
similarity index 82%
rename from redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/ITexRweaveDocumentConstants.java
rename to redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/TexRweaveDocumentConstants.java
index 584908a..02b41c8 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/ITexRweaveDocumentConstants.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/TexRweaveDocumentConstants.java
@@ -17,12 +17,12 @@
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.collections.ImList;
 
-import org.eclipse.statet.docmlet.tex.core.source.ITexDocumentConstants;
+import org.eclipse.statet.docmlet.tex.core.source.TexDocumentConstants;
 import org.eclipse.statet.r.core.source.IRDocumentConstants;
-import org.eclipse.statet.redocs.r.core.source.IRweaveDocumentConstants;
+import org.eclipse.statet.redocs.r.core.source.RweaveDocumentConstants;
 
 
-public interface ITexRweaveDocumentConstants extends IRweaveDocumentConstants {
+public interface TexRweaveDocumentConstants extends RweaveDocumentConstants {
 	
 	
 	/**
@@ -35,7 +35,7 @@
 	 * List with all partition content types of Sweave (LaTeX+R) documents.
 	 */
 	ImList<String> LTX_R_CONTENT_TYPES= ImCollections.concatList(
-			ITexDocumentConstants.LTX_CONTENT_TYPES,
+			TexDocumentConstants.LTX_CONTENT_TYPES,
 			RCHUNK_CONTENT_TYPES,
 			IRDocumentConstants.R_CONTENT_TYPES );
 	
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/util/TexRweaveCoreAccessWrapper.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/util/TexRweaveCoreAccessWrapper.java
index 14e951a..43494c5 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/util/TexRweaveCoreAccessWrapper.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/util/TexRweaveCoreAccessWrapper.java
@@ -24,11 +24,11 @@
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.collections.ImList;
 
-import org.eclipse.statet.docmlet.tex.core.ITexCoreAccess;
+import org.eclipse.statet.docmlet.tex.core.TexCoreAccess;
 import org.eclipse.statet.docmlet.tex.core.commands.TexCommand;
 import org.eclipse.statet.docmlet.tex.core.commands.TexCommandSet;
 import org.eclipse.statet.docmlet.tex.core.util.TexCoreAccessWrapper;
-import org.eclipse.statet.internal.redocs.tex.r.core.ISweaveLtxCommands;
+import org.eclipse.statet.internal.redocs.tex.r.core.SweaveLtxCommands;
 
 
 /**
@@ -38,8 +38,8 @@
 	
 	
 	private static final ImList<TexCommand> LTX_SWEAVE_COMMAND_LIST= ImCollections.newList( // ASorted
-			ISweaveLtxCommands.SWEAVE_Sexpr_COMMANDS,
-			ISweaveLtxCommands.SWEAVE_SweaveOpts_COMMANDS );
+			SweaveLtxCommands.SWEAVE_Sexpr_COMMANDS,
+			SweaveLtxCommands.SWEAVE_SweaveOpts_COMMANDS );
 	
 	private static final WeakHashMap<TexCommandSet, TexCommandSet> COMMAND_CACHE= new WeakHashMap<>();
 	
@@ -48,7 +48,7 @@
 	private volatile TexCommandSet texCommandSet;
 	
 	
-	public TexRweaveCoreAccessWrapper(final ITexCoreAccess texCoreAccess) {
+	public TexRweaveCoreAccessWrapper(final TexCoreAccess texCoreAccess) {
 		super(texCoreAccess);
 	}
 	
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/editors/ILtxRweaveEditor.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/editors/LtxRweaveEditor.java
similarity index 62%
rename from redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/editors/ILtxRweaveEditor.java
rename to redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/editors/LtxRweaveEditor.java
index 08755f8..c4d35ac 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/editors/ILtxRweaveEditor.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/editors/LtxRweaveEditor.java
@@ -14,15 +14,19 @@
 
 package org.eclipse.statet.redocs.tex.r.ui.editors;
 
-import org.eclipse.statet.docmlet.tex.ui.editors.ILtxEditor;
-import org.eclipse.statet.redocs.r.ui.sourceediting.IRweaveEditor;
-import org.eclipse.statet.redocs.tex.r.core.model.ILtxRweaveSourceUnit;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.docmlet.tex.ui.editors.LtxEditor;
+import org.eclipse.statet.redocs.r.ui.sourceediting.RweaveEditor;
+import org.eclipse.statet.redocs.tex.r.core.model.LtxRweaveSourceUnit;
 
 
-public interface ILtxRweaveEditor extends IRweaveEditor, ILtxEditor {
+@NonNullByDefault
+public interface LtxRweaveEditor extends RweaveEditor, LtxEditor {
 	
 	
 	@Override
-	public ILtxRweaveSourceUnit getSourceUnit();
+	public @Nullable LtxRweaveSourceUnit getSourceUnit();
 	
 }
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 201ae68..3e4efc8 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
@@ -37,8 +37,8 @@
 import org.eclipse.statet.ecommons.text.ui.presentation.SingleTokenScanner;
 import org.eclipse.statet.ecommons.text.ui.settings.TextStyleManager;
 
-import org.eclipse.statet.docmlet.tex.core.ITexCoreAccess;
-import org.eclipse.statet.docmlet.tex.core.source.ITexDocumentConstants;
+import org.eclipse.statet.docmlet.tex.core.TexCoreAccess;
+import org.eclipse.statet.docmlet.tex.core.source.TexDocumentConstants;
 import org.eclipse.statet.docmlet.tex.ui.sourceediting.LtxSourceViewerConfiguration;
 import org.eclipse.statet.internal.redocs.tex.r.RedocsTexRPlugin;
 import org.eclipse.statet.internal.redocs.tex.r.ui.sourceediting.DocRQuickOutlineInformationProvider;
@@ -62,10 +62,10 @@
 import org.eclipse.statet.r.ui.sourceediting.RSourceViewerConfiguration;
 import org.eclipse.statet.r.ui.text.r.IRTextTokens;
 import org.eclipse.statet.r.ui.text.r.RDoubleClickStrategy;
-import org.eclipse.statet.redocs.tex.r.core.source.ITexRweaveDocumentConstants;
 import org.eclipse.statet.redocs.tex.r.core.source.LtxRweaveBracketPairMatcher;
 import org.eclipse.statet.redocs.tex.r.core.source.LtxRweaveDocumentContentInfo;
-import org.eclipse.statet.redocs.tex.r.ui.editors.ILtxRweaveEditor;
+import org.eclipse.statet.redocs.tex.r.core.source.TexRweaveDocumentConstants;
+import org.eclipse.statet.redocs.tex.r.ui.editors.LtxRweaveEditor;
 
 
 /**
@@ -74,21 +74,21 @@
 public class LtxRweaveSourceViewerConfiguration extends MultiContentSectionSourceViewerConfiguration {
 	
 	
-	private static final String[] CONTENT_TYPES= ITexRweaveDocumentConstants.LTX_R_CONTENT_TYPES.toArray(
-			new String[ITexRweaveDocumentConstants.LTX_R_CONTENT_TYPES.size()]);
+	private static final String[] CONTENT_TYPES= TexRweaveDocumentConstants.LTX_R_CONTENT_TYPES.toArray(
+			new String[TexRweaveDocumentConstants.LTX_R_CONTENT_TYPES.size()]);
 	
 	
 	private static class LtxConfiguration extends LtxSourceViewerConfiguration {
 		
 		public LtxConfiguration(final IDocContentSections documentContentInfo, final int flags,
 				final ISourceEditor editor,
-				final ITexCoreAccess texCoreAccess,
+				final TexCoreAccess texCoreAccess,
 				final IPreferenceStore preferenceStore) {
 			super(documentContentInfo, flags, editor, texCoreAccess, preferenceStore, null);
 		}
 		
 		@Override
-		protected void setCoreAccess(final ITexCoreAccess access) {
+		protected void setCoreAccess(final TexCoreAccess access) {
 			super.setCoreAccess(access);
 		}
 		
@@ -116,7 +116,7 @@
 				case '\"':
 				case '\'':
 					return TreePartitionUtils.searchPartitionRegion(partition,
-							ITexRweaveDocumentConstants.RCHUNK_PARTITION_CONSTRAINT );
+							TexRweaveDocumentConstants.RCHUNK_PARTITION_CONSTRAINT );
 				}
 				return null;
 			default:
@@ -168,8 +168,8 @@
 		this(flags, null, null, null, null);
 	}
 	
-	public LtxRweaveSourceViewerConfiguration(final int flags, final ILtxRweaveEditor sourceEditor,
-			final ITexCoreAccess texCoreAccess, final IRCoreAccess rCoreAccess,
+	public LtxRweaveSourceViewerConfiguration(final int flags, final LtxRweaveEditor sourceEditor,
+			final TexCoreAccess texCoreAccess, final IRCoreAccess rCoreAccess,
 			final IPreferenceStore preferenceStore) {
 		super(LtxRweaveDocumentContentInfo.INSTANCE, flags, sourceEditor);
 		
@@ -193,22 +193,22 @@
 	protected void initScanners() {
 		final TextStyleManager textStyles= this.rConfig.getTextStyles();
 		
-		addScanner(ITexRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE,
+		addScanner(TexRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE,
 				new SingleTokenScanner(textStyles, IRTextTokens.UNDEFINED_KEY ));
 	}
 	
 	@Override
 	protected ITokenScanner getScanner(final String contentType) {
-		if (contentType == ITexRweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE) {
+		if (contentType == TexRweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE) {
 			return this.rConfig.getScanner(IRDocumentConstants.R_DEFAULT_CONTENT_TYPE);
 		}
-		if (contentType == ITexRweaveDocumentConstants.RCHUNK_COMMENT_CONTENT_TYPE) {
+		if (contentType == TexRweaveDocumentConstants.RCHUNK_COMMENT_CONTENT_TYPE) {
 			return this.rConfig.getScanner(IRDocumentConstants.R_COMMENT_CONTENT_TYPE);
 		}
 		return super.getScanner(contentType);
 	}
 	
-	protected void setCoreAccess(final ITexCoreAccess texCoreAccess, final IRCoreAccess rCoreAccess) {
+	protected void setCoreAccess(final TexCoreAccess texCoreAccess, final IRCoreAccess rCoreAccess) {
 		this.docConfig.setCoreAccess(texCoreAccess);
 		this.rConfig.setCoreAccess(rCoreAccess);
 	}
@@ -223,7 +223,7 @@
 	protected void initPresentationReconciler(final PresentationReconciler reconciler) {
 		super.initPresentationReconciler(reconciler);
 		
-		for (final String contentType : ITexRweaveDocumentConstants.RCHUNK_CONTENT_TYPES) {
+		for (final String contentType : TexRweaveDocumentConstants.RCHUNK_CONTENT_TYPES) {
 			final ITokenScanner scanner= getScanner(contentType);
 			if (scanner != null) {
 				final DefaultDamagerRepairer dr= new DefaultDamagerRepairer(scanner);
@@ -278,28 +278,28 @@
 		final IContentAssistComputer chunkComputer= new RChunkTemplateCompletionComputer();
 		
 		final ContentAssistProcessor texProcessor= (ContentAssistProcessor) assistant.getContentAssistProcessor(
-				ITexDocumentConstants.LTX_DEFAULT_CONTENT_TYPE );
+				TexDocumentConstants.LTX_DEFAULT_CONTENT_TYPE );
 		texProcessor.addCategory(new ContentAssistCategory(
-				ITexDocumentConstants.LTX_DEFAULT_CONTENT_TYPE,
+				TexDocumentConstants.LTX_DEFAULT_CONTENT_TYPE,
 				ImCollections.newList(chunkComputer) ));
 		texProcessor.setCompletionProposalAutoActivationCharacters(new char[] { '\\', '<' });
 		
 		final ContentAssistProcessor mathProcessor= (ContentAssistProcessor) assistant.getContentAssistProcessor(
-				ITexDocumentConstants.LTX_MATH_CONTENT_TYPE );
+				TexDocumentConstants.LTX_MATH_CONTENT_TYPE );
 		mathProcessor.addCategory(new ContentAssistCategory(
-				ITexDocumentConstants.LTX_MATH_CONTENT_TYPE,
+				TexDocumentConstants.LTX_MATH_CONTENT_TYPE,
 				ImCollections.newList(chunkComputer) ));
 		mathProcessor.setCompletionProposalAutoActivationCharacters(new char[] { '\\', '<' });
 		
 		final ContentAssistProcessor controlProcessor= new ContentAssistProcessor(assistant,
-				ITexRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE,
+				TexRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE,
 				RedocsTexRPlugin.getInstance().getLtxRweaveEditorContentAssistRegistry(),
 				getSourceEditor() );
 		controlProcessor.addCategory(new ContentAssistCategory(
-				ITexRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE,
+				TexRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE,
 				ImCollections.newList(chunkComputer) ));
-		assistant.setContentAssistProcessor(controlProcessor, ITexRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE);
-		assistant.setContentAssistProcessor(controlProcessor, ITexRweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE);
+		assistant.setContentAssistProcessor(controlProcessor, TexRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE);
+		assistant.setContentAssistProcessor(controlProcessor, TexRweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE);
 	}
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/sourceediting/LtxRweaveSourceViewerConfigurator.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/sourceediting/LtxRweaveSourceViewerConfigurator.java
index 45ae836..4230fe0 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/sourceediting/LtxRweaveSourceViewerConfigurator.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/sourceediting/LtxRweaveSourceViewerConfigurator.java
@@ -22,8 +22,8 @@
 import org.eclipse.core.filebuffers.IDocumentSetupParticipant;
 
 import org.eclipse.statet.base.core.preferences.TaskTagsPreferences;
-import org.eclipse.statet.docmlet.tex.core.ITexCoreAccess;
 import org.eclipse.statet.docmlet.tex.core.TexCodeStyleSettings;
+import org.eclipse.statet.docmlet.tex.core.TexCoreAccess;
 import org.eclipse.statet.docmlet.tex.core.util.TexCoreAccessWrapper;
 import org.eclipse.statet.internal.r.ui.RUIPreferenceInitializer;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
@@ -51,7 +51,7 @@
 	
 	
 	public LtxRweaveSourceViewerConfigurator(
-			final ITexCoreAccess texCoreAccess, final IRCoreAccess rCoreAccess,
+			final TexCoreAccess texCoreAccess, final IRCoreAccess rCoreAccess,
 			final LtxRweaveSourceViewerConfiguration config) {
 		super(config);
 		
@@ -83,7 +83,7 @@
 	}
 	
 	
-	public final ITexCoreAccess getTexCoreAccess() {
+	public final TexCoreAccess getTexCoreAccess() {
 		return this.docCoreAccess;
 	}
 	
@@ -102,7 +102,7 @@
 	}
 	
 	
-	public void setSource(final ITexCoreAccess texCoreAccess, final IRCoreAccess rCoreAccess) {
+	public void setSource(final TexCoreAccess texCoreAccess, final IRCoreAccess rCoreAccess) {
 		boolean changed= false;
 		if (texCoreAccess != null) {
 			changed|= this.docCoreAccess.setParent(texCoreAccess);
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/plugin.xml b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/plugin.xml
index 6107c0b..28d8f01 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/plugin.xml
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/plugin.xml
@@ -42,7 +42,7 @@
             name="CommonMark+R"
             label="RMarkdown (CommonMark+R)"
             class="org.eclipse.statet.internal.redocs.wikitext.r.commonmark.core.RCommonmarkLanguage"
-            configClass="org.eclipse.statet.internal.redocs.wikitext.r.commonmark.core.RCommonmarkConfig"
+            configClass="org.eclipse.statet.internal.redocs.wikitext.r.commonmark.core.RCommonmarkConfigImpl"
             contentTypeId="org.eclipse.statet.redocs.contentTypes.CommonmarkRweave">
       </markupLanguage>
    </extension>
@@ -103,10 +103,10 @@
    <extension
          point="org.eclipse.core.runtime.adapters">
       <factory
-            adaptableType="org.eclipse.statet.internal.redocs.wikitext.r.commonmark.core.RCommonmarkConfig"
+            adaptableType="org.eclipse.statet.internal.redocs.wikitext.r.commonmark.core.RCommonmarkConfigImpl"
             class="org.eclipse.statet.internal.redocs.wikitext.r.commonmark.ui.ConfigUIAdapterFactory">
          <adapter
-               type="org.eclipse.statet.docmlet.wikitext.ui.config.IMarkupConfigUIAdapter">
+               type="org.eclipse.statet.docmlet.wikitext.ui.config.MarkupConfigUIAdapter">
          </adapter>
       </factory>
    </extension>
@@ -116,7 +116,7 @@
             adaptableType="org.eclipse.statet.internal.redocs.wikitext.r.commonmark.core.RCommonmarkLanguage"
             class="org.eclipse.statet.internal.redocs.wikitext.r.commonmark.ui.LanguageUIAdapterFactory">
          <adapter
-               type="org.eclipse.statet.docmlet.wikitext.ui.sourceediting.IMarkupCompletionExtension">
+               type="org.eclipse.statet.docmlet.wikitext.ui.sourceediting.MarkupCompletionExtension">
          </adapter>
       </factory>
    </extension>
@@ -146,7 +146,7 @@
          point="org.eclipse.ui.editors">
       <editor
             id="org.eclipse.statet.redocs.editors.CommonmarkRweave"
-            class="org.eclipse.statet.internal.redocs.wikitext.r.commonmark.ui.CommonmarkRweaveEditor"
+            class="org.eclipse.statet.internal.redocs.wikitext.r.commonmark.ui.CommonmarkRweaveDocEditor"
             contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
             icon="platform:/plugin/org.eclipse.statet.redocs.wikitext.r/icons/obj_16/wikidoc_rweave-file.png"
             name="%editors_CommonmarkRweave_name"
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/CommonmarkRweavePlugin.java b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/CommonmarkRweavePlugin.java
index 5047f03..58103db 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/CommonmarkRweavePlugin.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/CommonmarkRweavePlugin.java
@@ -26,7 +26,7 @@
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 
 import org.eclipse.statet.docmlet.wikitext.core.WikitextCore;
-import org.eclipse.statet.docmlet.wikitext.core.markup.IMarkupLanguageManager1;
+import org.eclipse.statet.docmlet.wikitext.core.markup.WikitextMarkupLanguageManager1;
 import org.eclipse.statet.internal.redocs.wikitext.r.commonmark.core.RCommonmarkLanguage;
 import org.eclipse.statet.redocs.wikitext.r.core.source.WikitextRweaveTemplateContextType;
 
@@ -88,7 +88,7 @@
 		super.start(context);
 		instance= this;
 		
-		final IMarkupLanguageManager1 markupLanguageManager= WikitextCore.getMarkupLanguageManager();
+		final WikitextMarkupLanguageManager1 markupLanguageManager= WikitextCore.getMarkupLanguageManager();
 		
 		this.markupLanguage= (RCommonmarkLanguage) markupLanguageManager
 				.getLanguage(COMMONMARK_RWEAVE_LANGUAGE_NAME);
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/core/RCommonmarkConfig.java b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/core/RCommonmarkConfig.java
deleted file mode 100644
index aff0f0f..0000000
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/core/RCommonmarkConfig.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2014, 2019 Stephan Wahlbrink and others.
- # 
- # This program and the accompanying materials are made available under the
- # terms of the Eclipse Public License 2.0 which is available at
- # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
- # which is available at https://www.apache.org/licenses/LICENSE-2.0.
- # 
- # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
- # 
- # Contributors:
- #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
- #=============================================================================*/
-
-package org.eclipse.statet.internal.redocs.wikitext.r.commonmark.core;
-
-import org.eclipse.statet.docmlet.wikitext.commonmark.core.AbstractCommonmarkConfig;
-import org.eclipse.statet.redocs.wikitext.r.commonmark.core.IRCommonmarkConfig;
-
-
-public class RCommonmarkConfig extends AbstractCommonmarkConfig<RCommonmarkConfig>
-		implements IRCommonmarkConfig {
-	
-	
-	public RCommonmarkConfig() {
-	}
-	
-	public RCommonmarkConfig(final RCommonmarkConfig config) {
-		load(config);
-	}
-	
-	
-	@Override
-	public RCommonmarkConfig clone() {
-		return new RCommonmarkConfig(this);
-	}
-	
-}
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/core/RCommonmarkConfigImpl.java b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/core/RCommonmarkConfigImpl.java
new file mode 100644
index 0000000..8cd45b4
--- /dev/null
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/core/RCommonmarkConfigImpl.java
@@ -0,0 +1,41 @@
+/*=============================================================================#
+ # Copyright (c) 2014, 2019 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.redocs.wikitext.r.commonmark.core;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.docmlet.wikitext.commonmark.core.BasicCommonmarkConfig;
+import org.eclipse.statet.redocs.wikitext.r.commonmark.core.RCommonmarkConfig;
+
+
+@NonNullByDefault
+public class RCommonmarkConfigImpl extends BasicCommonmarkConfig<RCommonmarkConfigImpl>
+		implements RCommonmarkConfig {
+	
+	
+	public RCommonmarkConfigImpl() {
+	}
+	
+	public RCommonmarkConfigImpl(final RCommonmarkConfigImpl config) {
+		load(config);
+	}
+	
+	
+	@Override
+	public RCommonmarkConfigImpl clone() {
+		return new RCommonmarkConfigImpl(this);
+	}
+	
+}
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/core/RCommonmarkLanguage.java b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/core/RCommonmarkLanguage.java
index caa619b..c9e125f 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/core/RCommonmarkLanguage.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/core/RCommonmarkLanguage.java
@@ -21,12 +21,12 @@
 import org.eclipse.statet.jcommons.collections.ImList;
 
 import org.eclipse.statet.docmlet.wikitext.commonmark.core.CommonmarkLanguage;
-import org.eclipse.statet.docmlet.wikitext.core.markup.IMarkupConfig;
+import org.eclipse.statet.docmlet.wikitext.core.markup.MarkupConfig;
 import org.eclipse.statet.docmlet.wikitext.core.markup.MarkupParser2;
 import org.eclipse.statet.docmlet.wikitext.core.source.RegexBlockWeaveParticipant;
 import org.eclipse.statet.docmlet.wikitext.core.source.RegexInlineWeaveParticipant;
 import org.eclipse.statet.docmlet.wikitext.core.source.WeaveLanguageProcessor;
-import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.IExtdocMarkupLanguage;
+import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.ExtdocMarkupLanguage;
 import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.TexMathDollarsDisplayWeaveParticipant;
 import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.TexMathDollarsInlineWeaveParticipant;
 import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.TexMathSBackslashDisplayWeaveParticipant;
@@ -34,12 +34,12 @@
 import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.YamlBlockWeaveParticipant;
 import org.eclipse.statet.ltk.core.SourceContent;
 import org.eclipse.statet.redocs.r.core.source.AbstractRChunkPartitionNodeScanner;
-import org.eclipse.statet.redocs.wikitext.r.commonmark.core.IRCommonmarkConfig;
-import org.eclipse.statet.redocs.wikitext.r.core.source.IRweaveMarkupLanguage;
+import org.eclipse.statet.redocs.wikitext.r.commonmark.core.RCommonmarkConfig;
+import org.eclipse.statet.redocs.wikitext.r.core.source.RweaveMarkupLanguage;
 
 
 public class RCommonmarkLanguage extends CommonmarkLanguage
-		implements IExtdocMarkupLanguage, IRweaveMarkupLanguage {
+		implements ExtdocMarkupLanguage, RweaveMarkupLanguage {
 	
 	
 	public static final String COMMONMARK_RWEAVE_LANGUAGE_NAME= "CommonMark+R"; //$NON-NLS-1$
@@ -63,7 +63,7 @@
 	private static final Pattern INLINE_PATTERN= Pattern.compile("`r ([^`]+)`"); //$NON-NLS-1$
 	
 	
-	private IRCommonmarkConfig configuredConfig;
+	private RCommonmarkConfig configuredConfig;
 	
 	private WeaveLanguageProcessor weaveProcessor;
 	
@@ -72,7 +72,7 @@
 		this(null, 0, null);
 	}
 	
-	public RCommonmarkLanguage(final String scope, final int mode, final IRCommonmarkConfig config) {
+	public RCommonmarkLanguage(final String scope, final int mode, final RCommonmarkConfig config) {
 		super(scope, mode, config);
 		
 		assert (COMMONMARK_LANGUAGE_NAME.equals(getName()));
@@ -95,13 +95,13 @@
 	
 	
 	@Override
-	public void setMarkupConfig(final IMarkupConfig config) {
+	public void setMarkupConfig(final MarkupConfig config) {
 		super.setMarkupConfig(config);
 	}
 	
 	@Override
-	public IRCommonmarkConfig getMarkupConfig() {
-		return (IRCommonmarkConfig) super.getMarkupConfig();
+	public RCommonmarkConfig getMarkupConfig() {
+		return (RCommonmarkConfig) super.getMarkupConfig();
 	}
 	
 	
@@ -113,7 +113,7 @@
 //	}
 //	
 	protected void configure(final WeaveLanguageProcessor weaveProcessor,
-			final IRCommonmarkConfig config) {
+			final RCommonmarkConfig config) {
 		weaveProcessor.addChunkParticipant(new RegexBlockWeaveParticipant(
 				EMBEDDED_R, EMBEDDED_R_CHUNK_DESCR,
 				CHUNK_START_LINE_PATTERN, CHUNK_END_LINE_PATTERN ) {
@@ -172,7 +172,7 @@
 			this.weaveProcessor= new WeaveLanguageProcessor();
 		}
 		
-		final IRCommonmarkConfig config= getMarkupConfig();
+		final RCommonmarkConfig config= getMarkupConfig();
 		if (config != this.configuredConfig) {
 			this.weaveProcessor.clearConfig();
 			configure(this.weaveProcessor, config);
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/CommonmarkRweaveEditor.java b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/CommonmarkRweaveDocEditor.java
similarity index 88%
rename from redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/CommonmarkRweaveEditor.java
rename to redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/CommonmarkRweaveDocEditor.java
index 9dea592..765e00c 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/CommonmarkRweaveEditor.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/CommonmarkRweaveDocEditor.java
@@ -15,13 +15,13 @@
 package org.eclipse.statet.internal.redocs.wikitext.r.commonmark.ui;
 
 import org.eclipse.statet.internal.redocs.wikitext.r.commonmark.CommonmarkRweavePlugin;
-import org.eclipse.statet.redocs.wikitext.r.ui.editors.WikidocRweaveEditor;
+import org.eclipse.statet.redocs.wikitext.r.ui.editors.WikidocRweaveDocEditor;
 
 
-public class CommonmarkRweaveEditor extends WikidocRweaveEditor {
+public class CommonmarkRweaveDocEditor extends WikidocRweaveDocEditor {
 	
 	
-	public CommonmarkRweaveEditor() {
+	public CommonmarkRweaveDocEditor() {
 		super(CommonmarkRweavePlugin.DOC_CONTENT_TYPE, new CommonmarkRweaveDocumentSetupParticipant());
 	}
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/ConfigUIAdapterFactory.java b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/ConfigUIAdapterFactory.java
index 4b8bf52..e7c75f2 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/ConfigUIAdapterFactory.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/ConfigUIAdapterFactory.java
@@ -16,18 +16,18 @@
 
 import org.eclipse.core.runtime.IAdapterFactory;
 
-import org.eclipse.statet.docmlet.wikitext.ui.config.IMarkupConfigUIAdapter;
+import org.eclipse.statet.docmlet.wikitext.ui.config.MarkupConfigUIAdapter;
 
 
 public class ConfigUIAdapterFactory implements IAdapterFactory {
 	
 	
 	private static final Class<?>[] ADAPTERS= new Class[] {
-		IMarkupConfigUIAdapter.class,
+		MarkupConfigUIAdapter.class,
 	};
 	
 	
-	private IMarkupConfigUIAdapter markupConfigUI;
+	private MarkupConfigUIAdapter markupConfigUI;
 	
 	
 	public ConfigUIAdapterFactory() {
@@ -41,7 +41,7 @@
 	@Override
 	@SuppressWarnings("unchecked")
 	public <T> T getAdapter(final Object adaptableObject, final Class<T> adapterType) {
-		if (adapterType == IMarkupConfigUIAdapter.class) {
+		if (adapterType == MarkupConfigUIAdapter.class) {
 			synchronized (this) {
 				if (this.markupConfigUI == null) {
 					this.markupConfigUI= new RCommonmarkConfigUI();
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/LanguageUIAdapterFactory.java b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/LanguageUIAdapterFactory.java
index be2183e..e25551a 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/LanguageUIAdapterFactory.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/LanguageUIAdapterFactory.java
@@ -17,18 +17,18 @@
 import org.eclipse.core.runtime.IAdapterFactory;
 
 import org.eclipse.statet.docmlet.wikitext.commonmark.ui.CommonmarkCompletionExtension;
-import org.eclipse.statet.docmlet.wikitext.ui.sourceediting.IMarkupCompletionExtension;
+import org.eclipse.statet.docmlet.wikitext.ui.sourceediting.MarkupCompletionExtension;
 
 
 public class LanguageUIAdapterFactory implements IAdapterFactory {
 	
 	
 	private static final Class<?>[] ADAPTERS= new Class[] {
-		IMarkupCompletionExtension.class
+		MarkupCompletionExtension.class
 	};
 	
 	
-	private IMarkupCompletionExtension markupCompletion;
+	private MarkupCompletionExtension markupCompletion;
 	
 	
 	public LanguageUIAdapterFactory() {
@@ -42,7 +42,7 @@
 	@Override
 	@SuppressWarnings("unchecked")
 	public <T> T getAdapter(final Object adaptableObject, final Class<T> adapterType) {
-		if (adapterType == IMarkupCompletionExtension.class) {
+		if (adapterType == MarkupCompletionExtension.class) {
 			synchronized (this) {
 				if (this.markupCompletion == null) {
 					this.markupCompletion= new CommonmarkCompletionExtension();
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/RCommonmarkConfigUI.java b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/RCommonmarkConfigUI.java
index b01470b..5623919 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/RCommonmarkConfigUI.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/internal/redocs/wikitext/r/commonmark/ui/RCommonmarkConfigUI.java
@@ -23,19 +23,19 @@
 import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
 
 import org.eclipse.statet.docmlet.wikitext.commonmark.ui.AbstractCommonmarkConfigDialog;
-import org.eclipse.statet.docmlet.wikitext.core.markup.IMarkupConfig;
-import org.eclipse.statet.docmlet.wikitext.ui.config.IMarkupConfigUIAdapter;
-import org.eclipse.statet.internal.redocs.wikitext.r.commonmark.core.RCommonmarkConfig;
+import org.eclipse.statet.docmlet.wikitext.core.markup.MarkupConfig;
+import org.eclipse.statet.docmlet.wikitext.ui.config.MarkupConfigUIAdapter;
+import org.eclipse.statet.internal.redocs.wikitext.r.commonmark.core.RCommonmarkConfigImpl;
 
 
-public class RCommonmarkConfigUI implements IMarkupConfigUIAdapter {
+public class RCommonmarkConfigUI implements MarkupConfigUIAdapter {
 	
 	
-	static class RCommonmarkConfigDialog extends AbstractCommonmarkConfigDialog<RCommonmarkConfig> {
+	static class RCommonmarkConfigDialog extends AbstractCommonmarkConfigDialog<RCommonmarkConfigImpl> {
 		
 		
 		public RCommonmarkConfigDialog(final Shell parent, final String contextLabel,
-				final boolean isContextEnabeld, final RCommonmarkConfig config) {
+				final boolean isContextEnabeld, final RCommonmarkConfigImpl config) {
 			super(parent, contextLabel, isContextEnabeld, config);
 		}
 		
@@ -44,16 +44,16 @@
 		protected Composite createExtensionGroup(final Composite parent) {
 			final Composite composite= super.createExtensionGroup(parent);
 			
-			addProperty(composite, RCommonmarkConfig.YAML_METADATA_ENABLED_PROP);
-			addProperty(composite, RCommonmarkConfig.TEX_MATH_DOLLARS_ENABLED_PROP);
-			addProperty(composite, RCommonmarkConfig.TEX_MATH_SBACKSLASH_ENABLED_PROP);
+			addProperty(composite, RCommonmarkConfigImpl.YAML_METADATA_ENABLED_PROP);
+			addProperty(composite, RCommonmarkConfigImpl.TEX_MATH_DOLLARS_ENABLED_PROP);
+			addProperty(composite, RCommonmarkConfigImpl.TEX_MATH_SBACKSLASH_ENABLED_PROP);
 			LayoutUtils.addSmallFiller(composite, false);
-			addProperty(composite, RCommonmarkConfig.HEADER_INTERRUPT_PARAGRAPH_DISABLED_PROP);
-			addProperty(composite, RCommonmarkConfig.BLOCKQUOTE_INTERRUPT_PARAGRAPH_DISABLED_PROP);
+			addProperty(composite, RCommonmarkConfigImpl.HEADER_INTERRUPT_PARAGRAPH_DISABLED_PROP);
+			addProperty(composite, RCommonmarkConfigImpl.BLOCKQUOTE_INTERRUPT_PARAGRAPH_DISABLED_PROP);
 			LayoutUtils.addSmallFiller(composite, false);
-			addProperty(composite, RCommonmarkConfig.STRIKEOUT_DTILDE_ENABLED_PROP);
-			addProperty(composite, RCommonmarkConfig.SUPERSCRIPT_SCIRCUMFLEX_ENABLED_PROP);
-			addProperty(composite, RCommonmarkConfig.SUBSCRIPT_STILDE_ENABLED_PROP);
+			addProperty(composite, RCommonmarkConfigImpl.STRIKEOUT_DTILDE_ENABLED_PROP);
+			addProperty(composite, RCommonmarkConfigImpl.SUPERSCRIPT_SCIRCUMFLEX_ENABLED_PROP);
+			addProperty(composite, RCommonmarkConfigImpl.SUBSCRIPT_STILDE_ENABLED_PROP);
 			
 			return composite;
 		}
@@ -62,9 +62,9 @@
 	
 	
 	@Override
-	public boolean edit(final String contextLabel, final AtomicBoolean isContextEnabled, final IMarkupConfig config, final Shell parent) {
+	public boolean edit(final String contextLabel, final AtomicBoolean isContextEnabled, final MarkupConfig config, final Shell parent) {
 		final RCommonmarkConfigDialog dialog= new RCommonmarkConfigDialog(parent, contextLabel,
-				(isContextEnabled != null && isContextEnabled.get()), (RCommonmarkConfig) config );
+				(isContextEnabled != null && isContextEnabled.get()), (RCommonmarkConfigImpl) config );
 		if (dialog.open() == Dialog.OK) {
 			if (isContextEnabled != null) {
 				isContextEnabled.set(dialog.isCustomEnabled());
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/redocs/wikitext/r/commonmark/core/IRCommonmarkConfig.java b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/redocs/wikitext/r/commonmark/core/RCommonmarkConfig.java
similarity index 79%
rename from redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/redocs/wikitext/r/commonmark/core/IRCommonmarkConfig.java
rename to redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/redocs/wikitext/r/commonmark/core/RCommonmarkConfig.java
index b19b31c..d8d43c3 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/redocs/wikitext/r/commonmark/core/IRCommonmarkConfig.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/src/org/eclipse/statet/redocs/wikitext/r/commonmark/core/RCommonmarkConfig.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.redocs.wikitext.r.commonmark.core;
 
-import org.eclipse.statet.docmlet.wikitext.commonmark.core.ICommonmarkConfig;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.docmlet.wikitext.commonmark.core.CommonmarkConfig;
 
 
-public interface IRCommonmarkConfig extends ICommonmarkConfig {
+@NonNullByDefault
+public interface RCommonmarkConfig extends CommonmarkConfig {
 	
 	
 	boolean isYamlMetadataEnabled();
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.debug/plugin.xml b/redocs/org.eclipse.statet.redocs.wikitext.r.debug/plugin.xml
index cc47749..c061dac 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.debug/plugin.xml
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.debug/plugin.xml
@@ -21,7 +21,7 @@
    <extension
          point="org.eclipse.core.runtime.adapters">
       <factory
-            adaptableType="org.eclipse.statet.redocs.wikitext.r.ui.editors.WikidocRweaveEditor"
+            adaptableType="org.eclipse.statet.redocs.wikitext.r.ui.editors.WikidocRweaveDocEditor"
             class="org.eclipse.statet.internal.redocs.wikitext.r.ui.debug.RetargettableActionAdapterFactory">
          <adapter
                type="org.eclipse.debug.ui.actions.IToggleBreakpointsTarget">
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.debug/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/debug/ToggleBreakpointAdapter.java b/redocs/org.eclipse.statet.redocs.wikitext.r.debug/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/debug/ToggleBreakpointAdapter.java
index e795208..11acd2f 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.debug/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/debug/ToggleBreakpointAdapter.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.debug/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/debug/ToggleBreakpointAdapter.java
@@ -30,7 +30,7 @@
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.r.core.source.IRDocumentConstants;
 import org.eclipse.statet.r.debug.ui.actions.RToggleBreakpointAdapter;
-import org.eclipse.statet.redocs.wikitext.r.ui.editors.IWikidocRweaveEditor;
+import org.eclipse.statet.redocs.wikitext.r.ui.editors.WikidocRweaveEditor;
 
 
 public class ToggleBreakpointAdapter implements IToggleBreakpointsTargetExtension {
@@ -46,7 +46,7 @@
 	
 	@Override
 	public boolean canToggleLineBreakpoints(final IWorkbenchPart part, final ISelection selection) {
-		final IWikidocRweaveEditor editor= getREditor(part, selection);
+		final WikidocRweaveEditor editor= getREditor(part, selection);
 		return (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
 				&& selection instanceof ITextSelection );
 	}
@@ -54,7 +54,7 @@
 	@Override
 	public void toggleLineBreakpoints(final IWorkbenchPart part, final ISelection selection)
 			throws CoreException {
-		final IWikidocRweaveEditor editor= getREditor(part, selection);
+		final WikidocRweaveEditor editor= getREditor(part, selection);
 		if (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
 				&& selection instanceof ITextSelection) {
 			if (isRChunk(editor, (ITextSelection) selection) ) {
@@ -68,14 +68,14 @@
 	
 	@Override
 	public boolean canToggleMethodBreakpoints(final IWorkbenchPart part, final ISelection selection) {
-		final IWikidocRweaveEditor editor= getREditor(part, selection);
+		final WikidocRweaveEditor editor= getREditor(part, selection);
 		return (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
 				&& selection instanceof ITextSelection );
 	}
 	
 	@Override
 	public void toggleMethodBreakpoints(final IWorkbenchPart part, final ISelection selection) throws CoreException {
-		final IWikidocRweaveEditor editor= getREditor(part, selection);
+		final WikidocRweaveEditor editor= getREditor(part, selection);
 		if (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
 				&& selection instanceof ITextSelection) {
 			if (isRChunk(editor, (ITextSelection) selection) ) {
@@ -99,7 +99,7 @@
 	
 	@Override
 	public boolean canToggleBreakpoints(final IWorkbenchPart part, final ISelection selection) {
-		final IWikidocRweaveEditor editor= getREditor(part, selection);
+		final WikidocRweaveEditor editor= getREditor(part, selection);
 		return (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
 				&& selection instanceof ITextSelection );
 	}
@@ -107,7 +107,7 @@
 	@Override
 	public void toggleBreakpoints(final IWorkbenchPart part, final ISelection selection)
 			throws CoreException {
-		final IWikidocRweaveEditor editor= getREditor(part, selection);
+		final WikidocRweaveEditor editor= getREditor(part, selection);
 		if (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
 				&& selection instanceof ITextSelection) {
 			if (isRChunk(editor, (ITextSelection) selection) ) {
@@ -119,18 +119,18 @@
 		}
 	}
 	
-	private IWikidocRweaveEditor getREditor(final IWorkbenchPart part, final ISelection selection) {
-		if (part instanceof IWikidocRweaveEditor) {
-			return (IWikidocRweaveEditor) part;
+	private WikidocRweaveEditor getREditor(final IWorkbenchPart part, final ISelection selection) {
+		if (part instanceof WikidocRweaveEditor) {
+			return (WikidocRweaveEditor) part;
 		}
 		final Object adapter= part.getAdapter(ISourceEditor.class);
-		if (adapter instanceof IWikidocRweaveEditor) {
-			return (IWikidocRweaveEditor) adapter;
+		if (adapter instanceof WikidocRweaveEditor) {
+			return (WikidocRweaveEditor) adapter;
 		}
 		return null;
 	}
 	
-	private boolean isRChunk(final IWikidocRweaveEditor editor, final ITextSelection selection) {
+	private boolean isRChunk(final WikidocRweaveEditor editor, final ITextSelection selection) {
 		final SourceViewer viewer= editor.getViewer();
 		if (viewer != null) {
 			try {
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.textile/plugin.xml b/redocs/org.eclipse.statet.redocs.wikitext.r.textile/plugin.xml
index dc51614..1ffd3f6 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.textile/plugin.xml
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.textile/plugin.xml
@@ -42,7 +42,7 @@
             name="Textile+R"
             label="RTextile (Textile+R)"
             class="org.eclipse.statet.internal.redocs.wikitext.r.textile.core.RTextileLanguage"
-            configClass="org.eclipse.statet.internal.redocs.wikitext.r.textile.core.RTextileConfig"
+            configClass="org.eclipse.statet.internal.redocs.wikitext.r.textile.core.RTextileConfigImpl"
             contentTypeId="org.eclipse.statet.redocs.contentTypes.TextileRweave">
       </markupLanguage>
    </extension>
@@ -97,10 +97,10 @@
    <extension
          point="org.eclipse.core.runtime.adapters">
       <factory
-            adaptableType="org.eclipse.statet.internal.redocs.wikitext.r.textile.core.RTextileConfig"
+            adaptableType="org.eclipse.statet.internal.redocs.wikitext.r.textile.core.RTextileConfigImpl"
             class="org.eclipse.statet.internal.redocs.wikitext.r.textile.ui.ConfigUIAdapterFactory">
          <adapter
-               type="org.eclipse.statet.docmlet.wikitext.ui.config.IMarkupConfigUIAdapter">
+               type="org.eclipse.statet.docmlet.wikitext.ui.config.MarkupConfigUIAdapter">
          </adapter>
       </factory>
    </extension>
@@ -130,7 +130,7 @@
          point="org.eclipse.ui.editors">
       <editor
             id="org.eclipse.statet.redocs.editors.TextileRweave"
-            class="org.eclipse.statet.internal.redocs.wikitext.r.textile.ui.TextileRweaveEditor"
+            class="org.eclipse.statet.internal.redocs.wikitext.r.textile.ui.TextileRweaveDocEditor"
             contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
             icon="platform:/plugin/org.eclipse.statet.redocs.wikitext.r/icons/obj_16/wikidoc_rweave-file.png"
             name="%editors_TextileRweave_name"
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/core/RTextileConfig.java b/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/core/RTextileConfigImpl.java
similarity index 68%
rename from redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/core/RTextileConfig.java
rename to redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/core/RTextileConfigImpl.java
index 25aef49..f864ad6 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/core/RTextileConfig.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/core/RTextileConfigImpl.java
@@ -14,17 +14,20 @@
 
 package org.eclipse.statet.internal.redocs.wikitext.r.textile.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.AbstractMarkupConfig;
-import org.eclipse.statet.redocs.wikitext.r.textile.core.IRTextileConfig;
+import org.eclipse.statet.redocs.wikitext.r.textile.core.RTextileConfig;
 
 
-public class RTextileConfig extends AbstractMarkupConfig<RTextileConfig> implements IRTextileConfig {
+@NonNullByDefault
+public class RTextileConfigImpl extends AbstractMarkupConfig<RTextileConfigImpl> implements RTextileConfig {
 	
 	
-	public RTextileConfig() {
+	public RTextileConfigImpl() {
 	}
 	
-	public RTextileConfig(final RTextileConfig config) {
+	public RTextileConfigImpl(final RTextileConfigImpl config) {
 		load(config);
 	}
 	
@@ -35,8 +38,8 @@
 	}
 	
 	@Override
-	public RTextileConfig clone() {
-		return new RTextileConfig(this);
+	public RTextileConfigImpl clone() {
+		return new RTextileConfigImpl(this);
 	}
 	
 }
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/core/RTextileLanguage.java b/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/core/RTextileLanguage.java
index 02a9a8f..32924eb 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/core/RTextileLanguage.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/core/RTextileLanguage.java
@@ -29,14 +29,14 @@
 import org.eclipse.statet.jcommons.collections.ImList;
 
 import org.eclipse.statet.docmlet.wikitext.core.WikitextProblemReporter;
-import org.eclipse.statet.docmlet.wikitext.core.markup.IMarkupConfig;
+import org.eclipse.statet.docmlet.wikitext.core.markup.MarkupConfig;
 import org.eclipse.statet.docmlet.wikitext.core.markup.MarkupParser2;
-import org.eclipse.statet.docmlet.wikitext.core.source.IMarkupSourceFormatAdapter;
 import org.eclipse.statet.docmlet.wikitext.core.source.MarkupEventPrinter;
+import org.eclipse.statet.docmlet.wikitext.core.source.MarkupSourceFormatAdapter;
 import org.eclipse.statet.docmlet.wikitext.core.source.RegexBlockWeaveParticipant;
 import org.eclipse.statet.docmlet.wikitext.core.source.RegexInlineWeaveParticipant;
 import org.eclipse.statet.docmlet.wikitext.core.source.WeaveLanguageProcessor;
-import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.IExtdocMarkupLanguage;
+import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.ExtdocMarkupLanguage;
 import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.TexMathDollarsDisplayWeaveParticipant;
 import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.TexMathDollarsInlineWeaveParticipant;
 import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.TexMathSBackslashDisplayWeaveParticipant;
@@ -44,12 +44,12 @@
 import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.YamlBlockWeaveParticipant;
 import org.eclipse.statet.ltk.core.SourceContent;
 import org.eclipse.statet.redocs.r.core.source.AbstractRChunkPartitionNodeScanner;
-import org.eclipse.statet.redocs.wikitext.r.core.source.IRweaveMarkupLanguage;
-import org.eclipse.statet.redocs.wikitext.r.textile.core.IRTextileConfig;
+import org.eclipse.statet.redocs.wikitext.r.core.source.RweaveMarkupLanguage;
+import org.eclipse.statet.redocs.wikitext.r.textile.core.RTextileConfig;
 
 
 public class RTextileLanguage extends TextileLanguage
-		implements IExtdocMarkupLanguage, IRweaveMarkupLanguage {
+		implements ExtdocMarkupLanguage, RweaveMarkupLanguage {
 	
 	
 	public static final String TEXTILE_LANGUAGE_NAME= "Textile"; //$NON-NLS-1$
@@ -72,9 +72,9 @@
 	
 	private /*final*/ int mode;
 	
-	private IRTextileConfig config;
+	private RTextileConfig config;
 	
-	private IRTextileConfig configuredConfig;
+	private RTextileConfig configuredConfig;
 	
 	private WeaveLanguageProcessor weaveProcessor;
 	
@@ -83,7 +83,7 @@
 		this(null, 0, null);
 	}
 	
-	public RTextileLanguage(final String scope, final int mode, final IRTextileConfig config) {
+	public RTextileLanguage(final String scope, final int mode, final RTextileConfig config) {
 		super();
 		
 		assert (TEXTILE_LANGUAGE_NAME.equals(getName()));
@@ -131,15 +131,15 @@
 	
 	
 	@Override
-	public void setMarkupConfig(final IMarkupConfig config) {
+	public void setMarkupConfig(final MarkupConfig config) {
 		if (config != null) {
 			config.seal();
 		}
-		this.config= (IRTextileConfig) config;
+		this.config= (RTextileConfig) config;
 	}
 	
 	@Override
-	public IRTextileConfig getMarkupConfig() {
+	public RTextileConfig getMarkupConfig() {
 		return this.config;
 	}
 	
@@ -156,7 +156,7 @@
 	
 	
 	protected void configure(final WeaveLanguageProcessor weaveProcessor,
-			final IRTextileConfig config) {
+			final RTextileConfig config) {
 		weaveProcessor.addChunkParticipant(new RegexBlockWeaveParticipant(
 				EMBEDDED_R, EMBEDDED_R_CHUNK_DESCR,
 				CHUNK_START_LINE_PATTERN, CHUNK_END_LINE_PATTERN ));
@@ -197,7 +197,7 @@
 			this.weaveProcessor= new WeaveLanguageProcessor();
 		}
 		
-		final IRTextileConfig config= getMarkupConfig();
+		final RTextileConfig config= getMarkupConfig();
 		if (config != this.configuredConfig) {
 			this.weaveProcessor.clearConfig();
 			configure(this.weaveProcessor, config);
@@ -290,7 +290,7 @@
 	}
 	
 	@Override
-	public IMarkupSourceFormatAdapter getSourceFormatAdapter() {
+	public MarkupSourceFormatAdapter getSourceFormatAdapter() {
 		return null;
 	}
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/core/TextileValidator.java b/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/core/TextileValidator.java
index 1f11ddc..6e6d8a4 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/core/TextileValidator.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/core/TextileValidator.java
@@ -24,8 +24,8 @@
 
 import org.eclipse.statet.docmlet.wikitext.core.WikitextProblemReporter;
 import org.eclipse.statet.docmlet.wikitext.core.model.IWikidocModelInfo;
-import org.eclipse.statet.docmlet.wikitext.core.model.IWikitextSourceUnit;
 import org.eclipse.statet.docmlet.wikitext.core.model.WikitextModel;
+import org.eclipse.statet.docmlet.wikitext.core.model.WikitextSourceUnit;
 import org.eclipse.statet.internal.redocs.wikitext.r.textile.Messages;
 import org.eclipse.statet.ltk.core.SourceContent;
 import org.eclipse.statet.ltk.issues.core.BasicProblem;
@@ -44,7 +44,7 @@
 	
 	
 	@Override
-	public void run(final IWikitextSourceUnit su, final SourceContent content,
+	public void run(final WikitextSourceUnit su, final SourceContent content,
 			final IWikidocModelInfo model,
 			final ProblemRequestor requestor, final int level, final IProgressMonitor monitor) {
 		
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/ui/ConfigUIAdapterFactory.java b/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/ui/ConfigUIAdapterFactory.java
index 62265d9..523032c 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/ui/ConfigUIAdapterFactory.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/ui/ConfigUIAdapterFactory.java
@@ -16,18 +16,18 @@
 
 import org.eclipse.core.runtime.IAdapterFactory;
 
-import org.eclipse.statet.docmlet.wikitext.ui.config.IMarkupConfigUIAdapter;
+import org.eclipse.statet.docmlet.wikitext.ui.config.MarkupConfigUIAdapter;
 
 
 public class ConfigUIAdapterFactory implements IAdapterFactory {
 	
 	
 	private static final Class<?>[] ADAPTERS= new Class[] {
-		IMarkupConfigUIAdapter.class
+		MarkupConfigUIAdapter.class
 	};
 	
 	
-	private IMarkupConfigUIAdapter markupConfigUI;
+	private MarkupConfigUIAdapter markupConfigUI;
 	
 	
 	public ConfigUIAdapterFactory() {
@@ -41,7 +41,7 @@
 	@Override
 	@SuppressWarnings("unchecked")
 	public <T> T getAdapter(final Object adaptableObject, final Class<T> adapterType) {
-		if (adapterType == IMarkupConfigUIAdapter.class) {
+		if (adapterType == MarkupConfigUIAdapter.class) {
 			synchronized (this) {
 //				if (this.markupConfigUI == null) {
 //					this.markupConfigUI= new RTextileConfigUI();
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/ui/TextileRweaveEditor.java b/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/ui/TextileRweaveDocEditor.java
similarity index 89%
rename from redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/ui/TextileRweaveEditor.java
rename to redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/ui/TextileRweaveDocEditor.java
index 204f52c..210d710 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/ui/TextileRweaveEditor.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/internal/redocs/wikitext/r/textile/ui/TextileRweaveDocEditor.java
@@ -15,13 +15,13 @@
 package org.eclipse.statet.internal.redocs.wikitext.r.textile.ui;
 
 import org.eclipse.statet.internal.redocs.wikitext.r.textile.TextileRweavePlugin;
-import org.eclipse.statet.redocs.wikitext.r.ui.editors.WikidocRweaveEditor;
+import org.eclipse.statet.redocs.wikitext.r.ui.editors.WikidocRweaveDocEditor;
 
 
-public class TextileRweaveEditor extends WikidocRweaveEditor {
+public class TextileRweaveDocEditor extends WikidocRweaveDocEditor {
 	
 	
-	public TextileRweaveEditor() {
+	public TextileRweaveDocEditor() {
 		super(TextileRweavePlugin.DOC_CONTENT_TYPE, new TextileRweaveDocumentSetupParticipant());
 	}
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/redocs/wikitext/r/textile/core/IRTextileConfig.java b/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/redocs/wikitext/r/textile/core/RTextileConfig.java
similarity index 80%
rename from redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/redocs/wikitext/r/textile/core/IRTextileConfig.java
rename to redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/redocs/wikitext/r/textile/core/RTextileConfig.java
index b85c847..f5b0f1c 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/redocs/wikitext/r/textile/core/IRTextileConfig.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.textile/src/org/eclipse/statet/redocs/wikitext/r/textile/core/RTextileConfig.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.redocs.wikitext.r.textile.core;
 
-import org.eclipse.statet.docmlet.wikitext.core.markup.IMarkupConfig;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.docmlet.wikitext.core.markup.MarkupConfig;
 
 
-public interface IRTextileConfig extends IMarkupConfig {
+@NonNullByDefault
+public interface RTextileConfig extends MarkupConfig {
 	
 	
 	boolean isYamlMetadataEnabled();
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/plugin.xml b/redocs/org.eclipse.statet.redocs.wikitext.r/plugin.xml
index 641dc56..a3e99a4 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/plugin.xml
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/plugin.xml
@@ -60,7 +60,7 @@
          <with
                variable="activeEditor">
             <instanceof
-                  value="org.eclipse.statet.redocs.wikitext.r.ui.editors.IWikidocRweaveEditor">
+                  value="org.eclipse.statet.redocs.wikitext.r.ui.editors.WikidocRweaveEditor">
             </instanceof>
          </with>
       </definition>
@@ -72,7 +72,7 @@
          <with
                variable="activePart">
             <instanceof
-                  value="org.eclipse.statet.redocs.wikitext.r.ui.editors.IWikidocRweaveEditor">
+                  value="org.eclipse.statet.redocs.wikitext.r.ui.editors.WikidocRweaveEditor">
             </instanceof>
          </with>
       </definition>
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/WikidocRweavePersistenceUnitFactory.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/WikidocRweavePersistenceUnitFactory.java
index 88e4c02..562cf6a 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/WikidocRweavePersistenceUnitFactory.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/WikidocRweavePersistenceUnitFactory.java
@@ -16,7 +16,7 @@
 
 import org.eclipse.core.resources.IFile;
 
-import org.eclipse.statet.internal.redocs.wikitext.r.core.model.WikidocRweaveSourceUnit;
+import org.eclipse.statet.internal.redocs.wikitext.r.core.model.WikidocRweaveResourceSourceUnit;
 import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
 import org.eclipse.statet.ltk.model.core.impl.AbstractFilePersistenceSourceUnitFactory;
 
@@ -30,7 +30,7 @@
 	
 	@Override
 	protected ISourceUnit createSourceUnit(final String id, final IFile file) {
-		return new WikidocRweaveSourceUnit(id, file);
+		return new WikidocRweaveResourceSourceUnit(id, file);
 	}
 	
 }
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRChunkReconciler.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRChunkReconciler.java
index 87db8a3..f8833c9 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRChunkReconciler.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRChunkReconciler.java
@@ -20,17 +20,17 @@
 
 import org.eclipse.statet.docmlet.wikitext.core.model.IWikidocModelInfo;
 import org.eclipse.statet.redocs.r.core.model.RChunkReconciler;
-import org.eclipse.statet.redocs.wikitext.r.core.model.IWikidocRweaveSourceUnit;
-import org.eclipse.statet.redocs.wikitext.r.core.source.IRweaveMarkupLanguage;
+import org.eclipse.statet.redocs.wikitext.r.core.model.WikidocRweaveSourceUnit;
+import org.eclipse.statet.redocs.wikitext.r.core.source.RweaveMarkupLanguage;
 
 
 class WikidocRChunkReconciler extends RChunkReconciler
-		<IWikidocRweaveSourceUnit, IWikidocModelInfo, WikidocRweaveSuModelContainer> {
+		<WikidocRweaveSourceUnit, IWikidocModelInfo, WikidocRweaveSuModelContainer> {
 	
 	
 	private static final Map<String, WikidocRChunkReconciler> INSTANCES= new HashMap<>();
 	
-	static final WikidocRChunkReconciler getInstance(final IRweaveMarkupLanguage markupLanguage) {
+	static final WikidocRChunkReconciler getInstance(final RweaveMarkupLanguage markupLanguage) {
 		synchronized(WikidocRChunkReconciler.class) {
 			WikidocRChunkReconciler reconciler= INSTANCES.get(markupLanguage.getName());
 			if (reconciler == null) {
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveEditorWorkingCopy.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveEditorWorkingCopy.java
index d6de904..2ab037b 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveEditorWorkingCopy.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveEditorWorkingCopy.java
@@ -16,21 +16,21 @@
 
 import org.eclipse.core.runtime.IProgressMonitor;
 
-import org.eclipse.statet.docmlet.wikitext.core.IWikitextCoreAccess;
-import org.eclipse.statet.docmlet.wikitext.core.model.IWikidocWorkspaceSourceUnit;
-import org.eclipse.statet.docmlet.wikitext.core.model.IWikitextSourceUnit;
+import org.eclipse.statet.docmlet.wikitext.core.WikitextCoreAccess;
+import org.eclipse.statet.docmlet.wikitext.core.model.WikidocWorkspaceSourceUnit;
+import org.eclipse.statet.docmlet.wikitext.core.model.WikitextSourceUnit;
 import org.eclipse.statet.ltk.model.core.IModelManager;
 import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
 import org.eclipse.statet.ltk.ui.GenericEditorWorkspaceSourceUnitWorkingCopy2;
 import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.redocs.wikitext.r.core.model.IWikidocRweaveSourceUnit;
+import org.eclipse.statet.redocs.wikitext.r.core.model.WikidocRweaveSourceUnit;
 
 
 public class WikidocRweaveEditorWorkingCopy
 		extends GenericEditorWorkspaceSourceUnitWorkingCopy2<WikidocRweaveSuModelContainer>
-		implements IWikidocRweaveSourceUnit, IWikidocWorkspaceSourceUnit, IRWorkspaceSourceUnit {
+		implements WikidocRweaveSourceUnit, WikidocWorkspaceSourceUnit, IRWorkspaceSourceUnit {
 	
 	
 	public WikidocRweaveEditorWorkingCopy(final IRWorkspaceSourceUnit from) {
@@ -44,13 +44,13 @@
 	
 	
 	@Override
-	public IWikitextCoreAccess getWikitextCoreAccess() {
-		return ((IWikitextSourceUnit) getUnderlyingUnit()).getWikitextCoreAccess();
+	public WikitextCoreAccess getWikitextCoreAccess() {
+		return ((WikitextSourceUnit) getUnderlyingUnit()).getWikitextCoreAccess();
 	}
 	
 	@Override
 	public IRCoreAccess getRCoreAccess() {
-		return ((IWikidocRweaveSourceUnit) getUnderlyingUnit()).getRCoreAccess();
+		return ((WikidocRweaveSourceUnit) getUnderlyingUnit()).getRCoreAccess();
 	}
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveSourceUnit.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveResourceSourceUnit.java
similarity index 84%
rename from redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveSourceUnit.java
rename to redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveResourceSourceUnit.java
index a97c1f7..0185d15 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveSourceUnit.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveResourceSourceUnit.java
@@ -19,9 +19,9 @@
 
 import org.eclipse.statet.ecommons.text.core.sections.IDocContentSections;
 
-import org.eclipse.statet.docmlet.wikitext.core.IWikitextCoreAccess;
 import org.eclipse.statet.docmlet.wikitext.core.WikitextCore;
-import org.eclipse.statet.docmlet.wikitext.core.model.IWikidocWorkspaceSourceUnit;
+import org.eclipse.statet.docmlet.wikitext.core.WikitextCoreAccess;
+import org.eclipse.statet.docmlet.wikitext.core.model.WikidocWorkspaceSourceUnit;
 import org.eclipse.statet.ltk.model.core.IModelManager;
 import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
 import org.eclipse.statet.ltk.model.core.impl.GenericResourceSourceUnit2;
@@ -31,16 +31,16 @@
 import org.eclipse.statet.r.core.RProjects;
 import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.redocs.wikitext.r.core.model.IWikidocRweaveSourceUnit;
+import org.eclipse.statet.redocs.wikitext.r.core.model.WikidocRweaveSourceUnit;
 import org.eclipse.statet.redocs.wikitext.r.core.model.WikitextRweaveModel;
 import org.eclipse.statet.redocs.wikitext.r.core.source.WikidocRweaveDocumentContentInfo;
 
 
-public class WikidocRweaveSourceUnit extends GenericResourceSourceUnit2<WikidocRweaveSuModelContainer> 
-		implements IWikidocRweaveSourceUnit, IWikidocWorkspaceSourceUnit, IRWorkspaceSourceUnit {
+public class WikidocRweaveResourceSourceUnit extends GenericResourceSourceUnit2<WikidocRweaveSuModelContainer> 
+		implements WikidocRweaveSourceUnit, WikidocWorkspaceSourceUnit, IRWorkspaceSourceUnit {
 	
 	
-	public WikidocRweaveSourceUnit(final String id, final IFile file) {
+	public WikidocRweaveResourceSourceUnit(final String id, final IFile file) {
 		super(id, file);
 	}
 	
@@ -61,7 +61,7 @@
 	}
 	
 	@Override
-	public IWikitextCoreAccess getWikitextCoreAccess() {
+	public WikitextCoreAccess getWikitextCoreAccess() {
 		return WikitextCore.WORKBENCH_ACCESS;
 	}
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveSuModelContainer.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveSuModelContainer.java
index 9471805..6a07b5d 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveSuModelContainer.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveSuModelContainer.java
@@ -20,7 +20,7 @@
 
 import org.eclipse.statet.docmlet.wikitext.core.ast.Embedded;
 import org.eclipse.statet.docmlet.wikitext.core.ast.WikitextAstInfo;
-import org.eclipse.statet.docmlet.wikitext.core.markup.IMarkupLanguage;
+import org.eclipse.statet.docmlet.wikitext.core.markup.WikitextMarkupLanguage;
 import org.eclipse.statet.docmlet.wikitext.core.model.EmbeddingReconcileItem;
 import org.eclipse.statet.docmlet.wikitext.core.model.IWikidocModelInfo;
 import org.eclipse.statet.docmlet.wikitext.core.model.IWikidocSuModelContainerEmbeddedExtension;
@@ -31,16 +31,16 @@
 import org.eclipse.statet.ltk.core.SourceContent;
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.redocs.wikitext.r.core.model.IWikidocRweaveSourceUnit;
+import org.eclipse.statet.redocs.wikitext.r.core.model.WikidocRweaveSourceUnit;
 import org.eclipse.statet.redocs.wikitext.r.core.model.WikitextRweaveModel;
-import org.eclipse.statet.redocs.wikitext.r.core.source.IRweaveMarkupLanguage;
+import org.eclipse.statet.redocs.wikitext.r.core.source.RweaveMarkupLanguage;
 
 
-public class WikidocRweaveSuModelContainer extends WikidocSuModelContainer<IWikidocRweaveSourceUnit>
+public class WikidocRweaveSuModelContainer extends WikidocSuModelContainer<WikidocRweaveSourceUnit>
 		implements IWikidocSuModelContainerEmbeddedExtension {
 	
 	
-	public WikidocRweaveSuModelContainer(final IWikidocRweaveSourceUnit su) {
+	public WikidocRweaveSuModelContainer(final WikidocRweaveSourceUnit su) {
 		super(su);
 	}
 	
@@ -57,10 +57,10 @@
 	
 	@Override
 	public void reconcileEmbeddedAst(final SourceContent content, final List<Embedded> list,
-			final IMarkupLanguage markupLanguage, final int level,
+			final WikitextMarkupLanguage markupLanguage, final int level,
 			final IProgressMonitor monitor) {
-		if (markupLanguage instanceof IRweaveMarkupLanguage) {
-			WikidocRChunkReconciler.getInstance((IRweaveMarkupLanguage) markupLanguage)
+		if (markupLanguage instanceof RweaveMarkupLanguage) {
+			WikidocRChunkReconciler.getInstance((RweaveMarkupLanguage) markupLanguage)
 					.reconcileAst(this, content, list, monitor);
 		}
 	}
@@ -70,9 +70,9 @@
 			final List<EmbeddingReconcileItem> list,
 			final int level, final IProgressMonitor monitor) {
 		final WikitextAstInfo astInfo= wikitextModel.getAst();
-		final IMarkupLanguage markupLanguage= astInfo.getMarkupLanguage();
-		if (markupLanguage instanceof IRweaveMarkupLanguage) {
-			WikidocRChunkReconciler.getInstance((IRweaveMarkupLanguage) markupLanguage)
+		final WikitextMarkupLanguage markupLanguage= astInfo.getMarkupLanguage();
+		if (markupLanguage instanceof RweaveMarkupLanguage) {
+			WikidocRChunkReconciler.getInstance((RweaveMarkupLanguage) markupLanguage)
 					.reconcileModel(this, content, wikitextModel, list, level, monitor);
 		}
 	}
@@ -82,9 +82,9 @@
 			final ProblemRequestor problemRequestor, final int level,
 			final IProgressMonitor monitor) {
 		final WikitextAstInfo astInfo= wikitextModel.getAst();
-		final IMarkupLanguage markupLanguage= astInfo.getMarkupLanguage();
-		if (markupLanguage instanceof IRweaveMarkupLanguage) {
-			WikidocRChunkReconciler.getInstance((IRweaveMarkupLanguage) markupLanguage)
+		final WikitextMarkupLanguage markupLanguage= astInfo.getMarkupLanguage();
+		if (markupLanguage instanceof RweaveMarkupLanguage) {
+			WikidocRChunkReconciler.getInstance((RweaveMarkupLanguage) markupLanguage)
 					.reportEmbeddedProblems(this, content, wikitextModel, problemRequestor, level, monitor);
 		}
 	}
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikitextRweaveTexBuildParticipant.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikitextRweaveTexBuildParticipant.java
index 13d431b..baaab6c 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikitextRweaveTexBuildParticipant.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikitextRweaveTexBuildParticipant.java
@@ -24,13 +24,13 @@
 import org.eclipse.statet.jcommons.collections.ImList;
 
 import org.eclipse.statet.docmlet.wikitext.core.WikitextBuildParticipant;
-import org.eclipse.statet.docmlet.wikitext.core.model.IWikidocWorkspaceSourceUnit;
 import org.eclipse.statet.docmlet.wikitext.core.model.WikidocSuModelContainer;
+import org.eclipse.statet.docmlet.wikitext.core.model.WikidocWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.RProject;
 import org.eclipse.statet.r.core.RProjects;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.r.core.model.RModelIndexUpdate;
-import org.eclipse.statet.redocs.wikitext.r.core.model.IWikidocRweaveSourceUnit;
+import org.eclipse.statet.redocs.wikitext.r.core.model.WikidocRweaveSourceUnit;
 import org.eclipse.statet.redocs.wikitext.r.core.model.WikitextRweaveModel;
 
 
@@ -67,10 +67,10 @@
 	}
 	
 	@Override
-	public void docUnitUpdated(final IWikidocWorkspaceSourceUnit sourceUnit,
+	public void docUnitUpdated(final WikidocWorkspaceSourceUnit sourceUnit,
 			final IProgressMonitor monitor) throws CoreException {
-		if (sourceUnit instanceof IWikidocRweaveSourceUnit) {
-			final IWikidocRweaveSourceUnit unit= (IWikidocRweaveSourceUnit) sourceUnit;
+		if (sourceUnit instanceof WikidocRweaveSourceUnit) {
+			final WikidocRweaveSourceUnit unit= (WikidocRweaveSourceUnit) sourceUnit;
 			final WikidocRweaveSuModelContainer modelContainer= (WikidocRweaveSuModelContainer) unit.getAdapter(WikidocSuModelContainer.class);
 			if (modelContainer != null) {
 				this.rIndexUpdate.update(unit,
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveDocumentProvider.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveDocumentProvider.java
index 252fb7b..da9fba0 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveDocumentProvider.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveDocumentProvider.java
@@ -39,13 +39,13 @@
 import org.eclipse.statet.ltk.ui.sourceediting.SourceProblemAnnotation;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.r.ui.editors.REditorBuild;
-import org.eclipse.statet.redocs.wikitext.r.core.model.IWikidocRweaveSourceUnit;
+import org.eclipse.statet.redocs.wikitext.r.core.model.WikidocRweaveSourceUnit;
 import org.eclipse.statet.redocs.wikitext.r.core.model.WikitextRweaveModel;
 import org.eclipse.statet.yaml.core.model.YamlModel;
 import org.eclipse.statet.yaml.ui.editors.YamlEditorBuild;
 
 
-public class WikidocRweaveDocumentProvider extends SourceDocumentProvider<IWikidocRweaveSourceUnit>
+public class WikidocRweaveDocumentProvider extends SourceDocumentProvider<WikidocRweaveSourceUnit>
 		implements Disposable {
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveEditorTemplatesPage.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveEditorTemplatesPage.java
index 52ec310..4a9757d 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveEditorTemplatesPage.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveEditorTemplatesPage.java
@@ -34,12 +34,12 @@
 import org.eclipse.statet.r.ui.editors.templates.REditorContext;
 import org.eclipse.statet.r.ui.editors.templates.REditorTemplateContextType;
 import org.eclipse.statet.r.ui.sourceediting.RTemplateSourceViewerConfigurator;
-import org.eclipse.statet.redocs.wikitext.r.core.source.IWikitextRweaveDocumentConstants;
-import org.eclipse.statet.redocs.wikitext.r.ui.editors.WikidocRweaveEditor;
+import org.eclipse.statet.redocs.wikitext.r.core.source.WikitextRweaveDocumentConstants;
+import org.eclipse.statet.redocs.wikitext.r.ui.editors.WikidocRweaveDocEditor;
 
 
 /**
- * Page for {@link WikidocRweaveEditor} / {@link TemplatesView}
+ * Page for {@link WikidocRweaveDocEditor} / {@link TemplatesView}
  * 
  * At moment only for R templates.
  */
@@ -49,7 +49,7 @@
 	private SourceEditorViewerConfigurator rPreviewConfigurator;
 	
 	
-	public WikidocRweaveEditorTemplatesPage(final WikidocRweaveEditor editor, final ISourceViewer viewer) {
+	public WikidocRweaveEditorTemplatesPage(final WikidocRweaveDocEditor editor, final ISourceViewer viewer) {
 		super(RUIPlugin.getInstance().getREditorTemplateStore(), editor, viewer);
 	}
 	
@@ -67,7 +67,7 @@
 	@Override
 	protected String[] getContextTypeIds(final IDocument document, final int offset) {
 		try {
-			final String contentType= TextUtilities.getContentType(document, IWikitextRweaveDocumentConstants.WIKIDOC_R_PARTITIONING, offset, true);
+			final String contentType= TextUtilities.getContentType(document, WikitextRweaveDocumentConstants.WIKIDOC_R_PARTITIONING, offset, true);
 			if (IRDocumentConstants.R_ANY_CONTENT_CONSTRAINT.matches(contentType)) {
 				return new String[] { REditorTemplateContextType.RCODE_CONTEXTTYPE_ID };
 			}
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveOutlinePage.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveOutlinePage.java
index 5ed1ff2..c0d40a4 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveOutlinePage.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveOutlinePage.java
@@ -46,7 +46,7 @@
 import org.eclipse.statet.ecommons.ui.viewers.ViewerUtils;
 
 import org.eclipse.statet.base.ui.IStatetUIMenuIds;
-import org.eclipse.statet.docmlet.base.ui.DocBaseUIResources;
+import org.eclipse.statet.docmlet.base.ui.DocmlBaseUIResources;
 import org.eclipse.statet.docmlet.wikitext.core.model.IWikidocModelInfo;
 import org.eclipse.statet.docmlet.wikitext.core.model.IWikitextSourceElement;
 import org.eclipse.statet.docmlet.wikitext.core.model.WikitextModel;
@@ -135,14 +135,14 @@
 					}
 					
 					final IWikidocModelInfo modelInfo= getCurrentInputModel();
-					final DocBaseUIResources baseResources= DocBaseUIResources.INSTANCE;
+					final DocmlBaseUIResources baseResources= DocmlBaseUIResources.INSTANCE;
 					final RedocsRUIResources redocsResources= RedocsRUIResources.INSTANCE;
 					if (modelInfo.getMinSectionLevel() > 0) {
 						if (modelInfo.getMinSectionLevel() < 2
 								&& modelInfo.getMaxSectionLevel() >= 2) {
 							manager.add(new HandlerContributionItem(new CommandContributionItemParameter(
 									getSite(), null, EXPAND_ELEMENTS_COMMAND_ID, H2_PARAMETERS,
-									baseResources.getImageDescriptor(DocBaseUIResources.OBJ_HEADING2_IMAGE_ID), null, null,
+									baseResources.getImageDescriptor(DocmlBaseUIResources.OBJ_HEADING2_IMAGE_ID), null, null,
 									"Show all H2 sections", "C", null,
 									HandlerContributionItem.STYLE_PUSH, null, false ),
 									ExpandElementsContributionItem.this.expandElementsHandler ));
@@ -151,7 +151,7 @@
 								&& modelInfo.getMaxSectionLevel() >= 3) {
 							manager.add(new HandlerContributionItem(new CommandContributionItemParameter(
 									getSite(), null, EXPAND_ELEMENTS_COMMAND_ID, H3_PARAMETERS,
-									baseResources.getImageDescriptor(DocBaseUIResources.OBJ_HEADING3_IMAGE_ID), null, null,
+									baseResources.getImageDescriptor(DocmlBaseUIResources.OBJ_HEADING3_IMAGE_ID), null, null,
 									"Show all H3 sections", "S", null,
 									HandlerContributionItem.STYLE_PUSH, null, false ),
 									ExpandElementsContributionItem.this.expandElementsHandler ));
@@ -160,7 +160,7 @@
 								&& modelInfo.getMaxSectionLevel() >= 4) {
 							manager.add(new HandlerContributionItem(new CommandContributionItemParameter(
 									getSite(), null, EXPAND_ELEMENTS_COMMAND_ID, H4_PARAMETERS,
-									baseResources.getImageDescriptor(DocBaseUIResources.OBJ_HEADING4_IMAGE_ID), null, null,
+									baseResources.getImageDescriptor(DocmlBaseUIResources.OBJ_HEADING4_IMAGE_ID), null, null,
 									"Show all H4 sections", "u", null,
 									HandlerContributionItem.STYLE_PUSH, null, false ),
 									ExpandElementsContributionItem.this.expandElementsHandler ));
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/YamlFormatDetector.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/YamlFormatDetector.java
index 1e4bcd6..9d9d00b 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/YamlFormatDetector.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/processing/YamlFormatDetector.java
@@ -29,7 +29,7 @@
 
 import org.eclipse.statet.jcommons.text.core.TextLineInformation;
 
-import org.eclipse.statet.docmlet.base.ui.DocBaseUI;
+import org.eclipse.statet.docmlet.base.ui.DocmlBaseUI;
 import org.eclipse.statet.docmlet.base.ui.processing.DocProcessingConfig;
 import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.YamlBlockWeaveParticipant;
 import org.eclipse.statet.ltk.core.LTK;
@@ -84,7 +84,7 @@
 			final String ext= toExtension(format);
 			
 			if (!isValidExt(ext)) {
-				throw new CoreException(new Status(IStatus.ERROR, DocBaseUI.BUNDLE_ID,
+				throw new CoreException(new Status(IStatus.ERROR, DocmlBaseUI.BUNDLE_ID,
 						NLS.bind("Failed to detect file extension for format ''{0}''.",
 								format )));
 			}
@@ -214,7 +214,7 @@
 		
 		if (searcher.format != null) {
 			if (searcher.format == FAIL) {
-				throw new CoreException(new Status(IStatus.ERROR, DocBaseUI.BUNDLE_ID,
+				throw new CoreException(new Status(IStatus.ERROR, DocmlBaseUI.BUNDLE_ID,
 						"Unexpected data for 'format'.\nYAML code:\n" + code ));
 			}
 			else {
@@ -226,7 +226,7 @@
 				return searcher.outputFormat;
 			}
 			else if (searcher.output == FAIL) {
-				throw new CoreException(new Status(IStatus.ERROR, DocBaseUI.BUNDLE_ID,
+				throw new CoreException(new Status(IStatus.ERROR, DocmlBaseUI.BUNDLE_ID,
 						"Unexpected data for 'output'.\nYAML code:\n" + code ));
 			}
 			else {
@@ -234,7 +234,7 @@
 			}
 		}
 		else {
-			throw new CoreException(new Status(IStatus.ERROR, DocBaseUI.BUNDLE_ID,
+			throw new CoreException(new Status(IStatus.ERROR, DocmlBaseUI.BUNDLE_ID,
 					"No 'format' or 'output' entry found.\nYAML code:\n" + code ));
 		}
 	}
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/sourceediting/RChunkTemplateCompletionComputer.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/sourceediting/RChunkTemplateCompletionComputer.java
index ef71821..712e47e 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/sourceediting/RChunkTemplateCompletionComputer.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/sourceediting/RChunkTemplateCompletionComputer.java
@@ -28,7 +28,7 @@
 
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
-import org.eclipse.statet.docmlet.wikitext.core.markup.IMarkupLanguage;
+import org.eclipse.statet.docmlet.wikitext.core.markup.WikitextMarkupLanguage;
 import org.eclipse.statet.docmlet.wikitext.core.source.MarkupLanguageDocumentSetupParticipant;
 import org.eclipse.statet.internal.redocs.wikitext.r.RedocsWikitextRPlugin;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
@@ -38,14 +38,14 @@
 import org.eclipse.statet.ltk.ui.sourceediting.assist.TemplateCompletionComputer;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.TemplateProposal;
 import org.eclipse.statet.redocs.r.ui.RedocsRUIResources;
-import org.eclipse.statet.redocs.wikitext.r.core.source.IRweaveMarkupLanguage;
+import org.eclipse.statet.redocs.wikitext.r.core.source.RweaveMarkupLanguage;
 import org.eclipse.statet.redocs.wikitext.r.core.source.WikitextRweaveTemplateContextType;
 
 
 public class RChunkTemplateCompletionComputer extends TemplateCompletionComputer {
 	
 	
-	private IRweaveMarkupLanguage markupLanguage;
+	private RweaveMarkupLanguage markupLanguage;
 	
 	
 	public RChunkTemplateCompletionComputer() {
@@ -57,10 +57,10 @@
 	// sessionStarted not called automatically, because computer is not registered in registry
 	@Override
 	public void sessionStarted(final ISourceEditor editor, final ContentAssist assist) {
-		final IMarkupLanguage markupLanguage= MarkupLanguageDocumentSetupParticipant.getMarkupLanguage(
+		final WikitextMarkupLanguage markupLanguage= MarkupLanguageDocumentSetupParticipant.getMarkupLanguage(
 				editor.getViewer().getDocument(), editor.getDocumentContentInfo().getPartitioning() );
-		if (markupLanguage instanceof IRweaveMarkupLanguage) {
-			this.markupLanguage= (IRweaveMarkupLanguage) markupLanguage;
+		if (markupLanguage instanceof RweaveMarkupLanguage) {
+			this.markupLanguage= (RweaveMarkupLanguage) markupLanguage;
 		}
 	}
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/WikitextRweaveCore.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/WikitextRweaveCore.java
index 6372821..a76441e 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/WikitextRweaveCore.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/WikitextRweaveCore.java
@@ -14,7 +14,10 @@
 
 package org.eclipse.statet.redocs.wikitext.r.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+
+@NonNullByDefault
 public class WikitextRweaveCore {
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/model/IWikidocRweaveSourceUnit.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/model/WikidocRweaveSourceUnit.java
similarity index 77%
rename from redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/model/IWikidocRweaveSourceUnit.java
rename to redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/model/WikidocRweaveSourceUnit.java
index 3008319..3b486f2 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/model/IWikidocRweaveSourceUnit.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/model/WikidocRweaveSourceUnit.java
@@ -14,11 +14,14 @@
 
 package org.eclipse.statet.redocs.wikitext.r.core.model;
 
-import org.eclipse.statet.docmlet.wikitext.core.model.IWikitextSourceUnit;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.docmlet.wikitext.core.model.WikitextSourceUnit;
 import org.eclipse.statet.r.core.model.IRSourceUnit;
 
 
-public interface IWikidocRweaveSourceUnit extends IRSourceUnit, IWikitextSourceUnit {
+@NonNullByDefault
+public interface WikidocRweaveSourceUnit extends IRSourceUnit, WikitextSourceUnit {
 	
 	
 }
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/IRweaveMarkupLanguage.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/RweaveMarkupLanguage.java
similarity index 89%
rename from redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/IRweaveMarkupLanguage.java
rename to redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/RweaveMarkupLanguage.java
index c38637e..e25d958 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/IRweaveMarkupLanguage.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/RweaveMarkupLanguage.java
@@ -17,12 +17,12 @@
 import java.util.List;
 import java.util.regex.Pattern;
 
-import org.eclipse.statet.docmlet.wikitext.core.markup.IMarkupLanguage;
+import org.eclipse.statet.docmlet.wikitext.core.markup.WikitextMarkupLanguage;
 import org.eclipse.statet.ltk.ast.core.EmbeddingAstNode;
 import org.eclipse.statet.redocs.r.core.source.AbstractRChunkPartitionNodeScanner;
 
 
-public interface IRweaveMarkupLanguage extends IMarkupLanguage {
+public interface RweaveMarkupLanguage extends WikitextMarkupLanguage {
 	
 	
 	String EMBEDDED_R= "R"; // RModel.R_TYPE_ID //$NON-NLS-1$
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweaveBracketPairMatcher.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweaveBracketPairMatcher.java
index ddab80d..1e006e4 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweaveBracketPairMatcher.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweaveBracketPairMatcher.java
@@ -31,7 +31,7 @@
 		return new RBracketPairMatcher(scanner,
 				new String[] {
 					IRDocumentConstants.R_DEFAULT_CONTENT_TYPE,
-					IWikitextRweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE
+					WikitextRweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE
 				} );
 	}
 	
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 7eb626a..3a73710 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
@@ -25,33 +25,33 @@
 import org.eclipse.statet.ecommons.text.core.sections.AbstractDocContentSections;
 import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode;
 
-import org.eclipse.statet.docmlet.tex.core.source.ITexDocumentConstants;
-import org.eclipse.statet.docmlet.wikitext.core.source.IWikitextDocumentConstants;
+import org.eclipse.statet.docmlet.tex.core.source.TexDocumentConstants;
+import org.eclipse.statet.docmlet.wikitext.core.source.WikitextDocumentConstants;
 import org.eclipse.statet.r.core.source.IRDocumentConstants;
-import org.eclipse.statet.redocs.r.core.source.IDocContentSectionsRweaveExtension;
+import org.eclipse.statet.redocs.r.core.source.DocContentSectionsRweaveExtension;
 import org.eclipse.statet.redocs.r.core.source.RweaveDocSectionTreePartImpl;
-import org.eclipse.statet.yaml.core.source.IYamlDocumentConstants;
+import org.eclipse.statet.yaml.core.source.YamlDocumentConstants;
 
 
 public class WikidocRweaveDocumentContentInfo extends AbstractDocContentSections
-		implements IDocContentSectionsRweaveExtension {
+		implements DocContentSectionsRweaveExtension {
 	
 	
-	public static final String WIKITEXT=                    IWikitextDocumentConstants.WIKIDOC_PARTITIONING;
-	public static final String YAML=                        IYamlDocumentConstants.YAML_PARTITIONING;
-	public static final String LTX=                         ITexDocumentConstants.LTX_PARTITIONING;
+	public static final String WIKITEXT=                    WikitextDocumentConstants.WIKIDOC_PARTITIONING;
+	public static final String YAML=                        YamlDocumentConstants.YAML_PARTITIONING;
+	public static final String LTX=                         TexDocumentConstants.LTX_PARTITIONING;
 	public static final String R_CHUNK_CONTROL=             "org.eclipse.statet.WikitextR-ChunkControl"; //$NON-NLS-1$
 	public static final String R=                           IRDocumentConstants.R_PARTITIONING;
 	
 	
-	public static final IDocContentSectionsRweaveExtension INSTANCE= new WikidocRweaveDocumentContentInfo();
+	public static final DocContentSectionsRweaveExtension INSTANCE= new WikidocRweaveDocumentContentInfo();
 	
 	
 	private final RweaveDocSectionTreePartImpl rweaveImpl;
 	
 	
 	public WikidocRweaveDocumentContentInfo() {
-		super(IWikitextRweaveDocumentConstants.WIKIDOC_R_PARTITIONING, WIKITEXT,
+		super(WikitextRweaveDocumentConstants.WIKIDOC_R_PARTITIONING, WIKITEXT,
 				ImCollections.newList(WIKITEXT, YAML, LTX, R_CHUNK_CONTROL, R) );
 		
 		this.rweaveImpl= new RweaveDocSectionTreePartImpl(this);
@@ -63,13 +63,13 @@
 		if (IRDocumentConstants.R_ANY_CONTENT_CONSTRAINT.matches(contentType)) {
 			return R;
 		}
-		if (IWikitextRweaveDocumentConstants.RCHUNK_PARTITION_CONSTRAINT.matches(contentType)) {
+		if (WikitextRweaveDocumentConstants.RCHUNK_PARTITION_CONSTRAINT.matches(contentType)) {
 			return R_CHUNK_CONTROL;
 		}
-		if (IYamlDocumentConstants.YAML_ANY_CONTENT_CONSTRAINT.matches(contentType)) {
+		if (YamlDocumentConstants.YAML_ANY_CONTENT_CONSTRAINT.matches(contentType)) {
 			return YAML;
 		}
-		if (ITexDocumentConstants.LTX_ANY_CONTENT_CONSTRAINT.matches(contentType)) {
+		if (TexDocumentConstants.LTX_ANY_CONTENT_CONSTRAINT.matches(contentType)) {
 			return LTX;
 		}
 		return WIKITEXT;
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweaveDocumentSetupParticipant.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweaveDocumentSetupParticipant.java
index 93ee454..abcd743 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweaveDocumentSetupParticipant.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikidocRweaveDocumentSetupParticipant.java
@@ -14,11 +14,11 @@
 
 package org.eclipse.statet.redocs.wikitext.r.core.source;
 
-import org.eclipse.statet.docmlet.wikitext.core.markup.IMarkupLanguage;
-import org.eclipse.statet.docmlet.wikitext.core.source.IMarkupLanguagePartitioner;
+import org.eclipse.statet.docmlet.wikitext.core.markup.WikitextMarkupLanguage;
 import org.eclipse.statet.docmlet.wikitext.core.source.MarkupLanguageDocumentSetupParticipant1;
+import org.eclipse.statet.docmlet.wikitext.core.source.MarkupLanguagePartitioner;
 import org.eclipse.statet.docmlet.wikitext.core.source.WikitextPartitioner;
-import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.IExtdocMarkupLanguage;
+import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.ExtdocMarkupLanguage;
 
 
 /**
@@ -27,26 +27,26 @@
 public class WikidocRweaveDocumentSetupParticipant extends MarkupLanguageDocumentSetupParticipant1 {
 	
 	
-	public WikidocRweaveDocumentSetupParticipant(final IExtdocMarkupLanguage markupLanguage) {
+	public WikidocRweaveDocumentSetupParticipant(final ExtdocMarkupLanguage markupLanguage) {
 		this(markupLanguage, false);
 	}
 	
-	public WikidocRweaveDocumentSetupParticipant(final IExtdocMarkupLanguage markupLanguage,
+	public WikidocRweaveDocumentSetupParticipant(final ExtdocMarkupLanguage markupLanguage,
 			final boolean templateMode) {
-		super(markupLanguage, (templateMode) ? IMarkupLanguage.TEMPLATE_MODE : 0);
+		super(markupLanguage, (templateMode) ? WikitextMarkupLanguage.TEMPLATE_MODE : 0);
 	}
 	
 	
 	@Override
 	public String getPartitioningId() {
-		return IWikitextRweaveDocumentConstants.WIKIDOC_R_PARTITIONING;
+		return WikitextRweaveDocumentConstants.WIKIDOC_R_PARTITIONING;
 	}
 	
 	@Override
-	protected IMarkupLanguagePartitioner createDocumentPartitioner(final IMarkupLanguage markupLanguage) {
+	protected MarkupLanguagePartitioner createDocumentPartitioner(final WikitextMarkupLanguage markupLanguage) {
 		return new WikitextPartitioner(getPartitioningId(),
 				new WikidocRweavePartitionNodeScanner(markupLanguage, getMarkupLanguageMode()),
-				IWikitextRweaveDocumentConstants.WIKIDOC_R_CONTENT_TYPES );
+				WikitextRweaveDocumentConstants.WIKIDOC_R_CONTENT_TYPES );
 	}
 	
 }
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 6005cc3..57ea766 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
@@ -19,7 +19,7 @@
 import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNode;
 import org.eclipse.statet.ecommons.text.core.treepartitioner.ITreePartitionNodeType;
 
-import org.eclipse.statet.docmlet.wikitext.core.markup.IMarkupLanguage;
+import org.eclipse.statet.docmlet.wikitext.core.markup.WikitextMarkupLanguage;
 import org.eclipse.statet.docmlet.wikitext.core.source.EmbeddingAttributes;
 import org.eclipse.statet.docmlet.wikitext.core.source.extdoc.WikidocPartitionNodeScanner;
 import org.eclipse.statet.r.core.source.RPartitionNodeType;
@@ -32,11 +32,11 @@
 	private AbstractRChunkPartitionNodeScanner rScanner;
 	
 	
-	public WikidocRweavePartitionNodeScanner(final IMarkupLanguage markupLanguage) {
+	public WikidocRweavePartitionNodeScanner(final WikitextMarkupLanguage markupLanguage) {
 		super(markupLanguage);
 	}
 	
-	public WikidocRweavePartitionNodeScanner(final IMarkupLanguage markupLanguage,
+	public WikidocRweavePartitionNodeScanner(final WikitextMarkupLanguage markupLanguage,
 			final int markupLanguageMode) {
 		super(markupLanguage, markupLanguageMode);
 	}
@@ -44,9 +44,9 @@
 	
 	@Override
 	protected void init() {
-		{	final IMarkupLanguage markupLanguage= getMarkupLanguage();
-			if (markupLanguage instanceof IRweaveMarkupLanguage) {
-				final IRweaveMarkupLanguage rweaveLanguage= (IRweaveMarkupLanguage) markupLanguage;
+		{	final WikitextMarkupLanguage markupLanguage= getMarkupLanguage();
+			if (markupLanguage instanceof RweaveMarkupLanguage) {
+				final RweaveMarkupLanguage rweaveLanguage= (RweaveMarkupLanguage) markupLanguage;
 				
 				this.rScanner= rweaveLanguage.getRChunkPartitionScanner();
 			}
@@ -79,7 +79,7 @@
 	@Override
 	protected void beginEmbeddingBlock(final BlockType type, final Embedding embedding) {
 		if (type == BlockType.CODE
-				&& embedding.getForeignType() == IRweaveMarkupLanguage.EMBEDDED_R) {
+				&& embedding.getForeignType() == RweaveMarkupLanguage.EMBEDDED_R) {
 			addNode(R_CHUNK_BASE_TYPE, getEventBeginOffset());
 			embedding.init(getNode());
 			return;
@@ -101,7 +101,7 @@
 	@Override
 	protected void beginEmbeddingSpan(final SpanType type, final Embedding embedding) {
 		if (type == SpanType.CODE
-				&& embedding.getForeignType() == IRweaveMarkupLanguage.EMBEDDED_R) {
+				&& embedding.getForeignType() == RweaveMarkupLanguage.EMBEDDED_R) {
 			final EmbeddingAttributes attributes= embedding.getAttributes();
 			addNode(this.rScanner.getDefaultRootType(),
 					getStartOffset() + attributes.getContentRegion().getStartOffset() );
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/IWikitextRweaveDocumentConstants.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikitextRweaveDocumentConstants.java
similarity index 77%
rename from redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/IWikitextRweaveDocumentConstants.java
rename to redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikitextRweaveDocumentConstants.java
index 3b73090..00fb438 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/IWikitextRweaveDocumentConstants.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikitextRweaveDocumentConstants.java
@@ -16,13 +16,15 @@
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
-import org.eclipse.statet.docmlet.wikitext.core.source.IWikitextDocumentConstants;
+import org.eclipse.statet.docmlet.wikitext.core.source.WikitextDocumentConstants;
 import org.eclipse.statet.r.core.source.IRDocumentConstants;
-import org.eclipse.statet.redocs.r.core.source.IRweaveDocumentConstants;
+import org.eclipse.statet.redocs.r.core.source.RweaveDocumentConstants;
 
 
-public interface IWikitextRweaveDocumentConstants extends IRweaveDocumentConstants {
+@NonNullByDefault
+public interface WikitextRweaveDocumentConstants extends RweaveDocumentConstants {
 	
 	
 	/**
@@ -35,7 +37,7 @@
 	 * List with all partition content types of Wikitext+R documents.
 	 */
 	ImList<String> WIKIDOC_R_CONTENT_TYPES= ImCollections.concatList(
-			IWikitextDocumentConstants.WIKIDOC_EXT_CONTENT_TYPES,
+			WikitextDocumentConstants.WIKIDOC_EXT_CONTENT_TYPES,
 			RCHUNK_CONTENT_TYPES,
 			IRDocumentConstants.R_CONTENT_TYPES );
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/editors/IWikidocRweaveEditor.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/editors/IWikidocRweaveEditor.java
deleted file mode 100644
index 1cf0893..0000000
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/editors/IWikidocRweaveEditor.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2007, 2019 Stephan Wahlbrink and others.
- # 
- # This program and the accompanying materials are made available under the
- # terms of the Eclipse Public License 2.0 which is available at
- # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
- # which is available at https://www.apache.org/licenses/LICENSE-2.0.
- # 
- # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
- # 
- # Contributors:
- #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
- #=============================================================================*/
-
-package org.eclipse.statet.redocs.wikitext.r.ui.editors;
-
-import org.eclipse.statet.docmlet.wikitext.ui.editors.IWikidocEditor;
-import org.eclipse.statet.redocs.r.ui.sourceediting.IRweaveEditor;
-import org.eclipse.statet.redocs.wikitext.r.core.model.IWikidocRweaveSourceUnit;
-
-
-public interface IWikidocRweaveEditor extends IRweaveEditor, IWikidocEditor {
-	
-	
-	@Override
-	public IWikidocRweaveSourceUnit getSourceUnit();
-	
-}
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/editors/WikidocRweaveDocEditor.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/editors/WikidocRweaveDocEditor.java
new file mode 100644
index 0000000..0002d1c
--- /dev/null
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/editors/WikidocRweaveDocEditor.java
@@ -0,0 +1,411 @@
+/*=============================================================================#
+ # Copyright (c) 2007, 2019 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.redocs.wikitext.r.ui.editors;
+
+import static org.eclipse.statet.ecommons.ui.actions.UIActions.ADDITIONS_GROUP_ID;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.commands.IHandler2;
+import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.text.AbstractDocument;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.BadPartitioningException;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.menus.CommandContributionItem;
+import org.eclipse.ui.menus.CommandContributionItemParameter;
+import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants;
+import org.eclipse.ui.texteditor.ITextEditorActionConstants;
+import org.eclipse.ui.texteditor.templates.ITemplatesPage;
+
+import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.Nullable;
+import org.eclipse.statet.jcommons.text.core.TextRegion;
+
+import org.eclipse.statet.base.ui.IStatetUIMenuIds;
+import org.eclipse.statet.docmlet.base.ui.DocmlBaseUI;
+import org.eclipse.statet.docmlet.base.ui.markuphelp.MarkupHelpContextProvider;
+import org.eclipse.statet.docmlet.base.ui.processing.actions.RunDocProcessingOnSaveExtension;
+import org.eclipse.statet.docmlet.base.ui.sourceediting.DocEditor;
+import org.eclipse.statet.docmlet.wikitext.core.WikitextCore;
+import org.eclipse.statet.docmlet.wikitext.core.ast.WikitextAstNode;
+import org.eclipse.statet.docmlet.wikitext.core.model.WikitextModel;
+import org.eclipse.statet.docmlet.wikitext.ui.WikitextUI;
+import org.eclipse.statet.docmlet.wikitext.ui.editors.WikidocDefaultFoldingProvider;
+import org.eclipse.statet.docmlet.wikitext.ui.editors.WikitextMarkOccurrencesLocator;
+import org.eclipse.statet.docmlet.wikitext.ui.sourceediting.WikitextEditingSettings;
+import org.eclipse.statet.internal.redocs.wikitext.r.RedocsWikitextRPlugin;
+import org.eclipse.statet.internal.redocs.wikitext.r.ui.editors.WikidocRweaveEditorTemplatesPage;
+import org.eclipse.statet.internal.redocs.wikitext.r.ui.editors.WikidocRweaveOutlinePage;
+import org.eclipse.statet.ltk.ast.core.util.AstSelection;
+import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
+import org.eclipse.statet.ltk.ui.LTKUI;
+import org.eclipse.statet.ltk.ui.sourceediting.AbstractMarkOccurrencesProvider;
+import org.eclipse.statet.ltk.ui.sourceediting.ForwardSourceDocumentProvider;
+import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditorAddon;
+import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor1;
+import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor1OutlinePage;
+import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewer;
+import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
+import org.eclipse.statet.ltk.ui.sourceediting.folding.FoldingEditorAddon;
+import org.eclipse.statet.r.core.IRCoreAccess;
+import org.eclipse.statet.r.core.RCore;
+import org.eclipse.statet.r.core.rsource.ast.RAstNode;
+import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.launching.RCodeLaunching;
+import org.eclipse.statet.r.ui.RUI;
+import org.eclipse.statet.r.ui.editors.IRSourceEditor;
+import org.eclipse.statet.r.ui.editors.RCorrectIndentHandler;
+import org.eclipse.statet.r.ui.editors.RDefaultFoldingProvider;
+import org.eclipse.statet.r.ui.editors.RMarkOccurrencesLocator;
+import org.eclipse.statet.r.ui.sourceediting.InsertAssignmentHandler;
+import org.eclipse.statet.redocs.r.core.source.DocContentSectionsRweaveExtension;
+import org.eclipse.statet.redocs.r.ui.RedocsRUI;
+import org.eclipse.statet.redocs.r.ui.sourceediting.actions.RweaveToggleCommentHandler;
+import org.eclipse.statet.redocs.wikitext.r.core.model.WikidocRweaveSourceUnit;
+import org.eclipse.statet.redocs.wikitext.r.core.source.RweaveMarkupLanguage;
+import org.eclipse.statet.redocs.wikitext.r.core.source.WikidocRweaveDocumentContentInfo;
+import org.eclipse.statet.redocs.wikitext.r.core.source.WikidocRweaveDocumentSetupParticipant;
+import org.eclipse.statet.redocs.wikitext.r.ui.WikitextRweaveUI;
+import org.eclipse.statet.redocs.wikitext.r.ui.sourceediting.WikidocRweaveSourceViewerConfiguration;
+import org.eclipse.statet.redocs.wikitext.r.ui.sourceediting.WikidocRweaveSourceViewerConfigurator;
+import org.eclipse.statet.rj.renv.core.REnv;
+
+
+/**
+ * Editor for Wikitext-R documents.
+ */
+public abstract class WikidocRweaveDocEditor extends SourceEditor1 implements WikidocRweaveEditor,
+		DocEditor, MarkupHelpContextProvider {
+	
+	
+	private static final ImList<String> KEY_CONTEXTS= ImCollections.newIdentityList(
+			WikitextUI.EDITOR_CONTEXT_ID,
+			DocmlBaseUI.DOC_EDITOR_CONTEXT_ID,
+			RedocsRUI.RWEAVE_EDITOR_CONTEXT_ID );
+	
+	private static final ImList<String> CONTEXT_IDS= ImCollections.concatList(
+			ACTION_SET_CONTEXT_IDS, KEY_CONTEXTS );
+	
+	
+	private static class ThisMarkOccurrencesProvider extends AbstractMarkOccurrencesProvider {
+		
+		
+		private final WikitextMarkOccurrencesLocator docLocator= new WikitextMarkOccurrencesLocator();
+		private final RMarkOccurrencesLocator rLocator= new RMarkOccurrencesLocator();
+		
+		
+		public ThisMarkOccurrencesProvider(final SourceEditor1 editor) {
+			super(editor, IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT);
+		}
+		
+		@Override
+		protected void doUpdate(final RunData run, final ISourceUnitModelInfo info,
+				final AstSelection astSelection, final ITextSelection orgSelection)
+				throws BadLocationException, BadPartitioningException, UnsupportedOperationException {
+			if (astSelection.getCovering() instanceof WikitextAstNode) {
+				this.docLocator.run(run, info, astSelection, orgSelection);
+			}
+			else if (astSelection.getCovering() instanceof RAstNode) {
+				this.rLocator.run(run, info, astSelection, orgSelection);
+			}
+		}
+		
+	}
+	
+	private static class ThisCorrectIndentHandler extends RCorrectIndentHandler {
+		
+		public ThisCorrectIndentHandler(final IRSourceEditor editor) {
+			super(editor);
+		}
+		
+		@Override
+		protected List<? extends TextRegion> getCodeRanges(final AbstractDocument document,
+				final ITextSelection selection) throws BadLocationException {
+			return WikidocRweaveDocumentContentInfo.INSTANCE.getRChunkCodeRegions(document,
+					selection.getOffset(), selection.getLength() );
+		}
+		
+	}
+	
+	
+	private final WikidocRweaveDocumentSetupParticipant documentSetup;
+	
+	private WikidocRweaveSourceViewerConfigurator combinedConfig;
+	
+	private final RunDocProcessingOnSaveExtension autoDocProcessing;
+	
+	
+	public WikidocRweaveDocEditor(final IContentType contentType,
+			final WikidocRweaveDocumentSetupParticipant documentSetup) {
+		super(contentType);
+		if (documentSetup == null) {
+			throw new NullPointerException("documentSetup"); //$NON-NLS-1$
+		}
+		this.documentSetup= documentSetup;
+		
+		this.autoDocProcessing= new RunDocProcessingOnSaveExtension(this);
+		
+		initializeEditor();
+	}
+	
+	
+	@Override
+	protected void initializeEditor() {
+		if (this.documentSetup == null) {
+			return;
+		}
+		
+		super.initializeEditor();
+		
+		setEditorContextMenuId("org.eclipse.statet.redocs.menus.WikidocRweaveEditorContextMenu"); //$NON-NLS-1$
+		setRulerContextMenuId("org.eclipse.statet.redocs.menus.WikidocRweaveEditorRulerMenu"); //$NON-NLS-1$
+	}
+	
+	@Override
+	protected SourceEditorViewerConfigurator createConfiguration() {
+		setDocumentProvider(new ForwardSourceDocumentProvider(
+				RedocsWikitextRPlugin.getInstance().getDocRDocumentProvider(),
+				this.documentSetup ));
+		
+		enableStructuralFeatures(WikitextModel.getWikidocModelManager(),
+				WikitextEditingSettings.FOLDING_ENABLED_PREF,
+				WikitextEditingSettings.MARKOCCURRENCES_ENABLED_PREF );
+		
+		this.combinedConfig= new WikidocRweaveSourceViewerConfigurator(
+				this.documentSetup,
+				WikitextCore.WORKBENCH_ACCESS, RCore.WORKBENCH_ACCESS,
+				new WikidocRweaveSourceViewerConfiguration(0, this, null, null, null) );
+		return this.combinedConfig;
+	}
+	
+	@Override
+	protected int getSourceViewerFlags() {
+		return SourceEditorViewer.VARIABLE_LINE_HEIGHT;
+	}
+	
+	@Override
+	protected Collection<String> getContextIds() {
+		return CONTEXT_IDS;
+	}
+	
+	@Override
+	protected ISourceEditorAddon createCodeFoldingProvider() {
+		return new FoldingEditorAddon(new WikidocDefaultFoldingProvider(Collections.singletonMap(
+				RweaveMarkupLanguage.EMBEDDED_R, new RDefaultFoldingProvider() )));
+	}
+	
+	@Override
+	protected ISourceEditorAddon createMarkOccurrencesProvider() {
+		return new ThisMarkOccurrencesProvider(this);
+	}
+	
+	
+	@Override
+	public IRCoreAccess getRCoreAccess() {
+		return this.combinedConfig.getRCoreAccess();
+	}
+	
+	@Override
+	public DocContentSectionsRweaveExtension getDocumentContentInfo() {
+		return (DocContentSectionsRweaveExtension) super.getDocumentContentInfo();
+	}
+	
+	@Override
+	public WikidocRweaveSourceUnit getSourceUnit() {
+		return (WikidocRweaveSourceUnit) super.getSourceUnit();
+	}
+	
+	@Override
+	protected void setupConfiguration(final IEditorInput newInput) {
+		super.setupConfiguration(newInput);
+		
+		final WikidocRweaveSourceUnit su= getSourceUnit();
+		this.combinedConfig.setSource(
+				(su != null) ? su.getWikitextCoreAccess() : WikitextCore.WORKBENCH_ACCESS,
+				(su != null) ? su.getRCoreAccess() : RCore.WORKBENCH_ACCESS );
+		
+		this.autoDocProcessing.setAutoRunEnabled(false);
+	}
+	
+	
+	@Override
+	protected void handlePreferenceStoreChanged(final org.eclipse.jface.util.PropertyChangeEvent event) {
+		if (AbstractDecoratedTextEditorPreferenceConstants.EDITOR_TAB_WIDTH.equals(event.getProperty())
+				|| AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SPACES_FOR_TABS.equals(event.getProperty())) {
+			return;
+		}
+		super.handlePreferenceStoreChanged(event);
+	}
+	
+	
+	@Override
+	protected boolean isTabsToSpacesConversionEnabled() {
+		return false;
+	}
+	
+	public void updateSettings(final boolean indentChanged) {
+		if (indentChanged) {
+			updateIndentPrefixes();
+		}
+	}
+	
+	
+	@Override
+	protected void collectContextMenuPreferencePages(final List<String> pageIds) {
+		super.collectContextMenuPreferencePages(pageIds);
+		pageIds.add(WikitextRweaveUI.EDITOR_PREF_PAGE_ID);
+		pageIds.add(WikitextUI.EDITOR_PREF_PAGE_ID);
+		pageIds.add("org.eclipse.mylyn.internal.wikitext.ui.editor.preferences.WikiTextTemplatePreferencePage"); //$NON-NLS-1$
+		pageIds.add("org.eclipse.statet.docmlet.preferencePages.WikitextCodeStyle"); //$NON-NLS-1$
+		pageIds.add("org.eclipse.statet.r.preferencePages.REditorOptions"); //$NON-NLS-1$
+		pageIds.add("org.eclipse.statet.r.preferencePages.RTextStyles"); //$NON-NLS-1$
+		pageIds.add("org.eclipse.statet.r.preferencePages.REditorTemplates"); //$NON-NLS-1$
+		pageIds.add("org.eclipse.statet.r.preferencePages.RCodeStyle"); //$NON-NLS-1$
+	}
+	
+	@Override
+	protected void createActions() {
+		super.createActions();
+		final IHandlerService handlerService= getServiceLocator()
+				.getService(IHandlerService.class);
+		
+		{	final IHandler2 handler= new InsertAssignmentHandler(this);
+			handlerService.activateHandler(LTKUI.INSERT_ASSIGNMENT_COMMAND_ID, handler);
+			markAsStateDependentHandler(handler, true);
+		}
+	}
+	
+	@Override
+	protected IHandler2 createToggleCommentHandler() {
+		final IHandler2 handler= new RweaveToggleCommentHandler(this) {
+			@Override
+			protected Pattern getPrefixPattern(final String contentType, final String prefix) {
+				if (prefix.equals("<!--")) { //$NON-NLS-1$
+					return HTML_SPACE_PREFIX_PATTERN;
+				}
+				return super.getPrefixPattern(contentType, prefix);
+			}
+			@Override
+			protected Pattern getPostfixPattern(final String contentType, final String prefix) {
+				if (prefix.equals("<!--")) { //$NON-NLS-1$
+					return HTML_SPACE_POSTFIX_PATTERN;
+				}
+				return super.getPostfixPattern(contentType, prefix);
+			}
+			@Override
+			protected void doPrefixPrimary(final AbstractDocument document, final IRegion block)
+					throws BadLocationException, BadPartitioningException {
+				doPrefix(document, block, "<!-- ", " -->"); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+		};
+		markAsStateDependentHandler(handler, true);
+		return handler;
+	}
+	
+	@Override
+	protected IHandler2 createCorrectIndentHandler() {
+		final IHandler2 handler= new ThisCorrectIndentHandler(this);
+		markAsStateDependentHandler(handler, true);
+		return handler;
+	}
+	
+	@Override
+	protected void editorContextMenuAboutToShow(final IMenuManager m) {
+		super.editorContextMenuAboutToShow(m);
+		final WikidocRweaveSourceUnit su= getSourceUnit();
+		
+		m.insertBefore(ADDITIONS_GROUP_ID, new Separator(IStatetUIMenuIds.GROUP_SUBMIT_MENU_ID));
+		final IContributionItem additions= m.find(ADDITIONS_GROUP_ID);
+		if (additions != null) {
+			additions.setVisible(false);
+		}
+		
+		m.remove(ITextEditorActionConstants.SHIFT_RIGHT);
+		m.remove(ITextEditorActionConstants.SHIFT_LEFT);
+		
+		m.appendToGroup(IStatetUIMenuIds.GROUP_SUBMIT_MENU_ID, new CommandContributionItem(
+				new CommandContributionItemParameter(getSite(), null,
+						RCodeLaunching.SUBMIT_SELECTION_COMMAND_ID,
+						CommandContributionItem.STYLE_PUSH )));
+		m.appendToGroup(IStatetUIMenuIds.GROUP_SUBMIT_MENU_ID, new CommandContributionItem(
+				new CommandContributionItemParameter(getSite(), null,
+						RCodeLaunching.SUBMIT_UPTO_SELECTION_COMMAND_ID,
+						CommandContributionItem.STYLE_PUSH )));
+		
+		m.appendToGroup(ITextEditorActionConstants.GROUP_SETTINGS, new CommandContributionItem(
+				new CommandContributionItemParameter(getSite(), null,
+						DocmlBaseUI.CONFIGURE_MARKUP_COMMAND_ID, null,
+						null, null, null,
+						"Configure Markup...", "M", null,
+						CommandContributionItem.STYLE_PUSH, null, false )));
+	}
+	
+	
+	@Override
+	protected void editorSaved() {
+		super.editorSaved();
+		
+		this.autoDocProcessing.onEditorSaved();
+	}
+	
+	
+	@Override
+	protected SourceEditor1OutlinePage createOutlinePage() {
+		return new WikidocRweaveOutlinePage(this);
+	}
+	
+	@Override
+	protected ITemplatesPage createTemplatesPage() {
+		return new WikidocRweaveEditorTemplatesPage(this, getSourceViewer());
+	}
+	
+	@Override
+	public String[] getShowInTargetIds() {
+		return new String[] { IPageLayout.ID_PROJECT_EXPLORER, IPageLayout.ID_OUTLINE, RUI.R_HELP_VIEW_ID };
+	}
+	
+	@Override
+	public @Nullable String getHelpContentId() {
+		return WikitextUI.getMarkupHelpContentIdFor(this.documentSetup.getMarkupLanguage());
+	}
+	
+	@Override
+	@SuppressWarnings("unchecked")
+	public <T> T getAdapter(final Class<T> adapterType) {
+		if (adapterType == MarkupHelpContextProvider.class) {
+			return (T) this;
+		}
+		if (adapterType == RunDocProcessingOnSaveExtension.class) {
+			return (T) this.autoDocProcessing;
+		}
+		if (adapterType == REnv.class) {
+			return (T) getRCoreAccess().getREnv();
+		}
+		return super.getAdapter(adapterType);
+	}
+	
+}
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/editors/WikidocRweaveEditor.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/editors/WikidocRweaveEditor.java
index 497872b..08b7da3 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/editors/WikidocRweaveEditor.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/editors/WikidocRweaveEditor.java
@@ -14,397 +14,15 @@
 
 package org.eclipse.statet.redocs.wikitext.r.ui.editors;
 
-import static org.eclipse.statet.ecommons.ui.actions.UIActions.ADDITIONS_GROUP_ID;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import org.eclipse.core.commands.IHandler2;
-import org.eclipse.core.runtime.content.IContentType;
-import org.eclipse.jface.action.IContributionItem;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.text.AbstractDocument;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.BadPartitioningException;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.ITextSelection;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IPageLayout;
-import org.eclipse.ui.handlers.IHandlerService;
-import org.eclipse.ui.menus.CommandContributionItem;
-import org.eclipse.ui.menus.CommandContributionItemParameter;
-import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants;
-import org.eclipse.ui.texteditor.ITextEditorActionConstants;
-import org.eclipse.ui.texteditor.templates.ITemplatesPage;
-
-import org.eclipse.statet.jcommons.collections.ImCollections;
-import org.eclipse.statet.jcommons.collections.ImList;
-import org.eclipse.statet.jcommons.text.core.TextRegion;
-
-import org.eclipse.statet.base.ui.IStatetUIMenuIds;
-import org.eclipse.statet.docmlet.base.ui.DocBaseUI;
-import org.eclipse.statet.docmlet.base.ui.markuphelp.IMarkupHelpContextProvider;
-import org.eclipse.statet.docmlet.base.ui.processing.actions.RunDocProcessingOnSaveExtension;
-import org.eclipse.statet.docmlet.base.ui.sourceediting.IDocEditor;
-import org.eclipse.statet.docmlet.wikitext.core.WikitextCore;
-import org.eclipse.statet.docmlet.wikitext.core.ast.WikitextAstNode;
-import org.eclipse.statet.docmlet.wikitext.core.model.WikitextModel;
-import org.eclipse.statet.docmlet.wikitext.ui.WikitextUI;
-import org.eclipse.statet.docmlet.wikitext.ui.editors.WikidocDefaultFoldingProvider;
-import org.eclipse.statet.docmlet.wikitext.ui.editors.WikitextMarkOccurrencesLocator;
-import org.eclipse.statet.docmlet.wikitext.ui.sourceediting.WikitextEditingSettings;
-import org.eclipse.statet.internal.redocs.wikitext.r.RedocsWikitextRPlugin;
-import org.eclipse.statet.internal.redocs.wikitext.r.ui.editors.WikidocRweaveEditorTemplatesPage;
-import org.eclipse.statet.internal.redocs.wikitext.r.ui.editors.WikidocRweaveOutlinePage;
-import org.eclipse.statet.ltk.ast.core.util.AstSelection;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
-import org.eclipse.statet.ltk.ui.LTKUI;
-import org.eclipse.statet.ltk.ui.sourceediting.AbstractMarkOccurrencesProvider;
-import org.eclipse.statet.ltk.ui.sourceediting.ForwardSourceDocumentProvider;
-import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditorAddon;
-import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor1;
-import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor1OutlinePage;
-import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewer;
-import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
-import org.eclipse.statet.ltk.ui.sourceediting.folding.FoldingEditorAddon;
-import org.eclipse.statet.r.core.IRCoreAccess;
-import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.rsource.ast.RAstNode;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
-import org.eclipse.statet.r.launching.RCodeLaunching;
-import org.eclipse.statet.r.ui.RUI;
-import org.eclipse.statet.r.ui.editors.IRSourceEditor;
-import org.eclipse.statet.r.ui.editors.RCorrectIndentHandler;
-import org.eclipse.statet.r.ui.editors.RDefaultFoldingProvider;
-import org.eclipse.statet.r.ui.editors.RMarkOccurrencesLocator;
-import org.eclipse.statet.r.ui.sourceediting.InsertAssignmentHandler;
-import org.eclipse.statet.redocs.r.core.source.IDocContentSectionsRweaveExtension;
-import org.eclipse.statet.redocs.r.ui.RedocsRUI;
-import org.eclipse.statet.redocs.r.ui.sourceediting.actions.RweaveToggleCommentHandler;
-import org.eclipse.statet.redocs.wikitext.r.core.model.IWikidocRweaveSourceUnit;
-import org.eclipse.statet.redocs.wikitext.r.core.source.IRweaveMarkupLanguage;
-import org.eclipse.statet.redocs.wikitext.r.core.source.WikidocRweaveDocumentContentInfo;
-import org.eclipse.statet.redocs.wikitext.r.core.source.WikidocRweaveDocumentSetupParticipant;
-import org.eclipse.statet.redocs.wikitext.r.ui.WikitextRweaveUI;
-import org.eclipse.statet.redocs.wikitext.r.ui.sourceediting.WikidocRweaveSourceViewerConfiguration;
-import org.eclipse.statet.redocs.wikitext.r.ui.sourceediting.WikidocRweaveSourceViewerConfigurator;
-import org.eclipse.statet.rj.renv.core.REnv;
+import org.eclipse.statet.docmlet.wikitext.ui.editors.WikidocEditor;
+import org.eclipse.statet.redocs.r.ui.sourceediting.RweaveEditor;
+import org.eclipse.statet.redocs.wikitext.r.core.model.WikidocRweaveSourceUnit;
 
 
-/**
- * Editor for Wikitext-R documents.
- */
-public abstract class WikidocRweaveEditor extends SourceEditor1 implements IWikidocRweaveEditor,
-		IDocEditor, IMarkupHelpContextProvider {
-	
-	
-	private static final ImList<String> KEY_CONTEXTS= ImCollections.newIdentityList(
-			WikitextUI.EDITOR_CONTEXT_ID,
-			DocBaseUI.DOC_EDITOR_CONTEXT_ID,
-			RedocsRUI.RWEAVE_EDITOR_CONTEXT_ID );
-	
-	private static final ImList<String> CONTEXT_IDS= ImCollections.concatList(
-			ACTION_SET_CONTEXT_IDS, KEY_CONTEXTS );
-	
-	
-	private static class ThisMarkOccurrencesProvider extends AbstractMarkOccurrencesProvider {
-		
-		
-		private final WikitextMarkOccurrencesLocator docLocator= new WikitextMarkOccurrencesLocator();
-		private final RMarkOccurrencesLocator rLocator= new RMarkOccurrencesLocator();
-		
-		
-		public ThisMarkOccurrencesProvider(final SourceEditor1 editor) {
-			super(editor, IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT);
-		}
-		
-		@Override
-		protected void doUpdate(final RunData run, final ISourceUnitModelInfo info,
-				final AstSelection astSelection, final ITextSelection orgSelection)
-				throws BadLocationException, BadPartitioningException, UnsupportedOperationException {
-			if (astSelection.getCovering() instanceof WikitextAstNode) {
-				this.docLocator.run(run, info, astSelection, orgSelection);
-			}
-			else if (astSelection.getCovering() instanceof RAstNode) {
-				this.rLocator.run(run, info, astSelection, orgSelection);
-			}
-		}
-		
-	}
-	
-	private static class ThisCorrectIndentHandler extends RCorrectIndentHandler {
-		
-		public ThisCorrectIndentHandler(final IRSourceEditor editor) {
-			super(editor);
-		}
-		
-		@Override
-		protected List<? extends TextRegion> getCodeRanges(final AbstractDocument document,
-				final ITextSelection selection) throws BadLocationException {
-			return WikidocRweaveDocumentContentInfo.INSTANCE.getRChunkCodeRegions(document,
-					selection.getOffset(), selection.getLength() );
-		}
-		
-	}
-	
-	
-	private final WikidocRweaveDocumentSetupParticipant documentSetup;
-	
-	private WikidocRweaveSourceViewerConfigurator combinedConfig;
-	
-	private final RunDocProcessingOnSaveExtension autoDocProcessing;
-	
-	
-	public WikidocRweaveEditor(final IContentType contentType,
-			final WikidocRweaveDocumentSetupParticipant documentSetup) {
-		super(contentType);
-		if (documentSetup == null) {
-			throw new NullPointerException("documentSetup"); //$NON-NLS-1$
-		}
-		this.documentSetup= documentSetup;
-		
-		this.autoDocProcessing= new RunDocProcessingOnSaveExtension(this);
-		
-		initializeEditor();
-	}
+public interface WikidocRweaveEditor extends RweaveEditor, WikidocEditor {
 	
 	
 	@Override
-	protected void initializeEditor() {
-		if (this.documentSetup == null) {
-			return;
-		}
-		
-		super.initializeEditor();
-		
-		setEditorContextMenuId("org.eclipse.statet.redocs.menus.WikidocRweaveEditorContextMenu"); //$NON-NLS-1$
-		setRulerContextMenuId("org.eclipse.statet.redocs.menus.WikidocRweaveEditorRulerMenu"); //$NON-NLS-1$
-	}
-	
-	@Override
-	protected SourceEditorViewerConfigurator createConfiguration() {
-		setDocumentProvider(new ForwardSourceDocumentProvider(
-				RedocsWikitextRPlugin.getInstance().getDocRDocumentProvider(),
-				this.documentSetup ));
-		
-		enableStructuralFeatures(WikitextModel.getWikidocModelManager(),
-				WikitextEditingSettings.FOLDING_ENABLED_PREF,
-				WikitextEditingSettings.MARKOCCURRENCES_ENABLED_PREF );
-		
-		this.combinedConfig= new WikidocRweaveSourceViewerConfigurator(
-				this.documentSetup,
-				WikitextCore.WORKBENCH_ACCESS, RCore.WORKBENCH_ACCESS,
-				new WikidocRweaveSourceViewerConfiguration(0, this, null, null, null) );
-		return this.combinedConfig;
-	}
-	
-	@Override
-	protected int getSourceViewerFlags() {
-		return SourceEditorViewer.VARIABLE_LINE_HEIGHT;
-	}
-	
-	@Override
-	protected Collection<String> getContextIds() {
-		return CONTEXT_IDS;
-	}
-	
-	@Override
-	protected ISourceEditorAddon createCodeFoldingProvider() {
-		return new FoldingEditorAddon(new WikidocDefaultFoldingProvider(Collections.singletonMap(
-				IRweaveMarkupLanguage.EMBEDDED_R, new RDefaultFoldingProvider() )));
-	}
-	
-	@Override
-	protected ISourceEditorAddon createMarkOccurrencesProvider() {
-		return new ThisMarkOccurrencesProvider(this);
-	}
-	
-	
-	@Override
-	public IRCoreAccess getRCoreAccess() {
-		return this.combinedConfig.getRCoreAccess();
-	}
-	
-	@Override
-	public IDocContentSectionsRweaveExtension getDocumentContentInfo() {
-		return (IDocContentSectionsRweaveExtension) super.getDocumentContentInfo();
-	}
-	
-	@Override
-	public IWikidocRweaveSourceUnit getSourceUnit() {
-		return (IWikidocRweaveSourceUnit) super.getSourceUnit();
-	}
-	
-	@Override
-	protected void setupConfiguration(final IEditorInput newInput) {
-		super.setupConfiguration(newInput);
-		
-		final IWikidocRweaveSourceUnit su= getSourceUnit();
-		this.combinedConfig.setSource(
-				(su != null) ? su.getWikitextCoreAccess() : WikitextCore.WORKBENCH_ACCESS,
-				(su != null) ? su.getRCoreAccess() : RCore.WORKBENCH_ACCESS );
-		
-		this.autoDocProcessing.setAutoRunEnabled(false);
-	}
-	
-	
-	@Override
-	protected void handlePreferenceStoreChanged(final org.eclipse.jface.util.PropertyChangeEvent event) {
-		if (AbstractDecoratedTextEditorPreferenceConstants.EDITOR_TAB_WIDTH.equals(event.getProperty())
-				|| AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SPACES_FOR_TABS.equals(event.getProperty())) {
-			return;
-		}
-		super.handlePreferenceStoreChanged(event);
-	}
-	
-	
-	@Override
-	protected boolean isTabsToSpacesConversionEnabled() {
-		return false;
-	}
-	
-	public void updateSettings(final boolean indentChanged) {
-		if (indentChanged) {
-			updateIndentPrefixes();
-		}
-	}
-	
-	
-	@Override
-	protected void collectContextMenuPreferencePages(final List<String> pageIds) {
-		super.collectContextMenuPreferencePages(pageIds);
-		pageIds.add(WikitextRweaveUI.EDITOR_PREF_PAGE_ID);
-		pageIds.add(WikitextUI.EDITOR_PREF_PAGE_ID);
-		pageIds.add("org.eclipse.mylyn.internal.wikitext.ui.editor.preferences.WikiTextTemplatePreferencePage"); //$NON-NLS-1$
-		pageIds.add("org.eclipse.statet.docmlet.preferencePages.WikitextCodeStyle"); //$NON-NLS-1$
-		pageIds.add("org.eclipse.statet.r.preferencePages.REditorOptions"); //$NON-NLS-1$
-		pageIds.add("org.eclipse.statet.r.preferencePages.RTextStyles"); //$NON-NLS-1$
-		pageIds.add("org.eclipse.statet.r.preferencePages.REditorTemplates"); //$NON-NLS-1$
-		pageIds.add("org.eclipse.statet.r.preferencePages.RCodeStyle"); //$NON-NLS-1$
-	}
-	
-	@Override
-	protected void createActions() {
-		super.createActions();
-		final IHandlerService handlerService= getServiceLocator()
-				.getService(IHandlerService.class);
-		
-		{	final IHandler2 handler= new InsertAssignmentHandler(this);
-			handlerService.activateHandler(LTKUI.INSERT_ASSIGNMENT_COMMAND_ID, handler);
-			markAsStateDependentHandler(handler, true);
-		}
-	}
-	
-	@Override
-	protected IHandler2 createToggleCommentHandler() {
-		final IHandler2 handler= new RweaveToggleCommentHandler(this) {
-			@Override
-			protected Pattern getPrefixPattern(final String contentType, final String prefix) {
-				if (prefix.equals("<!--")) { //$NON-NLS-1$
-					return HTML_SPACE_PREFIX_PATTERN;
-				}
-				return super.getPrefixPattern(contentType, prefix);
-			}
-			@Override
-			protected Pattern getPostfixPattern(final String contentType, final String prefix) {
-				if (prefix.equals("<!--")) { //$NON-NLS-1$
-					return HTML_SPACE_POSTFIX_PATTERN;
-				}
-				return super.getPostfixPattern(contentType, prefix);
-			}
-			@Override
-			protected void doPrefixPrimary(final AbstractDocument document, final IRegion block)
-					throws BadLocationException, BadPartitioningException {
-				doPrefix(document, block, "<!-- ", " -->"); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-		};
-		markAsStateDependentHandler(handler, true);
-		return handler;
-	}
-	
-	@Override
-	protected IHandler2 createCorrectIndentHandler() {
-		final IHandler2 handler= new ThisCorrectIndentHandler(this);
-		markAsStateDependentHandler(handler, true);
-		return handler;
-	}
-	
-	@Override
-	protected void editorContextMenuAboutToShow(final IMenuManager m) {
-		super.editorContextMenuAboutToShow(m);
-		final IWikidocRweaveSourceUnit su= getSourceUnit();
-		
-		m.insertBefore(ADDITIONS_GROUP_ID, new Separator(IStatetUIMenuIds.GROUP_SUBMIT_MENU_ID));
-		final IContributionItem additions= m.find(ADDITIONS_GROUP_ID);
-		if (additions != null) {
-			additions.setVisible(false);
-		}
-		
-		m.remove(ITextEditorActionConstants.SHIFT_RIGHT);
-		m.remove(ITextEditorActionConstants.SHIFT_LEFT);
-		
-		m.appendToGroup(IStatetUIMenuIds.GROUP_SUBMIT_MENU_ID, new CommandContributionItem(
-				new CommandContributionItemParameter(getSite(), null,
-						RCodeLaunching.SUBMIT_SELECTION_COMMAND_ID,
-						CommandContributionItem.STYLE_PUSH )));
-		m.appendToGroup(IStatetUIMenuIds.GROUP_SUBMIT_MENU_ID, new CommandContributionItem(
-				new CommandContributionItemParameter(getSite(), null,
-						RCodeLaunching.SUBMIT_UPTO_SELECTION_COMMAND_ID,
-						CommandContributionItem.STYLE_PUSH )));
-		
-		m.appendToGroup(ITextEditorActionConstants.GROUP_SETTINGS, new CommandContributionItem(
-				new CommandContributionItemParameter(getSite(), null,
-						DocBaseUI.CONFIGURE_MARKUP_COMMAND_ID, null,
-						null, null, null,
-						"Configure Markup...", "M", null,
-						CommandContributionItem.STYLE_PUSH, null, false )));
-	}
-	
-	
-	@Override
-	protected void editorSaved() {
-		super.editorSaved();
-		
-		this.autoDocProcessing.onEditorSaved();
-	}
-	
-	
-	@Override
-	protected SourceEditor1OutlinePage createOutlinePage() {
-		return new WikidocRweaveOutlinePage(this);
-	}
-	
-	@Override
-	protected ITemplatesPage createTemplatesPage() {
-		return new WikidocRweaveEditorTemplatesPage(this, getSourceViewer());
-	}
-	
-	@Override
-	public String[] getShowInTargetIds() {
-		return new String[] { IPageLayout.ID_PROJECT_EXPLORER, IPageLayout.ID_OUTLINE, RUI.R_HELP_VIEW_ID };
-	}
-	
-	@Override
-	public String getHelpContentId() {
-		return WikitextUI.getMarkupHelpContentIdFor(this.documentSetup.getMarkupLanguage());
-	}
-	
-	@Override
-	@SuppressWarnings("unchecked")
-	public <T> T getAdapter(final Class<T> adapterType) {
-		if (adapterType == IMarkupHelpContextProvider.class) {
-			return (T) this;
-		}
-		if (adapterType == RunDocProcessingOnSaveExtension.class) {
-			return (T) this.autoDocProcessing;
-		}
-		if (adapterType == REnv.class) {
-			return (T) getRCoreAccess().getREnv();
-		}
-		return super.getAdapter(adapterType);
-	}
+	public WikidocRweaveSourceUnit getSourceUnit();
 	
 }
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 caa2e30..60672d3 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
@@ -39,8 +39,8 @@
 import org.eclipse.statet.ecommons.text.ui.settings.TextStyleManager;
 
 import org.eclipse.statet.docmlet.tex.ui.sourceediting.LtxSourceViewerConfiguration;
-import org.eclipse.statet.docmlet.wikitext.core.IWikitextCoreAccess;
-import org.eclipse.statet.docmlet.wikitext.core.source.IWikitextDocumentConstants;
+import org.eclipse.statet.docmlet.wikitext.core.WikitextCoreAccess;
+import org.eclipse.statet.docmlet.wikitext.core.source.WikitextDocumentConstants;
 import org.eclipse.statet.docmlet.wikitext.ui.sourceediting.WikidocSourceViewerConfiguration;
 import org.eclipse.statet.internal.redocs.wikitext.r.RedocsWikitextRPlugin;
 import org.eclipse.statet.internal.redocs.wikitext.r.ui.sourceediting.DocRQuickOutlineInformationProvider;
@@ -64,10 +64,10 @@
 import org.eclipse.statet.r.ui.sourceediting.RSourceViewerConfiguration;
 import org.eclipse.statet.r.ui.text.r.IRTextTokens;
 import org.eclipse.statet.r.ui.text.r.RDoubleClickStrategy;
-import org.eclipse.statet.redocs.wikitext.r.core.source.IWikitextRweaveDocumentConstants;
 import org.eclipse.statet.redocs.wikitext.r.core.source.WikidocRweaveBracketPairMatcher;
 import org.eclipse.statet.redocs.wikitext.r.core.source.WikidocRweaveDocumentContentInfo;
-import org.eclipse.statet.redocs.wikitext.r.ui.editors.IWikidocRweaveEditor;
+import org.eclipse.statet.redocs.wikitext.r.core.source.WikitextRweaveDocumentConstants;
+import org.eclipse.statet.redocs.wikitext.r.ui.editors.WikidocRweaveEditor;
 import org.eclipse.statet.yaml.ui.sourceediting.YamlSourceViewerConfiguration;
 
 
@@ -77,21 +77,21 @@
 public class WikidocRweaveSourceViewerConfiguration extends MultiContentSectionSourceViewerConfiguration {
 	
 	
-	private static final String[] CONTENT_TYPES= IWikitextRweaveDocumentConstants.WIKIDOC_R_CONTENT_TYPES.toArray(
-			new String[IWikitextRweaveDocumentConstants.WIKIDOC_R_CONTENT_TYPES.size()]);
+	private static final String[] CONTENT_TYPES= WikitextRweaveDocumentConstants.WIKIDOC_R_CONTENT_TYPES.toArray(
+			new String[WikitextRweaveDocumentConstants.WIKIDOC_R_CONTENT_TYPES.size()]);
 	
 	
 	private static class WikidocConfiguration extends WikidocSourceViewerConfiguration {
 		
 		public WikidocConfiguration(final IDocContentSections documentContentInfo, final int flags,
 				final ISourceEditor editor,
-				final IWikitextCoreAccess wikitextCoreAccess,
+				final WikitextCoreAccess wikitextCoreAccess,
 				final IPreferenceStore preferenceStore) {
 			super(documentContentInfo, flags, editor, wikitextCoreAccess, preferenceStore);
 		}
 		
 		@Override
-		protected void setCoreAccess(final IWikitextCoreAccess access) {
+		protected void setCoreAccess(final WikitextCoreAccess access) {
 			super.setCoreAccess(access);
 		}
 		
@@ -124,7 +124,7 @@
 				case '\"':
 				case '\'':
 					return TreePartitionUtils.searchPartitionRegion(partition,
-							IWikitextRweaveDocumentConstants.RCHUNK_PARTITION_CONSTRAINT );
+							WikitextRweaveDocumentConstants.RCHUNK_PARTITION_CONSTRAINT );
 				}
 				return null;
 			default:
@@ -178,8 +178,8 @@
 	}
 	
 	public WikidocRweaveSourceViewerConfiguration(final int flags,
-			final IWikidocRweaveEditor sourceEditor,
-			final IWikitextCoreAccess wikitextCoreAccess, final IRCoreAccess rCoreAccess,
+			final WikidocRweaveEditor sourceEditor,
+			final WikitextCoreAccess wikitextCoreAccess, final IRCoreAccess rCoreAccess,
 			final IPreferenceStore preferenceStore) {
 		super(WikidocRweaveDocumentContentInfo.INSTANCE, flags, sourceEditor);
 		
@@ -209,22 +209,22 @@
 	protected void initScanners() {
 		final TextStyleManager textStyles= this.rConfig.getTextStyles();
 		
-		addScanner(IWikitextRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE,
+		addScanner(WikitextRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE,
 				new SingleTokenScanner(textStyles, IRTextTokens.UNDEFINED_KEY ));
 	}
 	
 	@Override
 	protected ITokenScanner getScanner(final String contentType) {
-		if (contentType == IWikitextRweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE) {
+		if (contentType == WikitextRweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE) {
 			return this.rConfig.getScanner(IRDocumentConstants.R_DEFAULT_CONTENT_TYPE);
 		}
-		if (contentType == IWikitextRweaveDocumentConstants.RCHUNK_COMMENT_CONTENT_TYPE) {
+		if (contentType == WikitextRweaveDocumentConstants.RCHUNK_COMMENT_CONTENT_TYPE) {
 			return this.rConfig.getScanner(IRDocumentConstants.R_COMMENT_CONTENT_TYPE);
 		}
 		return super.getScanner(contentType);
 	}
 	
-	protected void setCoreAccess(final IWikitextCoreAccess wikitextCoreAccess, final IRCoreAccess rCoreAccess) {
+	protected void setCoreAccess(final WikitextCoreAccess wikitextCoreAccess, final IRCoreAccess rCoreAccess) {
 		this.docConfig.setCoreAccess(wikitextCoreAccess);
 		this.rConfig.setCoreAccess(rCoreAccess);
 	}
@@ -239,7 +239,7 @@
 	protected void initPresentationReconciler(final PresentationReconciler reconciler) {
 		super.initPresentationReconciler(reconciler);
 		
-		for (final String contentType : IWikitextRweaveDocumentConstants.RCHUNK_CONTENT_TYPES) {
+		for (final String contentType : WikitextRweaveDocumentConstants.RCHUNK_CONTENT_TYPES) {
 			final ITokenScanner scanner= getScanner(contentType);
 			if (scanner != null) {
 				final DefaultDamagerRepairer dr= new DefaultDamagerRepairer(scanner);
@@ -294,20 +294,20 @@
 		final IContentAssistComputer chunkComputer= new RChunkTemplateCompletionComputer();
 		
 		final ContentAssistProcessor wikitextProcessor= (ContentAssistProcessor) assistant.getContentAssistProcessor(
-				IWikitextDocumentConstants.WIKIDOC_DEFAULT_CONTENT_TYPE );
+				WikitextDocumentConstants.WIKIDOC_DEFAULT_CONTENT_TYPE );
 		wikitextProcessor.addCategory(new ContentAssistCategory(
-				IWikitextDocumentConstants.WIKIDOC_DEFAULT_CONTENT_TYPE,
+				WikitextDocumentConstants.WIKIDOC_DEFAULT_CONTENT_TYPE,
 				ImCollections.newList(chunkComputer) ));
 //		wikitextProcessor.setCompletionProposalAutoActivationCharacters(new char[] { '\\', '<' });
 		
 		final ContentAssistProcessor controlProcessor= new ContentAssistProcessor(assistant,
-				IWikitextRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE,
+				WikitextRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE,
 				RedocsWikitextRPlugin.getInstance().getWikidocRweaveEditorContentAssistRegistry(),
 				getSourceEditor() );
-		controlProcessor.addCategory(new ContentAssistCategory(IWikitextRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE,
+		controlProcessor.addCategory(new ContentAssistCategory(WikitextRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE,
 				ImCollections.newList(chunkComputer) ));
-		assistant.setContentAssistProcessor(controlProcessor, IWikitextRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE);
-		assistant.setContentAssistProcessor(controlProcessor, IWikitextRweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE);
+		assistant.setContentAssistProcessor(controlProcessor, WikitextRweaveDocumentConstants.RCHUNK_BASE_CONTENT_TYPE);
+		assistant.setContentAssistProcessor(controlProcessor, WikitextRweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE);
 	}
 	
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikidocRweaveSourceViewerConfigurator.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikidocRweaveSourceViewerConfigurator.java
index db8bbcb..ab59043 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikidocRweaveSourceViewerConfigurator.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikidocRweaveSourceViewerConfigurator.java
@@ -22,8 +22,8 @@
 import org.eclipse.core.filebuffers.IDocumentSetupParticipant;
 
 import org.eclipse.statet.base.core.preferences.TaskTagsPreferences;
-import org.eclipse.statet.docmlet.wikitext.core.IWikitextCoreAccess;
 import org.eclipse.statet.docmlet.wikitext.core.WikitextCodeStyleSettings;
+import org.eclipse.statet.docmlet.wikitext.core.WikitextCoreAccess;
 import org.eclipse.statet.docmlet.wikitext.core.util.WikitextCoreAccessWrapper;
 import org.eclipse.statet.internal.r.ui.RUIPreferenceInitializer;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
@@ -53,7 +53,7 @@
 	
 	
 	public WikidocRweaveSourceViewerConfigurator(final WikidocRweaveDocumentSetupParticipant documentSetup,
-			final IWikitextCoreAccess wikitextCoreAccess, final IRCoreAccess rCoreAccess,
+			final WikitextCoreAccess wikitextCoreAccess, final IRCoreAccess rCoreAccess,
 			final WikidocRweaveSourceViewerConfiguration config) {
 		super(config);
 		this.documentSetup= documentSetup;
@@ -106,7 +106,7 @@
 	}
 	
 	
-	public void setSource(final IWikitextCoreAccess wikitextCoreAccess, final IRCoreAccess rCoreAccess) {
+	public void setSource(final WikitextCoreAccess wikitextCoreAccess, final IRCoreAccess rCoreAccess) {
 		boolean changed= false;
 		if (wikitextCoreAccess != null) {
 			changed|= this.docCoreAccess.setParent(wikitextCoreAccess);
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikidocRweaveTemplateViewerConfigurator.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikidocRweaveTemplateViewerConfigurator.java
index d8b1ef4..e3cb61b 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikidocRweaveTemplateViewerConfigurator.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/sourceediting/WikidocRweaveTemplateViewerConfigurator.java
@@ -16,7 +16,7 @@
 
 import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
 
-import org.eclipse.statet.docmlet.wikitext.core.IWikitextCoreAccess;
+import org.eclipse.statet.docmlet.wikitext.core.WikitextCoreAccess;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfiguration;
 import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.redocs.wikitext.r.core.source.WikidocRweaveDocumentSetupParticipant;
@@ -27,7 +27,7 @@
 	
 	public WikidocRweaveTemplateViewerConfigurator(
 			final WikidocRweaveDocumentSetupParticipant documentSetup,
-			final IWikitextCoreAccess wikitextCoreAccess, final IRCoreAccess rCoreAccess,
+			final WikitextCoreAccess wikitextCoreAccess, final IRCoreAccess rCoreAccess,
 			final TemplateVariableProcessor processor) {
 		super(documentSetup, wikitextCoreAccess, rCoreAccess,
 				new WikidocRweaveSourceViewerConfiguration(SourceEditorViewerConfiguration.TEMPLATE_MODE, null, null, null, null) {
