[R-Model] Revise R model and related classes
  - Correct namings
  - Add more nullable annotations
  - Adapt to revised LTK model
  - Fix id of RChunkElement (consider occ)
diff --git a/r/org.eclipse.statet.ide.core/src/org/eclipse/statet/base/core/StatetCore.java b/r/org.eclipse.statet.ide.core/src/org/eclipse/statet/base/core/StatetCore.java
index a768104..77f30e7 100644
--- a/r/org.eclipse.statet.ide.core/src/org/eclipse/statet/base/core/StatetCore.java
+++ b/r/org.eclipse.statet.ide.core/src/org/eclipse/statet/base/core/StatetCore.java
@@ -26,8 +26,8 @@
 import org.eclipse.statet.ecommons.net.ssh.core.ISshSessionService;
 
 import org.eclipse.statet.internal.ide.core.BaseCorePlugin;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 
 
 public class StatetCore {
@@ -53,9 +53,9 @@
 		return collected;
 	}
 	
-	public static StatetProject getStatetProject(final ISourceUnit su) {
-		if (su instanceof IWorkspaceSourceUnit) {
-			final IProject project= ((IWorkspaceSourceUnit) su).getResource().getProject();
+	public static StatetProject getStatetProject(final SourceUnit su) {
+		if (su instanceof WorkspaceSourceUnit) {
+			final IProject project= ((WorkspaceSourceUnit) su).getResource().getProject();
 			try {
 				if (project.hasNature(StatetProject.NATURE_ID)) {
 					return (StatetProject) project.getNature(StatetProject.NATURE_ID);
diff --git a/r/org.eclipse.statet.ide.core/src/org/eclipse/statet/base/core/preferences/TaskTagsPreferences.java b/r/org.eclipse.statet.ide.core/src/org/eclipse/statet/base/core/preferences/TaskTagsPreferences.java
index d3f933f..25cd0a9 100644
--- a/r/org.eclipse.statet.ide.core/src/org/eclipse/statet/base/core/preferences/TaskTagsPreferences.java
+++ b/r/org.eclipse.statet.ide.core/src/org/eclipse/statet/base/core/preferences/TaskTagsPreferences.java
@@ -27,9 +27,9 @@
 import org.eclipse.statet.ecommons.preferences.core.Preference.StringArrayPref;
 import org.eclipse.statet.ecommons.preferences.core.PreferenceAccess;
 
-import org.eclipse.statet.ltk.issues.core.ITaskTag;
 import org.eclipse.statet.ltk.issues.core.TaskPriority;
-import org.eclipse.statet.ltk.issues.core.impl.TaskTag;
+import org.eclipse.statet.ltk.issues.core.TaskTag;
+import org.eclipse.statet.ltk.issues.core.impl.BasicTaskTag;
 
 
 public class TaskTagsPreferences {
@@ -50,7 +50,7 @@
 	}
 	
 	
-	private final ImList<ITaskTag> taskTags;
+	private final ImList<TaskTag> taskTags;
 	
 	
 	/**
@@ -58,7 +58,7 @@
 	 * 
 	 * @param taskTags
 	 */
-	public TaskTagsPreferences(final Collection<? extends ITaskTag> taskTags) {
+	public TaskTagsPreferences(final Collection<? extends TaskTag> taskTags) {
 		this.taskTags= ImCollections.toList(taskTags);
 	}
 	
@@ -67,8 +67,8 @@
 	 */
 	public TaskTagsPreferences() {
 		this(ImCollections.newList(
-				new TaskTag("TODO", TaskPriority.NORMAL), //$NON-NLS-1$
-				new TaskTag("FIXME", TaskPriority.NORMAL) )); //$NON-NLS-1$
+				new BasicTaskTag("TODO", TaskPriority.NORMAL), //$NON-NLS-1$
+				new BasicTaskTag("FIXME", TaskPriority.NORMAL) )); //$NON-NLS-1$
 	}
 	
 	/**
@@ -81,9 +81,9 @@
 		final List<TaskPriority> priorities= prefs.getPreferenceValue(PREF_PRIORITIES);
 		
 		if (keywords.length == priorities.size()) {
-			final ITaskTag[] array= new ITaskTag[keywords.length];
+			final TaskTag[] array= new TaskTag[keywords.length];
 			for (int i= 0; i < array.length; i++) {
-				array[i]= new TaskTag(keywords[i], priorities.get(i));
+				array[i]= new BasicTaskTag(keywords[i], priorities.get(i));
 			}
 			this.taskTags= ImCollections.newList(array);
 		}
@@ -109,7 +109,7 @@
 		return array;
 	}
 	
-	public List<ITaskTag> getTaskTags() {
+	public List<TaskTag> getTaskTags() {
 		return this.taskTags;
 	}
 	
diff --git a/r/org.eclipse.statet.ide.ui/src/org/eclipse/statet/base/ext/templates/StatextCodeTemplateContextType.java b/r/org.eclipse.statet.ide.ui/src/org/eclipse/statet/base/ext/templates/StatextCodeTemplateContextType.java
index 9bd1d28..7aa1ada 100644
--- a/r/org.eclipse.statet.ide.ui/src/org/eclipse/statet/base/ext/templates/StatextCodeTemplateContextType.java
+++ b/r/org.eclipse.statet.ide.ui/src/org/eclipse/statet/base/ext/templates/StatextCodeTemplateContextType.java
@@ -19,7 +19,7 @@
 import org.eclipse.statet.base.core.StatetCore;
 import org.eclipse.statet.base.core.StatetProject;
 import org.eclipse.statet.base.core.preferences.TaskTagsPreferences;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.templates.SourceEditorContextType;
 
 
@@ -47,7 +47,7 @@
 		}
 		
 		@Override
-		protected String getTag(final ISourceUnit su) {
+		protected String getTag(final SourceUnit su) {
 			final StatetProject project = StatetCore.getStatetProject(su);
 			return getTodoTaskTag(project);
 		}
diff --git a/r/org.eclipse.statet.ide.ui/src/org/eclipse/statet/internal/ide/ui/preferences/TaskTagsConfigurationBlock.java b/r/org.eclipse.statet.ide.ui/src/org/eclipse/statet/internal/ide/ui/preferences/TaskTagsConfigurationBlock.java
index 50351ee..c08c15d 100644
--- a/r/org.eclipse.statet.ide.ui/src/org/eclipse/statet/internal/ide/ui/preferences/TaskTagsConfigurationBlock.java
+++ b/r/org.eclipse.statet.ide.ui/src/org/eclipse/statet/internal/ide/ui/preferences/TaskTagsConfigurationBlock.java
@@ -69,9 +69,9 @@
 import org.eclipse.statet.base.core.preferences.TaskTagsPreferences;
 import org.eclipse.statet.internal.ide.ui.StatetMessages;
 import org.eclipse.statet.internal.ide.ui.StatetUIPlugin;
-import org.eclipse.statet.ltk.issues.core.ITaskTag;
 import org.eclipse.statet.ltk.issues.core.TaskPriority;
-import org.eclipse.statet.ltk.issues.core.impl.TaskTag;
+import org.eclipse.statet.ltk.issues.core.TaskTag;
+import org.eclipse.statet.ltk.issues.core.impl.BasicTaskTag;
 
 
 public class TaskTagsConfigurationBlock extends ManagedConfigurationBlock {
@@ -80,7 +80,7 @@
 	private final StatusChangeListener fStatusListener;
 	
 	private TableViewer listViewer;
-	private ButtonGroup<ITaskTag> listButtons;
+	private ButtonGroup<TaskTag> listButtons;
 	
 	private Image taskIcon;
 	private Image taskDefaultIcon;
@@ -98,7 +98,7 @@
 	}
 	
 	
-	final boolean isDefaultTask(final ITaskTag task) {
+	final boolean isDefaultTask(final TaskTag task) {
 		return (this.defaultValue.getValue() == task);
 	}
 	
@@ -126,9 +126,9 @@
 			final Composite table = createTable(composite);
 			table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 			
-			this.listButtons = new ButtonGroup<ITaskTag>(composite) {
+			this.listButtons = new ButtonGroup<TaskTag>(composite) {
 				@Override
-				protected ITaskTag edit1(final ITaskTag item, final boolean newItem, final Object parent) {
+				protected TaskTag edit1(final TaskTag item, final boolean newItem, final Object parent) {
 					final TaskTagsInputDialog dialog = new TaskTagsInputDialog(getShell(), item, newItem, TaskTagsConfigurationBlock.this.list);
 					if (dialog.open() == Window.OK) {
 						return dialog.getResult();
@@ -170,12 +170,12 @@
 			column.setLabelProvider(new ColumnLabelProvider() {
 				@Override
 				public Image getImage(final Object element) {
-					final ITaskTag tag = (ITaskTag) element;
+					final TaskTag tag = (TaskTag) element;
 					return (isDefaultTask(tag)) ? TaskTagsConfigurationBlock.this.taskDefaultIcon : TaskTagsConfigurationBlock.this.taskIcon;
 				}
 				@Override
 				public String getText(final Object element) {
-					final ITaskTag tag = (ITaskTag) element;
+					final TaskTag tag = (TaskTag) element;
 					return tag.getKeyword();
 				}
 			});
@@ -192,7 +192,7 @@
 			column.setLabelProvider(new ColumnLabelProvider() {
 				@Override
 				public String getText(final Object element) {
-					final ITaskTag task = (ITaskTag) element;
+					final TaskTag task = (TaskTag) element;
 					switch (task.getPriority()) {
 					case HIGH:
 						return StatetMessages.TaskPriority_High; 
@@ -212,7 +212,7 @@
 		composite.viewer.setComparator(new ViewerComparator() {
 			@Override
 			public int compare(final Viewer viewer, final Object e1, final Object e2) {
-				return getComparator().compare(((ITaskTag) e1).getKeyword(), ((ITaskTag) e2).getKeyword());
+				return getComparator().compare(((TaskTag) e1).getKeyword(), ((TaskTag) e2).getKeyword());
 			}
 		});
 		return composite;
@@ -262,13 +262,13 @@
 	}
 	
 	private void saveTaskTags() {
-		final ArrayList<TaskTag> taskTags= new ArrayList<>(this.list);
-		final TaskTag defaultTag = (TaskTag) this.defaultValue.getValue();
+		final ArrayList<BasicTaskTag> basicTaskTags= new ArrayList<>(this.list);
+		final BasicTaskTag defaultTag = (BasicTaskTag) this.defaultValue.getValue();
 		if (defaultTag != null) {
-			taskTags.remove(defaultTag);
-			taskTags.add(0, defaultTag);
+			basicTaskTags.remove(defaultTag);
+			basicTaskTags.add(0, defaultTag);
 		}
-		final TaskTagsPreferences taskPrefs = new TaskTagsPreferences(taskTags);
+		final TaskTagsPreferences taskPrefs = new TaskTagsPreferences(basicTaskTags);
 		setPrefValues(taskPrefs.getPreferencesMap());
 		
 		validateSettings();
@@ -322,8 +322,8 @@
 	private final List<String> existingKeywords;
 	
 	
-	public TaskTagsInputDialog(final Shell parent, final ITaskTag task, final boolean newTask,
-			final List<TaskTag> existingTags) {
+	public TaskTagsInputDialog(final Shell parent, final TaskTag task, final boolean newTask,
+			final List<BasicTaskTag> existingTags) {
 		super(parent);
 		
 		if (task != null) {
@@ -333,7 +333,7 @@
 			
 		this.existingKeywords = new ArrayList<>(existingTags.size());
 		for (int i = 0; i < existingTags.size(); i++) {
-			final ITaskTag curr = existingTags.get(i);
+			final TaskTag curr = existingTags.get(i);
 			if (newTask || !curr.equals(task)) {
 				this.existingKeywords.add(curr.getKeyword());
 			}
@@ -427,8 +427,8 @@
 	}
 	
 	
-	public ITaskTag getResult() {
-		return new TaskTag(this.keyword, this.priority);
+	public TaskTag getResult() {
+		return new BasicTaskTag(this.keyword, this.priority);
 	}
 	
 	private void doValidation() {
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/ConsolePageEditor.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/ConsolePageEditor.java
index 711b08e..8034083 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/ConsolePageEditor.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/ConsolePageEditor.java
@@ -87,7 +87,7 @@
 import org.eclipse.statet.internal.nico.ui.console.InputDocument;
 import org.eclipse.statet.internal.nico.ui.console.PromptHighlighter;
 import org.eclipse.statet.internal.nico.ui.preferences.ConsolePreferences;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditorCommandIds;
 import org.eclipse.statet.ltk.ui.sourceediting.ITextEditToolSynchronizer;
@@ -366,7 +366,7 @@
 	
 	private final IContentType contentType;
 	
-	private final ISourceUnit sourceUnit;
+	private final SourceUnit sourceUnit;
 	
 	private Composite composite;
 	private Label prompt;
@@ -422,7 +422,7 @@
 		return this.document;
 	}
 	
-	protected ISourceUnit createSourceUnit() {
+	protected SourceUnit createSourceUnit() {
 		return null;
 	}
 	
@@ -962,7 +962,7 @@
 	}
 	
 	@Override
-	public ISourceUnit getSourceUnit() {
+	public SourceUnit getSourceUnit() {
 		return this.sourceUnit;
 	}
 	
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/GenericConsoleSourceUnit.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/GenericConsoleSourceUnit.java
index 47512a4..14e47f5 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/GenericConsoleSourceUnit.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/GenericConsoleSourceUnit.java
@@ -14,27 +14,28 @@
 
 package org.eclipse.statet.nico.ui.console;
 
-import java.util.Collections;
-import java.util.List;
-
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.text.AbstractDocument;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.text.core.util.AbstractFragmentDocument;
 
 import org.eclipse.statet.ltk.core.ElementName;
-import org.eclipse.statet.ltk.core.LTK;
+import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.core.SourceContent;
 import org.eclipse.statet.ltk.core.WorkingContext;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.impl.WorkingBuffer;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.impl.BasicWorkingBuffer;
 
 
 /**
  * Generic source unit for console
  */
-public abstract class GenericConsoleSourceUnit implements ISourceUnit {
+@NonNullByDefault
+public abstract class GenericConsoleSourceUnit implements SourceUnit {
 	
 	
 	private final String id;
@@ -69,65 +70,41 @@
 	}
 	
 	
-	/**
-	 * {@inheritDoc}
-	 */
 	@Override
 	public WorkingContext getWorkingContext() {
-		return LTK.EDITOR_CONTEXT;
+		return Ltk.EDITOR_CONTEXT;
 	}
 	
-	/**
-	 * {@inheritDoc}
-	 */
 	@Override
-	public ISourceUnit getUnderlyingUnit() {
+	public @Nullable SourceUnit getUnderlyingUnit() {
 		return null;
 	}
 	
-	/**
-	 * {@inheritDoc}
-	 */
 	@Override
 	public boolean isSynchronized() {
 		return true;
 	}
 	
-	/**
-	 * {@inheritDoc}
-	 */
 	@Override
 	public int getElementType() {
-		return IModelElement.C2_SOURCE_CHUNK;
+		return LtkModelElement.C2_SOURCE_CHUNK;
 	}
 	
-	/**
-	 * {@inheritDoc}
-	 */
 	@Override
 	public ElementName getElementName() {
 		return this.name;
 	}
 	
-	/**
-	 * {@inheritDoc}
-	 */
 	@Override
 	public String getId() {
 		return this.id;
 	}
 	
-	/**
-	 * {@inheritDoc}
-	 */
 	@Override
 	public boolean exists() {
 		return this.counter > 0;
 	}
 	
-	/**
-	 * {@inheritDoc}
-	 */
 	@Override
 	public boolean isReadOnly() {
 		return false;
@@ -149,7 +126,7 @@
 	 * A console has no resource.
 	 */
 	@Override
-	public Object getResource() {
+	public @Nullable Object getResource() {
 		return null;
 	}
 	
@@ -159,7 +136,7 @@
 	}
 	
 	@Override
-	public AbstractDocument getDocument(final IProgressMonitor monitor) {
+	public AbstractDocument getDocument(final @Nullable IProgressMonitor monitor) {
 		return this.document;
 	}
 	
@@ -170,27 +147,7 @@
 	
 	@Override
 	public SourceContent getContent(final IProgressMonitor monitor) {
-		return WorkingBuffer.createContentFromDocument(this.document);
-	}
-	
-	@Override
-	public <T> T getAdapter(final Class<T> adapterType) {
-		return null;
-	}
-	
-	@Override
-	public IModelElement getModelParent() {
-		return null;
-	}
-	
-	@Override
-	public boolean hasModelChildren(final Filter filter) {
-		return false;
-	}
-	
-	@Override
-	public List<? extends IModelElement> getModelChildren(final Filter filter) {
-		return Collections.EMPTY_LIST;
+		return BasicWorkingBuffer.createContentFromDocument(this.document);
 	}
 	
 	@Override
@@ -210,6 +167,12 @@
 	
 	
 	@Override
+	public <T> @Nullable T getAdapter(final Class<T> adapterType) {
+		return null;
+	}
+	
+	
+	@Override
 	public String toString() {
 		return getModelTypeId() + '/' + getWorkingContext() + ": " + getId(); //$NON-NLS-1$
 	}
diff --git a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/variables/AppVarInput.java b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/variables/AppVarInput.java
index 29bad5e..c1e516c 100644
--- a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/variables/AppVarInput.java
+++ b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/variables/AppVarInput.java
@@ -17,8 +17,9 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement.Filter;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.apps.ui.RApp;
+import org.eclipse.statet.r.core.model.RLangElement;
 import org.eclipse.statet.r.ui.util.RElementInput;
 
 
@@ -27,7 +28,8 @@
 	
 	
 	public AppVarInput(final RApp app,
-			final @Nullable Filter envFilter, final @Nullable Filter otherFilter) {
+			final @Nullable LtkModelElementFilter<? super RLangElement> envFilter,
+			final @Nullable LtkModelElementFilter<? super RLangElement> otherFilter) {
 		super(app, envFilter, otherFilter);
 	}
 	
diff --git a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/variables/ContentJob.java b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/variables/ContentJob.java
index 623dcf3..cdff36a 100644
--- a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/variables/ContentJob.java
+++ b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/variables/ContentJob.java
@@ -29,12 +29,13 @@
 
 import org.eclipse.statet.ecommons.ui.util.UIAccess;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.apps.ui.RApp;
 import org.eclipse.statet.r.apps.ui.RApp.AppEvent;
 import org.eclipse.statet.r.apps.ui.VariablesData;
 import org.eclipse.statet.r.console.core.RProcessREnvironment;
 import org.eclipse.statet.r.core.data.CombinedRElement;
+import org.eclipse.statet.r.core.model.RLangElement;
 import org.eclipse.statet.r.ui.util.RNameSearchPattern;
 
 
@@ -42,7 +43,7 @@
 class ContentJob extends Job implements RApp.Listener {
 	
 	
-	static class ContentFilter implements IModelElement.Filter {
+	static class ContentFilter implements LtkModelElementFilter<RLangElement> {
 		
 		private final boolean filterInternal;
 		private final @Nullable SearchPattern searchPattern;
@@ -55,7 +56,7 @@
 		
 		
 		@Override
-		public boolean include(final IModelElement element) {
+		public boolean include(final RLangElement element) {
 			final String name= element.getElementName().getSegmentName();
 			if (name != null) {
 				if (this.filterInternal && name.length() > 0 && name.charAt(0) == '.') {
@@ -193,8 +194,8 @@
 	private AppVarInput createInput(final RApp source) {
 		final boolean filterInternal= !this.view.getFilterIncludeInternal();
 		final String filterText= this.view.getFilterSearchText();
-		IModelElement.Filter envFilter;
-		IModelElement.Filter otherFilter;
+		LtkModelElementFilter<? super RLangElement> envFilter;
+		LtkModelElementFilter<? super RLangElement> otherFilter;
 		if (filterText != null && filterText.length() > 0) {
 			final SearchPattern filterPattern= new RNameSearchPattern();
 			filterPattern.setPattern(filterText);
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/BasicCombinedRElement.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/BasicCombinedRElement.java
index faf6054..db8075a 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/BasicCombinedRElement.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/BasicCombinedRElement.java
@@ -20,8 +20,8 @@
 import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.r.core.model.RModel;
@@ -92,7 +92,7 @@
 	}
 	
 	@Override
-	public @Nullable ISourceUnit getSourceUnit() {
+	public @Nullable SourceUnit getSourceUnit() {
 		return null;
 	}
 	
@@ -115,7 +115,7 @@
 	@Override
 	@SuppressWarnings("unchecked")
 	public <T> @Nullable T getAdapter(final Class<T> adapterType) {
-		if (adapterType == IModelElement.class) {
+		if (adapterType == LtkModelElement.class) {
 			return (T) this;
 		}
 		if (adapterType == RObject.class) {
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/DirectReferenceVar.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/DirectReferenceVar.java
index 296ae98..c8e6706 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/DirectReferenceVar.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/DirectReferenceVar.java
@@ -21,6 +21,7 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.data.CombinedRReference;
 import org.eclipse.statet.r.core.model.RElementName;
@@ -94,12 +95,12 @@
 	}
 	
 	@Override
-	public boolean hasModelChildren(final @Nullable Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return false;
 	}
 	
 	@Override
-	public List<? extends CombinedRElement> getModelChildren(final @Nullable Filter filter) {
+	public List<? extends CombinedRElement> getModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return Collections.emptyList();
 	}
 	
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RArrayVar.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RArrayVar.java
index 6d96aa6..7f2dabb 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RArrayVar.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RArrayVar.java
@@ -20,6 +20,7 @@
 
 import org.eclipse.statet.jcommons.lang.Nullable;
 
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.rj.data.RArray;
@@ -148,12 +149,12 @@
 	}
 	
 	@Override
-	public boolean hasModelChildren(final @Nullable Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return false;
 	}
 	
 	@Override
-	public List<? extends CombinedRElement> getModelChildren(final @Nullable Filter filter) {
+	public List<? extends CombinedRElement> getModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return Collections.emptyList();
 	}
 	
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/REnvironmentVar.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/REnvironmentVar.java
index 022ff31..c6bb93d 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/REnvironmentVar.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/REnvironmentVar.java
@@ -23,12 +23,13 @@
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.console.core.RProcess;
 import org.eclipse.statet.r.console.core.RProcessREnvironment;
 import org.eclipse.statet.r.core.data.CombinedRElement;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRFrame;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.rj.data.RCharacterStore;
 import org.eclipse.statet.rj.data.REnvironment;
@@ -41,7 +42,7 @@
 
 
 public final class REnvironmentVar extends BasicCombinedRElement
-		implements REnvironment, RProcessREnvironment, ExternalizableRObject, IRFrame {
+		implements REnvironment, RProcessREnvironment, ExternalizableRObject, RFrame {
 	
 	
 	private String className1;
@@ -191,14 +192,14 @@
 		switch (this.specialType) {
 		case ENVTYPE_BASE:
 			this.environmentName= ENVNAME_BASE;
-			this.frameType= IRFrame.PACKAGE;
+			this.frameType= RFrame.PACKAGE;
 			if (getElementName() == null) {
 				setElementName(RElementName.create(RElementName.SCOPE_PACKAGE, "base")); //$NON-NLS-1$
 			}
 			return;
 		case ENVTYPE_AUTOLOADS:
 			this.environmentName= ENVNAME_AUTOLOADS;
-			this.frameType= IRFrame.EXPLICIT;
+			this.frameType= RFrame.EXPLICIT;
 			if (getElementName() == null) {
 				setElementName(RElementName.create(RElementName.SCOPE_SEARCH_ENV, ENVNAME_AUTOLOADS));
 			}
@@ -206,21 +207,21 @@
 		case ENVTYPE_PACKAGE:
 			assert (envName != null && envName.startsWith("package:")); //$NON-NLS-1$
 			this.environmentName= envName;
-			this.frameType= IRFrame.PACKAGE;
+			this.frameType= RFrame.PACKAGE;
 			if (getElementName() == null) {
 				setElementName(RElementName.create(RElementName.SCOPE_PACKAGE, envName.substring(8)));
 			}
 			return;
 		case ENVTYPE_GLOBAL:
 			this.environmentName= ENVNAME_GLOBAL;
-			this.frameType= IRFrame.PROJECT;
+			this.frameType= RFrame.PROJECT;
 			if (getElementName() == null) {
 				setElementName(RModel.GLOBAL_ENV_NAME);
 			}
 			return;
 		case ENVTYPE_EMTPY:
 			this.environmentName= ENVNAME_EMPTY;
-			this.frameType= IRFrame.EXPLICIT;
+			this.frameType= RFrame.EXPLICIT;
 			if (getElementName() == null) {
 				setElementName(RElementName.create(RElementName.MAIN_OTHER, ENVNAME_EMPTY));
 			}
@@ -228,7 +229,7 @@
 		case ENVTYPE_NAMESPACE:
 			assert (envName != null);
 			this.environmentName= envName;
-			this.frameType= IRFrame.PACKAGE;
+			this.frameType= RFrame.PACKAGE;
 			if (getElementName() == null) {
 				setElementName(RElementName.create(RElementName.SCOPE_NS_INT, envName));
 			}
@@ -236,14 +237,14 @@
 		case ENVTYPE_NAMESPACE_EXPORTS:
 			assert (envName != null);
 			this.environmentName= envName;
-			this.frameType= IRFrame.PACKAGE;
+			this.frameType= RFrame.PACKAGE;
 			if (getElementName() == null) {
 				setElementName(RElementName.create(RElementName.SCOPE_NS, envName));
 			}
 			return;
 		default:
 			this.environmentName= envName;
-			this.frameType= IRFrame.EXPLICIT;
+			this.frameType= RFrame.EXPLICIT;
 			if (getElementName() == null) {
 				setElementName(RElementName.create(
 						(isSearch) ? RElementName.SCOPE_SEARCH_ENV : RElementName.MAIN_OTHER,
@@ -336,7 +337,7 @@
 	
 	
 	@Override
-	public boolean hasModelChildren(final @Nullable Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter filter) {
 		if (this.components == null) {
 			return false;
 		}
@@ -354,7 +355,7 @@
 	}
 	
 	@Override
-	public List<? extends CombinedRElement> getModelChildren(final @Nullable Filter filter) {
+	public List<? extends CombinedRElement> getModelChildren(final @Nullable LtkModelElementFilter filter) {
 		if (this.components == null) {
 			return Collections.emptyList();
 		}
@@ -386,7 +387,7 @@
 	@Override
 	@SuppressWarnings("unchecked")
 	public <T> @Nullable T getAdapter(final Class<T> adapterType) {
-		if (adapterType == IRFrame.class) {
+		if (adapterType == RFrame.class) {
 			return (T) this;
 		}
 		return super.getAdapter(adapterType);
@@ -406,12 +407,12 @@
 	}
 	
 	@Override
-	public @Nullable List<? extends IRElement> getModelElements() {
+	public @Nullable List<? extends RElement> getModelElements() {
 		return null;
 	}
 	
 	@Override
-	public @Nullable List<? extends IRFrame> getPotentialParents() {
+	public @Nullable List<? extends RFrame> getPotentialParents() {
 		return null;
 	}
 	
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RFunction2.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RFunction2.java
index 70f0663..580e560 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RFunction2.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RFunction2.java
@@ -24,11 +24,13 @@
 
 import org.eclipse.statet.internal.r.core.sourcemodel.SourceAnalyzer;
 import org.eclipse.statet.ltk.ast.core.AstInfo;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.model.ArgsDefinition;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRMethod;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RLangElement;
+import org.eclipse.statet.r.core.model.RLangMethod;
 import org.eclipse.statet.r.core.rsource.ast.FDef;
 import org.eclipse.statet.r.core.rsource.ast.RScanner;
 import org.eclipse.statet.rj.data.RFunction;
@@ -39,7 +41,7 @@
 
 @NonNullByDefault
 public final class RFunction2 extends BasicCombinedRElement
-		implements IRMethod, RFunction {
+		implements RLangMethod<RLangElement<?>>, RFunction {
 	
 	
 	private static @Nullable ArgsDefinition parseArgDef(final @Nullable String headerSource) {
@@ -121,7 +123,7 @@
 	
 	@Override
 	public int getElementType() {
-		return IRElement.R_COMMON_FUNCTION;
+		return RElement.R_COMMON_FUNCTION;
 	}
 	
 	@Override
@@ -131,12 +133,12 @@
 	
 	
 	@Override
-	public boolean hasModelChildren(final @Nullable Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return false;
 	}
 	
 	@Override
-	public List<? extends CombinedRElement> getModelChildren(final @Nullable Filter filter) {
+	public List<? extends CombinedRElement> getModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return Collections.emptyList();
 	}
 	
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RLanguageVar.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RLanguageVar.java
index bc9c3ea..9b33f1d 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RLanguageVar.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RLanguageVar.java
@@ -21,6 +21,7 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.rj.data.RJIO;
@@ -118,12 +119,12 @@
 	}
 	
 	@Override
-	public boolean hasModelChildren(final @Nullable Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return false;
 	}
 	
 	@Override
-	public List<? extends CombinedRElement> getModelChildren(final @Nullable Filter filter) {
+	public List<? extends CombinedRElement> getModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return Collections.emptyList();
 	}
 	
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RListVar.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RListVar.java
index 24d0b1b..7f231ba 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RListVar.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RListVar.java
@@ -22,6 +22,7 @@
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.data.CombinedRList;
 import org.eclipse.statet.r.core.model.RElementName;
@@ -197,7 +198,7 @@
 	}
 	
 	@Override
-	public final boolean hasModelChildren(final @Nullable Filter filter) {
+	public final boolean hasModelChildren(final @Nullable LtkModelElementFilter filter) {
 		if (this.components == null) {
 			return false;
 		}
@@ -215,7 +216,7 @@
 	}
 	
 	@Override
-	public final List<? extends CombinedRElement> getModelChildren(final @Nullable Filter filter) {
+	public final List<? extends CombinedRElement> getModelChildren(final @Nullable LtkModelElementFilter filter) {
 		if (this.components == null) {
 			return Collections.emptyList();
 		}
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RMissingVar.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RMissingVar.java
index b175988..663e3b4 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RMissingVar.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RMissingVar.java
@@ -19,6 +19,7 @@
 
 import org.eclipse.statet.jcommons.lang.Nullable;
 
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.rj.data.RList;
@@ -65,12 +66,12 @@
 	}
 	
 	@Override
-	public boolean hasModelChildren(final @Nullable Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return false;
 	}
 	
 	@Override
-	public List<? extends CombinedRElement> getModelChildren(final @Nullable Filter filter) {
+	public List<? extends CombinedRElement> getModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return Collections.emptyList();
 	}
 	
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RNullVar.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RNullVar.java
index 52439c3..eada1dc 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RNullVar.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RNullVar.java
@@ -19,6 +19,7 @@
 
 import org.eclipse.statet.jcommons.lang.Nullable;
 
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.rj.data.RStore;
@@ -59,12 +60,12 @@
 	}
 	
 	@Override
-	public boolean hasModelChildren(final @Nullable Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return false;
 	}
 	
 	@Override
-	public List<? extends CombinedRElement> getModelChildren(final @Nullable Filter filter) {
+	public List<? extends CombinedRElement> getModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return Collections.emptyList();
 	}
 	
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/ROtherVar.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/ROtherVar.java
index 86bc988..d5e4e78 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/ROtherVar.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/ROtherVar.java
@@ -20,6 +20,7 @@
 
 import org.eclipse.statet.jcommons.lang.Nullable;
 
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.rj.data.RJIO;
@@ -92,12 +93,12 @@
 	}
 	
 	@Override
-	public boolean hasModelChildren(final @Nullable Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return false;
 	}
 	
 	@Override
-	public List<? extends CombinedRElement> getModelChildren(final @Nullable Filter filter) {
+	public List<? extends CombinedRElement> getModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return Collections.emptyList();
 	}
 	
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RPromiseVar.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RPromiseVar.java
index 3802bdf..466d057 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RPromiseVar.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RPromiseVar.java
@@ -21,6 +21,7 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.rj.data.RJIO;
@@ -76,12 +77,12 @@
 	}
 	
 	@Override
-	public boolean hasModelChildren(final @Nullable Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return false;
 	}
 	
 	@Override
-	public List<? extends CombinedRElement> getModelChildren(final @Nullable Filter filter) {
+	public List<? extends CombinedRElement> getModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return Collections.emptyList();
 	}
 	
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RReferenceVar.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RReferenceVar.java
index eec4ef7..870ba6c 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RReferenceVar.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RReferenceVar.java
@@ -21,6 +21,7 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.console.core.RWorkspace;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.data.CombinedRReference;
@@ -130,12 +131,12 @@
 	}
 	
 	@Override
-	public boolean hasModelChildren(final @Nullable Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return false;
 	}
 	
 	@Override
-	public List<? extends CombinedRElement> getModelChildren(final @Nullable Filter filter) {
+	public List<? extends CombinedRElement> getModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return Collections.emptyList();
 	}
 	
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RS4ObjectVar.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RS4ObjectVar.java
index caaee9d..2476913 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RS4ObjectVar.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RS4ObjectVar.java
@@ -22,6 +22,7 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.data.CombinedRList;
 import org.eclipse.statet.r.core.model.RElementName;
@@ -162,7 +163,7 @@
 	}
 	
 	@Override
-	public boolean hasModelChildren(final @Nullable Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter filter) {
 		if (filter == null) {
 			return (this.slotValues.length > 0);
 		}
@@ -177,7 +178,7 @@
 	}
 	
 	@Override
-	public List<? extends CombinedRElement> getModelChildren(final @Nullable Filter filter) {
+	public List<? extends CombinedRElement> getModelChildren(final @Nullable LtkModelElementFilter filter) {
 		if (filter == null) {
 			return ImCollections.newList(this.slotValues);
 		}
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RVectorVar.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RVectorVar.java
index ad54ed3..84b6cc8 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RVectorVar.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/RVectorVar.java
@@ -20,6 +20,7 @@
 
 import org.eclipse.statet.jcommons.lang.Nullable;
 
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.rj.data.RJIO;
@@ -130,12 +131,12 @@
 	}
 	
 	@Override
-	public boolean hasModelChildren(final @Nullable Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return false;
 	}
 	
 	@Override
-	public List<? extends CombinedRElement> getModelChildren(final @Nullable Filter filter) {
+	public List<? extends CombinedRElement> getModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return Collections.emptyList();
 	}
 	
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/VirtualMissingVar.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/VirtualMissingVar.java
index 27d1de6..8916dad 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/VirtualMissingVar.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/internal/r/rdata/VirtualMissingVar.java
@@ -19,6 +19,7 @@
 
 import org.eclipse.statet.jcommons.lang.Nullable;
 
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.console.core.RProcess;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.model.RElementName;
@@ -83,12 +84,12 @@
 	}
 	
 	@Override
-	public boolean hasModelChildren(final @Nullable Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return false;
 	}
 	
 	@Override
-	public List<? extends CombinedRElement> getModelChildren(final @Nullable Filter filter) {
+	public List<? extends CombinedRElement> getModelChildren(final @Nullable LtkModelElementFilter filter) {
 		return Collections.emptyList();
 	}
 	
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/console/core/AbstractRController.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/console/core/AbstractRController.java
index b5acb0e..0ae86ad 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/console/core/AbstractRController.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/console/core/AbstractRController.java
@@ -27,7 +27,7 @@
 import org.eclipse.statet.jcommons.ts.core.ToolRunnable;
 import org.eclipse.statet.jcommons.ts.core.ToolService;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.nico.core.runtime.ITrack;
 import org.eclipse.statet.nico.core.runtime.Queue.Section;
 import org.eclipse.statet.nico.core.runtime.SubmitType;
@@ -217,7 +217,7 @@
 		return null;
 	}
 	
-	public void submitFileCommandToConsole(final String[] lines, final ISourceUnit file,
+	public void submitFileCommandToConsole(final String[] lines, final SourceUnit file,
 			final ProgressMonitor m) throws StatusException {
 		for (final String line : lines) {
 			submitToConsole(line, m);
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/console/core/RDbg.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/console/core/RDbg.java
index 8382585..4a5a235 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/console/core/RDbg.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/console/core/RDbg.java
@@ -27,10 +27,10 @@
 
 import org.eclipse.statet.ecommons.io.FileUtil;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.r.core.model.RElement;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
 import org.eclipse.statet.r.nico.IRSrcref;
 import org.eclipse.statet.r.nico.RSrcref;
 import org.eclipse.statet.rj.server.dbg.DbgRequest;
@@ -45,27 +45,27 @@
 public class RDbg {
 	
 	
-	public static String getElementId(IRLangSourceElement element) {
-		ISourceStructElement parent= element.getSourceParent();
-		if (!(parent instanceof IRLangSourceElement)
-				|| (parent.getElementType() & IRElement.MASK_C1) == IRElement.C1_SOURCE ) {
+	public static String getElementId(RLangSourceElement element) {
+		SourceStructElement parent= element.getSourceParent();
+		if (!(parent instanceof RLangSourceElement)
+				|| (parent.getElementType() & RElement.MASK_C1) == RElement.C1_SOURCE ) {
 			return element.getId();
 		}
 		final StringBuilder sb= new StringBuilder(element.getId());
-		element= (IRLangSourceElement) parent;
+		element= (RLangSourceElement) parent;
 		while (true) {
 			sb.insert(0, '/');
 			sb.insert(0, element.getId());
 			parent= element.getSourceParent();
-			if (!(parent instanceof IRLangSourceElement)
-					|| (parent.getElementType() & IRElement.MASK_C1) == IRElement.C1_SOURCE ) {
+			if (!(parent instanceof RLangSourceElement)
+					|| (parent.getElementType() & RElement.MASK_C1) == RElement.C1_SOURCE ) {
 				return sb.toString();
 			}
-			element= (IRLangSourceElement) parent;
+			element= (RLangSourceElement) parent;
 		}
 	}
 	
-	public static long getTimestamp(final ISourceUnit su, final IProgressMonitor monitor) {
+	public static long getTimestamp(final SourceUnit su, final IProgressMonitor monitor) {
 		if (su.isSynchronized() && su.getResource() != null) {
 			final FileUtil fileUtil= FileUtil.getFileUtil(su.getResource());
 			if (fileUtil != null) {
@@ -79,7 +79,7 @@
 		return 0;
 	}
 	
-	public static long getTimestamp(final ISourceUnit su, final ProgressMonitor m) {
+	public static long getTimestamp(final SourceUnit su, final ProgressMonitor m) {
 		if (su.isSynchronized() && su.getResource() != null) {
 			final FileUtil fileUtil = FileUtil.getFileUtil(su.getResource());
 			if (fileUtil != null) {
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/AbstractRDbgController.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/AbstractRDbgController.java
index 9a03730..45cd638 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/AbstractRDbgController.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/AbstractRDbgController.java
@@ -42,9 +42,9 @@
 import org.eclipse.statet.ecommons.io.FileUtil;
 
 import org.eclipse.statet.internal.r.console.core.RConsoleCorePlugin;
-import org.eclipse.statet.ltk.core.LTK;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
+import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 import org.eclipse.statet.nico.core.runtime.Prompt;
 import org.eclipse.statet.nico.core.runtime.SubmitType;
 import org.eclipse.statet.nico.core.runtime.ToolStatus;
@@ -55,8 +55,8 @@
 import org.eclipse.statet.r.console.core.RDbg;
 import org.eclipse.statet.r.console.core.RProcess;
 import org.eclipse.statet.r.core.RUtil;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.tool.IRConsoleService;
 import org.eclipse.statet.rj.data.RDataUtils;
 import org.eclipse.statet.rj.data.RObject;
@@ -102,10 +102,10 @@
 				final ProgressMonitor m );
 		
 		@Nullable ElementTracepointInstallationRequest prepareFileElementTracepoints(
-				SrcfileData srcfile, IRSourceUnit su,
+				SrcfileData srcfile, RSourceUnit su,
 				final ProgressMonitor m );
 		
-		void finishFileElementTracepoints(SrcfileData srcfileData, IRSourceUnit su,
+		void finishFileElementTracepoints(SrcfileData srcfileData, RSourceUnit su,
 				ElementTracepointInstallationRequest request,
 				final ProgressMonitor m );
 		
@@ -830,7 +830,7 @@
 	}
 	
 	@Override
-	public void submitFileCommandToConsole(final String[] lines, final ISourceUnit su,
+	public void submitFileCommandToConsole(final String[] lines, final SourceUnit su,
 			final ProgressMonitor m) throws StatusException {
 		if (su == null) {
 			super.submitFileCommandToConsole(lines, null, m);
@@ -838,25 +838,25 @@
 		}
 		SrcfileData srcfile= getSrcfile(su, m);
 		final ElementTracepointInstallationRequest breakpointsRequest =
-				(isDebugEnabled() && su instanceof IRWorkspaceSourceUnit) ?
-						this.breakpointAdapter.prepareFileElementTracepoints(srcfile, (IRSourceUnit) su, m ) :
+				(isDebugEnabled() && su instanceof RWorkspaceSourceUnit) ?
+						this.breakpointAdapter.prepareFileElementTracepoints(srcfile, (RSourceUnit) su, m ) :
 						null;
 		try {
 			doSubmitFileCommandToConsole(lines, srcfile, su, m);
 		}
 		finally {
 			if (breakpointsRequest != null) {
-				if (srcfile.getTimestamp() != getTimestamp((IRWorkspaceSourceUnit) su, m)) {
+				if (srcfile.getTimestamp() != getTimestamp((RWorkspaceSourceUnit) su, m)) {
 					srcfile= null;
 				}
-				this.breakpointAdapter.finishFileElementTracepoints(srcfile, (IRSourceUnit) su,
+				this.breakpointAdapter.finishFileElementTracepoints(srcfile, (RSourceUnit) su,
 						breakpointsRequest, m );
 			}
 		}
 	}
 	
 	public void doSubmitFileCommandToConsole(final String[] lines,
-			final SrcfileData srcfile, final ISourceUnit su,
+			final SrcfileData srcfile, final SourceUnit su,
 			final ProgressMonitor m) throws StatusException {
 		super.submitFileCommandToConsole(lines, su, m);
 	}
@@ -869,13 +869,13 @@
 		return null;
 	}
 	
-	private long getTimestamp(final IWorkspaceSourceUnit su, final ProgressMonitor m) {
-		return (su.getWorkingContext() == LTK.PERSISTENCE_CONTEXT) ?
+	private long getTimestamp(final WorkspaceSourceUnit su, final ProgressMonitor m) {
+		return (su.getWorkingContext() == Ltk.PERSISTENCE_CONTEXT) ?
 				su.getResource().getLocalTimeStamp() :
 				RDbg.getTimestamp(su, m);
 	}
 	
-	protected SrcfileData getSrcfile(final ISourceUnit su,
+	protected SrcfileData getSrcfile(final SourceUnit su,
 			final ProgressMonitor m) throws StatusException {
 		String fileName= null;
 		if (su != null && su.getResource() != null) {
@@ -898,8 +898,8 @@
 			if (fileName == null) {
 				return null;
 			}
-			if (su instanceof IWorkspaceSourceUnit) {
-				final IWorkspaceSourceUnit wsu= (IWorkspaceSourceUnit) su;
+			if (su instanceof WorkspaceSourceUnit) {
+				final WorkspaceSourceUnit wsu= (WorkspaceSourceUnit) su;
 				final IPath path= wsu.getResource().getFullPath();
 				
 				prepareSrcfile(fileName, path, m);
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/IRModelSrcref.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/IRModelSrcref.java
index cfb640a..6a213c2 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/IRModelSrcref.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/IRModelSrcref.java
@@ -18,15 +18,15 @@
 
 import org.eclipse.jface.text.IRegion;
 
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 
 
 public interface IRModelSrcref extends IRSrcref, IRegion {
 	
 	
-	IRSourceUnit getFile();
+	RSourceUnit getFile();
 	
-	List<IRLangSourceElement> getElements();
+	List<RLangSourceElement> getElements();
 	
 }
diff --git a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RjsController.java b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RjsController.java
index f2bb3b4..a6b74f1 100644
--- a/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RjsController.java
+++ b/r/org.eclipse.statet.r.console.core/src/org/eclipse/statet/r/nico/impl/RjsController.java
@@ -69,8 +69,8 @@
 import org.eclipse.statet.internal.r.rdata.CombinedFactory;
 import org.eclipse.statet.internal.r.rdata.REnvironmentVar;
 import org.eclipse.statet.ltk.ast.core.AstNode;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.nico.core.runtime.ConsoleRunnable;
 import org.eclipse.statet.nico.core.runtime.IRemoteEngineController;
 import org.eclipse.statet.nico.core.runtime.SubmitType;
@@ -84,15 +84,15 @@
 import org.eclipse.statet.r.console.core.RProcess;
 import org.eclipse.statet.r.console.core.RWorkspace;
 import org.eclipse.statet.r.core.data.CombinedRElement;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRModelManager;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RModelManager;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.rsource.ast.FDef;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.core.tool.IRConsoleService;
 import org.eclipse.statet.r.nico.AbstractRDbgController;
@@ -226,10 +226,10 @@
 	public static final int RJS_SETUP_CONSOLE= 1 << 8;
 	
 	
-	private static final IModelElement.Filter TAG_ELEMENT_FILTER= new IModelElement.Filter() {
+	private static final LtkModelElementFilter<RLangSourceElement> TAG_ELEMENT_FILTER= new LtkModelElementFilter<RLangSourceElement>() {
 		@Override
-		public boolean include(final IModelElement element) {
-			return ((element.getElementType() & IRElement.MASK_C1) == IRElement.C1_METHOD);
+		public boolean include(final RLangSourceElement element) {
+			return ((element.getElementType() & RElement.MASK_C1) == RElement.C1_METHOD);
 		}
 	};
 	
@@ -1019,18 +1019,18 @@
 			if (srcref instanceof IRModelSrcref) {
 				// Move to abstract controller or breakpoint adapter?
 				final IRModelSrcref modelSrcref= (IRModelSrcref) srcref;
-				final List<IRLangSourceElement> elements= modelSrcref.getElements();
+				final List<RLangSourceElement> elements= modelSrcref.getElements();
 				if (elements.size() > 0) {
 					final List<String> elementIds= new ArrayList<>(elements.size());
 					final List<RObject> elementIndexes= new ArrayList<>(elements.size());
-					for (final IRLangSourceElement element : elements) {
-						if (TAG_ELEMENT_FILTER.include(element)) {
+					for (final RLangSourceElement element : elements) {
+						if (RjsController.TAG_ELEMENT_FILTER.include(element)) {
 							final FDef fdef= element.getAdapter(FDef.class);
 							if (fdef != null) {
 								final String elementId= RDbg.getElementId(element);
 								final RAstNode cont= fdef.getContChild();
-								final int[] path= RAst.computeRExpressionIndex(cont,
-										RAst.getRRootNode(cont, modelSrcref) );
+								final int[] path= RAsts.computeRExpressionIndex(cont,
+										RAsts.getRRootNode(cont, modelSrcref) );
 								if (elementId != null && path != null) {
 									final int[] fullPath= new int[path.length+1];
 									fullPath[0]= 1;
@@ -1067,28 +1067,28 @@
 	
 	@Override
 	public void doSubmitFileCommandToConsole(final String[] lines,
-			final SrcfileData srcfile, final ISourceUnit su,
+			final SrcfileData srcfile, final SourceUnit su,
 			final ProgressMonitor m) throws StatusException {
-		if (srcfile != null && su instanceof IRWorkspaceSourceUnit
+		if (srcfile != null && su instanceof RWorkspaceSourceUnit
 				&& su.getModelTypeId() == RModel.R_TYPE_ID) {
 			try {
-				final IRModelInfo modelInfo= (IRModelInfo) su.getModelInfo(RModel.R_TYPE_ID,
-						IRModelManager.MODEL_FILE, EStatusUtils.convert(m.newSubMonitor(0)) );
+				final RSourceUnitModelInfo modelInfo= (RSourceUnitModelInfo) su.getModelInfo(RModel.R_TYPE_ID,
+						RModelManager.MODEL_FILE, EStatusUtils.convert(m.newSubMonitor(0)) );
 				if (modelInfo != null) {
-					final IRLangSourceElement fileElement= modelInfo.getSourceElement();
+					final RLangSourceElement fileElement= modelInfo.getSourceElement();
 					final RAstNode rootNode= (RAstNode) fileElement.getAdapter(AstNode.class);
-					final List<? extends IRLangSourceElement> elements= modelInfo.getSourceElement()
-							.getSourceChildren(TAG_ELEMENT_FILTER);
+					final List<? extends RLangSourceElement> elements= modelInfo.getSourceElement()
+							.getSourceChildren(RjsController.TAG_ELEMENT_FILTER);
 					
 					final List<String> elementIds= new ArrayList<>(elements.size());
 					final List<RObject> elementIndexes= new ArrayList<>(elements.size());
 					
-					for (final IRLangSourceElement element : elements) {
+					for (final RLangSourceElement element : elements) {
 						final FDef fdef= element.getAdapter(FDef.class);
 						if (fdef != null) {
 							final String elementId= RDbg.getElementId(element);
 							final RAstNode cont= fdef.getContChild();
-							final int[] path= RAst.computeRExpressionIndex(cont, rootNode);
+							final int[] path= RAsts.computeRExpressionIndex(cont, rootNode);
 							if (elementId != null && path != null) {
 								elementIds.add(elementId);
 								elementIndexes.add(this.fRObjectFactory.createVector(
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsoleEditor.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsoleEditor.java
index 684ccf3..7501006 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsoleEditor.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsoleEditor.java
@@ -29,9 +29,9 @@
 import org.eclipse.statet.nico.ui.console.ConsolePageEditor;
 import org.eclipse.statet.r.console.core.ContinuePrompt;
 import org.eclipse.statet.r.console.core.IRBasicAdapter;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.RCoreAccess;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.ui.editors.IRSourceEditor;
 import org.eclipse.statet.r.ui.sourceediting.InsertAssignmentHandler;
 import org.eclipse.statet.r.ui.sourceediting.RSourceViewerConfigurator;
@@ -52,19 +52,19 @@
 	
 	
 	@Override
-	protected IRSourceUnit createSourceUnit() {
+	protected RSourceUnit createSourceUnit() {
 		return new RConsoleSourceUnit((RConsolePage) getConsolePage(), getDocument());
 	}
 	
 	
 	@Override
-	public IRCoreAccess getRCoreAccess() {
+	public RCoreAccess getRCoreAccess() {
 		return this.rConfig.getRCoreAccess();
 	}
 	
 	@Override
-	public IRSourceUnit getSourceUnit() {
-		return (IRSourceUnit) super.getSourceUnit();
+	public RSourceUnit getSourceUnit() {
+		return (RSourceUnit)super.getSourceUnit();
 	}
 	
 	@Override
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsoleSourceUnit.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsoleSourceUnit.java
index ba9505d..6676162 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsoleSourceUnit.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsoleSourceUnit.java
@@ -15,34 +15,36 @@
 package org.eclipse.statet.internal.r.console.ui.page;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.List;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 import org.eclipse.statet.ecommons.text.core.util.AbstractFragmentDocument;
 import org.eclipse.statet.ecommons.text.core.util.TextUtils;
 
 import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.ltk.core.SourceContent;
-import org.eclipse.statet.ltk.model.core.SourceDocumentRunnable;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
+import org.eclipse.statet.ltk.model.core.element.SourceDocumentRunnable;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.nico.ui.console.GenericConsoleSourceUnit;
 import org.eclipse.statet.r.console.ui.RConsole;
-import org.eclipse.statet.r.core.IRCoreAccess;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.r.core.model.RSuModelContainer;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.build.RSourceUnitModelContainer;
 import org.eclipse.statet.r.core.source.RDocumentContentInfo;
 
 
-public class RConsoleSourceUnit extends GenericConsoleSourceUnit implements IRSourceUnit {
+@NonNullByDefault
+public class RConsoleSourceUnit extends GenericConsoleSourceUnit implements RSourceUnit {
 	
 	
 	private final RConsole rConsole;
 	
-	private final RSuModelContainer model = new RSuModelContainer(this) {
+	private final RSourceUnitModelContainer model= new RSourceUnitModelContainer(this) {
 		
 		@Override
 		public SourceContent getParseContent(final IProgressMonitor monitor) {
@@ -59,7 +61,7 @@
 	
 	public RConsoleSourceUnit(final RConsolePage page, final AbstractFragmentDocument document) {
 		super(page.toString(), document);
-		this.rConsole = page.getConsole();
+		this.rConsole= page.getConsole();
 	}
 	
 	
@@ -75,7 +77,7 @@
 	
 	
 	@Override
-	public AstInfo getAstInfo(final String type, final boolean ensureSync,
+	public @Nullable AstInfo getAstInfo(final @Nullable String type, final boolean ensureSync,
 			final IProgressMonitor monitor) {
 		if (type == null || this.model.isContainerFor(type)) {
 			return this.model.getAstInfo(ensureSync, monitor);
@@ -84,7 +86,7 @@
 	}
 	
 	@Override
-	public ISourceUnitModelInfo getModelInfo(final String type, final int flags,
+	public @Nullable SourceUnitModelInfo getModelInfo(final @Nullable String type, final int flags,
 			final IProgressMonitor monitor) {
 		if (type == null || this.model.isContainerFor(type)) {
 			return this.model.getModelInfo(flags, monitor);
@@ -98,18 +100,9 @@
 	}
 	
 	@Override
-	public IRCoreAccess getRCoreAccess() {
+	public RCoreAccess getRCoreAccess() {
 		return this.rConsole;
 	}
 	
-	@Override
-	public boolean hasModelChildren(final Filter filter) {
-		return false;
-	}
-	
-	@Override
-	public List<? extends IModelElement> getModelChildren(final Filter filter) {
-		return null;
-	}
 	
 }
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RInputConfigurator.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RInputConfigurator.java
index b7c277f..07c9342 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RInputConfigurator.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RInputConfigurator.java
@@ -20,7 +20,7 @@
 import org.eclipse.statet.ltk.ui.sourceediting.assist.ContentAssistProcessor;
 import org.eclipse.statet.nico.ui.console.NIConsolePage;
 import org.eclipse.statet.r.console.ui.RConsole;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RDocumentContentInfo;
 import org.eclipse.statet.r.ui.editors.IRSourceEditor;
 import org.eclipse.statet.r.ui.sourceediting.RContentAssistProcessor;
@@ -42,18 +42,18 @@
 			final ContentAssistComputerRegistry registry = RUIPlugin.getInstance().getRConsoleContentAssistRegistry();
 			
 			final ContentAssistProcessor codeProcessor = new RContentAssistProcessor(assistant,
-					IRDocumentConstants.R_DEFAULT_CONTENT_TYPE, registry, getSourceEditor());
+					RDocumentConstants.R_DEFAULT_CONTENT_TYPE, registry, getSourceEditor());
 			codeProcessor.setCompletionProposalAutoActivationCharacters(new char[] { '$', '@' });
 			codeProcessor.setContextInformationAutoActivationCharacters(new char[] { '(', ',' });
-			assistant.setContentAssistProcessor(codeProcessor, IRDocumentConstants.R_DEFAULT_CONTENT_TYPE);
+			assistant.setContentAssistProcessor(codeProcessor, RDocumentConstants.R_DEFAULT_CONTENT_TYPE);
 			
 			final ContentAssistProcessor symbolProcessor = new RContentAssistProcessor(assistant,
-					IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE, registry, getSourceEditor());
-			assistant.setContentAssistProcessor(symbolProcessor, IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE);
+					RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE, registry, getSourceEditor());
+			assistant.setContentAssistProcessor(symbolProcessor, RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE);
 			
 			final ContentAssistProcessor stringProcessor = new RContentAssistProcessor(assistant,
-					IRDocumentConstants.R_STRING_CONTENT_TYPE, registry, getSourceEditor());
-			assistant.setContentAssistProcessor(stringProcessor, IRDocumentConstants.R_STRING_CONTENT_TYPE);
+					RDocumentConstants.R_STRING_CONTENT_TYPE, registry, getSourceEditor());
+			assistant.setContentAssistProcessor(stringProcessor, RDocumentConstants.R_STRING_CONTENT_TYPE);
 		}
 		
 	}
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/RConsole.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/RConsole.java
index 28a91a4..6fbf404 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/RConsole.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/r/console/ui/RConsole.java
@@ -24,14 +24,14 @@
 import org.eclipse.statet.nico.ui.console.NIConsole;
 import org.eclipse.statet.nico.ui.console.NIConsoleColorAdapter;
 import org.eclipse.statet.r.console.core.RProcess;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCodeStyleSettings;
 import org.eclipse.statet.r.core.RCore;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.launching.ui.RErrorLineTracker;
 import org.eclipse.statet.rj.renv.core.REnv;
 
 
-public class RConsole extends NIConsole implements IRCoreAccess {
+public class RConsole extends NIConsole implements RCoreAccess {
 	
 	
 	private final PreferenceAccess prefs;
diff --git a/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/RLexerTerminalTest.java b/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/RLexerTerminalTest.java
index c9335ff..4a54ae6 100644
--- a/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/RLexerTerminalTest.java
+++ b/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/RLexerTerminalTest.java
@@ -16,12 +16,12 @@
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_NUMBER_HEX_DIGIT_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_NUMBER_HEX_FLOAT_EXP_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_NUMBER_INT_WITH_DEC_POINT;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_NUMBER_NON_INT_WITH_L;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_HEX_DIGIT_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_HEX_FLOAT_EXP_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_INT_WITH_DEC_POINT;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_NON_INT_WITH_L;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED;
 
 import org.junit.jupiter.api.Test;
 
diff --git a/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/RLexerTextEncodingTest.java b/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/RLexerTextEncodingTest.java
index 0130add..b7a5772 100644
--- a/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/RLexerTextEncodingTest.java
+++ b/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/RLexerTextEncodingTest.java
@@ -16,11 +16,11 @@
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_HEX_DIGIT_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_NOT_CLOSED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNKOWN;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_TEXT_NULLCHAR;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_HEX_DIGIT_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNKOWN;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_TEXT_NULLCHAR;
 
 import org.junit.jupiter.api.Test;
 
diff --git a/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RArgumentMatchingTest.java b/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RArgumentMatchingTest.java
index 8984f95..bbae50c 100644
--- a/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RArgumentMatchingTest.java
+++ b/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RArgumentMatchingTest.java
@@ -20,16 +20,16 @@
 
 import org.eclipse.statet.jcommons.text.core.input.StringParserInput;
 
-import org.eclipse.statet.ltk.model.core.IModelManager;
+import org.eclipse.statet.ltk.model.core.ModelManager;
 import org.eclipse.statet.r.core.model.ArgsDefinition;
 import org.eclipse.statet.r.core.rsource.ast.FCall.Args;
-import org.eclipse.statet.r.core.rsource.ast.RAst.FCallArgMatch;
+import org.eclipse.statet.r.core.rsource.ast.RAsts.FCallArgMatch;
 
 
 public class RArgumentMatchingTest {
 	
 	
-	private final RScanner scanner= new RScanner(IModelManager.MODEL_FILE);
+	private final RScanner scanner= new RScanner(ModelManager.MODEL_FILE);
 	
 	private final StringParserInput input= new StringParserInput();
 	
@@ -87,7 +87,7 @@
 	private void assertArgs(final ArgsDefinition argsDef, final String code, final int[] expected) {
 		final Args callArgs = this.scanner.scanFCallArgs(this.input.reset(code).init(), true);
 		
-		final FCallArgMatch readedArgs = RAst.matchArgs(callArgs, argsDef);
+		final FCallArgMatch readedArgs = RAsts.matchArgs(callArgs, argsDef);
 		
 		assertArrayEquals(expected, readedArgs.argsNode2argsDef);
 	}
diff --git a/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RScannerBasicTest.java b/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RScannerBasicTest.java
index 02210dd..a52325a 100644
--- a/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RScannerBasicTest.java
+++ b/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RScannerBasicTest.java
@@ -27,7 +27,7 @@
 import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.text.core.input.StringParserInput;
 
-import org.eclipse.statet.ltk.model.core.IModelManager;
+import org.eclipse.statet.ltk.model.core.ModelManager;
 import org.eclipse.statet.r.core.rlang.RTerminal;
 
 
@@ -82,7 +82,7 @@
 	}
 	
 	
-	private final RScanner scanner= new RScanner(IModelManager.MODEL_FILE);
+	private final RScanner scanner= new RScanner(ModelManager.MODEL_FILE);
 	
 	private final StringParserInput input= new StringParserInput();
 	
diff --git a/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RScannerFCallArgsTest.java b/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RScannerFCallArgsTest.java
index b95de35..834db93 100644
--- a/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RScannerFCallArgsTest.java
+++ b/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RScannerFCallArgsTest.java
@@ -21,7 +21,7 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.text.core.input.StringParserInput;
 
-import org.eclipse.statet.ltk.model.core.IModelManager;
+import org.eclipse.statet.ltk.model.core.ModelManager;
 import org.eclipse.statet.r.core.rsource.ast.FCall.Args;
 
 
@@ -29,7 +29,7 @@
 public class RScannerFCallArgsTest {
 	
 	
-	private final RScanner scanner= new RScanner(IModelManager.MODEL_FILE);
+	private final RScanner scanner= new RScanner(ModelManager.MODEL_FILE);
 	
 	private final StringParserInput input= new StringParserInput();
 	
diff --git a/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RScannerSourceRangeTest.java b/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RScannerSourceRangeTest.java
index 0731f1c..f22c069 100644
--- a/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RScannerSourceRangeTest.java
+++ b/r/org.eclipse.statet.r.core-tests/src/org/eclipse/statet/r/core/rsource/ast/RScannerSourceRangeTest.java
@@ -21,14 +21,14 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.text.core.input.StringParserInput;
 
-import org.eclipse.statet.ltk.model.core.IModelManager;
+import org.eclipse.statet.ltk.model.core.ModelManager;
 
 
 @NonNullByDefault
 public class RScannerSourceRangeTest {
 	
 	
-	private final RScanner scanner= new RScanner(IModelManager.MODEL_FILE);
+	private final RScanner scanner= new RScanner(ModelManager.MODEL_FILE);
 	
 	private final StringParserInput input= new StringParserInput();
 	
diff --git a/r/org.eclipse.statet.r.core/META-INF/MANIFEST.MF b/r/org.eclipse.statet.r.core/META-INF/MANIFEST.MF
index 7b07263..d686da7 100644
--- a/r/org.eclipse.statet.r.core/META-INF/MANIFEST.MF
+++ b/r/org.eclipse.statet.r.core/META-INF/MANIFEST.MF
@@ -16,7 +16,7 @@
  org.eclipse.statet.rj.server;bundle-version="[4.2.0,4.3.0)",
  org.eclipse.statet.ecommons.text.core;visibility:=reexport,
  org.eclipse.statet.ltk.core,
- org.eclipse.statet.ltk.buildpaths.core,
+ org.eclipse.statet.ltk.buildpath.core,
  org.eclipse.ltk.core.refactoring,
  org.eclipse.statet.ecommons.edb.core;bundle-version="[4.2.0,4.3.0)",
  org.eclipse.core.net;bundle-version="1.3.0",
@@ -49,6 +49,7 @@
  org.eclipse.statet.r.core,
  org.eclipse.statet.r.core.data,
  org.eclipse.statet.r.core.model,
+ org.eclipse.statet.r.core.model.build,
  org.eclipse.statet.r.core.pkgmanager,
  org.eclipse.statet.r.core.rdoc,
  org.eclipse.statet.r.core.refactoring,
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/FilteredFrame.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/FilteredFrame.java
index 2520b20..90f82b5 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/FilteredFrame.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/FilteredFrame.java
@@ -16,32 +16,36 @@
 
 import java.util.List;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.lang.ObjectUtils;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRLangElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangElement;
 
 
-public class FilteredFrame implements IRFrame, IModelElement.Filter {
+@NonNullByDefault
+public class FilteredFrame<TModelChild extends RLangElement>
+		implements RFrame<TModelChild>, LtkModelElementFilter<LtkModelElement> {
 	
 	
-	private final IRFrame frame;
-	private final ISourceUnit exclude;
+	private final RFrame<TModelChild> frame;
+	private final SourceUnit exclude;
 	
 	
-	public FilteredFrame(final IRFrame frame, final ISourceUnit exclude) {
+	public FilteredFrame(final RFrame<TModelChild> frame, final SourceUnit exclude) {
 		this.frame= frame;
 		this.exclude= exclude;
 	}
 	
 	
 	@Override
-	public String getFrameId() {
+	public @Nullable String getFrameId() {
 		return this.frame.getFrameId();
 	}
 	
@@ -56,30 +60,30 @@
 	}
 	
 	@Override
-	public boolean hasModelChildren(final IModelElement.Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super TModelChild> filter) {
 		return this.frame.hasModelChildren((this.exclude != null) ? this : null);
 	}
 	
 	@Override
-	public List<? extends IRLangElement> getModelChildren(final IModelElement.Filter filter) {
+	public List<? extends TModelChild> getModelChildren(final @Nullable LtkModelElementFilter<? super TModelChild> filter) {
 		return this.frame.getModelChildren((this.exclude != null) ? this : null);
 	}
 	
 	@Override
-	public List<? extends IRElement> getModelElements() {
+	public List<? extends TModelChild> getModelElements() {
 		return this.frame.getModelElements();
 	}
 	
 	@Override
-	public List<? extends IRFrame> getPotentialParents() {
+	public List<? extends RFrame> getPotentialParents() {
 		return this.frame.getPotentialParents();
 	}
 	
 	
 	@Override
-	public boolean include(final IModelElement element) {
-		final ISourceUnit su= (element instanceof ISourceElement) ?
-				((ISourceElement) element).getSourceUnit() : null;
+	public boolean include(final LtkModelElement element) {
+		final SourceUnit su= (element instanceof SourceElement) ?
+				((SourceElement)element).getSourceUnit() : null;
 		return (su == null || !this.exclude.getId().equals(su.getId()) );
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RBuildpathPrefs.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RBuildpathPrefs.java
index 19eef0f..7c9d5b8 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RBuildpathPrefs.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RBuildpathPrefs.java
@@ -27,15 +27,17 @@
 
 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.ltk.buildpaths.core.BuildpathElement;
-import org.eclipse.statet.ltk.buildpaths.core.BuildpathElementType;
-import org.eclipse.statet.ltk.buildpaths.core.BuildpathsUtils;
-import org.eclipse.statet.ltk.buildpaths.core.IBuildpathAttribute;
-import org.eclipse.statet.ltk.buildpaths.core.IBuildpathElement;
+import org.eclipse.statet.ltk.buildpath.core.BasicBuildpathElement;
+import org.eclipse.statet.ltk.buildpath.core.BuildpathAttribute;
+import org.eclipse.statet.ltk.buildpath.core.BuildpathElement;
+import org.eclipse.statet.ltk.buildpath.core.BuildpathElementType;
+import org.eclipse.statet.ltk.buildpath.core.BuildpathUtils;
 import org.eclipse.statet.r.core.RBuildpaths;
 
 
+@NonNullByDefault
 public class RBuildpathPrefs {
 	
 	
@@ -61,26 +63,26 @@
 	}
 	
 	
-	public ImList<IBuildpathElement> load() {
-		final List<IBuildpathElement> elements= new ArrayList<>();
+	public ImList<BuildpathElement> load() {
+		final List<BuildpathElement> elements= new ArrayList<>();
 		
-		{	final String childName= IBuildpathElement.SOURCE + ".0";
+		{	final String childName= BuildpathElement.SOURCE + ".0";
 			final Preferences entryNode= this.rootNode.node(childName);
 			final BuildpathElementType type= RBuildpaths.R_SOURCE_TYPE;
 			
 			final IPath path= this.project.getFullPath();
-			ImList<IPath> inclusionPatterns= BuildpathsUtils.decodePatterns(
-					entryNode.get(IBuildpathAttribute.FILTER_INCLUSIONS, null) );
+			ImList<IPath> inclusionPatterns= BuildpathUtils.decodePatterns(
+					entryNode.get(BuildpathAttribute.FILTER_INCLUSIONS, null) );
 			if (inclusionPatterns == null) {
 				inclusionPatterns= DEFAULT_INCLUSION_PATTERNS;
 			}
-			ImList<IPath> exclusionPatterns= BuildpathsUtils.decodePatterns(
-					entryNode.get(IBuildpathAttribute.FILTER_EXCLUSIONS, null) );
+			ImList<IPath> exclusionPatterns= BuildpathUtils.decodePatterns(
+					entryNode.get(BuildpathAttribute.FILTER_EXCLUSIONS, null) );
 			if (exclusionPatterns == null) {
 				exclusionPatterns= DEFAULT_EXCLUSION_PATTERNS;
 			}
 			
-			elements.add(new BuildpathElement(type, path,
+			elements.add(new BasicBuildpathElement(type, path,
 					inclusionPatterns, exclusionPatterns,
 					null, null, null, null, true, null ));
 		}
@@ -88,12 +90,12 @@
 		return ImCollections.toList(elements);
 	}
 	
-	public void save(final List<IBuildpathElement> elements, final boolean flush) {
+	public void save(final List<BuildpathElement> elements, final boolean flush) {
 		try {
-			for (final IBuildpathElement element : elements) {
+			for (final BuildpathElement element : elements) {
 				if (element.getType() == RBuildpaths.R_SOURCE_TYPE
 						&& element.getPath().equals(this.project.getFullPath()) ) {
-					final String childName= IBuildpathElement.SOURCE + ".0";
+					final String childName= BuildpathElement.SOURCE + ".0";
 					final Preferences entryNode= this.rootNode.node(childName);
 					
 					IPath path= element.getPath();
@@ -104,10 +106,10 @@
 						continue;
 					}
 					entryNode.put(PATH_PREF_KEY, path.toPortableString());
-					entryNode.put(IBuildpathAttribute.FILTER_INCLUSIONS,
-							BuildpathsUtils.encodePatterns(element.getInclusionPatterns()) );
-					entryNode.put(IBuildpathAttribute.FILTER_EXCLUSIONS,
-							BuildpathsUtils.encodePatterns(element.getExclusionPatterns()) );
+					entryNode.put(BuildpathAttribute.FILTER_INCLUSIONS,
+							BuildpathUtils.encodePatterns(element.getInclusionPatterns()) );
+					entryNode.put(BuildpathAttribute.FILTER_EXCLUSIONS,
+							BuildpathUtils.encodePatterns(element.getExclusionPatterns()) );
 					
 					this.rootNode.putInt(VERSION_KEY, 1);
 					this.rootNode.putLong(STAMP_KEY, System.currentTimeMillis());
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RCoreAccess.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RCoreAccessImpl.java
similarity index 82%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RCoreAccess.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RCoreAccessImpl.java
index abeed4e..304643d 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RCoreAccess.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RCoreAccessImpl.java
@@ -14,28 +14,32 @@
 
 package org.eclipse.statet.internal.r.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.preferences.PreferencesManageListener;
 import org.eclipse.statet.ecommons.preferences.core.PreferenceAccess;
 
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCodeStyleSettings;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.rj.renv.core.REnv;
 
 
-final class RCoreAccess implements IRCoreAccess {
+@NonNullByDefault
+final class RCoreAccessImpl implements RCoreAccess {
 	
 	
 	private boolean isDisposed;
 	
 	private final PreferenceAccess prefs;
 	
-	private volatile RCodeStyleSettings codeStyle;
-	private PreferencesManageListener codeStyleListener;
+	private volatile @Nullable RCodeStyleSettings codeStyle;
+	private @Nullable PreferencesManageListener codeStyleListener;
 	
 	private final REnv rEnv;
 	
 	
-	RCoreAccess(final PreferenceAccess prefs, final REnv rEnv) {
+	RCoreAccessImpl(final PreferenceAccess prefs, final REnv rEnv) {
 		this.prefs= prefs;
 		this.rEnv= rEnv;
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RCorePlugin.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RCorePlugin.java
index 886a07e..f5714d5 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RCorePlugin.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RCorePlugin.java
@@ -38,8 +38,8 @@
 import org.eclipse.statet.internal.r.core.renv.REnvManagerImpl;
 import org.eclipse.statet.internal.r.core.rhelp.WorkbenchRHelpHttpService;
 import org.eclipse.statet.internal.r.core.rhelp.WorkbenchRHelpManager;
-import org.eclipse.statet.internal.r.core.sourcemodel.RModelManager;
-import org.eclipse.statet.r.core.IRCoreAccess;
+import org.eclipse.statet.internal.r.core.sourcemodel.RModelManagerImpl;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.rhelp.core.REnvHelp;
 import org.eclipse.statet.rhelp.core.http.RHelpHttpService;
 import org.eclipse.statet.rj.renv.core.REnv;
@@ -115,10 +115,10 @@
 	
 	private REnvManagerImpl rEnvManager;
 	
-	private RCoreAccess workspaceCoreAccess;
-	private RCoreAccess defaultsCoreAccess;
+	private RCoreAccessImpl workspaceCoreAccess;
+	private RCoreAccessImpl defaultsCoreAccess;
 	
-	private RModelManager rModelManager;
+	private RModelManagerImpl rModelManager;
 	private ResourceTracker resourceTracker;
 	
 	private REnvPkgManager rEnvPkgManager;
@@ -145,11 +145,11 @@
 		
 		this.rEnvManager= new REnvManagerImpl();
 		
-		this.workspaceCoreAccess= new RCoreAccess(
+		this.workspaceCoreAccess= new RCoreAccessImpl(
 				PreferenceUtils.getInstancePrefs(),
 				this.rEnvManager.getDefault() );
 		
-		this.rModelManager= new RModelManager();
+		this.rModelManager= new RModelManagerImpl();
 		this.resourceTracker= new ResourceTracker(this.rModelManager);
 		
 		this.rEnvPkgManager= new REnvPkgManager(this.rEnvManager);
@@ -224,7 +224,7 @@
 		return this.rEnvManager;
 	}
 	
-	public RModelManager getRModelManager() {
+	public RModelManagerImpl getRModelManager() {
 		return this.rModelManager;
 	}
 	
@@ -244,17 +244,17 @@
 		return this.rHelpHttpService;
 	}
 	
-	public synchronized IRCoreAccess getWorkspaceRCoreAccess() {
+	public synchronized RCoreAccess getWorkspaceRCoreAccess() {
 		if (this.workspaceCoreAccess == null) {
 			checkStarted();
 		}
 		return this.workspaceCoreAccess;
 	}
 	
-	public synchronized IRCoreAccess getDefaultsRCoreAccess() {
+	public synchronized RCoreAccess getDefaultsRCoreAccess() {
 		if (this.defaultsCoreAccess == null) {
 			checkStarted();
-			this.defaultsCoreAccess= new RCoreAccess(
+			this.defaultsCoreAccess= new RCoreAccessImpl(
 					PreferenceUtils.getDefaultPrefs(),
 					this.rEnvManager.getDefault() );
 		}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RProjectNature.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RProjectNature.java
index b734791..abbeef8 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RProjectNature.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RProjectNature.java
@@ -33,7 +33,7 @@
 import org.eclipse.statet.ecommons.resources.core.BuildUtils;
 import org.eclipse.statet.ecommons.resources.core.ProjectUtils;
 
-import org.eclipse.statet.ltk.buildpaths.core.IBuildpathElement;
+import org.eclipse.statet.ltk.buildpath.core.BuildpathElement;
 import org.eclipse.statet.r.core.RCodeStyleSettings;
 import org.eclipse.statet.r.core.RCore;
 import org.eclipse.statet.r.core.RProject;
@@ -78,7 +78,7 @@
 	private @Nullable REnv rEnv;
 	
 	private RBuildpathPrefs rBuildpathPrefs;
-	private ImList<IBuildpathElement> rRawBuildpath;
+	private ImList<BuildpathElement> rRawBuildpath;
 	
 	
 	@SuppressWarnings("null")
@@ -182,7 +182,7 @@
 	}
 	
 	private void updateBuildpath() {
-		final ImList<IBuildpathElement> rawBuildpath= this.rBuildpathPrefs.load();
+		final ImList<BuildpathElement> rawBuildpath= this.rBuildpathPrefs.load();
 		synchronized (this) {
 			this.rRawBuildpath= rawBuildpath;
 		}
@@ -223,7 +223,7 @@
 	
 	
 	@Override
-	public ImList<IBuildpathElement> getRawBuildpath() {
+	public ImList<BuildpathElement> getRawBuildpath() {
 		return this.rRawBuildpath;
 	}
 	
@@ -247,7 +247,7 @@
 		}
 	}
 	
-	public void saveBuildpath(final ImList<IBuildpathElement> rawBuildpath) {
+	public void saveBuildpath(final ImList<BuildpathElement> rawBuildpath) {
 		if (getRawBuildpath().equals(rawBuildpath)) {
 			return;
 		}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RSourceUnitFactory.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RSourceUnitFactory.java
index dc80a81..222acd0 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RSourceUnitFactory.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/RSourceUnitFactory.java
@@ -16,14 +16,17 @@
 
 import org.eclipse.core.resources.IFile;
 
-import org.eclipse.statet.internal.r.core.sourcemodel.RSourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.internal.r.core.sourcemodel.RResourceSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.model.core.impl.AbstractFilePersistenceSourceUnitFactory;
 
 
 /**
  * Factory for common R script files
  */
+@NonNullByDefault
 public class RSourceUnitFactory extends AbstractFilePersistenceSourceUnitFactory {
 	
 	
@@ -32,8 +35,8 @@
 	
 	
 	@Override
-	protected ISourceUnit createSourceUnit(final String id, final IFile file) {
-		return new RSourceUnit(id, file);
+	protected SourceUnit createSourceUnit(final String id, final IFile file) {
+		return new RResourceSourceUnit(id, file);
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/ResourceTracker.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/ResourceTracker.java
index f55b01f..df9af4c 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/ResourceTracker.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/ResourceTracker.java
@@ -25,19 +25,19 @@
 import org.eclipse.core.runtime.CoreException;
 
 import org.eclipse.statet.internal.r.core.sourcemodel.RModelIndex;
-import org.eclipse.statet.internal.r.core.sourcemodel.RModelManager;
+import org.eclipse.statet.internal.r.core.sourcemodel.RModelManagerImpl;
 import org.eclipse.statet.r.core.RProjects;
 
 
 public class ResourceTracker implements IResourceChangeListener {
 	
 	
-	private final RModelManager modelManager;
+	private final RModelManagerImpl modelManager;
 	
 	private final Map<IProject, RProjectNature> knownProjects= new HashMap<>();
 	
 	
-	public ResourceTracker(final RModelManager manager) {
+	public ResourceTracker(final RModelManagerImpl manager) {
 		this.modelManager= manager;
 		
 		ResourcesPlugin.getWorkspace().addResourceChangeListener(this,
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/CompositeFrame.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/CompositeFrame.java
index 0b61808..5d2114e 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/CompositeFrame.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/CompositeFrame.java
@@ -24,16 +24,19 @@
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 
+import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.lang.ObjectUtils;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement.Filter;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRLangElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangElement;
 
 
-public class CompositeFrame implements IRFrame {
+@NonNullByDefault
+public class CompositeFrame implements RFrame<RLangElement<?>> {
 	
 	
 	private final int frameType;
@@ -44,8 +47,8 @@
 	
 	
 	public CompositeFrame(final ReadWriteLock lock,
-			final String packageName, final String projectName,
-			final Map<String, RUnitElement> elements) {
+			final @Nullable String packageName, final String projectName,
+			final @Nullable Map<String, RUnitElement> elements) {
 		this.lock= lock.readLock();
 		this.modelElements= (elements != null) ? elements : new HashMap<>();
 		
@@ -60,14 +63,14 @@
 	}
 	
 	public CompositeFrame(final ReadWriteLock lock,
-			final String packageName, final String projectName,
+			final @Nullable String packageName, final String projectName,
 			final CompositeFrame copyFrom) {
 		this(lock, packageName, projectName, copyFrom.modelElements);
 	}
 	
 	public CompositeFrame(final ReadWriteLock lock,
-			final String packageName, final String projectName) {
-		this(lock, packageName, projectName, (Map<String, RUnitElement>) null);
+			final @Nullable String packageName, final String projectName) {
+		this(lock, packageName, projectName, (Map<String, RUnitElement>)null);
 	}
 	
 	
@@ -77,7 +80,7 @@
 	}
 	
 	@Override
-	public String getFrameId() {
+	public @Nullable String getFrameId() {
 		return null;
 	}
 	
@@ -87,11 +90,11 @@
 	}
 	
 	@Override
-	public List<? extends IRElement> getModelElements() {
+	public List<? extends RLangElement<?>> getModelElements() {
 		this.lock.lock();
 		try {
 			final Collection<RUnitElement> values= this.modelElements.values();
-			final List<IRElement> list= new ArrayList<>(values.size());
+			final List<RLangElement<?>> list= new ArrayList<>(values.size());
 			list.addAll(values);
 			return list;
 		}
@@ -101,13 +104,13 @@
 	}
 	
 	@Override
-	public boolean hasModelChildren(final Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super RLangElement<?>> filter) {
 		this.lock.lock();
 		try {
 			if (this.modelElements.isEmpty()) {
 				return false;
 			}
-			for (final IRElement element : this.modelElements.values()) {
+			for (final RUnitElement element : this.modelElements.values()) {
 				if (element.hasModelChildren(filter)) {
 					return true;
 				}
@@ -120,18 +123,18 @@
 	}
 	
 	@Override
-	public List<? extends IRLangElement> getModelChildren(final Filter filter) {
+	public List<? extends RLangElement<?>> getModelChildren(final @Nullable LtkModelElementFilter<? super RLangElement<?>> filter) {
 		this.lock.lock();
 		try {
 			if (this.modelElements.isEmpty()) {
-				return Collections.EMPTY_LIST;
+				return ImCollections.emptyList();
 			}
-			final ArrayList<IRLangElement> children= new ArrayList<>();
-			for (final IRLangElement element : this.modelElements.values()) {
-				final List<? extends IRLangElement> elementChildren= element.getModelChildren(null);
+			final ArrayList<RLangElement<?>> children= new ArrayList<>();
+			for (final RLangElement<?> element : this.modelElements.values()) {
+				final List<? extends RLangElement<?>> elementChildren= element.getModelChildren(null);
 				if (!elementChildren.isEmpty()) {
 					children.ensureCapacity(children.size() + elementChildren.size());
-					for (final IRLangElement child : elementChildren) {
+					for (final RLangElement<?> child : elementChildren) {
 						if (filter == null || filter.include(child)) {
 							children.add(child);
 						}
@@ -146,7 +149,7 @@
 	}
 	
 	@Override
-	public List<? extends IRFrame> getPotentialParents() {
+	public List<? extends RFrame<?>> getPotentialParents() {
 		return Collections.EMPTY_LIST;
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/ExportedRClass.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/ExportedRClass.java
index 2a9b95d..faa4cab 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/ExportedRClass.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/ExportedRClass.java
@@ -17,11 +17,14 @@
 import java.io.Serializable;
 import java.util.List;
 
-import org.eclipse.statet.r.core.model.IRClass;
-import org.eclipse.statet.r.core.model.IRLangElement;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.r.core.model.RLangClass;
+import org.eclipse.statet.r.core.model.RLangElement;
 
 
-public class ExportedRClass extends ExportedRElement implements IRClass, Serializable {
+@NonNullByDefault
+public class ExportedRClass extends ExportedRElement implements RLangClass<RLangElement<?>>, Serializable {
 	
 	
 	private static final long serialVersionUID= -7356541747661973279L;
@@ -30,7 +33,7 @@
 	private List<String> superClassNames;
 	
 	
-	public ExportedRClass(final IRLangElement parent, final IRClass sourceElement) {
+	public ExportedRClass(final RLangElement<?> parent, final RLangClass<?> sourceElement) {
 		super(parent, sourceElement);
 		this.superClassNames= sourceElement.getExtendedClassNames();
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/ExportedRElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/ExportedRElement.java
index 4099e70..b735dd5 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/ExportedRElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/ExportedRElement.java
@@ -15,58 +15,29 @@
 package org.eclipse.statet.internal.r.core.builder;
 
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
+import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.text.core.BasicTextRegion;
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRLangElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RLangElement;
 import org.eclipse.statet.r.core.model.RModel;
 
 
-public class ExportedRElement implements IRLangElement, Serializable {
+@NonNullByDefault
+public class ExportedRElement implements RLangElement<RLangElement<?>>, Serializable {
 	
 	
 	private static final long serialVersionUID= -493469386405499748L;
 	
 	
-	static final List<? extends IRLangElement> getChildren(final List<? extends IRLangElement> children, final IModelElement.Filter filter) {
-		if (filter == null) {
-			return children;
-		}
-		else {
-			final ArrayList<IRLangElement> filtered= new ArrayList<>(children.size());
-			for (final IRLangElement child : children) {
-				if (filter.include(child)) {
-					filtered.add(child);
-				}
-			}
-			return filtered;
-		}
-	}
-	
-	static final boolean hasChildren(final List<? extends IRLangElement> children, final IModelElement.Filter filter) {
-		if (filter == null) {
-			return (!children.isEmpty());
-		}
-		else {
-			for (final IRElement child : children) {
-				if (filter.include(child)) {
-					return true;
-				}
-			}
-			return false;
-		}
-	}
-	
-	
-	private IRLangElement parent;
+	private RLangElement<?> parent;
 	private int elementType;
 	private RElementName elementName;
 	private String elementId;
@@ -77,7 +48,7 @@
 	private int nameLength;
 	
 	
-	public ExportedRElement(final IRLangElement parent, final IRLangElement sourceElement) {
+	public ExportedRElement(final RLangElement<?> parent, final RLangElement<?> sourceElement) {
 		this.parent= parent;
 		this.elementType= sourceElement.getElementType();
 		this.elementName= RElementName.cloneName(sourceElement.getElementName(), false);
@@ -140,28 +111,28 @@
 	
 	
 	@Override
-	public IRElement getModelParent() {
+	public RLangElement<?> getModelParent() {
 		return this.parent;
 	}
 	
 	@Override
-	public boolean hasModelChildren(final Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super RLangElement<?>> filter) {
 		return false;
 	}
 	
 	@Override
-	public List<? extends IRLangElement> getModelChildren(final Filter filter) {
-		return Collections.EMPTY_LIST;
+	public List<? extends RLangElement<?>> getModelChildren(final @Nullable LtkModelElementFilter<? super RLangElement<?>> filter) {
+		return ImCollections.emptyList();
 	}
 	
 	
 	@Override
-	public ISourceUnit getSourceUnit() {
+	public SourceUnit getSourceUnit() {
 		return this.parent.getSourceUnit();
 	}
 	
 	@Override
-	public TextRegion getSourceRange() {
+	public @Nullable TextRegion getSourceRange() {
 		if (this.sourceOffset >= 0) {
 			return new BasicTextRegion(this.sourceOffset, this.sourceOffset + this.sourceLength);
 		}
@@ -169,7 +140,7 @@
 	}
 	
 	@Override
-	public TextRegion getNameSourceRange() {
+	public @Nullable TextRegion getNameSourceRange() {
 		if (this.nameOffset >= 0) {
 			return new BasicTextRegion(this.nameOffset, this.nameOffset + this.nameLength);
 		}
@@ -177,13 +148,13 @@
 	}
 	
 	@Override
-	public TextRegion getDocumentationRange() {
+	public @Nullable TextRegion getDocumentationRange() {
 		return null;
 	}
 	
 	
 	@Override
-	public <T> T getAdapter(final Class<T> adapterType) {
+	public <T> @Nullable T getAdapter(final Class<T> adapterType) {
 		return null;
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/ExportedRMethod.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/ExportedRMethod.java
index a993e62..093ab3a 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/ExportedRMethod.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/ExportedRMethod.java
@@ -16,21 +16,25 @@
 
 import java.io.Serializable;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.r.core.model.ArgsDefinition;
-import org.eclipse.statet.r.core.model.IRLangElement;
-import org.eclipse.statet.r.core.model.IRMethod;
+import org.eclipse.statet.r.core.model.RLangElement;
+import org.eclipse.statet.r.core.model.RLangMethod;
 
 
-public class ExportedRMethod extends ExportedRElement implements IRMethod, Serializable {
+@NonNullByDefault
+public class ExportedRMethod extends ExportedRElement implements RLangMethod<RLangElement<?>>, Serializable {
 	
 	
 	private static final long serialVersionUID= -5410258006288951401L;
 	
 	
-	private ArgsDefinition args;
+	private @Nullable ArgsDefinition args;
 	
 	
-	public ExportedRMethod(final IRLangElement parent, final IRMethod sourceElement) {
+	public ExportedRMethod(final RLangElement<?> parent, final RLangMethod<?> sourceElement) {
 		super(parent, sourceElement);
 		this.args= sourceElement.getArgsDefinition();
 	}
@@ -40,7 +44,7 @@
 	
 	
 	@Override
-	public ArgsDefinition getArgsDefinition() {
+	public @Nullable ArgsDefinition getArgsDefinition() {
 		return this.args;
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RBuildReconciler.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RBuildReconciler.java
index 0c64167..7074b81 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RBuildReconciler.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RBuildReconciler.java
@@ -26,14 +26,14 @@
 
 import org.eclipse.statet.jcommons.text.core.TextLineInformation;
 
-import org.eclipse.statet.internal.r.core.sourcemodel.RModelManager;
+import org.eclipse.statet.internal.r.core.sourcemodel.RModelManagerImpl;
 import org.eclipse.statet.internal.r.core.sourcemodel.RReconciler;
 import org.eclipse.statet.r.core.RCore;
 import org.eclipse.statet.r.core.RProject;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.r.core.model.RSuModelContainer;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
+import org.eclipse.statet.r.core.model.build.RSourceUnitModelContainer;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.core.rsource.ast.SourceComponent;
 
@@ -46,7 +46,7 @@
 	private MultiStatus statusCollector;
 	
 	
-	public RBuildReconciler(final RModelManager manager) {
+	public RBuildReconciler(final RModelManagerImpl manager) {
 		super(manager);
 		
 		this.taskScanner= new RTaskMarkerHandler();
@@ -61,8 +61,8 @@
 	/** for file build 
 	 * @throws CoreException
 	 **/
-	public IRModelInfo build(final RSuModelContainer adapter, final IProgressMonitor monitor) {
-		final IRSourceUnit su= adapter.getSourceUnit();
+	public RSourceUnitModelInfo build(final RSourceUnitModelContainer adapter, final IProgressMonitor monitor) {
+		final RSourceUnit su= adapter.getSourceUnit();
 		final int type= (su.getModelTypeId().equals(RModel.R_TYPE_ID) ? su.getElementType() : 0);
 		if (type == 0) {
 			return null;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RBuilder.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RBuilder.java
index a935640..9b81595 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RBuilder.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RBuilder.java
@@ -46,18 +46,19 @@
 import org.eclipse.statet.internal.r.core.Messages;
 import org.eclipse.statet.internal.r.core.RCorePlugin;
 import org.eclipse.statet.internal.r.core.RProjectNature;
-import org.eclipse.statet.internal.r.core.sourcemodel.RModelManager;
-import org.eclipse.statet.ltk.buildpaths.core.BuildpathsUtils;
-import org.eclipse.statet.ltk.buildpaths.core.IBuildpathElement;
-import org.eclipse.statet.ltk.core.LTK;
-import org.eclipse.statet.ltk.model.core.ISourceUnitManager;
+import org.eclipse.statet.internal.r.core.sourcemodel.RModelManagerImpl;
+import org.eclipse.statet.ltk.buildpath.core.BuildpathElement;
+import org.eclipse.statet.ltk.buildpath.core.BuildpathUtils;
+import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.model.core.LtkModels;
+import org.eclipse.statet.ltk.model.core.SourceUnitManager;
 import org.eclipse.statet.r.core.RBuildpaths;
 import org.eclipse.statet.r.core.RCore;
 import org.eclipse.statet.r.core.RProject;
 import org.eclipse.statet.r.core.RProjects;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 
 
 public class RBuilder implements IResourceDeltaVisitor, IResourceVisitor {
@@ -79,19 +80,19 @@
 	}
 	
 	
-	private final ISourceUnitManager suManager= LTK.getSourceUnitManager();
+	private final SourceUnitManager suManager= LtkModels.getSourceUnitManager();
 	
 	private final List<IFile> toRemoveRSU= new ArrayList<>();
-	private final ArrayList<IRWorkspaceSourceUnit> toUpdateRSU= new ArrayList<>();
+	private final ArrayList<RWorkspaceSourceUnit> toUpdateRSU= new ArrayList<>();
 	
-	private final RModelManager modelManager;
+	private final RModelManagerImpl modelManager;
 	
 	private MultiStatus statusCollector;
 	
 	private IProject project;
 	private IPath pkgRootPath;
-	private ImList<IBuildpathElement> sourceContainters;
-	private IBuildpathElement currentSourceContainer;
+	private ImList<BuildpathElement> sourceContainters;
+	private BuildpathElement currentSourceContainer;
 	
 	
 	public RBuilder() {
@@ -107,7 +108,7 @@
 	
 	private boolean isValidSourceFolder(final IResource resource) {
 		if (this.currentSourceContainer != null) {
-			if (!BuildpathsUtils.isExcluded(resource, this.currentSourceContainer)) {
+			if (!BuildpathUtils.isExcluded(resource, this.currentSourceContainer)) {
 				return true;
 			}
 		}
@@ -128,7 +129,7 @@
 			}
 			m.worked(1);
 			
-			for (final IBuildpathElement sourceContainer : this.sourceContainters) {
+			for (final BuildpathElement sourceContainer : this.sourceContainters) {
 				final IResourceDelta sourceDelta= delta.findMember(
 						sourceContainer.getPath().removeFirstSegments(1) );
 				if (sourceDelta != null) {
@@ -153,7 +154,7 @@
 		finally {
 			this.currentSourceContainer= null;
 			
-			for (final IRSourceUnit su : this.toUpdateRSU) {
+			for (final RSourceUnit su : this.toUpdateRSU) {
 				if (su != null) {
 					su.disconnect(m);
 				}
@@ -248,8 +249,8 @@
 					}
 					if (RCore.R_CONTENT_ID.equals(contentType.getId())) {
 						clearMarkers(resource, IResource.DEPTH_ZERO);
-						final IRWorkspaceSourceUnit su= (IRWorkspaceSourceUnit) this.suManager.getSourceUnit(
-								LTK.PERSISTENCE_CONTEXT, file, contentType, true, null );
+						final RWorkspaceSourceUnit su= (RWorkspaceSourceUnit) this.suManager.getSourceUnit(
+								Ltk.PERSISTENCE_CONTEXT, file, contentType, true, null );
 						if (su != null) {
 							this.toUpdateRSU.add(su);
 						}
@@ -301,7 +302,7 @@
 			}
 			m.worked(1);
 			
-			for (final IBuildpathElement sourceContainer : this.sourceContainters) {
+			for (final BuildpathElement sourceContainer : this.sourceContainters) {
 				final IResource resource= this.project.findMember(
 						sourceContainer.getPath().removeFirstSegments(1) );
 				if (resource != null) {
@@ -326,7 +327,7 @@
 		finally {
 			this.currentSourceContainer= null;
 			
-			for (final IRSourceUnit su : this.toUpdateRSU) {
+			for (final RSourceUnit su : this.toUpdateRSU) {
 				if (su != null) {
 					su.disconnect(m);
 				}
@@ -374,8 +375,8 @@
 				}
 				if (RCore.R_CONTENT_ID.equals(contentType.getId())) {
 					clearMarkers(resource, IResource.DEPTH_INFINITE);
-					final IRWorkspaceSourceUnit su= (IRWorkspaceSourceUnit) this.suManager.getSourceUnit(
-							LTK.PERSISTENCE_CONTEXT, file, contentType, true, null );
+					final RWorkspaceSourceUnit su= (RWorkspaceSourceUnit) this.suManager.getSourceUnit(
+							Ltk.PERSISTENCE_CONTEXT, file, contentType, true, null );
 					if (su != null) {
 						this.toUpdateRSU.add(su);
 					}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RTaskMarkerHandler.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RTaskMarkerHandler.java
index 57e9052..b301004 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RTaskMarkerHandler.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RTaskMarkerHandler.java
@@ -17,7 +17,7 @@
 import java.util.List;
 
 import org.eclipse.statet.base.core.preferences.TaskTagsPreferences;
-import org.eclipse.statet.ltk.issues.core.ITaskTag;
+import org.eclipse.statet.ltk.issues.core.TaskTag;
 import org.eclipse.statet.ltk.issues.core.impl.TaskMarkerHandler;
 import org.eclipse.statet.r.core.RProject;
 
@@ -35,7 +35,7 @@
 	
 	public void init(final RProject project) {
 		final TaskTagsPreferences taskPrefs= new TaskTagsPreferences(project.getPrefs());
-		final List<ITaskTag> taskTags= taskPrefs.getTaskTags();
+		final List<TaskTag> taskTags= taskPrefs.getTaskTags();
 		initTaskPattern(taskTags);
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RUnitElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RUnitElement.java
index 759d4a1..5bc8011 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RUnitElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/builder/RUnitElement.java
@@ -23,26 +23,30 @@
 import java.util.Collections;
 import java.util.List;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
 import org.eclipse.statet.ltk.core.ElementName;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRLangElement;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.ltk.model.core.LtkModelUtils;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangElement;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 
 
-public class RUnitElement implements IRLangElement, Serializable {
+@NonNullByDefault
+public class RUnitElement implements RLangElement<RLangElement<?>>, Serializable {
 	
 	
 	private static final long serialVersionUID= 2909953007129363256L;
 	
 	
-	public static RUnitElement read(final IRSourceUnit su, final CompositeFrame envir, final InputStream input) throws IOException, ClassNotFoundException {
+	public static RUnitElement read(final RSourceUnit su, final CompositeFrame envir, final InputStream input) throws IOException, ClassNotFoundException {
 		final ObjectInputStream o= new ObjectInputStream(input);
 		final RUnitElement element= (RUnitElement) o.readObject();
 		element.sourceUnit= su;
@@ -51,12 +55,12 @@
 	}
 	
 	
-	private transient ISourceUnit sourceUnit;
+	private transient SourceUnit sourceUnit;
 	transient CompositeFrame envir;
-	private List<IRLangElement> elements;
+	private List<RLangElement<?>> elements;
 	
 	
-	public RUnitElement(final IRSourceUnit su, final List<IRLangElement> children) {
+	public RUnitElement(final RSourceUnit su, final List<RLangElement> children) {
 		this.sourceUnit= su;
 		this.elements= Collections.unmodifiableList(children);
 	}
@@ -73,14 +77,14 @@
 	
 	@Override
 	public int getElementType() {
-		return IModelElement.C2_SOURCE_FILE;
+		return LtkModelElement.C2_SOURCE_FILE;
 	}
 	
 	@Override
 	public RElementName getElementName() {
 		final ElementName elementName= this.sourceUnit.getElementName();
 		if (elementName instanceof RElementName) {
-			return (RElementName) elementName;
+			return (RElementName)elementName;
 		}
 		return RElementName.create(RElementName.RESOURCE, elementName.getSegmentName());
 	}
@@ -101,29 +105,29 @@
 	}
 	
 	@Override
-	public ISourceUnit getSourceUnit() {
+	public SourceUnit getSourceUnit() {
 		return this.sourceUnit;
 	}
 	
 	@Override
-	public IRElement getModelParent() {
+	public @Nullable RLangElement<?> getModelParent() {
 		return null;
 	}
 	
 	@Override
-	public boolean hasModelChildren(final Filter filter) {
-		return ExportedRElement.hasChildren(this.elements, filter);
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super RLangElement<?>> filter) {
+		return LtkModelUtils.<RLangElement<?>>hasChildren(this.elements, filter);
 	}
 	
 	@Override
-	public List<? extends IRLangElement> getModelChildren(final Filter filter) {
-		return ExportedRElement.getChildren(this.elements, filter);
+	public List<? extends RLangElement<?>> getModelChildren(final @Nullable LtkModelElementFilter<? super RLangElement<?>> filter) {
+		return LtkModelUtils.<RLangElement<?>>getChildren(this.elements, filter);
 	}
 	
 	@Override
 	@SuppressWarnings("unchecked")
-	public <T> T getAdapter(final Class<T> adapterType) {
-		if (adapterType == IRFrame.class) {
+	public <T> @Nullable T getAdapter(final Class<T> adapterType) {
+		if (adapterType == RFrame.class) {
 			return (T) this.envir;
 		}
 		return null;
@@ -138,17 +142,17 @@
 	
 	
 	@Override
-	public TextRegion getSourceRange() {
+	public @Nullable TextRegion getSourceRange() {
 		return null;
 	}
 	
 	@Override
-	public TextRegion getNameSourceRange() {
+	public @Nullable TextRegion getNameSourceRange() {
 		return null;
 	}
 	
 	@Override
-	public TextRegion getDocumentationRange() {
+	public @Nullable TextRegion getDocumentationRange() {
 		return null;
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/AnonymousAccess.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/AnonymousAccess.java
index 51bd758..5f6045b 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/AnonymousAccess.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/AnonymousAccess.java
@@ -16,21 +16,25 @@
 
 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.jcommons.lang.Nullable;
 
-import org.eclipse.statet.r.core.model.IRFrame;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 
 
+@NonNullByDefault
 public final class AnonymousAccess extends RElementAccess {
 	
 	
 	private final RAstNode node;
-	private final IRFrame frame;
+	private final RFrame<RLangSourceElement> frame;
 	
 	
-	public AnonymousAccess(final RAstNode node, final IRFrame frame) {
+	public AnonymousAccess(final RAstNode node, final RFrame<RLangSourceElement> frame) {
 		this.node= node;
 		this.frame= frame;
 	}
@@ -43,7 +47,7 @@
 	
 	
 	@Override
-	public IRFrame getFrame() {
+	public RFrame<RLangSourceElement> getFrame() {
 		return this.frame;
 	}
 	
@@ -73,23 +77,23 @@
 	}
 	
 	@Override
-	public RAstNode getNameNode() {
+	public @Nullable RAstNode getNameNode() {
 		return null;
 	}
 	
 	
 	@Override
-	public RElementName getScope() {
+	public @Nullable RElementName getScope() {
 		return null;
 	}
 	
 	@Override
-	public String getSegmentName() {
+	public @Nullable String getSegmentName() {
 		return null;
 	}
 	
 	@Override
-	public RElementAccess getNextSegment() {
+	public @Nullable RElementAccess getNextSegment() {
 		return null;
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/PackageReferences.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/BasicPackageReferences.java
similarity index 85%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/PackageReferences.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/BasicPackageReferences.java
index d512ff1..2dda44e 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/PackageReferences.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/BasicPackageReferences.java
@@ -22,18 +22,22 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.internal.r.core.sourcemodel.BuildSourceFrame.ElementAccessList;
-import org.eclipse.statet.r.core.model.IPackageReferences;
+import org.eclipse.statet.r.core.model.PackageReferences;
 import org.eclipse.statet.r.core.model.RElementAccess;
 
 
-public class PackageReferences implements IPackageReferences {
+@NonNullByDefault
+public class BasicPackageReferences implements PackageReferences {
 	
 	
 	protected final Map<String, ElementAccessList> data;
 	
 	
-	public PackageReferences() {
+	public BasicPackageReferences() {
 		this.data= new HashMap<>();
 	}
 	
@@ -53,7 +57,7 @@
 	}
 	
 	@Override
-	public List<? extends RElementAccess> getAllAccessOfPackage(final String name) {
+	public @Nullable List<? extends RElementAccess> getAllAccessOfPackage(final String name) {
 		final ElementAccessList list= this.data.get(name);
 		if (list == null) {
 			return null;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/BuildSourceFrame.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/BuildSourceFrame.java
index 223547b..a988aba 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/BuildSourceFrame.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/BuildSourceFrame.java
@@ -25,17 +25,21 @@
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRFrameInSource;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
+import org.eclipse.statet.ltk.model.core.LtkModelUtils;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
+import org.eclipse.statet.r.core.model.RSourceFrame;
 
 
-abstract class BuildSourceFrame implements IRFrameInSource {
+@NonNullByDefault
+abstract class BuildSourceFrame implements RSourceFrame {
 	
 	
 	static final int CREATED_NO= 0;
@@ -48,8 +52,8 @@
 	private static final ImList<BuildSourceFrame> NO_PARENTS= ImCollections.emptyList();
 	
 	
-	public static String createId(final int type, final String name, final int alt) {
-		if (type == IRFrame.PACKAGE && name != null) {
+	public static String createId(final int type, final @Nullable String name, final int alt) {
+		if (type == RFrame.PACKAGE && name != null) {
 			return "package:" + name; //$NON-NLS-1$
 		}
 		return (name != null) ? 
@@ -59,20 +63,20 @@
 	
 	static final class ElementAccessList {
 		
-		private final String name;
+		private final @Nullable String name;
 		final List<ElementAccess> entries;
-		IRFrame frame;
+		RFrame frame;
 		int isCreated;
 		
 		
-		public ElementAccessList(final String name) {
+		public ElementAccessList(final @Nullable String name) {
 			this.name= name;
 			this.entries= new ArrayList<>(4);
 			this.isCreated= CREATED_NO;
 		}
 		
 		
-		public String getName() {
+		public @Nullable String getName() {
 			return this.name;
 		}
 		
@@ -91,7 +95,7 @@
 					}
 				}
 				if (counter > 0) {
-					final ElementAccess[] elements= new ElementAccess[this.entries.size() - counter];
+					final ElementAccess[] elements= new @NonNull ElementAccess[this.entries.size() - counter];
 					counter= 0;
 					for (final ElementAccess element : this.entries) {
 						if (element.isMaster()) {
@@ -102,7 +106,7 @@
 					return ImCollections.newList(elements);
 				}
 			}
-			{	final ElementAccess[] elements= this.entries.toArray(new ElementAccess[this.entries.size()]);
+			{	final ElementAccess[] elements= this.entries.toArray(new @NonNull ElementAccess[this.entries.size()]);
 				Arrays.sort(elements, RElementAccess.NAME_POSITION_COMPARATOR);
 				return ImCollections.newList(elements);
 			}
@@ -111,7 +115,8 @@
 		
 		@Override
 		public String toString() {
-			final StringBuilder sb= new StringBuilder(this.name);
+			final StringBuilder sb= new StringBuilder();
+			sb.append((this.name != null) ? this.name : "<null>");
 			sb.append(" (").append(this.entries.size()).append(')'); //$NON-NLS-1$
 			
 			return sb.toString();
@@ -128,23 +133,23 @@
 		
 		
 		@Override
-		public RElementName getElementName() {
+		public @Nullable RElementName getElementName() {
 			return null;
 		}
 		
 		
 		@Override
-		public void add(final String name, final ElementAccess access) {
+		public void add(final @Nullable String name, final ElementAccess access) {
 			this.parents.get(0).add(name, access);
 		}
 		
 		@Override
-		public void addLateResolve(final String name, final ElementAccess access) {
+		public void addLateResolve(final @Nullable String name, final ElementAccess access) {
 			this.parents.get(0).addLateResolve(name, access);
 		}
 		
 		@Override
-		public void addRunResolve(final String name, final ElementAccess access) {
+		public void addRunResolve(final @Nullable String name, final ElementAccess access) {
 			ElementAccessList detail= this.data.get(name);
 			if (detail == null) {
 				detail= new ElementAccessList(name);
@@ -164,7 +169,7 @@
 		}
 		
 		@Override
-		void addClass(final String name, final ElementAccess access) {
+		void addClass(final @Nullable String name, final ElementAccess access) {
 			this.parents.get(0).addClass(name, access);
 		}
 		
@@ -179,12 +184,13 @@
 		private Map<String, ElementAccessList> lateWrite;
 		private Map<String, ElementAccessList> lateRead;
 		
-		private Map<String, ElementAccessList> classes;
+		private @Nullable Map<@Nullable String, ElementAccessList> classes;
 		
-		private RElementName elementName;
+		private @Nullable RElementName elementName;
 		
 		
-		DefScope(final int type, final String id, final String name, final BuildSourceFrame[] parents) {
+		DefScope(final int type, final String id, final @Nullable String name,
+				final BuildSourceFrame @Nullable [] parents) {
 			super(type, id, parents);
 			this.lateWrite= new HashMap<>();
 			this.lateRead= new HashMap<>();
@@ -205,13 +211,13 @@
 		
 		
 		@Override
-		public RElementName getElementName() {
+		public @Nullable RElementName getElementName() {
 			return this.elementName;
 		}
 		
 		
 		@Override
-		void add(final String name, final ElementAccess access) {
+		void add(final @Nullable String name, final ElementAccess access) {
 			ElementAccessList detail= this.data.get(name);
 			if (detail == null) {
 				detail= new ElementAccessList(name);
@@ -231,7 +237,7 @@
 		}
 		
 		@Override
-		void addLateResolve(final String name, final ElementAccess access) {
+		void addLateResolve(final @Nullable String name, final ElementAccess access) {
 			if (name == null) {
 				add(null, access);
 				return;
@@ -257,16 +263,17 @@
 		}
 		
 		@Override
-		void addClass(final String name, final ElementAccess access) {
-			if (this.classes == null) {
+		void addClass(final @Nullable String name, final ElementAccess access) {
+			final Map<@Nullable String, ElementAccessList> classes= this.classes;
+			if (classes == null) {
 				this.parents.get(0).addClass(name, access);
 				return;
 			}
-			ElementAccessList detail= this.classes.get(name);
+			ElementAccessList detail= classes.get(name);
 			if (detail == null) {
 				detail= new ElementAccessList(name);
 				detail.frame= this;
-				this.classes.put(name, detail);
+				classes.put(name, detail);
 			}
 			detail.entries.add(access);
 			access.shared= detail;
@@ -275,7 +282,7 @@
 		}
 		
 		@Override
-		void addRunResolve(final String name, final ElementAccess access) {
+		void addRunResolve(final @Nullable String name, final ElementAccess access) {
 		}
 		
 		@Override
@@ -284,7 +291,7 @@
 			
 			Map<String, ElementAccessList> map= this.lateWrite;
 			if (map != null) {
-				final IRFrame defaultScope= this;
+				final BuildSourceFrame defaultScope= this;
 				ITER_NAMES : for (final ElementAccessList detail : map.values()) {
 					for (int requiredCreation= CREATED_SEARCH; requiredCreation >= 0; requiredCreation--) {
 						for (int i= 0; i < searchList.length; i++) {
@@ -314,7 +321,7 @@
 			if (map != null) {
 				BuildSourceFrame defaultScope= this;
 				for (int i= 0; i < searchList.length; i++) {
-					if (searchList[i].type <= IRFrame.PACKAGE) { // package or project
+					if (searchList[i].type <= RFrame.PACKAGE) { // package or project
 						defaultScope= searchList[i];
 						break;
 					}
@@ -343,15 +350,15 @@
 	}
 	
 	
-	protected final Map<String, ElementAccessList> data;
+	protected final Map<@Nullable String, ElementAccessList> data;
 	protected final int type;
 	protected final String id;
 	ImList<BuildSourceFrame> parents;
-	private List<IBuildSourceFrameElement> elements= Collections.emptyList();
-	private WeakReference<List<IRLangSourceElement>> modelChildren;
+	private List<BuildSourceFrameElement> elements= Collections.emptyList();
+	private @Nullable WeakReference<List<RLangSourceElement>> modelChildren;
 	
 	
-	BuildSourceFrame(final int type, final String id, final BuildSourceFrame[] parents) {
+	BuildSourceFrame(final int type, final String id, final BuildSourceFrame @Nullable [] parents) {
 		this.type= type;
 		this.id= id;
 		if (parents != null) {
@@ -364,17 +371,17 @@
 	}
 	
 	
-	void addFrameElement(final IBuildSourceFrameElement element) {
+	void addFrameElement(final BuildSourceFrameElement element) {
 		final int length= this.elements.size();
-		final IBuildSourceFrameElement[] elements= this.elements.toArray(new IBuildSourceFrameElement[length + 1]);
+		final BuildSourceFrameElement[] elements= this.elements.toArray(new @NonNull BuildSourceFrameElement[length + 1]);
 		elements[length]= element;
 		this.elements= ImCollections.newList(elements);
 	}
 	
-	abstract void add(final String name, final ElementAccess access);
-	abstract void addLateResolve(final String name, final ElementAccess access);
-	abstract void addRunResolve(final String name, final ElementAccess access);
-	abstract void addClass(final String name, final ElementAccess access);
+	abstract void add(final @Nullable String name, final ElementAccess access);
+	abstract void addLateResolve(final @Nullable String name, final ElementAccess access);
+	abstract void addRunResolve(final @Nullable String name, final ElementAccess access);
+	abstract void addClass(final @Nullable String name, final ElementAccess access);
 	
 	abstract void runLateResolve(final boolean onlyWrite);
 	
@@ -391,7 +398,7 @@
 				}
 			}
 		}
-		return list.toArray(new BuildSourceFrame[list.size()]);
+		return list.toArray(new @NonNull BuildSourceFrame[list.size()]);
 	}
 	
 	@Override
@@ -405,18 +412,18 @@
 	}
 	
 	@Override
-	public List<? extends IRFrame> getPotentialParents() {
+	public List<? extends RSourceFrame> getPotentialParents() {
 		return this.parents;
 	}
 	
 	
 	@Override
-	public Set<String> getAllAccessNames() {
+	public Set<@Nullable String> getAllAccessNames() {
 		return Collections.unmodifiableSet(this.data.keySet());
 	}
 	
 	@Override
-	public ImList<? extends RElementAccess> getAllAccessOf(final String name, final boolean includeSlaves) {
+	public ImList<? extends RElementAccess> getAllAccessOf(final @Nullable String name, final boolean includeSlaves) {
 		final ElementAccessList list= this.data.get(name);
 		if (list == null) {
 			return ImCollections.emptyList();
@@ -432,16 +439,17 @@
 	
 	
 	@Override
-	public List<? extends IRElement> getModelElements() {
+	public List<? extends RLangSourceElement> getModelElements() {
 		return this.elements;
 	}
 	
 	@Override
-	public boolean hasModelChildren(final IModelElement.Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
 		for (final ElementAccessList list : this.data.values()) {
 			for (final ElementAccess access : list.entries) {
-				if (access.modelElement != null 
-						&& (filter == null || filter.include(access.modelElement)) ) {
+				final RLangSourceElement element= access.modelElement;
+				if (element != null 
+						&& (filter == null || filter.include(element)) ) {
 					return true;
 				}
 			}
@@ -450,26 +458,28 @@
 	}
 	
 	@Override
-	public List<? extends IRLangSourceElement> getModelChildren(final IModelElement.Filter filter) {
+	public List<? extends RLangSourceElement> getModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
 		if (this.data.isEmpty()) {
-			return RSourceElements.NO_R_SOURCE_CHILDREN;
+			return RSourceModel.NO_R_SOURCE_CHILDREN;
 		}
-		List<IRLangSourceElement> children= (this.modelChildren != null) ? this.modelChildren.get() : null;
+		final WeakReference<List<RLangSourceElement>> childrenRef= this.modelChildren;
+		List<RLangSourceElement> children= (childrenRef != null) ? childrenRef.get() : null;
 		if (children != null) {
 			if (filter == null) {
 				return children;
 			}
 			else {
-				return RSourceElements.getChildren(children, filter);
+				return LtkModelUtils.<RLangSourceElement>getChildren(children, filter);
 			}
 		}
 		else {
 			children= new ArrayList<>();
 			for (final ElementAccessList list : this.data.values()) {
 				for (final ElementAccess access : list.entries) {
-					if (access.modelElement != null 
-							&& (filter == null || filter.include(access.modelElement)) ) {
-						children.add(access.modelElement);
+					final RLangSourceElement element= access.modelElement;
+					if (element != null 
+							&& (filter == null || filter.include(element)) ) {
+						children.add(element);
 					}
 				}
 			}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/IBuildSourceFrameElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/BuildSourceFrameElement.java
similarity index 70%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/IBuildSourceFrameElement.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/BuildSourceFrameElement.java
index 30cafdb..1f209c7 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/IBuildSourceFrameElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/BuildSourceFrameElement.java
@@ -16,14 +16,17 @@
 
 import java.util.List;
 
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.r.core.model.RLangSourceElement;
 
 
-public interface IBuildSourceFrameElement extends IRLangSourceElement {
+@NonNullByDefault
+public interface BuildSourceFrameElement extends RLangSourceElement {
 	
 	
-	public BuildSourceFrame getBuildFrame();
+	BuildSourceFrame getBuildFrame();
 	
-	public void setSourceChildren(final List<? extends IRLangSourceElement> children);
+	void setSourceChildren(final List<? extends RLangSourceElement> children);
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/CompositeSourceElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/CompositeSourceElement.java
index 9407914..24bdae4 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/CompositeSourceElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/CompositeSourceElement.java
@@ -19,26 +19,31 @@
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
-import org.eclipse.statet.r.core.model.IRCompositeSourceElement;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.r.core.model.RCompositeSourceElement;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 
 
+@NonNullByDefault
 public class CompositeSourceElement extends RSourceFileElement
-		implements IRCompositeSourceElement {
+		implements RCompositeSourceElement {
 	
 	
-	private final ImList<? extends RChunkBuildElement> compositeElements;
+	private final ImList<? extends EmbeddedRBuildElement> compositeElements;
 	
 	private final TextRegion sourceRange;
 	
-	private volatile List<IRLangSourceElement> allSourceChildren;
+	private volatile @Nullable List<RLangSourceElement> allSourceChildren;
 	
 	
-	public CompositeSourceElement(final IRSourceUnit su, final BuildSourceFrame envir,
-			final List<? extends RChunkBuildElement> elements, final TextRegion sourceRange) {
+	public CompositeSourceElement(final RSourceUnit su, final BuildSourceFrame envir,
+			final List<? extends EmbeddedRBuildElement> elements, final TextRegion sourceRange) {
 		super(su, envir);
 		
 		this.compositeElements= ImCollections.toList(elements);
@@ -48,11 +53,11 @@
 	
 //	@Override
 //	public int getElementType() {
-//		return IRElement.C2_SOURCE_FILE | 0x1;
+//		return RElement.C2_SOURCE_FILE | 0x1;
 //	}
 	
 	@Override
-	public ImList<? extends IRLangSourceElement> getCompositeElements() {
+	public ImList<? extends RLangSourceElement> getCompositeElements() {
 		return this.compositeElements;
 	}
 	
@@ -63,8 +68,8 @@
 	}
 	
 	@Override
-	public boolean hasSourceChildren(final Filter filter) {
-		for (final RChunkBuildElement element : this.compositeElements) {
+	public boolean hasSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+		for (final EmbeddedRBuildElement element : this.compositeElements) {
 			if (element.hasSourceChildren(filter)) {
 				return true;
 			}
@@ -73,23 +78,24 @@
 	}
 	
 	@Override
-	public List<IRLangSourceElement> getSourceChildren(final Filter filter) {
+	public List<RLangSourceElement> getSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
 		if (filter == null) {
-			List<IRLangSourceElement> children= this.allSourceChildren;
+			List<RLangSourceElement> children= this.allSourceChildren;
 			if (children == null) {
-				final List<? extends IRLangSourceElement>[] compositeLists= new List[this.compositeElements.size()];
+				final List<? extends RLangSourceElement>[] compositeLists= new @NonNull List[this.compositeElements.size()];
 				for (int i= 0; i < compositeLists.length; i++) {
 					compositeLists[i]= this.compositeElements.get(i).getSourceChildren(null);
 				}
-				children= this.allSourceChildren= ImCollections.concatList(compositeLists);
+				children= ImCollections.concatList(compositeLists);
+				this.allSourceChildren= children;
 			}
 			return children;
 		}
 		else {
-			final List<IRLangSourceElement> children= new ArrayList<>();
-			for (final RChunkBuildElement element : this.compositeElements) {
-				final List<? extends IRLangSourceElement> list= element.getSourceChildren(null);
-				for (final IRLangSourceElement child : list) {
+			final List<RLangSourceElement> children= new ArrayList<>();
+			for (final EmbeddedRBuildElement element : this.compositeElements) {
+				final List<? extends RLangSourceElement> list= element.getSourceChildren(null);
+				for (final RLangSourceElement child : list) {
 					if (filter.include(child)) {
 						children.add(child);
 					}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/ElementAccess.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/ElementAccess.java
index 958cfbb..62647c8 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/ElementAccess.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/ElementAccess.java
@@ -15,14 +15,17 @@
 package org.eclipse.statet.internal.r.core.sourcemodel;
 
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 
 
+@NonNullByDefault
 public abstract class ElementAccess extends RElementAccess {
 	
 	
@@ -89,9 +92,9 @@
 	
 	public static abstract class Main extends ElementAccess {
 		
-		private RElementAccess expliciteScope;
+		private @Nullable RElementAccess expliciteScope;
 		
-		public Main(final RAstNode fullNode, final RAstNode nameNode) {
+		public Main(final RAstNode fullNode, final @Nullable RAstNode nameNode) {
 			super(fullNode, nameNode);
 		}
 		
@@ -100,12 +103,12 @@
 		}
 		
 		@Override
-		public RElementName getScope() {
+		public @Nullable RElementName getScope() {
 			if (this.expliciteScope != null) {
 				return this.expliciteScope;
 			}
 			if (this.shared.frame != null
-					&& (this.shared.frame.getFrameType() == IRFrame.PACKAGE || this.shared.isCreated >= BuildSourceFrame.CREATED_RESOLVED) ) {
+					&& (this.shared.frame.getFrameType() == RFrame.PACKAGE || this.shared.isCreated >= BuildSourceFrame.CREATED_RESOLVED) ) {
 				return this.shared.frame.getElementName();
 			}
 			return null;
@@ -163,20 +166,20 @@
 	
 	int flags;
 	RAstNode fullNode;
-	RAstNode nameNode;
+	@Nullable RAstNode nameNode;
 	BuildSourceFrame.ElementAccessList shared;
-	SubAbstractElementAccess nextSegment;
-	IRLangSourceElement modelElement;
+	@Nullable SubAbstractElementAccess nextSegment;
+	RLangSourceElement modelElement;
 	
 	
-	private ElementAccess(final RAstNode fullNode, final RAstNode nameNode) {
+	private ElementAccess(final RAstNode fullNode, final @Nullable RAstNode nameNode) {
 		this.fullNode= fullNode;
 		this.nameNode= nameNode;
 	}
 	
 	
 	@Override
-	public final String getSegmentName() {
+	public final @Nullable String getSegmentName() {
 		return this.shared.getName();
 	}
 	
@@ -186,12 +189,12 @@
 	}
 	
 	@Override
-	public final IRFrame getFrame() {
+	public final RFrame getFrame() {
 		return this.shared.frame;
 	}
 	
 	@Override
-	public RElementName getScope() {
+	public @Nullable RElementName getScope() {
 		return null;
 	}
 	
@@ -229,21 +232,21 @@
 	}
 	
 	@Override
-	public final RAstNode getNameNode() {
+	public final @Nullable RAstNode getNameNode() {
 		return this.nameNode;
 	}
 	
 	@Override
-	public final RElementAccess getNextSegment() {
+	public final @Nullable RElementAccess getNextSegment() {
 		return this.nextSegment;
 	}
 	
 	final void appendSubElement(final SubAbstractElementAccess newSub) {
-		if (this.nextSegment == null) {
+		SubAbstractElementAccess parent= this.nextSegment;
+		if (parent == null) {
 			this.nextSegment= newSub;
 			return;
 		}
-		SubAbstractElementAccess parent= this.nextSegment;
 		while (parent.nextSegment != null) {
 			parent= parent.nextSegment;
 		}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/EmbeddedRBuildElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/EmbeddedRBuildElement.java
new file mode 100644
index 0000000..9ec6072
--- /dev/null
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/EmbeddedRBuildElement.java
@@ -0,0 +1,174 @@
+/*=============================================================================#
+ # Copyright (c) 2009, 2020 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.r.core.sourcemodel;
+
+import static org.eclipse.statet.internal.r.core.sourcemodel.RSourceModel.NO_R_SOURCE_CHILDREN;
+
+import java.util.List;
+import java.util.Objects;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+import org.eclipse.statet.jcommons.text.core.TextRegion;
+
+import org.eclipse.statet.ltk.ast.core.AstNode;
+import org.eclipse.statet.ltk.model.core.LtkModelUtils;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
+import org.eclipse.statet.r.core.model.RElement;
+import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
+import org.eclipse.statet.r.core.model.RModel;
+
+
+@NonNullByDefault
+public abstract class EmbeddedRBuildElement implements BuildSourceFrameElement {
+	
+	
+	protected final SourceStructElement<?, ?> parent;
+	protected final AstNode node;
+	
+	private final RElementName name;
+	protected final @Nullable TextRegion nameRegion;
+	int occurrenceCount;
+	
+	BuildSourceFrame envir;
+	List<? extends RLangSourceElement> sourceChildrenProtected= NO_R_SOURCE_CHILDREN;
+	
+	
+	public EmbeddedRBuildElement(final SourceStructElement<?, ?> parent, final AstNode node,
+			final RElementName name, final @Nullable TextRegion nameRegion) {
+		this.parent= parent;
+		this.node= node;
+		
+		this.name= name;
+		this.nameRegion= nameRegion;
+	}
+	
+	
+	@Override
+	public void setSourceChildren(final List<? extends RLangSourceElement> children) {
+		this.sourceChildrenProtected= children;
+	}
+	
+	@Override
+	public BuildSourceFrame getBuildFrame() {
+		return this.envir;
+	}
+	
+	
+	@Override
+	public final String getModelTypeId() {
+		return RModel.R_TYPE_ID;
+	}
+	
+	@Override
+	public RElementName getElementName() {
+		return this.name;
+	}
+	
+	@Override
+	public final String getId() {
+		final String name= getElementName().getDisplayName();
+		final StringBuilder sb= new StringBuilder(name.length() + 10);
+		sb.append(Integer.toHexString(getElementType() & MASK_C2));
+		sb.append(':');
+		sb.append(name);
+		sb.append('#');
+		sb.append(this.occurrenceCount);
+		return sb.toString();
+	}
+	
+	
+	@Override
+	public @Nullable RElement<?> getModelParent() {
+		return null;
+	}
+	
+	@Override
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+		return false;
+	}
+	
+	@Override
+	public List<? extends RLangSourceElement> getModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+		return NO_R_SOURCE_CHILDREN;
+	}
+	
+	
+	@Override
+	public @Nullable SourceStructElement<?, ?> getSourceParent() {
+		return this.parent;
+	}
+	
+	@Override
+	public boolean hasSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+		return LtkModelUtils.<RLangSourceElement>hasChildren(this.sourceChildrenProtected, filter);
+	}
+	
+	@Override
+	public List<? extends RLangSourceElement> getSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+		return LtkModelUtils.<RLangSourceElement>getChildren(this.sourceChildrenProtected, filter);
+	}
+	
+	@Override
+	public TextRegion getSourceRange() {
+		return this.node;
+	}
+	
+	@Override
+	public @Nullable TextRegion getNameSourceRange() {
+		return this.nameRegion;
+	}
+	
+	@Override
+	public @Nullable TextRegion getDocumentationRange() {
+		return null;
+	}
+	
+	
+	@Override
+	@SuppressWarnings("unchecked")
+	public <T> @Nullable T getAdapter(final Class<T> adapterType) {
+		if (adapterType == RFrame.class) {
+			return (T)this.envir;
+		}
+		if (adapterType == AstNode.class) {
+			return (T)this.node;
+		}
+		return null;
+	}
+	
+	
+	@Override
+	public int hashCode() {
+		return RElement.C2_SOURCE_CHUNK * Objects.hashCode(this.name.getSegmentName()) + this.occurrenceCount;
+	}
+	
+	@Override
+	public boolean equals(final @Nullable Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj instanceof EmbeddedRBuildElement) {
+			final EmbeddedRBuildElement other= (EmbeddedRBuildElement)obj;
+			return (this.occurrenceCount == other.occurrenceCount
+					&& this.name.equals(other.name) );
+		}
+		return false;
+	}
+	
+}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/IRoxygenAnalyzeContext.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/IRoxygenAnalyzeContext.java
deleted file mode 100644
index 7d1d780..0000000
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/IRoxygenAnalyzeContext.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2009, 2020 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.r.core.sourcemodel;
-
-import org.eclipse.statet.internal.r.core.sourcemodel.RSourceElementByElementAccess.RClass;
-import org.eclipse.statet.internal.r.core.sourcemodel.RSourceElementByElementAccess.RMethod;
-import org.eclipse.statet.r.core.model.IRFrameInSource;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.rsource.ast.RAstNode;
-
-
-public interface IRoxygenAnalyzeContext {
-	
-	
-	IRModelInfo getModelInfo();
-	
-	IRFrameInSource getNamespaceFrame(String name);
-	
-	void createSelfAccess(IRLangSourceElement element, RAstNode symbol);
-	void createNamespaceImportAccess(RAstNode symbol);
-	void createNamespaceObjectImportAccess(IRFrameInSource namespace, RAstNode symbol);
-	void createSlotAccess(RClass rClass, RAstNode symbol);
-	void createArgAccess(RMethod rMethod, RAstNode symbol);
-	void createRSourceRegion(RAstNode node);
-	
-}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/ModelDelta.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/ModelDelta.java
index 47b4083..029acd3 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/ModelDelta.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/ModelDelta.java
@@ -14,50 +14,54 @@
 
 package org.eclipse.statet.internal.r.core.sourcemodel;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ltk.ast.core.AstInfo;
-import org.eclipse.statet.ltk.model.core.IModelElementDelta;
-import org.eclipse.statet.ltk.model.core.IModelManager;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.r.core.model.IRModelInfo;
+import org.eclipse.statet.ltk.model.core.ModelManager;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementDelta;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 
 
 /**
  * Currently not really a delta
  */
-public class ModelDelta implements IModelElementDelta {
+@NonNullByDefault
+public class ModelDelta implements LtkModelElementDelta {
 	
 	
 	private final int level;
-	private final IModelElement element;
-	private final IRModelInfo oldInfo;
-	private final AstInfo oldAst;
-	private final IRModelInfo newInfo;
-	private final AstInfo newAst;
+	private final LtkModelElement element;
+	private final @Nullable RSourceUnitModelInfo oldInfo;
+	private final @Nullable AstInfo oldAst;
+	private final @Nullable RSourceUnitModelInfo newInfo;
+	private final @Nullable AstInfo newAst;
 	
 	
-	public ModelDelta(final IModelElement element,
-			final IRModelInfo oldInfo, final IRModelInfo newInfo) {
-		this.level= IModelManager.MODEL_FILE;
+	public ModelDelta(final LtkModelElement element,
+			final @Nullable RSourceUnitModelInfo oldInfo, final @Nullable RSourceUnitModelInfo newInfo) {
+		this.level= ModelManager.MODEL_FILE;
 		this.element= element;
 		this.oldInfo= oldInfo;
-		this.oldAst= ((oldInfo != null) ? oldInfo.getAst() : null);
+		this.oldAst= (oldInfo != null) ? oldInfo.getAst() : null;
 		this.newInfo= newInfo;
-		this.newAst= ((newInfo != null) ? newInfo.getAst() : null);
+		this.newAst= (newInfo != null) ? newInfo.getAst() : null;
 	}
 	
 	
 	@Override
-	public IModelElement getModelElement() {
+	public LtkModelElement getModelElement() {
 		return this.element;
 	}
 	
 	@Override
-	public AstInfo getOldAst() {
+	public @Nullable AstInfo getOldAst() {
 		return this.oldAst;
 	}
 	
 	@Override
-	public AstInfo getNewAst() {
+	public @Nullable AstInfo getNewAst() {
 		return this.newAst;
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RChunkBuildElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RChunkBuildElement.java
deleted file mode 100644
index 8489263..0000000
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RChunkBuildElement.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2009, 2020 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.r.core.sourcemodel;
-
-import java.util.List;
-
-import org.eclipse.statet.jcommons.text.core.TextRegion;
-
-import org.eclipse.statet.ltk.ast.core.AstNode;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.RElementName;
-
-
-public abstract class RChunkBuildElement implements IBuildSourceFrameElement {
-	
-	
-	protected final ISourceStructElement parent;
-	protected final AstNode node;
-	
-	protected final RElementName name;
-	protected final TextRegion nameRegion;
-	int occurrenceCount;
-	
-	BuildSourceFrame envir;
-	List<? extends IRLangSourceElement> sourceChildrenProtected= RSourceElements.NO_R_SOURCE_CHILDREN;
-	
-	
-	public RChunkBuildElement(final ISourceStructElement parent, final AstNode node,
-			final RElementName name, final TextRegion nameRegion) {
-		this.parent= parent;
-		this.node= node;
-		
-		this.name= name;
-		this.nameRegion= nameRegion;
-	}
-	
-	
-	@Override
-	public void setSourceChildren(final List<? extends IRLangSourceElement> children) {
-		this.sourceChildrenProtected= children;
-	}
-	
-	@Override
-	public BuildSourceFrame getBuildFrame() {
-		return this.envir;
-	}
-	
-	
-	@Override
-	public IRElement getModelParent() {
-		return null;
-	}
-	
-	@Override
-	public boolean hasModelChildren(final Filter filter) {
-		return false;
-	}
-	
-	@Override
-	public List<? extends IRLangSourceElement> getModelChildren(final Filter filter) {
-		return null;
-	}
-	
-	@Override
-	public ISourceStructElement getSourceParent() {
-		return this.parent;
-	}
-	
-	@Override
-	public boolean hasSourceChildren(final Filter filter) {
-		return RSourceElements.hasChildren(this.sourceChildrenProtected, filter);
-	}
-	
-	@Override
-	public List<? extends IRLangSourceElement> getSourceChildren(final Filter filter) {
-		return RSourceElements.getChildren(this.sourceChildrenProtected, filter);
-	}
-	
-	
-	@Override
-	@SuppressWarnings("unchecked")
-	public <T> T getAdapter(final Class<T> adapterType) {
-		if (adapterType == IRFrame.class) {
-			return (T) this.envir;
-		}
-		if (adapterType == AstNode.class) {
-			return (T) this.node;
-		}
-		return null;
-	}
-	
-	
-	@Override
-	public int hashCode() {
-		return IRElement.C2_SOURCE_CHUNK * this.name.getSegmentName().hashCode() + this.occurrenceCount;
-	}
-	
-	@Override
-	public boolean equals(final Object obj) {
-		final RChunkBuildElement other;
-		return ( (obj instanceof RChunkBuildElement)
-				&& this.occurrenceCount == (other= (RChunkBuildElement) obj).occurrenceCount
-				&& this.name.equals(other.name) );
-	}
-	
-}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelEventJob.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelEventJob.java
index d5aca0d..53379f8 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelEventJob.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelEventJob.java
@@ -14,25 +14,25 @@
 
 package org.eclipse.statet.internal.r.core.sourcemodel;
 
-import org.eclipse.statet.ltk.model.core.IModelElementDelta;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementDelta;
 import org.eclipse.statet.ltk.model.core.impl.AbstractModelEventJob;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 
 
 /**
  * R model update event job
  */
-public class RModelEventJob extends AbstractModelEventJob<IRSourceUnit, IRModelInfo> {
+public class RModelEventJob extends AbstractModelEventJob<RSourceUnit, RSourceUnitModelInfo> {
 	
 	
-	RModelEventJob(final RModelManager manager) {
+	RModelEventJob(final RModelManagerImpl manager) {
 		super(manager);
 	}
 	
 	
 	@Override
-	protected IModelElementDelta createDelta(final Task task) {
+	protected LtkModelElementDelta createDelta(final Task task) {
 		return new ModelDelta(task.getElement(), task.getOldInfo(), task.getNewInfo());
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelIndex.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelIndex.java
index 0158046..8ff5fa9 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelIndex.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelIndex.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.statet.internal.r.core.sourcemodel;
 
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -52,6 +54,8 @@
 
 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.jcommons.lang.Nullable;
 
 import org.eclipse.statet.ecommons.collections.IntArrayMap;
 import org.eclipse.statet.ecommons.collections.IntMap;
@@ -64,21 +68,23 @@
 import org.eclipse.statet.internal.r.core.builder.RPkgData;
 import org.eclipse.statet.internal.r.core.builder.RPkgReconciler;
 import org.eclipse.statet.internal.r.core.builder.RUnitElement;
-import org.eclipse.statet.ltk.core.LTK;
-import org.eclipse.statet.ltk.model.core.ISourceUnitManager;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.model.core.LtkModels;
+import org.eclipse.statet.ltk.model.core.SourceUnitManager;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.r.core.RCore;
 import org.eclipse.statet.r.core.RProject;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.r.core.model.RModelIndexUpdate;
-import org.eclipse.statet.r.core.model.RSuModelContainer;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.build.RModelIndexUpdate;
+import org.eclipse.statet.r.core.model.build.RSourceUnitModelContainer;
 
 
+@NonNullByDefault
 public class RModelIndex {
 	
 	/** DB definitions */
@@ -346,10 +352,10 @@
 		
 		private boolean removed;
 		
-		private volatile String pkgName;
+		private volatile @Nullable String pkgName;
 		
 		
-		public Proj(final int id, final String name, final String pkgName) {
+		public Proj(final int id, final String name, final @Nullable String pkgName) {
 			this.id= id;
 			this.name= name;
 			
@@ -364,11 +370,11 @@
 		}
 		
 		
-		public void setPkgName(final String pkgName) {
+		public void setPkgName(final @Nullable String pkgName) {
 			this.pkgName= (pkgName != null) ? pkgName.intern() : null;
 		}
 		
-		public String getPkgName() {
+		public @Nullable String getPkgName() {
 			return this.pkgName;
 		}
 		
@@ -379,8 +385,14 @@
 		}
 		
 		@Override
-		public boolean equals(final Object obj) {
-			return (this.id == ((Proj) obj).id);
+		public boolean equals(final @Nullable Object obj) {
+			if (this == obj) {
+				return true;
+			}
+			if (obj instanceof Proj) {
+				return (this.id == ((Proj)obj).id);
+			}
+			return false;
 		}
 		
 	}
@@ -397,117 +409,141 @@
 			this.connection.setAutoCommit(false);
 		}
 		
-		private PreparedStatement addModel;
+		private @Nullable PreparedStatement addModel;
 		public int addModel(final String modelTypeId) throws SQLException {
-			if (this.addModel == null) {
-				this.addModel= this.connection.prepareStatement(RIndex.Models.OP_insert,
+			PreparedStatement statement= this.addModel;
+			if (statement == null) {
+				statement= this.connection.prepareStatement(RIndex.Models.OP_insert,
 						new String[] { RIndex.Models.COL_ID } );
+				this.addModel= statement;
 			}
-			this.addModel.setString(1, modelTypeId);
-			this.addModel.executeUpdate();
-			final ResultSet result= this.addModel.getGeneratedKeys();
+			statement.setString(1, modelTypeId);
+			statement.executeUpdate();
+			final ResultSet result= statement.getGeneratedKeys();
 			if (result.next()) {
 				return result.getInt(1);
 			}
 			throw new SQLException(MISSING_GENERATED_RESULT);
 		}
 		
-		private PreparedStatement addProj;
-		public int addProj(final String name, final String pkgName) throws SQLException {
-			if (this.addProj == null) {
-				this.addProj= this.connection.prepareStatement(RIndex.Projects.OP_insert,
+		private @Nullable PreparedStatement addProj;
+		public int addProj(final String name, final @Nullable String pkgName) throws SQLException {
+			PreparedStatement statement= this.addProj;
+			if (statement == null) {
+				statement= this.connection.prepareStatement(RIndex.Projects.OP_insert,
 						new String[] { RIndex.Projects.COL_ID } );
+				this.addProj= statement;
 			}
-			this.addProj.setString(1, name);
-			this.addProj.setString(2, pkgName);
-			this.addProj.executeUpdate();
-			final ResultSet result= this.addProj.getGeneratedKeys();
+			statement.setString(1, name);
+			statement.setString(2, pkgName);
+			statement.executeUpdate();
+			final ResultSet result= statement.getGeneratedKeys();
 			if (result.next()) {
 				return result.getInt(1);
 			}
 			throw new SQLException(MISSING_GENERATED_RESULT);
 		}
 		
-		private PreparedStatement updateProj;
+		private @Nullable PreparedStatement updateProj;
 		public void updateProj(final Proj proj) throws SQLException {
-			if (this.updateProj == null) {
-				this.updateProj= this.connection.prepareStatement(RIndex.Projects.OP_update);
+			PreparedStatement statement= this.updateProj;
+			if (statement == null) {
+				statement= this.connection.prepareStatement(RIndex.Projects.OP_update);
+				this.updateProj= statement;
 			}
-			this.updateProj.setString(1, proj.getPkgName());
-			this.updateProj.setInt(2, proj.id);
-			this.updateProj.executeUpdate();
+			statement.setString(1, proj.getPkgName());
+			statement.setInt(2, proj.id);
+			statement.executeUpdate();
 		}
 		
-		private PreparedStatement removeProjStatement;
+		private @Nullable PreparedStatement removeProjStatement;
 		public void removeProj(final int projId) throws SQLException {
-			if (this.removeProjStatement == null) {
-				this.removeProjStatement= this.connection.prepareStatement(RIndex.Projects.OP_delete);
+			PreparedStatement statement= this.removeProjStatement;
+			if (statement == null) {
+				statement= this.connection.prepareStatement(RIndex.Projects.OP_delete);
+				this.removeProjStatement= statement;
 			}
-			this.removeProjStatement.setInt(1, projId);
-			this.removeProjStatement.executeUpdate();
+			statement.setInt(1, projId);
+			statement.executeUpdate();
 		}
 		
-		private PreparedStatement clearProjStatement;
+		private @Nullable PreparedStatement clearProjStatement;
 		public void clearProj(final int projId) throws SQLException {
-			if (this.clearProjStatement == null) {
-				this.clearProjStatement= this.connection.prepareStatement(RIndex.SourceUnits.OP_deleteAll_ofProject);
+			PreparedStatement statement= this.clearProjStatement;
+			if (statement == null) {
+				statement = this.connection.prepareStatement(RIndex.SourceUnits.OP_deleteAll_ofProject);
+				this.clearProjStatement= statement;
 			}
-			this.clearProjStatement.setInt(1, projId);
-			this.clearProjStatement.executeUpdate();
+			statement.setInt(1, projId);
+			statement.executeUpdate();
 		}
 		
-		private PreparedStatement clearProjModelStatement;
+		private @Nullable PreparedStatement clearProjModelStatement;
 		public void clearProj(final int projId, final int modelId) throws SQLException {
-			if (this.clearProjModelStatement == null) {
-				this.clearProjModelStatement= this.connection.prepareStatement(RIndex.SourceUnits.OP_deleteAll_ofProjectAndModel);
+			PreparedStatement statement= this.clearProjModelStatement;
+			if (statement == null) {
+				statement=  this.connection.prepareStatement(RIndex.SourceUnits.OP_deleteAll_ofProjectAndModel);
+				this.clearProjModelStatement= statement;
 			}
-			this.clearProjModelStatement.setInt(1, projId);
-			this.clearProjModelStatement.setInt(2, modelId);
-			this.clearProjModelStatement.executeUpdate();
+			statement.setInt(1, projId);
+			statement.setInt(2, modelId);
+			statement.executeUpdate();
 		}
 		
 		public Proj currentProj;
 		public long currentUnitId;
 		public boolean currentUnitNew;
 		
-		private PreparedStatement getUnitStatement;
-		private PreparedStatement addUnitStatement;
+		private @Nullable PreparedStatement getUnitStatement;
+		private @Nullable PreparedStatement addUnitStatement;
 		public void prepareUnits(final Proj proj) throws SQLException {
 			this.currentProj= proj;
-			if (this.getUnitStatement == null) {
-				this.getUnitStatement= this.connection.prepareStatement(RIndex.SourceUnits.OP_get);
-				this.addUnitStatement= this.connection.prepareStatement(RIndex.SourceUnits.OP_insert,
-						new String[] { RIndex.SourceUnits.COL_ID } );
+			{	PreparedStatement statement= this.getUnitStatement;
+				if (statement == null) {
+					statement= this.connection.prepareStatement(RIndex.SourceUnits.OP_get);
+					this.getUnitStatement= statement;
+				}
+				statement.setInt(1, proj.id);
 			}
-			this.getUnitStatement.setInt(1, proj.id);
-			this.addUnitStatement.setInt(1, proj.id);
+			{	PreparedStatement statement= this.addUnitStatement;
+				if (statement == null) {
+					statement= this.connection.prepareStatement(RIndex.SourceUnits.OP_insert,
+							new String[] { RIndex.SourceUnits.COL_ID } );
+					this.addUnitStatement= statement;
+				}
+				statement.setInt(1, proj.id);
+			}
 		}
 		/** requires {@link #initProjForSu(Proj)}, {@link #prepareUnits(Proj)} */
-		private PreparedStatement updateUnitModelStatement;
+		private @Nullable PreparedStatement updateUnitModelStatement;
 		public void executeGetOrAddUnit(final String unitId, final int modelId) throws SQLException {
 			{	// get / update
-				this.getUnitStatement.setString(2, unitId);
-				final ResultSet result= this.getUnitStatement.executeQuery();
+				final PreparedStatement statement= nonNullAssert(this.getUnitStatement);
+				statement.setString(2, unitId);
+				final ResultSet result= statement.executeQuery();
 				if (result.next()) {
 					this.currentUnitId= result.getLong(1);
 					this.currentUnitNew= false;
 					
 					if (result.getInt(2) != modelId) {
-						if (this.updateUnitModelStatement == null) {
-							this.updateUnitModelStatement= this.connection.prepareStatement(RIndex.SourceUnits.OP_updateModel);
+						PreparedStatement updateStatement= this.updateUnitModelStatement;
+						if (updateStatement == null) {
+							updateStatement= this.connection.prepareStatement(RIndex.SourceUnits.OP_updateModel);
+							this.updateUnitModelStatement= updateStatement;
 						}
-						this.updateUnitModelStatement.setInt(1, modelId);
-						this.updateUnitModelStatement.setLong(2, this.currentUnitId);
-						this.updateUnitModelStatement.execute();
+						updateStatement.setInt(1, modelId);
+						updateStatement.setLong(2, this.currentUnitId);
+						updateStatement.execute();
 					}
 					return;
 				}
 			}
 			{	// insert
-				this.addUnitStatement.setString(2, unitId);
-				this.addUnitStatement.setInt(3, modelId);
-				this.addUnitStatement.executeUpdate();
-				final ResultSet result= this.addUnitStatement.getGeneratedKeys();
+				final PreparedStatement statement= nonNullAssert(this.addUnitStatement);
+				statement.setString(2, unitId);
+				statement.setInt(3, modelId);
+				statement.executeUpdate();
+				final ResultSet result= statement.getGeneratedKeys();
 				if (result.next()) {
 					this.currentUnitId= result.getLong(1);
 					this.currentUnitNew= true;
@@ -518,8 +554,9 @@
 		}
 		/** requires {@link #prepareUnits(Proj)} */
 		public boolean executeGetUnit(final String publicId) throws SQLException {
-			this.getUnitStatement.setString(2, publicId);
-			final ResultSet result= this.getUnitStatement.executeQuery();
+			final PreparedStatement statement= nonNullAssert(this.getUnitStatement);
+			statement.setString(2, publicId);
+			final ResultSet result= statement.executeQuery();
 			if (result.next()) {
 				this.currentUnitId= result.getInt(1);
 				this.currentUnitNew= false;
@@ -529,44 +566,54 @@
 		}
 		
 		/** requires {@link #prepareUnits(Proj)} */
-		private PreparedStatement removeUnitStatement;
+		private@ Nullable PreparedStatement removeUnitStatement;
 		public void executeRemoveUnit(final String unitId) throws SQLException {
-			if (this.removeUnitStatement == null) {
-				this.removeUnitStatement= this.connection.prepareStatement(RIndex.SourceUnits.OP_delete_byProjectAndName);
+			PreparedStatement statement= this.removeUnitStatement;
+			if (statement == null) {
+				statement= this.connection.prepareStatement(RIndex.SourceUnits.OP_delete_byProjectAndName);
+				this.removeUnitStatement= statement;
 			}
-			this.removeUnitStatement.setInt(1, this.currentProj.id);
-			this.removeUnitStatement.setString(2, unitId);
-			this.removeUnitStatement.executeUpdate();
+			statement.setInt(1, this.currentProj.id);
+			statement.setString(2, unitId);
+			statement.executeUpdate();
 		}
 		
-		private PreparedStatement removeUnitMainNamesStatement;
+		private @Nullable PreparedStatement removeUnitMainNamesStatement;
 		public void clearUnitNames() throws SQLException {
-			if (this.removeUnitMainNamesStatement == null) {
-				this.removeUnitMainNamesStatement= this.connection.prepareStatement(RIndex.MainNames.OP_deleteAll_ofSourceUnit);
+			PreparedStatement statement= this.removeUnitMainNamesStatement;
+			if (statement == null) {
+				statement= this.connection.prepareStatement(RIndex.MainNames.OP_deleteAll_ofSourceUnit);
+				this.removeUnitMainNamesStatement= statement;
 			}
-			this.removeUnitMainNamesStatement.setLong(1, this.currentUnitId);
-			this.removeUnitMainNamesStatement.executeUpdate();
+			statement.setLong(1, this.currentUnitId);
+			statement.executeUpdate();
 		}
 		
-		private PreparedStatement getNameStatement;
-		private PreparedStatement addNameStatement;
+		private @Nullable PreparedStatement getNameStatement;
+		private @Nullable PreparedStatement addNameStatement;
 		public long getOrAddName(final String name) throws SQLException {
-			if (this.getNameStatement == null) {
-				this.getNameStatement= this.connection.prepareStatement(RIndex.NamesIdx.OP_getID);
-				this.addNameStatement= this.connection.prepareStatement(RIndex.NamesIdx.OP_insert,
-						new String[] { RIndex.NamesIdx.COL_ID } );
-			}
 			{	// get
-				this.getNameStatement.setString(1, name);
-				final ResultSet result= this.getNameStatement.executeQuery();
+				PreparedStatement statement= this.getNameStatement;
+				if (statement == null) {
+					statement= this.connection.prepareStatement(RIndex.NamesIdx.OP_getID);
+					this.getNameStatement= statement;
+				}
+				statement.setString(1, name);
+				final ResultSet result= statement.executeQuery();
 				if (result.next()) {
 					return result.getLong(1);
 				}
 			}
 			{	// add
-				this.addNameStatement.setString(1, name);
-				this.addNameStatement.executeUpdate();
-				final ResultSet result= this.addNameStatement.getGeneratedKeys();
+				PreparedStatement statement= this.addNameStatement;
+				if (statement == null) {
+					statement= this.connection.prepareStatement(RIndex.NamesIdx.OP_insert,
+							new String[] { RIndex.NamesIdx.COL_ID } );
+					this.addNameStatement= statement;
+				}
+				statement.setString(1, name);
+				statement.executeUpdate();
+				final ResultSet result= statement.getGeneratedKeys();
 				if (result.next()) {
 					return result.getLong(1);
 				}
@@ -577,7 +624,7 @@
 	}
 	
 	
-	private final ISourceUnitManager sourceUnitManager;
+	private final SourceUnitManager sourceUnitManager;
 	private final RBuildReconciler reconciler;
 	
 	private final RPkgReconciler pkgParser;
@@ -586,7 +633,7 @@
 	
 	private int dbInitialized;
 	private DataSource dbConnectionPool;
-	private DbTools dbTools;
+	private @Nullable DbTools dbTools;
 	
 	private final Map<String, Integer> modelType2Id= new HashMap<>();
 	private final IntMap<String> modelId2Type= new IntArrayMap<>();
@@ -596,8 +643,8 @@
 	private final Map<Proj, CompositeFrame> elementsList= new HashMap<>();
 	
 	
-	public RModelIndex(final RModelManager manager) {
-		this.sourceUnitManager= LTK.getSourceUnitManager();
+	public RModelIndex(final RModelManagerImpl manager) {
+		this.sourceUnitManager= LtkModels.getSourceUnitManager();
 		this.reconciler= new RBuildReconciler(manager);
 		this.pkgParser= new RPkgReconciler();
 		
@@ -642,7 +689,7 @@
 	private static final ImList<String> R_MODEL_TYPES= ImCollections.newList(RModel.R_TYPE_ID);
 	public void update(final RProject rProject,
 			final IContainer pkgRoot,
-			final List<IFile> toRemoveRSU, final List<IRWorkspaceSourceUnit> toUpdateRSU,
+			final List<IFile> toRemoveRSU, final List<RWorkspaceSourceUnit> toUpdateRSU,
 			final MultiStatus status, final SubMonitor m) throws CoreException {
 		final String projName= rProject.getProject().getName();
 		final boolean updatePkg= (pkgRoot != null);
@@ -666,11 +713,11 @@
 			m.worked(1);
 		}
 		if (toUpdateRSU != null) {
-			for (final IRWorkspaceSourceUnit sourceUnit : toUpdateRSU) {
-				final RSuModelContainer adapter= sourceUnit.getAdapter(RSuModelContainer.class);
+			for (final RWorkspaceSourceUnit sourceUnit : toUpdateRSU) {
+				final RSourceUnitModelContainer adapter= sourceUnit.getAdapter(RSourceUnitModelContainer.class);
 				if (adapter != null) {
 					try {
-						final IRModelInfo model= this.reconciler.build(adapter, m);
+						final RSourceUnitModelInfo model= this.reconciler.build(adapter, m);
 						indexUpdate.update(sourceUnit, model);
 					}
 					catch (final Exception e) {
@@ -745,7 +792,7 @@
 						insertMainNameStatement= tools.connection.prepareStatement(RIndex.MainNames.OP_insert);
 					}
 					
-					final ISourceUnit sourceUnit= updated.exportedElement.getSourceUnit();
+					final SourceUnit sourceUnit= updated.exportedElement.getSourceUnit();
 					final int modelId= getOrCreateModelId(sourceUnit.getModelTypeId());
 					
 					final RUnitElement previous= frame.setModelElement(updated.unitId, updated.exportedElement);
@@ -828,8 +875,8 @@
 		}
 	}
 	
-	private CompositeFrame getFrame(final Proj proj, final IProject project,
-			Connection connection, final IProgressMonitor monitor) throws SQLException, CoreException {
+	private @Nullable CompositeFrame getFrame(final Proj proj, final IProject project,
+			@Nullable Connection connection, final @Nullable IProgressMonitor monitor) throws SQLException, CoreException {
 		CompositeFrame frame= this.elementsList.get(proj);
 		if (frame == null && project.isOpen()) {
 			final HashMap<String, RUnitElement> elements= new HashMap<>();
@@ -848,16 +895,16 @@
 					final ResultSet result= statement.executeQuery();
 					
 					while (result.next()) {
-						ISourceUnit su= null;
+						SourceUnit su= null;
 						try {
 							final String unitId= result.getString(1);
 							final String modelTypeId= this.modelId2Type.get(result.getInt(2));
 							assert (unitId != null && modelTypeId != null);
 							su= this.sourceUnitManager.getSourceUnit(modelTypeId,
-									LTK.PERSISTENCE_CONTEXT, unitId, true, monitor );
-							if (su instanceof IRSourceUnit) {
+									Ltk.PERSISTENCE_CONTEXT, unitId, true, monitor );
+							if (su instanceof RSourceUnit) {
 								final InputStream inputStream= result.getBlob(3).getBinaryStream();
-								final RUnitElement unitElement= RUnitElement.read((IRSourceUnit) su, frame, inputStream);
+								final RUnitElement unitElement= RUnitElement.read((RSourceUnit) su, frame, inputStream);
 								elements.put(su.getId(), unitElement);
 							}
 						}
@@ -920,7 +967,8 @@
 	 * @return
 	 * @throws SQLException 
 	 */
-	private Proj getOrCreateProjectId(final RProjectNature rProject, final RPkgData pkgData)
+	private @Nullable Proj getOrCreateProjectId(final RProjectNature rProject,
+			final @Nullable RPkgData pkgData)
 			throws SQLException {
 		final IProject project= rProject.getProject();
 		Proj proj= this.projects.get(project.getName());
@@ -943,7 +991,7 @@
 	}
 	
 	private void doClearProj(final Proj proj, final List<String> modelTypeIds,
-			final CompositeFrame frame)
+			final @Nullable CompositeFrame frame)
 			throws SQLException {
 		final DbTools tools= getDbTools();
 		for (final String modelTypeId : modelTypeIds) {
@@ -1190,31 +1238,35 @@
 	}
 	
 	private DbTools getDbTools() throws SQLException {
-		if (this.dbTools == null) {
+		DbTools dbTools= this.dbTools;
+		if (dbTools == null) {
 			if (this.dbInitialized > 1) {
 				throw new SQLException("DB is closed.");
 			}
-			this.dbTools= new DbTools(this.dbConnectionPool.getConnection());
+			dbTools= new DbTools(this.dbConnectionPool.getConnection());
+			this.dbTools= dbTools;
 		}
-		return this.dbTools;
+		return dbTools;
 	}
 	
 	private void onDbToolsError(final Exception e) {
 		RCorePlugin.log(new Status(IStatus.ERROR, RCore.BUNDLE_ID, -1, "An error occurred when replicate model to DB.", e));
-		if (this.dbTools != null) {
+		final DbTools dbTools= this.dbTools;
+		if (dbTools != null) {
 			try {
-				this.dbTools.connection.close();
 				this.dbTools= null;
+				dbTools.connection.close();
 			}
 			catch (final SQLException ignore) {}
 		}
 	}
 	
 	private void closeDbTools() {
-		if (this.dbTools != null) {
+		final DbTools dbTools= this.dbTools;
+		if (dbTools != null) {
 			try {
-				this.dbTools.connection.close();
 				this.dbTools= null;
+				dbTools.connection.close();
 			}
 			catch (final SQLException e) {
 				onDbToolsError(e);
@@ -1233,7 +1285,7 @@
 	}
 	
 	
-	public IRFrame getProjectFrame(final RProject rProject) throws CoreException {
+	public @Nullable RFrame getProjectFrame(final RProject rProject) throws CoreException {
 		final Proj proj= this.projects.get(rProject.getProject().getName());
 		if (proj != null) {
 			this.lock.readLock().lock();
@@ -1261,7 +1313,7 @@
 		return names;
 	}
 	
-	public String getPkgName(final String projectName) {
+	public @Nullable String getPkgName(final String projectName) {
 		final Proj proj= this.projects.get(projectName);
 		if (proj != null) {
 			return proj.getPkgName();
@@ -1269,7 +1321,7 @@
 		return null;
 	}
 	
-	public String getPkgProject(final String pkgName) throws CoreException {
+	public @Nullable String getPkgProject(final String pkgName) throws CoreException {
 		for (final Proj proj : this.projects.values()) {
 			if (pkgName.equals(proj.getPkgName())) {
 				return proj.name;
@@ -1278,14 +1330,14 @@
 		return null;
 	}
 	
-	public List<ISourceUnit> findReferencingSourceUnits(final RProject rProject, final RElementName name,
+	public @Nullable List<SourceUnit> findReferencingSourceUnits(final RProject rProject, final RElementName name,
 			final IProgressMonitor monitor) throws CoreException {
 		if (name.getNextSegment() != null || name.getType() != RElementName.MAIN_DEFAULT || name.getSegmentName() == null) {
 			throw new UnsupportedOperationException("Only common top level names are supported.");
 		}
 		final SubMonitor progress= SubMonitor.convert(monitor);
-		final ISourceUnitManager suManager= LTK.getSourceUnitManager();
-		final List<ISourceUnit> matches= new ArrayList<>();
+		final SourceUnitManager suManager= LtkModels.getSourceUnitManager();
+		final List<SourceUnit> matches= new ArrayList<>();
 		final Proj proj= this.projects.get(rProject.getProject().getName());
 		this.lock.readLock().lock();
 		Connection connection= null;
@@ -1303,7 +1355,7 @@
 				final String unitId= result.getString(1);
 				final String modelTypeId= this.modelId2Type.get(result.getInt(2));
 				assert (unitId != null && modelTypeId != null);
-				final ISourceUnit su= loadSourceUnit(suManager, unitId, modelTypeId, progress);
+				final SourceUnit su= loadSourceUnit(suManager, unitId, modelTypeId, progress);
 				if (su != null) {
 					matches.add(su);
 				}
@@ -1325,10 +1377,10 @@
 		}
 	}
 	
-	private ISourceUnit loadSourceUnit(final ISourceUnitManager manager,
+	private @Nullable SourceUnit loadSourceUnit(final SourceUnitManager manager,
 			final String sourceUnitId, final String modelTypeId, final SubMonitor progress) {
 		try {
-			return manager.getSourceUnit(modelTypeId, LTK.PERSISTENCE_CONTEXT, sourceUnitId, true, progress);
+			return manager.getSourceUnit(modelTypeId, Ltk.PERSISTENCE_CONTEXT, sourceUnitId, true, progress);
 		}
 		catch (final Exception e) {
 			RCorePlugin.log(new Status(IStatus.ERROR, RCore.BUNDLE_ID, 0,
@@ -1339,9 +1391,9 @@
 		}
 	}
 	
-	private void closeSourceUnits(final List<ISourceUnit> sourceUnits,
+	private void closeSourceUnits(final List<SourceUnit> sourceUnits,
 			final SubMonitor progress) {
-		for (final ISourceUnit su : sourceUnits) {
+		for (final SourceUnit su : sourceUnits) {
 			su.disconnect(progress);
 		}
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelIndexOrder.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelIndexOrder.java
index 3628360..127fa1c 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelIndexOrder.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelIndexOrder.java
@@ -20,6 +20,9 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.internal.r.core.RProjectNature;
 import org.eclipse.statet.internal.r.core.builder.ExportedRClass;
 import org.eclipse.statet.internal.r.core.builder.ExportedRElement;
@@ -27,16 +30,17 @@
 import org.eclipse.statet.internal.r.core.builder.RPkgData;
 import org.eclipse.statet.internal.r.core.builder.RUnitElement;
 import org.eclipse.statet.r.core.RProject;
-import org.eclipse.statet.r.core.model.IRClass;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRFrameInSource;
-import org.eclipse.statet.r.core.model.IRLangElement;
-import org.eclipse.statet.r.core.model.IRMethod;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RElement;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangClass;
+import org.eclipse.statet.r.core.model.RLangElement;
+import org.eclipse.statet.r.core.model.RLangMethod;
+import org.eclipse.statet.r.core.model.RSourceFrame;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 
 
+@NonNullByDefault
 public class RModelIndexOrder {
 	
 	
@@ -58,7 +62,7 @@
 	protected final RProjectNature rProject;
 	protected final String projectName;
 	
-	protected RPkgData pkgData;
+	protected @Nullable RPkgData pkgData;
 	
 	protected final List<Result> updated= new ArrayList<>();
 	
@@ -77,25 +81,26 @@
 	}
 	
 	
-	protected Result createResult(final IRSourceUnit sourceUnit, final IRModelInfo model) {
+	protected @Nullable Result createResult(final RSourceUnit sourceUnit,
+			final @Nullable RSourceUnitModelInfo model) {
 		if (model == null) {
 			return null;
 		}
 		
-		final IRFrameInSource topFrame= model.getTopFrame();
-		final List<? extends IRLangElement> children= topFrame.getModelChildren(null);
-		final ArrayList<IRLangElement> exports= new ArrayList<>(children.size());
+		final RSourceFrame topFrame= model.getTopFrame();
+		final List<? extends RLangElement> children= topFrame.getModelChildren(null);
+		final ArrayList<RLangElement> exports= new ArrayList<>(children.size());
 		final RUnitElement root= new RUnitElement(sourceUnit, exports);
-		for (final IRLangElement element : children) {
+		for (final RLangElement element : children) {
 			final int type= element.getElementType();
-			switch (type & IRElement.MASK_C1) {
-			case IRElement.C1_METHOD:
-				exports.add(new ExportedRMethod(root, (IRMethod) element));
+			switch (type & RElement.MASK_C1) {
+			case RElement.C1_METHOD:
+				exports.add(new ExportedRMethod(root, (RLangMethod) element));
 				break;
-			case IRElement.C1_CLASS:
-				exports.add(new ExportedRClass(root, (IRClass) element));
+			case RElement.C1_CLASS:
+				exports.add(new ExportedRClass(root, (RLangClass) element));
 				break;
-			case IRElement.C1_VARIABLE:
+			case RElement.C1_VARIABLE:
 				exports.add(new ExportedRElement(root, element));
 				break;
 			default:
@@ -104,9 +109,9 @@
 		}
 		final Set<String> names= new HashSet<>();
 		names.addAll(model.getTopFrame().getAllAccessNames());
-		final Map<String, ? extends IRFrame> frames= model.getReferencedFrames();
-		for (final IRFrame frame : frames.values()) {
-			names.addAll(((IRFrameInSource) frame).getAllAccessNames());
+		final Map<String, ? extends RFrame> frames= model.getReferencedFrames();
+		for (final RFrame frame : frames.values()) {
+			names.addAll(((RSourceFrame) frame).getAllAccessNames());
 		}
 		
 		return new Result(root, names);
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelManager.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelManagerImpl.java
similarity index 67%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelManager.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelManagerImpl.java
index e395cbd..fffb15a 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelManager.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RModelManagerImpl.java
@@ -23,31 +23,34 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.internal.r.core.RProjectNature;
-import org.eclipse.statet.ltk.core.LTK;
 import org.eclipse.statet.ltk.core.WorkingContext;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
+import org.eclipse.statet.ltk.model.core.build.SourceUnitModelContainer;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.ltk.model.core.impl.AbstractModelManager;
-import org.eclipse.statet.ltk.model.core.impl.SourceUnitModelContainer;
 import org.eclipse.statet.r.core.RProject;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRModelManager;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RChunkElement;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.r.core.model.RSuModelContainer;
+import org.eclipse.statet.r.core.model.RModelManager;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
+import org.eclipse.statet.r.core.model.build.RSourceUnitModelContainer;
 import org.eclipse.statet.r.core.rsource.ast.SourceComponent;
 
 
-public class RModelManager extends AbstractModelManager implements IRModelManager {
+@NonNullByDefault
+public class RModelManagerImpl extends AbstractModelManager implements RModelManager {
 	
 	
 	private static class RContextItem extends ContextItem {
 		
-		public final HashMap<String, ISourceUnit> worksheets;
+		public final HashMap<String, SourceUnit> worksheets;
 		
 		public RContextItem(final WorkingContext context) {
 			super(context);
@@ -63,10 +66,8 @@
 	private final RModelIndex index= new RModelIndex(this);
 	
 	
-	public RModelManager() {
+	public RModelManagerImpl() {
 		super(RModel.R_TYPE_ID);
-		getContextItem(LTK.PERSISTENCE_CONTEXT, true);
-		getContextItem(LTK.EDITOR_CONTEXT, true);
 	}
 	
 	
@@ -91,12 +92,11 @@
 	}
 	
 	@Override
-	public void registerDependentUnit(final ISourceUnit copy) {
+	public void registerDependentUnit(final SourceUnit copy) {
 		assert (copy.getModelTypeId().equals(RModel.R_TYPE_ID) ?
-				copy.getElementType() == IRSourceUnit.R_OTHER_SU : true);
+				copy.getElementType() == RSourceUnit.R_OTHER_SU : true);
 		
-		final RContextItem contextItem= (RContextItem) getContextItem(
-				copy.getWorkingContext(), true );
+		final RContextItem contextItem= (RContextItem)getContextItemCreate(copy.getWorkingContext());
 		synchronized (contextItem) {
 			final String key= copy.getId() + '+' + copy.getModelTypeId();
 			contextItem.worksheets.put(key, copy);
@@ -104,17 +104,15 @@
 	}
 	
 	@Override
-	public void deregisterDependentUnit(final ISourceUnit copy) {
-		final RContextItem contextItem= (RContextItem) getContextItem(
-				copy.getWorkingContext(), true );
+	public void deregisterDependentUnit(final SourceUnit copy) {
+		final RContextItem contextItem= (RContextItem)getContextItemCreate(copy.getWorkingContext());
 		synchronized (contextItem) {
 			contextItem.worksheets.remove(copy.getId() + '+' + copy.getModelTypeId());
 		}
 	}
 	
-	public ISourceUnit getWorksheetCopy(final String type, final String id, final WorkingContext context) {
-		final RContextItem contextItem= (RContextItem) getContextItem(
-				context, false );
+	public @Nullable SourceUnit getWorksheetCopy(final String type, final String id, final WorkingContext context) {
+		final RContextItem contextItem= (RContextItem)getContextItem(context);
 		if (contextItem != null) {
 			synchronized (contextItem) {
 				return contextItem.worksheets.get(id + '+' + type);
@@ -127,13 +125,13 @@
 	@Override
 	public void reconcile(final SourceUnitModelContainer<?, ?> adapter,
 			final int level, final IProgressMonitor monitor) {
-		if (adapter instanceof RSuModelContainer) {
-			this.reconciler.reconcile((RSuModelContainer) adapter, level, monitor);
+		if (adapter instanceof RSourceUnitModelContainer) {
+			this.reconciler.reconcile((RSourceUnitModelContainer) adapter, level, monitor);
 		}
 	}
 	
 	@Override
-	public IRModelInfo reconcile(final IRSourceUnit sourceUnit, final ISourceUnitModelInfo modelInfo,
+	public RSourceUnitModelInfo reconcile(final RSourceUnit sourceUnit, final SourceUnitModelInfo modelInfo,
 			final List<? extends RChunkElement> chunks, final List<? extends SourceComponent> inlineNodes,
 			final int level, final IProgressMonitor monitor) {
 		if (sourceUnit == null) {
@@ -144,7 +142,7 @@
 	
 	
 	@Override
-	public IRFrame getProjectFrame(final RProject rProject) throws CoreException {
+	public @Nullable RFrame getProjectFrame(final RProject rProject) throws CoreException {
 		return this.index.getProjectFrame(rProject);
 	}
 	
@@ -154,7 +152,7 @@
 	}
 	
 	@Override
-	public IRFrame getPkgProjectFrame(final String pkgName) throws CoreException {
+	public @Nullable RFrame getPkgProjectFrame(final String pkgName) throws CoreException {
 		if (pkgName == null) {
 			throw new NullPointerException("pkgName"); //$NON-NLS-1$
 		}
@@ -170,7 +168,7 @@
 	}
 	
 	@Override
-	public List<ISourceUnit> findReferencingSourceUnits(final RProject rProject, final RElementName name,
+	public @Nullable List<SourceUnit> findReferencingSourceUnits(final RProject rProject, final RElementName name,
 			final IProgressMonitor monitor) throws CoreException {
 		return this.index.findReferencingSourceUnits(rProject, name, monitor);
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RReconciler.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RReconciler.java
index abffdfc..7b367af 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RReconciler.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RReconciler.java
@@ -30,15 +30,15 @@
 import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.ltk.core.SourceContent;
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
-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.SourceModelStamp;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.ltk.model.core.ModelManager;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
+import org.eclipse.statet.ltk.model.core.impl.BasicSourceModelStamp;
 import org.eclipse.statet.r.core.model.RChunkElement;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.r.core.model.RProblemReporter;
-import org.eclipse.statet.r.core.model.RSuModelContainer;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
+import org.eclipse.statet.r.core.model.build.RProblemReporter;
+import org.eclipse.statet.r.core.model.build.RSourceUnitModelContainer;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.core.rsource.ast.RScanner;
 import org.eclipse.statet.r.core.rsource.ast.RoxygenScanner;
@@ -55,15 +55,15 @@
 	
 	protected static class Data {
 		
-		public final RSuModelContainer adapter;
+		public final RSourceUnitModelContainer adapter;
 		public final SourceContent content;
 		
 		public AstInfo ast;
 		
-		public IRModelInfo oldModel;
-		public IRModelInfo newModel;
+		public RSourceUnitModelInfo oldModel;
+		public RSourceUnitModelInfo newModel;
 		
-		public Data(final RSuModelContainer adapter, final IProgressMonitor monitor) {
+		public Data(final RSourceUnitModelContainer adapter, final IProgressMonitor monitor) {
 			this.adapter= adapter;
 			this.content= adapter.getParseContent(monitor);
 		}
@@ -71,7 +71,7 @@
 	}
 	
 	
-	private final RModelManager rManager;
+	private final RModelManagerImpl rManager;
 	protected boolean stop= false;
 	
 	private final Object raLock= new Object();
@@ -86,7 +86,7 @@
 	private final RProblemReporter rpReporter;
 	
 	
-	public RReconciler(final RModelManager manager) {
+	public RReconciler(final RModelManagerImpl manager) {
 		this.rManager= manager;
 		this.raAstStringCache= new InternStringCache(0x20);
 		this.raRoxygenScanner= new RoxygenScanner(this.raAstStringCache);
@@ -96,9 +96,9 @@
 	
 	
 	/** for editor reconciling */
-	public void reconcile(final RSuModelContainer adapter, final int flags,
+	public void reconcile(final RSourceUnitModelContainer adapter, final int flags,
 			final IProgressMonitor monitor) {
-		final IRSourceUnit su= adapter.getSourceUnit();
+		final RSourceUnit su= adapter.getSourceUnit();
 		final int type= (su.getModelTypeId().equals(RModel.R_TYPE_ID) ? su.getElementType() : 0);
 		if (type == 0) {
 			return;
@@ -117,7 +117,7 @@
 		}
 		
 		if (this.stop || monitor.isCanceled()
-				|| (flags & 0xf) < IModelManager.MODEL_FILE) {
+				|| (flags & 0xf) < ModelManager.MODEL_FILE) {
 			return;
 		}
 		
@@ -136,7 +136,7 @@
 			}
 		}
 		
-		if ((flags & IModelManager.RECONCILE) != 0 && data.newModel != null) {
+		if ((flags & ModelManager.RECONCILE) != 0 && data.newModel != null) {
 			if (this.stop || monitor.isCanceled()) {
 				return;
 			}
@@ -158,7 +158,7 @@
 		}
 	}
 	
-	public IRModelInfo reconcile(final IRSourceUnit su, final ISourceUnitModelInfo modelInfo,
+	public RSourceUnitModelInfo reconcile(final RSourceUnit su, final SourceUnitModelInfo modelInfo,
 			final List<? extends RChunkElement> chunkElements, final List<? extends SourceComponent> inlineNodes,
 			final int level, final IProgressMonitor monitor) {
 		synchronized (this.rmLock) {
@@ -167,7 +167,7 @@
 	}
 	
 	protected final void updateAst(final Data data, final IProgressMonitor monitor) {
-		final SourceModelStamp stamp= new SourceModelStamp(data.content.getStamp());
+		final BasicSourceModelStamp stamp= new BasicSourceModelStamp(data.content.getStamp());
 		
 		data.ast= data.adapter.getCurrentAst();
 		if (data.ast != null && !stamp.equals(data.ast.getStamp())) {
@@ -223,7 +223,7 @@
 			final long stopModel;
 			startModel= System.nanoTime();
 			
-			final IRModelInfo model= this.rmScopeAnalyzer.createModel(data.adapter.getSourceUnit(), data.ast);
+			final RSourceUnitModelInfo model= this.rmScopeAnalyzer.createModel(data.adapter.getSourceUnit(), data.ast);
 			final boolean isOK= (model != null);
 			
 			stopModel= System.nanoTime();
@@ -244,10 +244,10 @@
 		return false;
 	}
 	
-	private IRModelInfo updateModel(final IRSourceUnit su, final ISourceUnitModelInfo modelInfo,
+	private RSourceUnitModelInfo updateModel(final RSourceUnit su, final SourceUnitModelInfo modelInfo,
 			final List<? extends RChunkElement> chunkElements,
 			final List<? extends SourceComponent> inlineNodes) {
-		IRModelInfo model;
+		RSourceUnitModelInfo model;
 		try {
 			final AstInfo ast= modelInfo.getAst();
 			this.rmScopeAnalyzer.beginChunkSession(su, ast);
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceUnit.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RResourceSourceUnit.java
similarity index 61%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceUnit.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RResourceSourceUnit.java
index 20add38..7a59db2 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceUnit.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RResourceSourceUnit.java
@@ -17,28 +17,32 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 
 import org.eclipse.statet.ltk.ast.core.AstInfo;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
-import org.eclipse.statet.r.core.RResourceUnit;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
+import org.eclipse.statet.r.core.BasicRResourceSourceUnit;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.r.core.model.RSuModelContainer;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.build.RSourceUnitModelContainer;
 import org.eclipse.statet.r.core.source.RDocumentContentInfo;
 
 
 /**
  * Source unit implementation for R script files in workspace ("default R file").
  */
-public final class RSourceUnit extends RResourceUnit implements IRWorkspaceSourceUnit {
+@NonNullByDefault
+public final class RResourceSourceUnit extends BasicRResourceSourceUnit implements RWorkspaceSourceUnit {
 	
 	
-	private final RSuModelContainer model= new RSuModelContainer(this);
+	private final RSourceUnitModelContainer model= new RSourceUnitModelContainer(this);
 	
 	
-	public RSourceUnit(final String id, final IFile file) {
+	public RResourceSourceUnit(final String id, final IFile file) {
 		super(id, file);
 	}
 	
@@ -55,7 +59,7 @@
 	
 	@Override
 	public int getElementType() {
-		return IRSourceUnit.R_WORKSPACE_SU;
+		return RSourceUnit.R_WORKSPACE_SU;
 	}
 	
 	
@@ -68,10 +72,11 @@
 	
 	
 	@Override
-	public AstInfo getAstInfo(final String type, final boolean ensureSync, final IProgressMonitor monitor) {
+	public @Nullable AstInfo getAstInfo(final @Nullable String type, final boolean ensureSync,
+			final IProgressMonitor monitor) {
 		final AstInfo ast= this.model.getCurrentAst();
 		final long stamp= getResource().getModificationStamp();
-		if (ast != null && ast.getStamp().getSourceStamp() == stamp) {
+		if (ast != null && ast.getStamp().getContentStamp() == stamp) {
 			return ast;
 		}
 		// TODO ask saved
@@ -79,7 +84,8 @@
 	}
 	
 	@Override
-	public ISourceUnitModelInfo getModelInfo(final String type, final int syncLevel, final IProgressMonitor monitor) {
+	public @Nullable SourceUnitModelInfo getModelInfo(final @Nullable String type, final int syncLevel,
+			final IProgressMonitor monitor) {
 		if (type == null || type.equals(RModel.R_TYPE_ID)) {
 			return this.model.getModelInfo(syncLevel, monitor);
 		}
@@ -89,9 +95,9 @@
 	
 	@Override
 	@SuppressWarnings("unchecked")
-	public <T> T getAdapter(final Class<T> adapterType) {
-		if (adapterType == RSuModelContainer.class) {
-			return (T) this.model;
+	public <T> @Nullable T getAdapter(final Class<T> adapterType) {
+		if (adapterType == RSourceUnitModelContainer.class) {
+			return (T)this.model;
 		}
 		return super.getAdapter(adapterType);
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceElementByElementAccess.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceElementByElementAccess.java
index b5bdad1..1ccf247 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceElementByElementAccess.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceElementByElementAccess.java
@@ -18,66 +18,70 @@
 import java.util.Collections;
 import java.util.List;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.text.core.BasicTextRegion;
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
 import org.eclipse.statet.ltk.ast.core.AstNode;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
+import org.eclipse.statet.ltk.model.core.LtkModelUtils;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.model.ArgsDefinition;
-import org.eclipse.statet.r.core.model.IRClass;
-import org.eclipse.statet.r.core.model.IRClassExtension;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRMethod;
-import org.eclipse.statet.r.core.model.IRPackageLoad;
-import org.eclipse.statet.r.core.model.IRSlot;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangClass;
+import org.eclipse.statet.r.core.model.RLangClassExtension;
+import org.eclipse.statet.r.core.model.RLangMethod;
+import org.eclipse.statet.r.core.model.RLangPackageLoad;
+import org.eclipse.statet.r.core.model.RLangSlot;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.rsource.ast.DocuComment;
 import org.eclipse.statet.r.core.rsource.ast.FDef;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 
 
+@NonNullByDefault
 abstract class RSourceElementByElementAccess
-		implements IRLangSourceElement, IModelElement.Filter {
+		implements RLangSourceElement, LtkModelElementFilter<LtkModelElement<?>> {
 	
 	
-	static final class RPkgImport extends RSourceElementByElementAccess implements IRPackageLoad {
+	static final class RPkgImport extends RSourceElementByElementAccess implements RLangPackageLoad<RLangSourceElement> {
 		
 		
-		public RPkgImport(final IRLangSourceElement parent, final ElementAccess access) {
-			super(parent, IRElement.R_PACKAGE_LOAD, access);
+		public RPkgImport(final RLangSourceElement parent, final ElementAccess access) {
+			super(parent, RElement.R_PACKAGE_LOAD, access);
 		}
 		
 		
 		@Override
-		public TextRegion getDocumentationRange() {
+		public @Nullable TextRegion getDocumentationRange() {
 			return null;
 		}
 		
 		
 		@Override
-		public boolean hasModelChildren(final IModelElement.Filter filter) {
+		public boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
 			return false;
 		}
 		
 		@Override
-		public final List<? extends IRLangSourceElement> getModelChildren(final IModelElement.Filter filter) {
-			return RSourceElements.NO_R_SOURCE_CHILDREN;
+		public final List<? extends RLangSourceElement> getModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			return RSourceModel.NO_R_SOURCE_CHILDREN;
 		}
 		
 		@Override
-		public boolean hasSourceChildren(final IModelElement.Filter filter) {
+		public boolean hasSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
 			return false;
 		}
 		
 		@Override
-		public List<? extends IRLangSourceElement> getSourceChildren(final IModelElement.Filter filter) {
-			return RSourceElements.NO_R_SOURCE_CHILDREN;
+		public List<? extends RLangSourceElement> getSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			return RSourceModel.NO_R_SOURCE_CHILDREN;
 		}
 		
 	}
@@ -85,44 +89,106 @@
 	static abstract class DocuCommentableElement extends RSourceElementByElementAccess {
 		
 		
-		public DocuCommentableElement(final IRLangSourceElement parent, final int elementType,
-				final ElementAccess defAccess) {
+		private @Nullable DocuComment docu;
+		
+		
+		public DocuCommentableElement(final RLangSourceElement parent, final int elementType,
+				final @Nullable ElementAccess defAccess) {
 			super(parent, elementType, defAccess);
 		}
 		
 		
-		private DocuComment docu;
-		
-		
 		void setDocu(final DocuComment docu) {
 			this.docu= docu;
 		}
 		
 		@Override
-		public final DocuComment getDocumentationRange() {
+		public final @Nullable DocuComment getDocumentationRange() {
 			return this.docu;
 		}
 		
 	}
 	
-	static final class RMethod extends DocuCommentableElement implements IRMethod, IBuildSourceFrameElement {
+	static abstract class DocuCommentableEnvirElement extends DocuCommentableElement
+			implements BuildSourceFrameElement {
 		
-		
-		private List<? extends IRLangSourceElement> sourceChildrenProtected= RSourceElements.NO_R_SOURCE_CHILDREN;
-		private List<? extends IRLangSourceElement> modelChildrenProtected;
+		private List<? extends RLangSourceElement> sourceChildrenProtected= RSourceModel.NO_R_SOURCE_CHILDREN;
+		private @Nullable List<? extends RLangSourceElement> modelChildrenProtected;
 		private final BuildSourceFrame envir;
 		
-		private final FDef fDefNode;
-		private ArgsDefinition args;
-		
-		
-		public RMethod(final IRLangSourceElement parent, final BuildSourceFrame envir, final FDef fdefNode) {
-			super(parent, IRElement.R_COMMON_FUNCTION, null);
+		protected DocuCommentableEnvirElement(final RLangSourceElement parent, final BuildSourceFrame envir,
+				final int elementType, final @Nullable ElementAccess defAccess) {
+			super(parent, elementType, defAccess);
 			this.envir= envir;
+		}
+		
+		
+		@Override
+		public void setSourceChildren(final List<? extends RLangSourceElement> children) {
+			this.sourceChildrenProtected= children;
+		}
+		
+		@Override
+		public BuildSourceFrame getBuildFrame() {
+			return this.envir;
+		}
+		
+		
+		@Override
+		public boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			List<? extends RLangSourceElement> children= this.modelChildrenProtected;
+			if (children == null) {
+				children= this.envir.getModelChildren(this);
+				this.modelChildrenProtected= children;
+			}
+			return LtkModelUtils.<RLangSourceElement>hasChildren(children, filter);
+		}
+		
+		@Override
+		public List<? extends RLangSourceElement> getModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			List<? extends RLangSourceElement> children= this.modelChildrenProtected;
+			if (children == null) {
+				children= this.envir.getModelChildren(this);
+				this.modelChildrenProtected= children;
+			}
+			return LtkModelUtils.<RLangSourceElement>getChildren(children, filter);
+		}
+		
+		@Override
+		public boolean hasSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			return LtkModelUtils.<RLangSourceElement>hasChildren(this.sourceChildrenProtected, filter);
+		}
+		
+		@Override
+		public List<? extends RLangSourceElement> getSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			return LtkModelUtils.<RLangSourceElement>getChildren(this.sourceChildrenProtected, filter);
+		}
+		
+		
+		@Override
+		@SuppressWarnings("unchecked")
+		public <T> @Nullable T getAdapter(final Class<T> adapterType) {
+			if (adapterType == RFrame.class) {
+				return (T) this.envir;
+			}
+			return super.getAdapter(adapterType);
+		}
+		
+	}
+	
+	static final class RMethod extends DocuCommentableEnvirElement implements RLangMethod<RLangSourceElement> {
+		
+		
+		private final FDef fDefNode;
+		private @Nullable ArgsDefinition args;
+		
+		
+		public RMethod(final RLangSourceElement parent, final BuildSourceFrame envir, final FDef fdefNode) {
+			super(parent, envir, RElement.R_COMMON_FUNCTION, null);
 			this.fDefNode= fdefNode;
 		}
 		
-		void complete(final int type, final ElementAccess defAccess, final ArgsDefinition args) {
+		void complete(final int type, final ElementAccess defAccess, final @Nullable ArgsDefinition args) {
 			this.type= type;
 			setAccess(defAccess);
 			this.args= args;
@@ -134,9 +200,8 @@
 		}
 		
 		
-		public RMethod(final IRLangSourceElement parent, final int type, final ElementAccess access, final BuildSourceFrame envir) {
-			super(parent, type, access);
-			this.envir= envir;
+		public RMethod(final RLangSourceElement parent, final int type, final ElementAccess access, final BuildSourceFrame envir) {
+			super(parent, envir, type, access);
 			this.fDefNode= null;
 		}
 		
@@ -144,60 +209,20 @@
 			this.args= args;
 		}
 		
-		@Override
-		public void setSourceChildren(final List<? extends IRLangSourceElement> children) {
-			this.sourceChildrenProtected= children;
-		}
-		
-		@Override
-		public BuildSourceFrame getBuildFrame() {
-			return this.envir;
-		}
-		
 		
 		public FDef getFDefNode() {
 			return this.fDefNode;
 		}
 		
 		@Override
-		public ArgsDefinition getArgsDefinition() {
+		public @Nullable ArgsDefinition getArgsDefinition() {
 			return this.args;
 		}
 		
 		
 		@Override
-		public boolean hasModelChildren(final IModelElement.Filter filter) {
-			if (this.modelChildrenProtected == null) {
-				this.modelChildrenProtected= this.envir.getModelChildren(this);
-			}
-			return RSourceElements.hasChildren(this.modelChildrenProtected, filter);
-		}
-		
-		@Override
-		public List<? extends IRLangSourceElement> getModelChildren(final IModelElement.Filter filter) {
-			if (this.modelChildrenProtected == null) {
-				this.modelChildrenProtected= this.envir.getModelChildren(this);
-			}
-			return RSourceElements.getChildren(this.modelChildrenProtected, filter);
-		}
-		
-		@Override
-		public boolean hasSourceChildren(final IModelElement.Filter filter) {
-			return RSourceElements.hasChildren(this.sourceChildrenProtected, filter);
-		}
-		
-		@Override
-		public List<? extends IRLangSourceElement> getSourceChildren(final IModelElement.Filter filter) {
-			return RSourceElements.getChildren(this.sourceChildrenProtected, filter);
-		}
-		
-		
-		@Override
 		@SuppressWarnings("unchecked")
-		public <T> T getAdapter(final Class<T> adapterType) {
-			if (adapterType == IRFrame.class) {
-				return (T) this.envir;
-			}
+		public <T> @Nullable T getAdapter(final Class<T> adapterType) {
 			if (adapterType == FDef.class) {
 				return (T) this.fDefNode;
 			}
@@ -206,26 +231,21 @@
 		
 	}
 	
-	static final class RClass extends DocuCommentableElement implements IRClass, IBuildSourceFrameElement {
+	static final class RClass extends DocuCommentableEnvirElement implements RLangClass<RLangSourceElement> {
 		
 		
 		private static final List<String> NO_PARENTS= Collections.emptyList();
 		
 		
-		private List<? extends IRLangSourceElement> sourceChildrenProtected= RSourceElements.NO_R_SOURCE_CHILDREN;
-		private List<? extends IRLangSourceElement> modelChildrenProtected;
-		private final BuildSourceFrame envir;
-		
 		private List<String> superClassesTypeNames= NO_PARENTS;
 		private List<String> superClassesTypeNamesProtected= NO_PARENTS;
 		
 		
-		public RClass(final IRLangSourceElement parent, final ElementAccess defAccess, final BuildSourceFrame envir) {
-			super(parent, IRElement.R_S4CLASS, defAccess);
-			this.envir= envir;
+		public RClass(final RLangSourceElement parent, final ElementAccess defAccess, final BuildSourceFrame envir) {
+			super(parent, envir, RElement.R_S4CLASS, defAccess);
 		}
 		
-		public void addSuperClasses(final String[] typeNames) {
+		public void addSuperClasses(final @Nullable String[] typeNames) {
 			if (this.superClassesTypeNames == NO_PARENTS) {
 				int count= 0;
 				for (final String name : typeNames) {
@@ -246,16 +266,6 @@
 			}
 		}
 		
-		@Override
-		public void setSourceChildren(final List<? extends IRLangSourceElement> children) {
-			this.sourceChildrenProtected= children;
-		}
-		
-		@Override
-		public BuildSourceFrame getBuildFrame() {
-			return this.envir;
-		}
-		
 		
 		@Override
 		public List<String> getExtendedClassNames() {
@@ -263,68 +273,32 @@
 		}
 		
 		
-		@Override
-		public boolean hasModelChildren(final IModelElement.Filter filter) {
-			if (this.modelChildrenProtected == null) {
-				this.modelChildrenProtected= this.envir.getModelChildren(this);
-			}
-			return RSourceElements.hasChildren(this.modelChildrenProtected, filter);
-		}
-		
-		@Override
-		public List<? extends IRLangSourceElement> getModelChildren(final IModelElement.Filter filter) {
-			if (this.modelChildrenProtected == null) {
-				this.modelChildrenProtected= this.envir.getModelChildren(this);
-			}
-			return RSourceElements.getChildren(this.modelChildrenProtected, filter);
-		}
-		
-		@Override
-		public boolean hasSourceChildren(final IModelElement.Filter filter) {
-			return RSourceElements.hasChildren(this.sourceChildrenProtected, filter);
-		}
-		
-		@Override
-		public List<? extends IRLangSourceElement> getSourceChildren(final IModelElement.Filter filter) {
-			return RSourceElements.getChildren(this.sourceChildrenProtected, filter);
-		}
-		
-		
-		@Override
-		@SuppressWarnings("unchecked")
-		public <T> T getAdapter(final Class<T> adapterType) {
-			if (adapterType == IRFrame.class) {
-				return (T) this.envir;
-			}
-			return super.getAdapter(adapterType);
-		}
-		
 	}
 	
-	static final class RClassExt extends RSourceElementByElementAccess implements IRClassExtension, IBuildSourceFrameElement {
+	static final class RClassExt extends RSourceElementByElementAccess implements RLangClassExtension<RLangSourceElement>, BuildSourceFrameElement {
 		
 		
-		private List<? extends IRLangSourceElement> sourceChildrenProtected= RSourceElements.NO_R_SOURCE_CHILDREN;
-		private List<? extends IRLangSourceElement> modelChildrenProtected;
+		private List<? extends RLangSourceElement> sourceChildrenProtected= RSourceModel.NO_R_SOURCE_CHILDREN;
+		private @Nullable List<? extends RLangSourceElement> modelChildrenProtected;
 		private final BuildSourceFrame envir;
 		
 		private final String extCommand;
-		private String extTypeName;
+		private @Nullable String extTypeName;
 		
 		
-		public RClassExt(final IRLangSourceElement parent, 
+		public RClassExt(final RLangSourceElement parent, 
 				final ElementAccess defAccess, final BuildSourceFrame envir, final String command) {
-			super(parent, IRElement.R_S4CLASS_EXTENSION, defAccess);
+			super(parent, RElement.R_S4CLASS_EXTENSION, defAccess);
 			this.envir= envir;
 			this.extCommand= command;
 		}
 		
-		public void complete(final String extTypeName) {
+		public void complete(final @Nullable String extTypeName) {
 			this.extTypeName= extTypeName;
 		}
 		
 		@Override
-		public void setSourceChildren(final List<? extends IRLangSourceElement> children) {
+		public void setSourceChildren(final List<? extends RLangSourceElement> children) {
 			this.sourceChildrenProtected= children;
 		}
 		
@@ -340,47 +314,52 @@
 		}
 		
 		@Override
-		public String getExtTypeName() {
+		public @Nullable String getExtTypeName() {
 			return this.extTypeName;
 		}
 		
 		@Override
-		public TextRegion getDocumentationRange() {
+		public @Nullable TextRegion getDocumentationRange() {
 			return null;
 		}
 		
 		
+		
 		@Override
-		public boolean hasModelChildren(final IModelElement.Filter filter) {
-			if (this.modelChildrenProtected == null) {
-				this.modelChildrenProtected= this.envir.getModelChildren(this);
+		public boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			List<? extends RLangSourceElement> children= this.modelChildrenProtected;
+			if (children == null) {
+				children= this.envir.getModelChildren(this);
+				this.modelChildrenProtected= children;
 			}
-			return RSourceElements.hasChildren(this.modelChildrenProtected, filter);
+			return LtkModelUtils.<RLangSourceElement>hasChildren(children, filter);
 		}
 		
 		@Override
-		public List<? extends IRLangSourceElement> getModelChildren(final IModelElement.Filter filter) {
-			if (this.modelChildrenProtected == null) {
-				this.modelChildrenProtected= this.envir.getModelChildren(this);
+		public List<? extends RLangSourceElement> getModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			List<? extends RLangSourceElement> children= this.modelChildrenProtected;
+			if (children == null) {
+				children= this.envir.getModelChildren(this);
+				this.modelChildrenProtected= children;
 			}
-			return RSourceElements.getChildren(this.modelChildrenProtected, filter);
+			return LtkModelUtils.<RLangSourceElement>getChildren(children, filter);
 		}
 		
 		@Override
-		public boolean hasSourceChildren(final IModelElement.Filter filter) {
-			return RSourceElements.hasChildren(this.sourceChildrenProtected, filter);
+		public boolean hasSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			return LtkModelUtils.<RLangSourceElement>hasChildren(this.sourceChildrenProtected, filter);
 		}
 		
 		@Override
-		public List<? extends IRLangSourceElement> getSourceChildren(final IModelElement.Filter filter) {
-			return RSourceElements.getChildren(this.sourceChildrenProtected, filter);
+		public List<? extends RLangSourceElement> getSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			return LtkModelUtils.<RLangSourceElement>getChildren(this.sourceChildrenProtected, filter);
 		}
 		
 		
 		@Override
 		@SuppressWarnings("unchecked")
-		public <T> T getAdapter(final Class<T> adapterType) {
-			if (adapterType == IRFrame.class) {
+		public <T> @Nullable T getAdapter(final Class<T> adapterType) {
+			if (adapterType == RFrame.class) {
 				return (T) this.envir;
 			}
 			return super.getAdapter(adapterType);
@@ -391,29 +370,29 @@
 	static final class RVariable extends DocuCommentableElement {
 		
 		
-		public RVariable(final IRLangSourceElement parent, final int elementType, final ElementAccess defAccess) {
+		public RVariable(final RLangSourceElement parent, final int elementType, final ElementAccess defAccess) {
 			super(parent, elementType, defAccess);
 		}
 		
 		
 		@Override
-		public boolean hasModelChildren(final IModelElement.Filter filter) {
+		public boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
 			return false;
 		}
 		
 		@Override
-		public final List<? extends IRLangSourceElement> getModelChildren(final IModelElement.Filter filter) {
-			return RSourceElements.NO_R_SOURCE_CHILDREN;
+		public final List<? extends RLangSourceElement> getModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			return RSourceModel.NO_R_SOURCE_CHILDREN;
 		}
 		
 		@Override
-		public boolean hasSourceChildren(final IModelElement.Filter filter) {
+		public boolean hasSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
 			return false;
 		}
 		
 		@Override
-		public List<? extends IRLangSourceElement> getSourceChildren(final IModelElement.Filter filter) {
-			return RSourceElements.NO_R_SOURCE_CHILDREN;
+		public List<? extends RLangSourceElement> getSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			return RSourceModel.NO_R_SOURCE_CHILDREN;
 		}
 		
 	}
@@ -424,104 +403,105 @@
 		private List<RElementAccess> columns;
 		
 		
-		public RDataFrame(final IRLangSourceElement parent, final int elementType,
+		public RDataFrame(final RLangSourceElement parent, final int elementType,
 				final List<SubNamedPartSyntacticElementAccess> columns) {
 			super(parent, elementType, null);
 		}
 		
 		
 		@Override
-		public boolean hasModelChildren(final IModelElement.Filter filter) {
+		public boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
 			return false;
 		}
 		
 		@Override
-		public final List<? extends IRLangSourceElement> getModelChildren(final IModelElement.Filter filter) {
-			return RSourceElements.NO_R_SOURCE_CHILDREN;
+		public final List<? extends RLangSourceElement> getModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			return RSourceModel.NO_R_SOURCE_CHILDREN;
 		}
 		
 		@Override
-		public boolean hasSourceChildren(final IModelElement.Filter filter) {
+		public boolean hasSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
 			return false;
 		}
 		
 		@Override
-		public List<? extends IRLangSourceElement> getSourceChildren(final IModelElement.Filter filter) {
-			return RSourceElements.NO_R_SOURCE_CHILDREN;
+		public List<? extends RLangSourceElement> getSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			return RSourceModel.NO_R_SOURCE_CHILDREN;
 		}
 		
 	}
 	
-	static final class RSlot extends RSourceElementByElementAccess implements IRSlot {
+	static final class RSlot extends RSourceElementByElementAccess implements RLangSlot<RLangSourceElement> {
 		
 		
-		private String typeName;
+		private @Nullable String typeName;
 		private String prototypeCode;
 		
 		
-		public RSlot(final IRLangSourceElement parent, final ElementAccess defAccess) {
-			super(parent, IRElement.R_S4SLOT, defAccess);
+		public RSlot(final RLangSourceElement parent, final ElementAccess defAccess) {
+			super(parent, RElement.R_S4SLOT, defAccess);
 		}
 		
-		void completeType(final String name) {
+		void completeType(final @Nullable String name) {
 			this.typeName= name;
 		}
 		
 		
 		@Override
-		public String getTypeName() {
+		public @Nullable String getTypeName() {
 			return this.typeName;
 		}
 		
 		@Override
-		public TextRegion getDocumentationRange() {
+		public @Nullable TextRegion getDocumentationRange() {
 			return null;
 		}
 		
 		
 		@Override
-		public boolean hasModelChildren(final IModelElement.Filter filter) {
+		public boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
 			return false;
 		}
 		
 		@Override
-		public final List<? extends IRLangSourceElement> getModelChildren(final IModelElement.Filter filter) {
-			return RSourceElements.NO_R_SOURCE_CHILDREN;
+		public final List<? extends RLangSourceElement> getModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			return RSourceModel.NO_R_SOURCE_CHILDREN;
 		}
 		
 		@Override
-		public boolean hasSourceChildren(final IModelElement.Filter filter) {
+		public boolean hasSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
 			return false;
 		}
 		
 		@Override
-		public List<? extends IRLangSourceElement> getSourceChildren(final IModelElement.Filter filter) {
-			return RSourceElements.NO_R_SOURCE_CHILDREN;
+		public List<? extends RLangSourceElement> getSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+			return RSourceModel.NO_R_SOURCE_CHILDREN;
 		}
 		
 	}
 	
 	
-	private final IRLangSourceElement parent;
+	private final RLangSourceElement parent;
 	private RElementAccess access;
 	int type;
 	int occurrenceCount;
 	
 	
-	public RSourceElementByElementAccess(final IRLangSourceElement parent, final int elementType, final ElementAccess defAccess) {
+	public RSourceElementByElementAccess(final RLangSourceElement parent, final int elementType,
+			final @Nullable ElementAccess defAccess) {
 		this.parent= parent;
 		this.type= elementType;
 		setAccess(defAccess);
 	}
 	
 	
-	protected void setAccess(final AnonymousAccess access) {
+	protected void setAccess(final @Nullable AnonymousAccess access) {
 		if (access != null) {
 			this.access= access;
 		}
 	}
 	
-	protected void setAccess(final ElementAccess access) {
+	protected void setAccess(final @Nullable ElementAccess access) {
 		if (access != null) {
 			access.modelElement= this;
 			this.access= access;
@@ -538,14 +518,14 @@
 	}
 	
 	@Override
-	public boolean include(final IModelElement element) {
+	public boolean include(final LtkModelElement<?> element) {
 		return (element == this);
 	}
 	
 	@Override
-	public final IRElement getModelParent() {
-		final List<? extends IRElement> elements= this.access.getFrame().getModelElements();
-		for (final IRElement element : elements) {
+	public final @Nullable RElement<?> getModelParent() {
+		final List<? extends RElement<?>> elements= this.access.getFrame().getModelElements();
+		for (final RElement<?> element : elements) {
 			if (element.hasModelChildren(this)) {
 				return element;
 			}
@@ -554,12 +534,12 @@
 	}
 	
 	@Override
-	public final ISourceStructElement getSourceParent() {
+	public final RLangSourceElement getSourceParent() {
 		return this.parent;
 	}
 	
 	@Override
-	public final IRSourceUnit getSourceUnit() {
+	public final RSourceUnit getSourceUnit() {
 		return this.parent.getSourceUnit();
 	}
 	
@@ -605,7 +585,7 @@
 	public final TextRegion getNameSourceRange() {
 		final RElementAccess access= this.access.getLastSegment();
 		if (access.getNameNode() != null) {
-			return RAst.getElementNameRegion(access.getNameNode());
+			return RAsts.getElementNameRegion(access.getNameNode());
 		}
 		else {
 			return new BasicTextRegion(access.getNode().getStartOffset());
@@ -615,7 +595,7 @@
 	
 	@Override
 	@SuppressWarnings("unchecked")
-	public <T> T getAdapter(final Class<T> adapterType) {
+	public <T> @Nullable T getAdapter(final Class<T> adapterType) {
 		if (adapterType == AstNode.class) {
 			return (T) this.access.getNode();
 		}
@@ -632,7 +612,7 @@
 	}
 	
 	@Override
-	public boolean equals(final Object obj) {
+	public boolean equals(final @Nullable Object obj) {
 		if (!(obj instanceof RSourceElementByElementAccess)) {
 			return false;
 		}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceElements.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceElements.java
deleted file mode 100644
index 9a09647..0000000
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceElements.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2008, 2020 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.r.core.sourcemodel;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-
-
-public class RSourceElements {
-	
-	static final List<? extends IRLangSourceElement> NO_R_SOURCE_CHILDREN= Collections.emptyList();
-	
-	static final List<? extends IRLangSourceElement> getChildren(final List<? extends IRLangSourceElement> children, final IModelElement.Filter filter) {
-		if (filter == null) {
-			return children;
-		}
-		else {
-			final ArrayList<IRLangSourceElement> filtered= new ArrayList<>(children.size());
-			for (final IRLangSourceElement child : children) {
-				if (filter.include(child)) {
-					filtered.add(child);
-				}
-			}
-			return filtered;
-		}
-	}
-	
-	static final boolean hasChildren(final List<? extends IRLangSourceElement> children, final IModelElement.Filter filter) {
-		if (filter == null) {
-			return (!children.isEmpty());
-		}
-		else {
-			for (final IRLangSourceElement child : children) {
-				if (filter.include(child)) {
-					return true;
-				}
-			}
-			return false;
-		}
-	}
-	
-}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceFileElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceFileElement.java
index ad1e143..887b53d 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceFileElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceFileElement.java
@@ -16,29 +16,34 @@
 
 import java.util.List;
 
+import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
 import org.eclipse.statet.ltk.core.ElementName;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 
 
-abstract class RSourceFileElement implements IRLangSourceElement {
+@NonNullByDefault
+abstract class RSourceFileElement implements RLangSourceElement {
 	
 	
-	private final IRSourceUnit sourceUnit;
+	private final RSourceUnit sourceUnit;
 	
 	protected final BuildSourceFrame envir;
 	
 	
-	public RSourceFileElement(final IRSourceUnit su, final BuildSourceFrame envir) {
+	public RSourceFileElement(final RSourceUnit su, final BuildSourceFrame envir) {
 		this.sourceUnit= su;
 		this.envir= envir;
 	}
@@ -51,7 +56,7 @@
 	
 	@Override
 	public int getElementType() {
-		return IModelElement.C2_SOURCE_FILE;
+		return LtkModelElement.C2_SOURCE_FILE;
 	}
 	
 	@Override
@@ -70,7 +75,7 @@
 	
 	@Override
 	public boolean exists() {
-		final ISourceUnitModelInfo modelInfo= getSourceUnit().getModelInfo(RModel.R_TYPE_ID, 0, null);
+		final SourceUnitModelInfo modelInfo= getSourceUnit().getModelInfo(RModel.R_TYPE_ID, 0, null);
 		return (modelInfo != null && modelInfo.getSourceElement() == this);
 	}
 	
@@ -81,46 +86,46 @@
 	
 	
 	@Override
-	public IRElement getModelParent() {
+	public @Nullable RElement<?> getModelParent() {
 		return null;
 	}
 	
 	@Override
-	public boolean hasModelChildren(final Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
 		return false;
 	}
 	
 	@Override
-	public List<? extends IRLangSourceElement> getModelChildren(final Filter filter) {
+	public List<? extends RLangSourceElement> getModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+		return ImCollections.emptyList();
+	}
+	
+	@Override
+	public @Nullable SourceStructElement<?, ?> getSourceParent() {
 		return null;
 	}
 	
 	@Override
-	public ISourceStructElement getSourceParent() {
-		return null;
-	}
-	
-	@Override
-	public IRSourceUnit getSourceUnit() {
+	public RSourceUnit getSourceUnit() {
 		return this.sourceUnit;
 	}
 	
 	
 	@Override
-	public TextRegion getNameSourceRange() {
+	public @Nullable TextRegion getNameSourceRange() {
 		return null;
 	}
 	
 	@Override
-	public TextRegion getDocumentationRange() {
+	public @Nullable TextRegion getDocumentationRange() {
 		return null;
 	}
 	
 	
 	@Override
 	@SuppressWarnings("unchecked")
-	public <T> T getAdapter(final Class<T> adapterType) {
-		if (adapterType == IRFrame.class) {
+	public <T> @Nullable T getAdapter(final Class<T> adapterType) {
+		if (adapterType == RFrame.class) {
 			return (T) this.envir;
 		}
 		return null;
@@ -132,13 +137,16 @@
 	}
 	
 	@Override
-	public boolean equals(final Object obj) {
-		if (!(obj instanceof ISourceStructElement)) {
-			return false;
+	public boolean equals(final @Nullable Object obj) {
+		if (this == obj) {
+			return true;
 		}
-		final ISourceStructElement other= (ISourceStructElement) obj;
-		return ((other.getElementType() & IModelElement.MASK_C2) == IModelElement.C2_SOURCE_FILE)
-				&& this.sourceUnit.equals(other.getSourceUnit());
+		if (obj instanceof SourceStructElement) {
+			final SourceStructElement<?, ?> other= (SourceStructElement<?, ?>)obj;
+			return ((other.getElementType() & LtkModelElement.MASK_C2) == LtkModelElement.C2_SOURCE_FILE)
+					&& this.sourceUnit.equals(other.getSourceUnit());
+		}
+		return false;
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRFrameInSource.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceModel.java
similarity index 65%
copy from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRFrameInSource.java
copy to r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceModel.java
index 7d270b0..45f5ac1 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRFrameInSource.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceModel.java
@@ -12,18 +12,19 @@
  #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
  #=============================================================================*/
 
-package org.eclipse.statet.r.core.model;
+package org.eclipse.statet.internal.r.core.sourcemodel;
 
-import java.util.Set;
-
+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.r.core.model.RLangSourceElement;
 
 
-public interface IRFrameInSource extends IRFrame {
+@NonNullByDefault
+public class RSourceModel {
 	
 	
-	Set<String> getAllAccessNames();
-	ImList<? extends RElementAccess> getAllAccessOf(final String name, boolean includeSlaves);
-	boolean isResolved(String name);
+	static final ImList<? extends RLangSourceElement> NO_R_SOURCE_CHILDREN= ImCollections.emptyList();
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceUnitElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceUnitElement.java
index 8228de6..57ea16c 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceUnitElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceUnitElement.java
@@ -16,30 +16,35 @@
 
 import java.util.List;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
 import org.eclipse.statet.ltk.ast.core.AstNode;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.ltk.model.core.LtkModelUtils;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 
 
-final class RSourceUnitElement extends RSourceFileElement implements IBuildSourceFrameElement {
+@NonNullByDefault
+final class RSourceUnitElement extends RSourceFileElement implements BuildSourceFrameElement {
 	
 	
 	private final RAstNode sourceNode;
-	private List<? extends IRLangSourceElement> sourceChildrenProtected= RSourceElements.NO_R_SOURCE_CHILDREN;
+	private List<? extends RLangSourceElement> sourceChildrenProtected= RSourceModel.NO_R_SOURCE_CHILDREN;
 	
 	
-	public RSourceUnitElement(final IRSourceUnit su, final BuildSourceFrame envir, final RAstNode node) {
+	public RSourceUnitElement(final RSourceUnit su, final BuildSourceFrame envir, final RAstNode node) {
 		super(su, envir);
 		this.sourceNode= node;
 	}
 	
 	
 	@Override
-	public void setSourceChildren(final List<? extends IRLangSourceElement> children) {
+	public void setSourceChildren(final List<? extends RLangSourceElement> children) {
 		this.sourceChildrenProtected= children;
 	}
 	
@@ -50,13 +55,13 @@
 	
 	
 	@Override
-	public boolean hasSourceChildren(final Filter filter) {
-		return RSourceElements.hasChildren(this.sourceChildrenProtected, filter);
+	public boolean hasSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+		return LtkModelUtils.<RLangSourceElement>hasChildren(this.sourceChildrenProtected, filter);
 	}
 	
 	@Override
-	public List<? extends IRLangSourceElement> getSourceChildren(final Filter filter) {
-		return RSourceElements.getChildren(this.sourceChildrenProtected, filter);
+	public List<? extends RLangSourceElement> getSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+		return LtkModelUtils.<RLangSourceElement>getChildren(this.sourceChildrenProtected, filter);
 	}
 	
 	
@@ -68,7 +73,7 @@
 	
 	@Override
 	@SuppressWarnings("unchecked")
-	public <T> T getAdapter(final Class<T> adapterType) {
+	public <T> @Nullable T getAdapter(final Class<T> adapterType) {
 		if (adapterType == AstNode.class) {
 			return (T) this.sourceNode;
 		}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceModelInfo.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceUnitModelInfoImpl.java
similarity index 67%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceModelInfo.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceUnitModelInfoImpl.java
index ffd1f06..eba319e 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceModelInfo.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RSourceUnitModelInfoImpl.java
@@ -18,34 +18,37 @@
 import java.util.LinkedHashMap;
 import java.util.Map;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ltk.ast.core.AstInfo;
-import org.eclipse.statet.ltk.model.core.impl.AbstractSourceModelInfo;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRFrameInSource;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRModelInfo;
+import org.eclipse.statet.ltk.model.core.impl.BasicSourceUnitModelInfo;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
+import org.eclipse.statet.r.core.model.RSourceFrame;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 
 
-public class RSourceModelInfo extends AbstractSourceModelInfo implements IRModelInfo {
+@NonNullByDefault
+public class RSourceUnitModelInfoImpl extends BasicSourceUnitModelInfo implements RSourceUnitModelInfo {
 	
 	
 	final BuildSourceFrame topFrame;
 	final LinkedHashMap<String, BuildSourceFrame> localFrames;
 	private final Map<String, BuildSourceFrame> protectedLocalFrames;
 	
-	final PackageReferences packageRefs;
+	final BasicPackageReferences packageRefs;
 	final Map<String, BuildSourceFrame> namespaceFrames;
 	private final Map<String, BuildSourceFrame> protectedNamespaceFrames;
 	
-	private final IRLangSourceElement sourceElement;
+	private final RLangSourceElement sourceElement;
 	
 	
-	RSourceModelInfo(final AstInfo ast,
+	RSourceUnitModelInfoImpl(final AstInfo ast,
 			final LinkedHashMap<String, BuildSourceFrame> localFrames,
 			final BuildSourceFrame topFrame,
-			final PackageReferences packageRefs,
+			final BasicPackageReferences packageRefs,
 			final Map<String, BuildSourceFrame> namespaceFrames,
-			final IRLangSourceElement unitElement) {
+			final RLangSourceElement unitElement) {
 		super(ast);
 		this.topFrame= topFrame;
 		this.localFrames= localFrames;
@@ -58,7 +61,7 @@
 	
 	
 	@Override
-	public IRLangSourceElement getSourceElement() {
+	public RLangSourceElement getSourceElement() {
 		return this.sourceElement;
 	}
 	
@@ -68,17 +71,17 @@
 	}
 	
 	@Override
-	public final Map<String, ? extends IRFrameInSource> getSourceFrames() {
+	public final Map<String, ? extends RSourceFrame> getSourceFrames() {
 		return this.protectedLocalFrames;
 	}
 	
 	@Override
-	public PackageReferences getReferencedPackages() {
+	public BasicPackageReferences getReferencedPackages() {
 		return this.packageRefs;
 	}
 	
 	@Override
-	public final Map<String, ? extends IRFrame> getReferencedFrames() {
+	public final Map<String, ? extends RFrame> getReferencedFrames() {
 		return this.protectedNamespaceFrames;
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RoxygenAnalyzeContext.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RoxygenAnalyzeContext.java
new file mode 100644
index 0000000..8aa0850
--- /dev/null
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RoxygenAnalyzeContext.java
@@ -0,0 +1,39 @@
+/*=============================================================================#
+ # Copyright (c) 2009, 2020 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.r.core.sourcemodel;
+
+import org.eclipse.statet.internal.r.core.sourcemodel.RSourceElementByElementAccess.RClass;
+import org.eclipse.statet.internal.r.core.sourcemodel.RSourceElementByElementAccess.RMethod;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
+import org.eclipse.statet.r.core.model.RSourceFrame;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
+import org.eclipse.statet.r.core.rsource.ast.RAstNode;
+
+
+public interface RoxygenAnalyzeContext {
+	
+	
+	RSourceUnitModelInfo getModelInfo();
+	
+	RSourceFrame getNamespaceFrame(final String name);
+	
+	void createSelfAccess(final RLangSourceElement element, final RAstNode symbol);
+	void createNamespaceImportAccess(final RAstNode symbol);
+	void createNamespaceObjectImportAccess(final RSourceFrame namespace, final RAstNode symbol);
+	void createSlotAccess(final RClass rClass, final RAstNode symbol);
+	void createArgAccess(final RMethod rMethod, final RAstNode symbol);
+	void createRSourceRegion(final RAstNode node);
+	
+}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RoxygenAnalyzer.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RoxygenAnalyzer.java
index 4432b8e..ecbe6b9 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RoxygenAnalyzer.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RoxygenAnalyzer.java
@@ -19,12 +19,16 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.internal.r.core.sourcemodel.RSourceElementByElementAccess.DocuCommentableElement;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRModelInfo;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.r.core.model.RDocuLink;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 import org.eclipse.statet.r.core.rsource.ast.DocuComment;
 import org.eclipse.statet.r.core.rsource.ast.DocuTag;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
@@ -32,10 +36,10 @@
 import org.eclipse.statet.r.core.rsource.ast.SourceComponent;
 
 
-public class RoxygenAnalyzer implements IModelElement.Filter {
+public class RoxygenAnalyzer implements LtkModelElementFilter {
 	
 	
-	private IRoxygenAnalyzeContext context;
+	private RoxygenAnalyzeContext context;
 	
 	private List<RAstNode> comments;
 	
@@ -48,9 +52,9 @@
 	}
 	
 	
-	public void updateModel(final IRoxygenAnalyzeContext context) {
+	public void updateModel(final RoxygenAnalyzeContext context) {
 		this.context= context;
-		final IRModelInfo model= context.getModelInfo();
+		final RSourceUnitModelInfo model= context.getModelInfo();
 		this.comments= ((SourceComponent) model.getAst().getRoot()).getComments();
 		if (this.comments == null || this.comments.isEmpty()) {
 			return;
@@ -59,8 +63,8 @@
 		if (!nextDocuComment()) {
 			return;
 		}
-		final ISourceStructElement sourceElement= model.getSourceElement();
-		if (sourceElement instanceof IRLangSourceElement) {
+		final SourceStructElement sourceElement= model.getSourceElement();
+		if (sourceElement instanceof RLangSourceElement) {
 			include(sourceElement);
 		}
 		if (this.nextComment != null) {
@@ -72,7 +76,7 @@
 		while (this.commentsIterator.hasNext()) {
 			final RAstNode next= this.commentsIterator.next();
 			if (next.getNodeType() == NodeType.DOCU_AGGREGATION) {
-				this.nextComment= (DocuComment) next;
+				this.nextComment= (DocuComment)next;
 				this.nextCommentRefOffset= this.nextComment.getSubsequentNodeOffset();
 				if (this.nextCommentRefOffset != NA_OFFSET) {
 					return true;
@@ -89,8 +93,8 @@
 	
 	
 	@Override
-	public boolean include(final IModelElement element) {
-		final IRLangSourceElement rElement= (IRLangSourceElement) element;
+	public boolean include(final @NonNull LtkModelElement element) {
+		final RLangSourceElement rElement= (RLangSourceElement)element;
 		if (this.nextComment == null) {
 			return true;
 		}
@@ -115,7 +119,7 @@
 		return false;
 	}
 	
-	private void checkElement(final IRLangSourceElement element) {
+	private void checkElement(final @Nullable RLangSourceElement element) {
 		final List<DocuTag> tags= this.nextComment.getTags();
 		for (final DocuTag tag : tags) {
 			final RoxygenTagType tagType= RoxygenTagType.TYPES.get(tag.getText());
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RoxygenRCodeElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RoxygenRCodeElement.java
index 2e35ae8..baf8a90 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RoxygenRCodeElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RoxygenRCodeElement.java
@@ -16,32 +16,36 @@
 
 import java.util.List;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
 import org.eclipse.statet.ltk.ast.core.AstNode;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.ltk.model.core.LtkModelUtils;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 
 
-final class RoxygenRCodeElement implements IBuildSourceFrameElement {
+@NonNullByDefault
+final class RoxygenRCodeElement implements BuildSourceFrameElement {
 	
 	
-	private final IRLangSourceElement parent;
+	private final RLangSourceElement parent;
 	private final int number;
 	
 	private final RAstNode sourceNode;
-	private final List<? extends IRLangSourceElement> sourceChildrenProtected= RSourceElements.NO_R_SOURCE_CHILDREN;
+	private final List<? extends RLangSourceElement> sourceChildrenProtected= RSourceModel.NO_R_SOURCE_CHILDREN;
 	private BuildSourceFrame envir;
 	
 	
-	public RoxygenRCodeElement(final IRLangSourceElement parent, final int number, final BuildSourceFrame envir, final RAstNode node) {
+	public RoxygenRCodeElement(final RLangSourceElement parent, final int number, final BuildSourceFrame envir, final RAstNode node) {
 		this.parent= parent;
 		this.number= number;
 		this.sourceNode= node;
@@ -49,7 +53,7 @@
 	
 	
 	@Override
-	public void setSourceChildren(final List<? extends IRLangSourceElement> children) {
+	public void setSourceChildren(final List<? extends RLangSourceElement> children) {
 //		sourceChildrenProtected= children;
 	}
 	
@@ -66,17 +70,17 @@
 	
 	@Override
 	public int getElementType() {
-		return IRElement.R_DOC_EXAMPLE_CHUNK;
+		return RElement.R_DOC_EXAMPLE_CHUNK;
 	}
 	
 	@Override
-	public RElementName getElementName() {
+	public @Nullable RElementName getElementName() {
 		return null;
 	}
 	
 	@Override
 	public String getId() {
-		return Integer.toHexString(IRElement.R_DOC_EXAMPLE_CHUNK) + ":#" + this.number;
+		return Integer.toHexString(RElement.R_DOC_EXAMPLE_CHUNK) + ":#" + this.number;
 	}
 	
 	@Override
@@ -91,37 +95,37 @@
 	
 	
 	@Override
-	public IRElement getModelParent() {
+	public @Nullable RElement<?> getModelParent() {
 		return null;
 	}
 	
 	@Override
-	public boolean hasModelChildren(final Filter filter) {
+	public boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
 		return false;
 	}
 	
 	@Override
-	public List<? extends IRLangSourceElement> getModelChildren(final Filter filter) {
-		return RSourceElements.NO_R_SOURCE_CHILDREN;
+	public List<? extends RLangSourceElement> getModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+		return RSourceModel.NO_R_SOURCE_CHILDREN;
 	}
 	
 	@Override
-	public ISourceStructElement getSourceParent() {
+	public RLangSourceElement getSourceParent() {
 		return this.parent;
 	}
 	
 	@Override
-	public boolean hasSourceChildren(final Filter filter) {
-		return RSourceElements.hasChildren(this.sourceChildrenProtected, filter);
+	public boolean hasSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+		return LtkModelUtils.<RLangSourceElement>hasChildren(this.sourceChildrenProtected, filter);
 	}
 	
 	@Override
-	public List<? extends IRLangSourceElement> getSourceChildren(final Filter filter) {
-		return RSourceElements.getChildren(this.sourceChildrenProtected, filter);
+	public List<? extends RLangSourceElement> getSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter) {
+		return LtkModelUtils.<RLangSourceElement>getChildren(this.sourceChildrenProtected, filter);
 	}
 	
 	@Override
-	public IRSourceUnit getSourceUnit() {
+	public RSourceUnit getSourceUnit() {
 		return this.parent.getSourceUnit();
 	}
 	
@@ -132,23 +136,23 @@
 	}
 	
 	@Override
-	public TextRegion getNameSourceRange() {
+	public @Nullable TextRegion getNameSourceRange() {
 		return null;
 	}
 	
 	@Override
-	public TextRegion getDocumentationRange() {
+	public @Nullable TextRegion getDocumentationRange() {
 		return null;
 	}
 	
 	
 	@Override
 	@SuppressWarnings("unchecked")
-	public <T> T getAdapter(final Class<T> adapterType) {
+	public <T> @Nullable T getAdapter(final Class<T> adapterType) {
 		if (adapterType == AstNode.class) {
 			return (T) this.sourceNode;
 		}
-		if (adapterType == IRFrame.class) {
+		if (adapterType == RFrame.class) {
 			return (T) this.envir;
 		}
 		return null;
@@ -160,14 +164,17 @@
 	}
 	
 	@Override
-	public boolean equals(final Object obj) {
-		if (!(obj instanceof RoxygenRCodeElement)) {
-			return false;
+	public boolean equals(final @Nullable Object obj) {
+		if (this == obj) {
+			return true;
 		}
-		final RoxygenRCodeElement other= (RoxygenRCodeElement) obj;
-		return ( ((other.getElementType() & IModelElement.MASK_C3) == IRElement.R_DOC_EXAMPLE_CHUNK)
-				&& this.number == other.number
-				&& this.parent.equals(other.parent) );
+		if (obj instanceof RoxygenRCodeElement) {
+			final RoxygenRCodeElement other= (RoxygenRCodeElement) obj;
+			return ( ((other.getElementType() & LtkModelElement.MASK_C3) == RElement.R_DOC_EXAMPLE_CHUNK)
+					&& this.number == other.number
+					&& this.parent.equals(other.parent) );
+		}
+		return false;
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RoxygenTagType.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RoxygenTagType.java
index f0d4de5..eefdcb9 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RoxygenTagType.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/RoxygenTagType.java
@@ -18,9 +18,9 @@
 
 import org.eclipse.statet.internal.r.core.sourcemodel.RSourceElementByElementAccess.RClass;
 import org.eclipse.statet.internal.r.core.sourcemodel.RSourceElementByElementAccess.RMethod;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRFrameInSource;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
+import org.eclipse.statet.r.core.model.RElement;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
+import org.eclipse.statet.r.core.model.RSourceFrame;
 import org.eclipse.statet.r.core.rsource.ast.DocuTag;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
@@ -56,8 +56,8 @@
 				return 0x900;
 			}
 			@Override
-			public void analyze(final IRoxygenAnalyzeContext context, final DocuTag docuTag, final IRLangSourceElement element) {
-				if (element == null || (element.getElementType() & IRElement.MASK_C1) != IRElement.C1_METHOD) {
+			public void analyze(final RoxygenAnalyzeContext context, final DocuTag docuTag, final RLangSourceElement element) {
+				if (element == null || (element.getElementType() & RElement.MASK_C1) != RElement.C1_METHOD) {
 					return;
 				}
 				final int count= docuTag.getChildCount();
@@ -78,8 +78,8 @@
 				return 0x900;
 			}
 			@Override
-			public void analyze(final IRoxygenAnalyzeContext context, final DocuTag docuTag, final IRLangSourceElement element) {
-				if (element == null || (element.getElementType() & IRElement.MASK_C1) != IRElement.C1_CLASS) {
+			public void analyze(final RoxygenAnalyzeContext context, final DocuTag docuTag, final RLangSourceElement element) {
+				if (element == null || (element.getElementType() & RElement.MASK_C1) != RElement.C1_CLASS) {
 					return;
 				}
 				final int count= docuTag.getChildCount();
@@ -100,7 +100,7 @@
 				return 0x900;
 			}
 			@Override
-			public void analyze(final IRoxygenAnalyzeContext context, final DocuTag docuTag, final IRLangSourceElement element) {
+			public void analyze(final RoxygenAnalyzeContext context, final DocuTag docuTag, final RLangSourceElement element) {
 				if (element == null) {
 					return;
 				}
@@ -119,7 +119,7 @@
 				return (0x100 | SCAN_MODE_SYMBOL);
 			}
 			@Override
-			public void analyze(final IRoxygenAnalyzeContext context, final DocuTag docuTag, final IRLangSourceElement element) {
+			public void analyze(final RoxygenAnalyzeContext context, final DocuTag docuTag, final RLangSourceElement element) {
 				if (element == null) {
 					return;
 				}
@@ -138,7 +138,7 @@
 				return (0x100 | SCAN_MODE_SYMBOL);
 			}
 			@Override
-			public void analyze(final IRoxygenAnalyzeContext context, final DocuTag docuTag, final IRLangSourceElement element) {
+			public void analyze(final RoxygenAnalyzeContext context, final DocuTag docuTag, final RLangSourceElement element) {
 				if (element == null) {
 					return;
 				}
@@ -157,10 +157,10 @@
 				return (0x100 | SCAN_MODE_SYMBOL);
 			}
 			@Override
-			public void analyze(final IRoxygenAnalyzeContext context, final DocuTag docuTag, final IRLangSourceElement element) {
+			public void analyze(final RoxygenAnalyzeContext context, final DocuTag docuTag, final RLangSourceElement element) {
 				if (element == null
-						|| ((element.getElementType() & IRElement.MASK_C1) != IRElement.C1_CLASS
-								&& (element.getElementType() & IRElement.MASK_C1) != IRElement.C1_VARIABLE) ) {
+						|| ((element.getElementType() & RElement.MASK_C1) != RElement.C1_CLASS
+								&& (element.getElementType() & RElement.MASK_C1) != RElement.C1_VARIABLE) ) {
 					return;
 				}
 				final int count= docuTag.getChildCount();
@@ -178,10 +178,10 @@
 				return (0x100 | SCAN_MODE_SYMBOL);
 			}
 			@Override
-			public void analyze(final IRoxygenAnalyzeContext context, final DocuTag docuTag, final IRLangSourceElement element) {
+			public void analyze(final RoxygenAnalyzeContext context, final DocuTag docuTag, final RLangSourceElement element) {
 				if (element == null
-						|| ((element.getElementType() & IRElement.MASK_C1) != IRElement.C1_METHOD
-								&& (element.getElementType() & IRElement.MASK_C1) != IRElement.C1_VARIABLE) ) {
+						|| ((element.getElementType() & RElement.MASK_C1) != RElement.C1_METHOD
+								&& (element.getElementType() & RElement.MASK_C1) != RElement.C1_VARIABLE) ) {
 					return;
 				}
 				final int count= docuTag.getChildCount();
@@ -199,7 +199,7 @@
 				return (0x100 | SCAN_MODE_SYMBOL);
 			}
 			@Override
-			public void analyze(final IRoxygenAnalyzeContext context, final DocuTag docuTag, final IRLangSourceElement element) {
+			public void analyze(final RoxygenAnalyzeContext context, final DocuTag docuTag, final RLangSourceElement element) {
 				final int count= docuTag.getChildCount();
 				for (int i= 0; i < count; i++) {
 					final RAstNode child= docuTag.getChild(i);
@@ -215,7 +215,7 @@
 				return (0x100 | SCAN_MODE_SYMBOL);
 			}
 			@Override
-			public void analyze(final IRoxygenAnalyzeContext context, final DocuTag docuTag, final IRLangSourceElement element) {
+			public void analyze(final RoxygenAnalyzeContext context, final DocuTag docuTag, final RLangSourceElement element) {
 				final int count= docuTag.getChildCount();
 				if (count >= 1) {
 					RAstNode child= docuTag.getChild(0);
@@ -225,7 +225,7 @@
 					final String name= child.getText();
 					
 					if (count >= 2 && name != null) {
-						final IRFrameInSource frame= context.getNamespaceFrame(name);
+						final RSourceFrame frame= context.getNamespaceFrame(name);
 						if (frame != null) {
 							for (int i= 1; i < count; i++) {
 								child= docuTag.getChild(i);
@@ -244,7 +244,7 @@
 				return (0x100 | SCAN_MODE_SYMBOL);
 			}
 			@Override
-			public void analyze(final IRoxygenAnalyzeContext context, final DocuTag docuTag, final IRLangSourceElement element) {
+			public void analyze(final RoxygenAnalyzeContext context, final DocuTag docuTag, final RLangSourceElement element) {
 				final int count= docuTag.getChildCount();
 				if (count >= 1) {
 					final RAstNode child= docuTag.getChild(0);
@@ -260,7 +260,7 @@
 				return (0x100 | SCAN_MODE_SYMBOL);
 			}
 			@Override
-			public void analyze(final IRoxygenAnalyzeContext context, final DocuTag docuTag, final IRLangSourceElement element) {
+			public void analyze(final RoxygenAnalyzeContext context, final DocuTag docuTag, final RLangSourceElement element) {
 				final int count= docuTag.getChildCount();
 				if (count >= 1) {
 					final RAstNode child= docuTag.getChild(0);
@@ -276,7 +276,7 @@
 				return (0x100 | SCAN_MODE_RCODE);
 			}
 			@Override
-			public void analyze(final IRoxygenAnalyzeContext context, final DocuTag docuTag, final IRLangSourceElement element) {
+			public void analyze(final RoxygenAnalyzeContext context, final DocuTag docuTag, final RLangSourceElement element) {
 				final int count= docuTag.getChildCount();
 				if (count >= 1) {
 					final RAstNode child= docuTag.getChild(0);
@@ -295,7 +295,7 @@
 	
 	public abstract int getNextScanMode(int previous);
 	
-	public abstract void analyze(IRoxygenAnalyzeContext context, DocuTag docuTag, IRLangSourceElement element);
+	public abstract void analyze(RoxygenAnalyzeContext context, DocuTag docuTag, RLangSourceElement element);
 	
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SlaveAccess.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SlaveAccess.java
index c5eae16..35e93c4 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SlaveAccess.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SlaveAccess.java
@@ -16,9 +16,9 @@
 
 import org.eclipse.statet.jcommons.collections.ImList;
 
-import org.eclipse.statet.r.core.model.IRFrame;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 
 
@@ -46,7 +46,7 @@
 	}
 	
 	@Override
-	public IRFrame getFrame() {
+	public RFrame getFrame() {
 		return this.master.getFrame();
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SourceAnalyzer.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SourceAnalyzer.java
index 4b5f61f..910b00e 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SourceAnalyzer.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SourceAnalyzer.java
@@ -29,6 +29,8 @@
 import org.eclipse.core.runtime.OperationCanceledException;
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.internal.r.core.sourcemodel.BuildSourceFrame.ElementAccessList;
 import org.eclipse.statet.internal.r.core.sourcemodel.RSourceElementByElementAccess.RClass;
@@ -37,22 +39,22 @@
 import org.eclipse.statet.internal.r.core.sourcemodel.RSourceElementByElementAccess.RPkgImport;
 import org.eclipse.statet.internal.r.core.sourcemodel.RSourceElementByElementAccess.RSlot;
 import org.eclipse.statet.ltk.ast.core.AstInfo;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 import org.eclipse.statet.r.core.model.ArgsBuilder;
 import org.eclipse.statet.r.core.model.ArgsDefinition;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRFrameInSource;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RCoreFunctions;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
+import org.eclipse.statet.r.core.model.RSourceFrame;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 import org.eclipse.statet.r.core.rlang.RTerminal;
-import org.eclipse.statet.r.core.rsource.IRSourceConstants;
+import org.eclipse.statet.r.core.rsource.RSourceConstants;
 import org.eclipse.statet.r.core.rsource.ast.Arithmetic;
 import org.eclipse.statet.r.core.rsource.ast.Assignment;
 import org.eclipse.statet.r.core.rsource.ast.CForLoop;
@@ -71,10 +73,10 @@
 import org.eclipse.statet.r.core.rsource.ast.NullConst;
 import org.eclipse.statet.r.core.rsource.ast.NumberConst;
 import org.eclipse.statet.r.core.rsource.ast.Power;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
-import org.eclipse.statet.r.core.rsource.ast.RAst.FCallArgMatch;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.core.rsource.ast.RAstVisitor;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
+import org.eclipse.statet.r.core.rsource.ast.RAsts.FCallArgMatch;
 import org.eclipse.statet.r.core.rsource.ast.Relational;
 import org.eclipse.statet.r.core.rsource.ast.Seq;
 import org.eclipse.statet.r.core.rsource.ast.Sign;
@@ -89,7 +91,7 @@
 /**
  * Walks through the AST, analyzes element access, ...
  * 
- * Saves the information in {@link IRModelInfo}
+ * Saves the information in {@link RSourceUnitModelInfo}
  */
 public class SourceAnalyzer extends RAstVisitor {
 	
@@ -117,9 +119,10 @@
 	private static final Integer FIRST= Integer.valueOf(0);
 	
 	
-	private static final Comparator<ISourceStructElement> SOURCEELEMENT_SORTER= new Comparator<ISourceStructElement>() {
+	@SuppressWarnings("rawtypes")
+	private static final Comparator<SourceStructElement> SOURCEELEMENT_SORTER= new Comparator<SourceStructElement>() {
 		@Override
-		public int compare(final ISourceStructElement e1, final ISourceStructElement e2) {
+		public int compare(final SourceStructElement e1, final SourceStructElement e2) {
 			return e1.getSourceRange().getStartOffset() - e2.getSourceRange().getStartOffset();
 		}
 	};
@@ -149,14 +152,14 @@
 		
 		
 		private final SourceElementBuilder parent;
-		private final IBuildSourceFrameElement element;
+		private final BuildSourceFrameElement element;
 		private final List<RSourceElementByElementAccess> children;
 		
 		private final List<ElementAccess> toCheck;
 		private final BuildSourceFrame envir;
 		
 		
-		SourceElementBuilder(final IBuildSourceFrameElement element,
+		SourceElementBuilder(final BuildSourceFrameElement element,
 				final SourceElementBuilder parent, final BuildSourceFrame envir) {
 			super(RETURN_SOURCE_CONTAINTER);
 			this.element= element;
@@ -192,20 +195,20 @@
 		
 	}
 	
-	private class RoxygenAdapter implements IRoxygenAnalyzeContext {
+	private class RoxygenAdapter implements RoxygenAnalyzeContext {
 		
 		
-		private RSourceModelInfo modelInfo;
+		private RSourceUnitModelInfoImpl modelInfo;
 		private int counter;
 		
 		
 		@Override
-		public IRModelInfo getModelInfo() {
+		public RSourceUnitModelInfo getModelInfo() {
 			return this.modelInfo;
 		}
 		
 		@Override
-		public void createSelfAccess(final IRLangSourceElement element, final RAstNode symbol) {
+		public void createSelfAccess(final RLangSourceElement element, final RAstNode symbol) {
 			final String text= symbol.getText();
 			if (text == null) {
 				return;
@@ -232,7 +235,7 @@
 		}
 		
 		@Override
-		public void createNamespaceObjectImportAccess(final IRFrameInSource namespace, final RAstNode symbol) {
+		public void createNamespaceObjectImportAccess(final RSourceFrame namespace, final RAstNode symbol) {
 			final String text= symbol.getText();
 			if (text == null) {
 				return;
@@ -275,11 +278,11 @@
 		}
 		
 		@Override
-		public IRFrameInSource getNamespaceFrame(final String name) {
-			final String id= BuildSourceFrame.createId(IRFrame.PACKAGE, name, -1);
+		public @Nullable RSourceFrame getNamespaceFrame(final String name) {
+			final String id= BuildSourceFrame.createId(RFrame.PACKAGE, name, -1);
 			BuildSourceFrame frame= this.modelInfo.namespaceFrames.get(id);
 			if (frame == null) {
-				frame= new BuildSourceFrame.DefScope(IRFrame.PACKAGE, id, name, null);
+				frame= new BuildSourceFrame.DefScope(RFrame.PACKAGE, id, name, null);
 				this.modelInfo.namespaceFrames.put(id, frame);
 				return frame;
 			}
@@ -296,9 +299,9 @@
 			if (accessList == null) {
 				return;
 			}
-			final List<? extends IRLangSourceElement> children= rClass.getSourceChildren(null);
-			for (final IRLangSourceElement child : children) {
-				if (child.getElementType() == IRElement.R_S4SLOT
+			final List<? extends RLangSourceElement> children= rClass.getSourceChildren(null);
+			for (final RLangSourceElement child : children) {
+				if (child.getElementType() == RElement.R_S4SLOT
 						&& text.equals(child.getElementName().getSegmentName())) {
 					final ElementAccess access= new ElementAccess.Slot(symbol.getRParent(), symbol);
 					accessList.postAdd(access);
@@ -317,9 +320,9 @@
 			if (accessList == null) {
 				return;
 			}
-			final List<? extends IRLangSourceElement> children= rMethod.getSourceChildren(null);
-			for (final IRLangSourceElement child : children) {
-				if (child.getElementType() == IRElement.R_ARGUMENT
+			final List<? extends RLangSourceElement> children= rMethod.getSourceChildren(null);
+			for (final RLangSourceElement child : children) {
+				if (child.getElementType() == RElement.R_ARGUMENT
 						&& text.equals(child.getElementName().getSegmentName())) {
 					final ElementAccess access= new ElementAccess.Default(symbol.getRParent(), symbol);
 					access.flags |= ElementAccess.A_ARG;
@@ -346,7 +349,7 @@
 			catch (final InvocationTargetException unused) {}
 		}
 		
-		public void update(final RSourceModelInfo modelInfo) {
+		public void update(final RSourceUnitModelInfoImpl modelInfo) {
 			this.modelInfo= modelInfo;
 			SourceAnalyzer.this.roxygenAnalyzer.updateModel(SourceAnalyzer.this.roxygenAdapter);
 		}
@@ -354,8 +357,8 @@
 	}
 	
 	
-	private IRSourceUnit sourceUnit;
-	private List<RChunkBuildElement> chunkElements;
+	private RSourceUnit sourceUnit;
+	private List<EmbeddedRBuildElement> chunkElements;
 	private AstInfo ast;
 	
 	private int anonymCount;
@@ -367,19 +370,19 @@
 	private BuildSourceFrame genericDefaultEnvir;
 	private BuildSourceFrame topLevelEnvir;
 	private BuildSourceFrame topScope;
-	private PackageReferences packageRefs;
+	private BasicPackageReferences packageRefs;
 	
 	private final LinkedList<RAstNode> argValueToIgnore= new LinkedList<>();
 	private int[] request= NO_REQUESTS;
-	private Object returnValue;
+	private @Nullable Object returnValue;
 	
 	private final ArrayList<SourceElementBuilder> sourceContainerBuilders= new ArrayList<>();
 	private SourceElementBuilder currentSourceContainerBuilder;
 	
 	private RCoreFunctions configuredRDef;
-	private final Map<String, IFCallAnalyzer> fCallAnalyzers= new HashMap<>();
-	private IFCallAnalyzer fCallFallback;
-	private final IFCallAnalyzer fCallNoAnalysis= new IFCallAnalyzer() {
+	private final Map<String, FCallAnalyzer> fCallAnalyzers= new HashMap<>();
+	private FCallAnalyzer fCallFallback;
+	private final FCallAnalyzer fCallNoAnalysis= new FCallAnalyzer() {
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
@@ -406,7 +409,7 @@
 	public void configure(final RCoreFunctions rdef) {
 		this.configuredRDef= rdef;
 		this.fCallAnalyzers.clear();
-		IFCallAnalyzer analyzer;
+		FCallAnalyzer analyzer;
 		
 		this.fCallAnalyzers.put(RCoreFunctions.BASE_ASSIGN_NAME, new BaseAssign(rdef));
 		analyzer= new BaseRemove(rdef);
@@ -507,7 +510,7 @@
 	}
 	
 	
-	public IRModelInfo createModel(final IRSourceUnit u, final AstInfo ast) {
+	public RSourceUnitModelInfo createModel(final RSourceUnit u, final AstInfo ast) {
 		if (!(ast.getRoot() instanceof SourceComponent)) {
 			throw new IllegalArgumentException("ast"); //$NON-NLS-1$
 		}
@@ -525,7 +528,7 @@
 			
 			finish();
 			this.ast= new AstInfo(AstInfo.LEVEL_MODEL_DEFAULT, ast);
-			final RSourceModelInfo modelInfo= new RSourceModelInfo(this.ast, this.frames, this.topLevelEnvir,
+			final RSourceUnitModelInfoImpl modelInfo= new RSourceUnitModelInfoImpl(this.ast, this.frames, this.topLevelEnvir,
 					this.packageRefs, this.dependencyEnvironments, fileElement );
 			
 			this.roxygenExamples= false;
@@ -584,7 +587,7 @@
 	}
 	
 	
-	public void beginChunkSession(final IRSourceUnit su, final AstInfo ast) {
+	public void beginChunkSession(final RSourceUnit su, final AstInfo ast) {
 		this.anonymCount= 0;
 		this.sourceUnit= su;
 		this.ast= ast;
@@ -595,7 +598,7 @@
 		init();
 	}
 	
-	public void processChunk(final RChunkBuildElement element, final List<SourceComponent> rootNodes) {
+	public void processChunk(final EmbeddedRBuildElement element, final List<SourceComponent> rootNodes) {
 		try {
 			this.chunkElements.add(element);
 			for (final SourceComponent sourceComponent : rootNodes) {
@@ -617,11 +620,11 @@
 		catch (final InvocationTargetException e) {}
 	}
 	
-	public IRModelInfo stopChunkSession() {
+	public RSourceUnitModelInfo stopChunkSession() {
 		try {
 			finish();
 			
-			final RSourceModelInfo modelInfo= new RSourceModelInfo(this.ast, this.frames,
+			final RSourceUnitModelInfoImpl modelInfo= new RSourceUnitModelInfoImpl(this.ast, this.frames,
 					this.topLevelEnvir, this.packageRefs, this.dependencyEnvironments,
 					new CompositeSourceElement(this.sourceUnit, this.topLevelEnvir,
 							this.chunkElements, this.ast.getRoot() ));
@@ -638,17 +641,17 @@
 	private void init() {
 		this.frames= new LinkedHashMap<>();
 		this.dependencyEnvironments= new HashMap<>();
-		final String projId= (this.sourceUnit instanceof IWorkspaceSourceUnit) ?
-				((IWorkspaceSourceUnit) this.sourceUnit).getResource().getProject().getName() :
+		final String projId= (this.sourceUnit instanceof WorkspaceSourceUnit) ?
+				((WorkspaceSourceUnit)this.sourceUnit).getResource().getProject().getName() :
 				"<noproject:" + this.sourceUnit.getElementName(); //$NON-NLS-1$
 		
-		final BuildSourceFrame fileEnvir= new BuildSourceFrame.DefScope(IRFrame.PROJECT,
-				BuildSourceFrame.createId(IRFrame.PROJECT, projId, 0), null,
+		final BuildSourceFrame fileEnvir= new BuildSourceFrame.DefScope(RFrame.PROJECT,
+				BuildSourceFrame.createId(RFrame.PROJECT, projId, 0), null,
 				new BuildSourceFrame[0] ); // ref projects
 		
 		this.currentEnvironments.add(fileEnvir);
 		this.genericDefaultEnvir= this.topLevelEnvir= this.globalEnvir= fileEnvir;
-		this.packageRefs= new PackageReferences();
+		this.packageRefs= new BasicPackageReferences();
 		this.topScope= this.currentEnvironments.get(this.currentEnvironments.size() - 1);
 		
 		this.idComponents.add(projId);
@@ -678,11 +681,11 @@
 				for (final RSourceElementByElementAccess element : seb.children) {
 					final String name= element.getElementName().getDisplayName();
 					final HashMap<String, Integer> names;
-					switch (element.type & IModelElement.MASK_C1) {
-					case IModelElement.C1_CLASS:
+					switch (element.type & LtkModelElement.MASK_C1) {
+					case LtkModelElement.C1_CLASS:
 						names= classNames;
 						break;
-					case IModelElement.C1_IMPORT:
+					case LtkModelElement.C1_IMPORT:
 						names= importNames;
 						break;
 					default:
@@ -705,11 +708,11 @@
 						}
 						commonNames.put(access.getSegmentName(), null);
 						seb.children.add(new RSourceElementByElementAccess.RVariable(seb.element,
-								(seb.envir != this.topLevelEnvir) ? IRElement.R_GENERAL_LOCAL_VARIABLE : IRElement.R_GENERAL_VARIABLE, access));
+								(seb.envir != this.topLevelEnvir) ? RElement.R_GENERAL_LOCAL_VARIABLE : RElement.R_GENERAL_VARIABLE, access));
 					}
 					else {
 	//					seb.children.add(new RSourceElementFromElementAccess.RVariable(seb.element,
-	//							IRLangElement.R_COMMON_VARIABLE, access));
+	//							RLangElement.R_COMMON_VARIABLE, access));
 					}
 				}
 				
@@ -726,7 +729,7 @@
 			
 			if (this.chunkElements != null && !this.chunkElements.isEmpty()) {
 				final HashMap<String, Integer> names= commonNames;
-				for (final RChunkBuildElement element : this.chunkElements) {
+				for (final EmbeddedRBuildElement element : this.chunkElements) {
 					final String name= element.getElementName().getDisplayName();
 					final Integer occ= names.get(name);
 					if (occ == null) {
@@ -777,10 +780,10 @@
 	
 	
 	private BuildSourceFrame getPkgEnvir(final String name) {
-		final String id= BuildSourceFrame.createId(IRFrame.PACKAGE, name, ++this.anonymCount);
+		final String id= BuildSourceFrame.createId(RFrame.PACKAGE, name, ++this.anonymCount);
 		BuildSourceFrame envir= this.dependencyEnvironments.get(id);
 		if (envir == null) {
-			envir= new BuildSourceFrame.DefScope(IRFrame.PACKAGE, id, name, new BuildSourceFrame[0]);
+			envir= new BuildSourceFrame.DefScope(RFrame.PACKAGE, id, name, new BuildSourceFrame[0]);
 			this.dependencyEnvironments.put(id, envir);
 		}
 		return envir;
@@ -814,7 +817,7 @@
 		return access;
 	}
 	
-	protected final void enterElement(final IBuildSourceFrameElement element, final BuildSourceFrame envir, final RAstNode node) {
+	protected final void enterElement(final BuildSourceFrameElement element, final BuildSourceFrame envir, final RAstNode node) {
 		this.currentSourceContainerBuilder= new SourceElementBuilder(element, this.currentSourceContainerBuilder, envir);
 		envir.addFrameElement(element);
 		this.frames.put(envir.getFrameId(), envir);
@@ -834,8 +837,8 @@
 	private Object registerSourceElement(final Object value, final ElementAccess access) {
 		if (value instanceof RSourceElementByElementAccess) {
 			final RSourceElementByElementAccess element= (RSourceElementByElementAccess) value;
-			if ((element.getElementType() & IModelElement.MASK_C1) == IModelElement.C1_METHOD) {
-				registerFunctionElement((RMethod) value, element.getElementType(), access, null);
+			if ((element.getElementType() & LtkModelElement.MASK_C1) == LtkModelElement.C1_METHOD) {
+				registerFunctionElement((RMethod)value, element.getElementType(), access, null);
 				return null;
 			}
 			
@@ -850,17 +853,17 @@
 		return value;
 	}
 	
-	private void registerAnonFunctionElement(final RMethod rMethod, final IRFrame frame) {
+	private void registerAnonFunctionElement(final RMethod rMethod, final RFrame<RLangSourceElement> frame) {
 		final AnonymousAccess access= new AnonymousAccess(rMethod.getFDefNode(), frame);
 		rMethod.complete(access, createMethodArgDef(rMethod.getFDefNode(), null));
 		access.getNode().addAttachment(rMethod);
 	}
 	
 	private void registerFunctionElement(final RMethod rMethod, int type,
-			final ElementAccess access, final Signature sig) {
-		if (rMethod.getElementType() == IRElement.R_COMMON_FUNCTION) {
-			final IRFrame frame= access.getFrame();
-			if (frame != null && (frame.getFrameType() == IRFrame.FUNCTION || frame.getFrameType() == IRFrame.CLASS)) {
+			final ElementAccess access, final @Nullable Signature sig) {
+		if (rMethod.getElementType() == RElement.R_COMMON_FUNCTION) {
+			final RFrame frame= access.getFrame();
+			if (frame != null && (frame.getFrameType() == RFrame.FUNCTION || frame.getFrameType() == RFrame.CLASS)) {
 				// make sure it is marked as local
 				type |= 0x1;
 			}
@@ -974,9 +977,9 @@
 	
 	@Override
 	public void visit(final FDef node) throws InvocationTargetException {
-		final BuildSourceFrame envir= new BuildSourceFrame.DefScope(IRFrame.FUNCTION,
-				BuildSourceFrame.createId(IRFrame.FUNCTION, null, ++this.anonymCount),
-				null, new BuildSourceFrame[] { this.topScope } );
+		final BuildSourceFrame envir= new BuildSourceFrame.DefScope(RFrame.FUNCTION,
+				BuildSourceFrame.createId(RFrame.FUNCTION, null, ++this.anonymCount),
+				null, new @NonNull BuildSourceFrame[] { this.topScope } );
 		this.currentEnvironments.add(envir);
 		this.topScope= envir;
 		
@@ -1006,7 +1009,7 @@
 	@Override
 	public void visit(final FDef.Arg node) throws InvocationTargetException {
 		final RAstNode nameNode= node.getNameChild();
-		if ((nameNode.getStatusCode() & IRSourceConstants.STATUSFLAG_REAL_ERROR) == 0) {
+		if ((nameNode.getStatusCode() & RSourceConstants.STATUSFLAG_REAL_ERROR) == 0) {
 			final ElementAccess access= new ElementAccess.Default(node);
 			access.flags= ElementAccess.A_WRITE | ElementAccess.A_ARG;
 			access.nameNode= nameNode;
@@ -1014,7 +1017,7 @@
 			
 			if (this.currentSourceContainerBuilder != null) {
 				this.currentSourceContainerBuilder.children.add(new RSourceElementByElementAccess.RVariable(
-						this.currentSourceContainerBuilder.element, IRElement.R_ARGUMENT, access));
+						this.currentSourceContainerBuilder.element, RElement.R_ARGUMENT, access));
 			}
 		}
 		
@@ -1049,7 +1052,7 @@
 			break;
 		}
 		
-		IFCallAnalyzer specialist= null;
+		FCallAnalyzer specialist= null;
 		if (name != null) {
 			specialist= this.fCallAnalyzers.get(name);
 		}
@@ -1071,7 +1074,7 @@
 		this.returnValue= null;
 	}
 	
-	public RMethod visitAndCheckValue(final FCall.Arg node, final String name) throws InvocationTargetException {
+	public @Nullable RMethod visitAndCheckValue(final FCall.Arg node, final String name) throws InvocationTargetException {
 		assert (name != null);
 		if (node != null) {
 			final RAstNode valueNode= node.getValueChild();
@@ -1086,7 +1089,7 @@
 					access.nameNode= node.getNameChild();
 					this.currentSourceContainerBuilder.envir.addRunResolve(name, access);
 					
-					registerFunctionElement(rMethod, IRElement.R_COMMON_LOCAL_FUNCTION, access, null);
+					registerFunctionElement(rMethod, RElement.R_COMMON_LOCAL_FUNCTION, access, null);
 					this.returnValue= null;
 					return rMethod;
 				}
@@ -1293,13 +1296,13 @@
 	}
 	
 	
-	private String resolveElementName(final RAstNode node, final ElementAccess access,
+	private @Nullable String resolveElementName(final RAstNode node, final ElementAccess access,
 			final boolean allowString) throws InvocationTargetException {
 		switch (node.getNodeType()) {
 		case SYMBOL:
 			return resolveElementName((Symbol) node, access);
 		case STRING_CONST:
-			if (allowString && ((node.getStatusCode() & IRSourceConstants.STATUSFLAG_REAL_ERROR) == 0)) {
+			if (allowString && ((node.getStatusCode() & RSourceConstants.STATUSFLAG_REAL_ERROR) == 0)) {
 				access.nameNode= node;
 				return node.getText();
 			}
@@ -1326,15 +1329,15 @@
 		return null;
 	}
 	
-	private String resolveElementName(final Symbol node, final ElementAccess access) {
-		if ((node.getStatusCode() & IRSourceConstants.STATUSFLAG_REAL_ERROR) == 0) {
+	private @Nullable String resolveElementName(final Symbol node, final ElementAccess access) {
+		if ((node.getStatusCode() & RSourceConstants.STATUSFLAG_REAL_ERROR) == 0) {
 			access.nameNode= node;
 			return node.getText();
 		}
 		return null;
 	}
 	
-	private String resolveElementName(final SubIndexed node, final ElementAccess access)
+	private @Nullable String resolveElementName(final SubIndexed node, final ElementAccess access)
 			throws InvocationTargetException {
 		final RAstNode child= node.getRefChild();
 		final String name= resolveElementName(child, access, false);
@@ -1348,7 +1351,7 @@
 		return null;
 	}
 	
-	private String resolvePartName(final SubNamed node, final ElementAccess access)
+	private @Nullable String resolvePartName(final SubNamed node, final ElementAccess access)
 			throws InvocationTargetException {
 		final RAstNode child= node.getRefChild();
 		final String name= resolveElementName(child, access, false);
@@ -1360,7 +1363,7 @@
 		return null;
 	}
 	
-	private String resolveSlotName(final SubNamed node, final ElementAccess access)
+	private @Nullable String resolveSlotName(final SubNamed node, final ElementAccess access)
 			throws InvocationTargetException {
 		final RAstNode child= node.getRefChild();
 		final String name= resolveElementName(child, access, false);
@@ -1389,7 +1392,7 @@
 		// register explicit
 		BuildSourceFrame envir;
 		if (namespaceName != null &&
-				((node.getElementChild().getStatusCode() & IRSourceConstants.STATUSFLAG_REAL_ERROR) == 0)) {
+				((node.getElementChild().getStatusCode() & RSourceConstants.STATUSFLAG_REAL_ERROR) == 0)) {
 			envir= getPkgEnvir(namespaceName);
 		}
 		else {
@@ -1404,7 +1407,7 @@
 	private boolean isValidPackageName(final RAstNode node) {
 		switch (node.getNodeType()) {
 		case SYMBOL:
-			return ((node.getStatusCode() & IRSourceConstants.STATUSFLAG_REAL_ERROR) == 0);
+			return ((node.getStatusCode() & RSourceConstants.STATUSFLAG_REAL_ERROR) == 0);
 		case STRING_CONST:
 			// TODO check
 			return true;
@@ -1414,13 +1417,13 @@
 	}
 	
 	
-	protected static interface IFCallAnalyzer {
+	protected static interface FCallAnalyzer {
 		
 		public void visit(FCall node, boolean assignment) throws InvocationTargetException;
 		
 	}
 	
-	protected class CommonVarNamedRead implements IFCallAnalyzer {
+	protected class CommonVarNamedRead implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_name;
@@ -1435,7 +1438,7 @@
 		@Override
 		public final void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode nameValue= args.getArgValueNode(this.argIdx_name);
 			
 			if (nameValue != null && nameValue.getNodeType() == NodeType.STRING_CONST) {
@@ -1459,7 +1462,7 @@
 		
 	}
 	
-	protected final class CommonDefBased implements IFCallAnalyzer {
+	protected final class CommonDefBased implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		
@@ -1480,7 +1483,7 @@
 		@Override
 		public final void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			
 			ITER_ARGS: for (int i= 0; i < args.allocatedArgs.length; i++) {
 				final RAstNode argValue= args.getArgValueNode(i);
@@ -1534,7 +1537,7 @@
 	}
 	
 	
-	protected final class BaseAssign implements IFCallAnalyzer {
+	protected final class BaseAssign implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_x;
@@ -1550,7 +1553,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.returnValue= null;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode xNode= args.getArgValueNode(this.argIdx_x);
 			final RAstNode valueNode= args.getArgValueNode(this.argIdx_value);
 			
@@ -1582,7 +1585,7 @@
 		
 	}
 	
-	protected final class BaseRemove implements IFCallAnalyzer {
+	protected final class BaseRemove implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		
@@ -1593,7 +1596,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			
 			if (args.ellipsisArgs.length > 0) {
 				for (int i= 0; i < args.ellipsisArgs.length; i++) {
@@ -1637,7 +1640,7 @@
 		
 	}
 	
-	protected final class BaseGet implements IFCallAnalyzer {
+	protected final class BaseGet implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_x;
@@ -1652,7 +1655,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode xNode= args.getArgValueNode(this.argIdx_x);
 			
 			if (xNode != null && xNode.getNodeType() == NodeType.STRING_CONST) {
@@ -1676,7 +1679,7 @@
 		
 	}
 	
-	protected final class BaseSave implements IFCallAnalyzer {
+	protected final class BaseSave implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		
@@ -1687,7 +1690,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			
 			if (args.ellipsisArgs.length > 0) {
 				for (int i= 0; i < args.ellipsisArgs.length; i++) {
@@ -1717,7 +1720,7 @@
 		
 	}
 	
-	protected final class BaseCall implements IFCallAnalyzer {
+	protected final class BaseCall implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_fName;
@@ -1730,7 +1733,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode nameNode= args.getArgValueNode(this.argIdx_fName);
 			
 			if (nameNode != null && nameNode.getNodeType() == NodeType.STRING_CONST) {
@@ -1748,7 +1751,7 @@
 		
 	}
 	
-	protected final class BaseDoCall implements IFCallAnalyzer {
+	protected final class BaseDoCall implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_fName;
@@ -1761,7 +1764,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode nameNode= args.getArgValueNode(this.argIdx_fName);
 			
 			if (nameNode != null) {
@@ -1780,7 +1783,7 @@
 		
 	}
 	
-	private abstract class BaseCommonPackageLoad implements IFCallAnalyzer {
+	private abstract class BaseCommonPackageLoad implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_packageName;
@@ -1796,7 +1799,7 @@
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
 			
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode nameValue= args.getArgValueNode(this.argIdx_packageName);
 			if (nameValue != null 
 					&& (nameValue.getNodeType() == NodeType.STRING_CONST
@@ -1843,7 +1846,7 @@
 	}
 	
 	
-	protected final class BaseGlobalenv implements IFCallAnalyzer {
+	protected final class BaseGlobalenv implements FCallAnalyzer {
 		
 		public BaseGlobalenv(final RCoreFunctions rdef) {
 		}
@@ -1857,7 +1860,7 @@
 		
 	}
 	
-	protected final class BaseTopenv implements IFCallAnalyzer {
+	protected final class BaseTopenv implements FCallAnalyzer {
 		
 		public BaseTopenv(final RCoreFunctions rdef) {
 		}
@@ -1872,7 +1875,7 @@
 		
 	}
 	
-	protected final class BaseC implements IFCallAnalyzer {
+	protected final class BaseC implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		
@@ -1885,7 +1888,7 @@
 			Object returnValue= null;
 			REQUEST: for (int i= 0; i < SourceAnalyzer.this.request.length; i++) {
 				if (SourceAnalyzer.this.request[i] == RETURN_STRING_ARRAY) {
-					final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+					final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 					final RAstNode[] array= new RAstNode[args.ellipsisArgs.length];
 					for (int j= 0; j < array.length; j++) {
 						final FCall.Arg argNode= args.ellipsisArgs[j];
@@ -1912,7 +1915,7 @@
 		
 	}
 	
-	private abstract class MethodsCommonSetGeneric implements IFCallAnalyzer {
+	private abstract class MethodsCommonSetGeneric implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_fName;
@@ -1933,7 +1936,7 @@
 		@Override
 		public final void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode fNameNode= args.getArgValueNode(this.argIdx_fName);
 			
 			if (fNameNode != null && fNameNode.getNodeType() == NodeType.STRING_CONST) {
@@ -1944,10 +1947,10 @@
 				
 				SourceAnalyzer.this.argValueToIgnore.add(fNameNode);
 				
-				final BuildSourceFrame envir= new BuildSourceFrame.RunScope(IRFrame.FUNCTION, BuildSourceFrame.createId(IRFrame.FUNCTION, access.getSegmentName(), ++SourceAnalyzer.this.anonymCount), SourceAnalyzer.this.topScope);
+				final BuildSourceFrame envir= new BuildSourceFrame.RunScope(RFrame.FUNCTION, BuildSourceFrame.createId(RFrame.FUNCTION, access.getSegmentName(), ++SourceAnalyzer.this.anonymCount), SourceAnalyzer.this.topScope);
 				if (SourceAnalyzer.this.currentSourceContainerBuilder != null) {
 					final RMethod rMethod= new RMethod(SourceAnalyzer.this.currentSourceContainerBuilder.element, 
-							IRElement.R_GENERIC_FUNCTION, access, envir);
+							RElement.R_GENERIC_FUNCTION, access, envir);
 					registerFunctionElement(rMethod);
 					
 					enterElement(rMethod, envir, node);
@@ -2056,7 +2059,7 @@
 		
 	}
 	
-	protected final class MethodsRemoveGeneric implements IFCallAnalyzer {
+	protected final class MethodsRemoveGeneric implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_fName;
@@ -2069,7 +2072,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode fNameNode= args.getArgValueNode(this.argIdx_fName);
 			
 			if (fNameNode != null && fNameNode.getNodeType() == NodeType.STRING_CONST) {
@@ -2087,7 +2090,7 @@
 		
 	}
 	
-	protected final class MethodsSignature implements IFCallAnalyzer {
+	protected final class MethodsSignature implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		
@@ -2098,7 +2101,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			Object returnValue= null;
 			
 			if (args.ellipsisArgs.length > 0) {
@@ -2128,7 +2131,7 @@
 		
 	}
 	
-	protected final class MethodsSetClass implements IFCallAnalyzer {
+	protected final class MethodsSetClass implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_className;
@@ -2147,7 +2150,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			
 			final ElementAccess access= new ElementAccess.Class(node);
 			access.flags= ElementAccess.A_WRITE;
@@ -2163,7 +2166,7 @@
 			}
 			SourceAnalyzer.this.genericDefaultEnvir.addClass(name, access);
 			
-			final BuildSourceFrame envir= new BuildSourceFrame.RunScope(IRFrame.CLASS, BuildSourceFrame.createId(IRFrame.CLASS, access.getSegmentName(), ++SourceAnalyzer.this.anonymCount), 
+			final BuildSourceFrame envir= new BuildSourceFrame.RunScope(RFrame.CLASS, BuildSourceFrame.createId(RFrame.CLASS, access.getSegmentName(), ++SourceAnalyzer.this.anonymCount), 
 					SourceAnalyzer.this.topScope);
 			
 			if (SourceAnalyzer.this.currentSourceContainerBuilder != null) {
@@ -2224,7 +2227,7 @@
 		
 	}
 	
-	protected final class MethodsSetClassUnion implements IFCallAnalyzer {
+	protected final class MethodsSetClassUnion implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_className;
@@ -2239,7 +2242,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode classNameValue= args.getArgValueNode(this.argIdx_className);
 			final RAstNode superClassNamesValue= args.getArgValueNode(this.argIdx_superClassNames);
 			
@@ -2256,7 +2259,7 @@
 			}
 			SourceAnalyzer.this.genericDefaultEnvir.addClass(name, access);
 			
-			final BuildSourceFrame envir= new BuildSourceFrame.RunScope(IRFrame.CLASS, BuildSourceFrame.createId(IRFrame.CLASS, access.getSegmentName(), ++SourceAnalyzer.this.anonymCount), 
+			final BuildSourceFrame envir= new BuildSourceFrame.RunScope(RFrame.CLASS, BuildSourceFrame.createId(RFrame.CLASS, access.getSegmentName(), ++SourceAnalyzer.this.anonymCount), 
 					SourceAnalyzer.this.topScope);
 			if (SourceAnalyzer.this.currentSourceContainerBuilder != null) {
 				final RClass rClass= new RSourceElementByElementAccess.RClass(SourceAnalyzer.this.currentSourceContainerBuilder.element, access, envir);
@@ -2297,7 +2300,7 @@
 		
 	}
 	
-	protected final class MethodsRepresentation implements IFCallAnalyzer {
+	protected final class MethodsRepresentation implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		
@@ -2308,9 +2311,9 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			final boolean requested= (SourceAnalyzer.this.request == REPRESENTATION_REQUEST // || isRequested(REG_CLASS_REPRESENTATION)
-					&& SourceAnalyzer.this.currentSourceContainerBuilder.element.getElementType() == IRElement.R_S4CLASS);
+					&& SourceAnalyzer.this.currentSourceContainerBuilder.element.getElementType() == RElement.R_S4CLASS);
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			
 			if (args.ellipsisArgs.length > 0) {
 				final RSourceElementByElementAccess.RClass rClass= requested ?
@@ -2365,7 +2368,7 @@
 		
 	}
 	
-	protected final class MethodsPrototype implements IFCallAnalyzer {
+	protected final class MethodsPrototype implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		
@@ -2376,9 +2379,9 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			final boolean requested= (SourceAnalyzer.this.request == PROTOTYPE_REQUEST // || isRequested(REG_CLASS_REPRESENTATION)
-					&& SourceAnalyzer.this.currentSourceContainerBuilder.element.getElementType() == IRElement.R_S4CLASS);
+					&& SourceAnalyzer.this.currentSourceContainerBuilder.element.getElementType() == RElement.R_S4CLASS);
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			
 			if (args.ellipsisArgs.length > 0) {
 				final RSourceElementByElementAccess.RClass classDef= requested ?
@@ -2395,7 +2398,7 @@
 							access.nameNode= slotNameNode;
 							SourceAnalyzer.this.currentSourceContainerBuilder.envir.addRunResolve(slotName, access);
 							for (final RSourceElementByElementAccess child : SourceAnalyzer.this.currentSourceContainerBuilder.children) {
-								if (child.getElementType() == IRElement.R_S4SLOT
+								if (child.getElementType() == RElement.R_S4SLOT
 										&& slotName.equals(child.getElementName().getSegmentName()) ) {
 									slot= (RSlot) child;
 									break;
@@ -2420,7 +2423,7 @@
 		
 	}
 	
-	protected final class MethodsSetIs implements IFCallAnalyzer {
+	protected final class MethodsSetIs implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_className;
@@ -2441,7 +2444,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode classNameNode= args.getArgValueNode(this.argIdx_className);
 			final RAstNode cToExtendNameNode= args.getArgValueNode(this.argIdx_classToExtendName);
 			RClassExt rClassExt= null;
@@ -2455,8 +2458,8 @@
 				
 				SourceAnalyzer.this.argValueToIgnore.add(classNameNode);
 				
-				envir= new BuildSourceFrame.RunScope(IRFrame.FUNCTION,
-						BuildSourceFrame.createId(IRFrame.FUNCTION, access.getSegmentName(), ++SourceAnalyzer.this.anonymCount),
+				envir= new BuildSourceFrame.RunScope(RFrame.FUNCTION,
+						BuildSourceFrame.createId(RFrame.FUNCTION, access.getSegmentName(), ++SourceAnalyzer.this.anonymCount),
 						SourceAnalyzer.this.topScope );
 				if (SourceAnalyzer.this.currentSourceContainerBuilder != null) {
 					rClassExt= new RClassExt(SourceAnalyzer.this.currentSourceContainerBuilder.element, access, envir, "setIs");
@@ -2500,7 +2503,7 @@
 	}
 	
 	
-	protected final class MethodsRemoveClass implements IFCallAnalyzer {
+	protected final class MethodsRemoveClass implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_className;
@@ -2513,7 +2516,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode classNameNode= args.getArgValueNode(this.argIdx_className);
 			
 			if (classNameNode != null && classNameNode.getNodeType() == NodeType.STRING_CONST) {
@@ -2532,7 +2535,7 @@
 		
 	}
 	
-	protected final class MethodsSetAs implements IFCallAnalyzer {
+	protected final class MethodsSetAs implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_className;
@@ -2547,7 +2550,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode classNameNode= args.getArgValueNode(this.argIdx_className);
 			final RAstNode toClassNode= args.getArgValueNode(this.argIdx_toClass);
 			
@@ -2575,7 +2578,7 @@
 		
 	}
 	
-	protected final class MethodsSetValidity implements IFCallAnalyzer {
+	protected final class MethodsSetValidity implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_className;
@@ -2588,7 +2591,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode classNameNode= args.getArgValueNode(this.argIdx_className);
 			
 			if (classNameNode != null && classNameNode.getNodeType() == NodeType.STRING_CONST) {
@@ -2607,7 +2610,7 @@
 		
 	}
 	
-	private abstract class MethodsCommonClassRead implements IFCallAnalyzer {
+	private abstract class MethodsCommonClassRead implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_className;
@@ -2620,7 +2623,7 @@
 		@Override
 		public final void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode classNameNode= args.getArgValueNode(this.argIdx_className);
 			
 			if (classNameNode != null && classNameNode.getNodeType() == NodeType.STRING_CONST) {
@@ -2674,7 +2677,7 @@
 		
 	}
 	
-	protected final class MethodsSetMethod implements IFCallAnalyzer {
+	protected final class MethodsSetMethod implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_fName;
@@ -2691,7 +2694,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode fNameArg= args.getArgValueNode(this.argIdx_fName);
 			final RAstNode fDefArg= args.getArgValueNode(this.argIdx_fDef);
 			
@@ -2712,17 +2715,17 @@
 				RMethod rMethod;
 				if (SourceAnalyzer.this.returnValue instanceof RMethod) {
 					rMethod= (RMethod) SourceAnalyzer.this.returnValue;
-					registerFunctionElement(rMethod, IRElement.R_S4METHOD, access, sig);
+					registerFunctionElement(rMethod, RElement.R_S4METHOD, access, sig);
 				}
 				else {
-					final BuildSourceFrame envir= new BuildSourceFrame.DefScope(IRFrame.FUNCTION,
-							BuildSourceFrame.createId(IRFrame.FUNCTION, access.getSegmentName(), ++SourceAnalyzer.this.anonymCount),
+					final BuildSourceFrame envir= new BuildSourceFrame.DefScope(RFrame.FUNCTION,
+							BuildSourceFrame.createId(RFrame.FUNCTION, access.getSegmentName(), ++SourceAnalyzer.this.anonymCount),
 							access.getSegmentName(), new BuildSourceFrame[] { SourceAnalyzer.this.topLevelEnvir } );
 					if (SourceAnalyzer.this.currentSourceContainerBuilder != null) {
-						rMethod= new RMethod(SourceAnalyzer.this.currentSourceContainerBuilder.element, IRElement.R_S4METHOD, access, envir);
+						rMethod= new RMethod(SourceAnalyzer.this.currentSourceContainerBuilder.element, RElement.R_S4METHOD, access, envir);
 						enterElement(rMethod, envir, node);
 						leaveElement();
-						registerFunctionElement(rMethod, IRElement.R_S4METHOD, access, sig);
+						registerFunctionElement(rMethod, RElement.R_S4METHOD, access, sig);
 					}
 					else {
 						addEnvirInsteadOfElement(envir, node);
@@ -2737,7 +2740,7 @@
 		
 	}
 	
-	protected final class MethodsRemoveMethod implements IFCallAnalyzer {
+	protected final class MethodsRemoveMethod implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_fName;
@@ -2752,7 +2755,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode fNameArg= args.getArgValueNode(this.argIdx_fName);
 			
 			if (fNameArg != null && fNameArg.getNodeType() == NodeType.STRING_CONST) {
@@ -2773,7 +2776,7 @@
 		
 	}
 	
-	protected final class MethodsRemoveMethods implements IFCallAnalyzer {
+	protected final class MethodsRemoveMethods implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_fName;
@@ -2786,7 +2789,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode fNameArg= args.getArgValueNode(this.argIdx_fName);
 			
 			if (fNameArg != null && fNameArg.getNodeType() == NodeType.STRING_CONST) {
@@ -2804,7 +2807,7 @@
 		
 	}
 	
-	private class MethodsCommonMethodRead implements IFCallAnalyzer {
+	private class MethodsCommonMethodRead implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_fName;
@@ -2817,7 +2820,7 @@
 		@Override
 		public final void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode fNameNode= args.getArgValueNode(this.argIdx_fName);
 			
 			if (fNameNode != null && fNameNode.getNodeType() == NodeType.STRING_CONST) {
@@ -2866,7 +2869,7 @@
 		
 	}
 	
-	protected final class MethodsSlot implements IFCallAnalyzer {
+	protected final class MethodsSlot implements FCallAnalyzer {
 		
 		private final ArgsDefinition argsDef;
 		private final int argIdx_object;
@@ -2882,7 +2885,7 @@
 		@Override
 		public void visit(final FCall node, final boolean assignment) throws InvocationTargetException {
 			SourceAnalyzer.this.request= NO_REQUESTS;
-			final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.argsDef);
+			final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.argsDef);
 			final RAstNode objectArg= args.getArgValueNode(this.argIdx_object);
 			final RAstNode slotArg= args.getArgValueNode(this.argIdx_slotName);
 			
@@ -2909,7 +2912,7 @@
 	}
 	
 	
-	protected final class NoDefFallback implements IFCallAnalyzer {
+	protected final class NoDefFallback implements FCallAnalyzer {
 		
 		public NoDefFallback() {
 		}
@@ -2964,7 +2967,7 @@
 //		
 //	}
 	
-	private Signature readSignature(final RAstNode refNode, final RAstNode sigNode) throws InvocationTargetException {
+	private @Nullable Signature readSignature(final RAstNode refNode, final @Nullable RAstNode sigNode) throws InvocationTargetException {
 		if (sigNode != null) {
 			this.request= SIGNATURE_REQUESTS;
 			this.returnValue= null;
@@ -2994,7 +2997,7 @@
 		return null;
 	}
 	
-	public static ArgsDefinition createMethodArgDef(final FDef fdefNode, final Signature sig) {
+	public static ArgsDefinition createMethodArgDef(final @Nullable FDef fdefNode, final @Nullable Signature sig) {
 		final FDef.Args argList= (fdefNode != null) ? fdefNode.getArgsChild() : null;
 		final ArgsBuilder b= new ArgsBuilder();
 		if (argList != null) {
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubAbstractElementAccess.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubAbstractElementAccess.java
index 84dd319..0706c14 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubAbstractElementAccess.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubAbstractElementAccess.java
@@ -20,18 +20,21 @@
 
 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.jcommons.lang.Nullable;
 
-import org.eclipse.statet.r.core.model.IRFrame;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
 
 
+@NonNullByDefault
 abstract class SubAbstractElementAccess extends RElementAccess {
 	
 	
 	private final ElementAccess root;
 	
-	SubAbstractElementAccess nextSegment;
+	@Nullable SubAbstractElementAccess nextSegment;
 	
 	
 	public SubAbstractElementAccess(final ElementAccess root) {
@@ -50,17 +53,17 @@
 	}
 	
 	@Override
-	public RElementName getScope() {
+	public @Nullable RElementName getScope() {
 		return null;
 	}
 	
 	@Override
-	public final RElementAccess getNextSegment() {
+	public final @Nullable RElementAccess getNextSegment() {
 		return this.nextSegment;
 	}
 	
 	@Override
-	public final IRFrame getFrame() {
+	public final RFrame getFrame() {
 		return this.root.getFrame();
 	}
 	
@@ -87,12 +90,13 @@
 			RElementAccess me= this.root;
 			while (true) {
 				me= me.getNextSegment();
-				if (me.getSegmentName() == null) {
-					return null;
+				final String segmentName;
+				if (me == null || (segmentName= me.getSegmentName()) == null) {
+					continue ITER_ACCESS;
 				}
 				element= element.getNextSegment();
 				if (element == null || me.getType() != element.getType() 
-						|| !me.getSegmentName().equals(element.getSegmentName())) {
+						|| !segmentName.equals(element.getSegmentName()) ) {
 					continue ITER_ACCESS;
 				}
 				if (me == this) {
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubIndexedDElementAccess.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubIndexedDElementAccess.java
index a4a2f33..a1cdfff 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubIndexedDElementAccess.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubIndexedDElementAccess.java
@@ -14,7 +14,10 @@
 
 package org.eclipse.statet.internal.r.core.sourcemodel;
 
+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.jcommons.lang.Nullable;
 
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
@@ -22,6 +25,7 @@
 import org.eclipse.statet.r.core.rsource.ast.SubIndexed;
 
 
+@NonNullByDefault
 final class SubIndexedDElementAccess extends SubAbstractElementAccess {
 	
 	
@@ -40,7 +44,7 @@
 	}
 	
 	@Override
-	public final String getSegmentName() {
+	public final @Nullable String getSegmentName() {
 		return null;
 	}
 	
@@ -50,14 +54,14 @@
 	}
 	
 	@Override
-	public final RAstNode getNameNode() {
+	public final @Nullable RAstNode getNameNode() {
 		return null;
 	}
 	
 	
 	@Override
 	public final ImList<? extends RElementAccess> getAllInUnit(final boolean includeSlaves) {
-		return null;
+		return ImCollections.newList();
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubIndexedSElementAccess.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubIndexedSElementAccess.java
index 3e34cba..842b5e3 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubIndexedSElementAccess.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubIndexedSElementAccess.java
@@ -14,7 +14,10 @@
 
 package org.eclipse.statet.internal.r.core.sourcemodel;
 
+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.jcommons.lang.Nullable;
 
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
@@ -22,6 +25,7 @@
 import org.eclipse.statet.r.core.rsource.ast.SubIndexed;
 
 
+@NonNullByDefault
 final class SubIndexedSElementAccess extends SubAbstractElementAccess {
 	
 	
@@ -40,7 +44,7 @@
 	}
 	
 	@Override
-	public final String getSegmentName() {
+	public final @Nullable String getSegmentName() {
 		return null;
 	}
 	
@@ -50,14 +54,14 @@
 	}
 	
 	@Override
-	public final RAstNode getNameNode() {
+	public final @Nullable RAstNode getNameNode() {
 		return null;
 	}
 	
 	
 	@Override
 	public final ImList<? extends RElementAccess> getAllInUnit(final boolean includeSlaves) {
-		return null;
+		return ImCollections.newList();
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedPartSemanticElementAccess.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedPartSemanticElementAccess.java
index 4986c07..70b1533 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedPartSemanticElementAccess.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedPartSemanticElementAccess.java
@@ -14,10 +14,14 @@
 
 package org.eclipse.statet.internal.r.core.sourcemodel;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 
 
+@NonNullByDefault
 final class SubNamedPartSemanticElementAccess extends SubAbstractElementAccess {
 	
 	
@@ -36,7 +40,7 @@
 	}
 	
 	@Override
-	public final String getSegmentName() {
+	public final @Nullable String getSegmentName() {
 		return this.nameNode.getText();
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedPartSyntacticElementAccess.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedPartSyntacticElementAccess.java
index e25a341..a6648ad 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedPartSyntacticElementAccess.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedPartSyntacticElementAccess.java
@@ -14,11 +14,15 @@
 
 package org.eclipse.statet.internal.r.core.sourcemodel;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.core.rsource.ast.SubNamed;
 
 
+@NonNullByDefault
 final class SubNamedPartSyntacticElementAccess extends SubAbstractElementAccess {
 	
 	
@@ -37,7 +41,7 @@
 	}
 	
 	@Override
-	public final String getSegmentName() {
+	public final @Nullable String getSegmentName() {
 		return this.node.getSubnameChild().getText();
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedSlotSemanticElementAccess.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedSlotSemanticElementAccess.java
index 2a3df16..5fba214 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedSlotSemanticElementAccess.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedSlotSemanticElementAccess.java
@@ -14,10 +14,14 @@
 
 package org.eclipse.statet.internal.r.core.sourcemodel;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 
 
+@NonNullByDefault
 final class SubNamedSlotSemanticElementAccess extends SubAbstractElementAccess {
 	
 	
@@ -36,7 +40,7 @@
 	}
 	
 	@Override
-	public final String getSegmentName() {
+	public final @Nullable String getSegmentName() {
 		return this.nameNode.getText();
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedSlotSyntacticElementAccess.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedSlotSyntacticElementAccess.java
index 47c79e6..f85754a 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedSlotSyntacticElementAccess.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SubNamedSlotSyntacticElementAccess.java
@@ -14,11 +14,15 @@
 
 package org.eclipse.statet.internal.r.core.sourcemodel;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.core.rsource.ast.SubNamed;
 
 
+@NonNullByDefault
 final class SubNamedSlotSyntacticElementAccess extends SubAbstractElementAccess {
 	
 	
@@ -37,7 +41,7 @@
 	}
 	
 	@Override
-	public final String getSegmentName() {
+	public final @Nullable String getSegmentName() {
 		return this.node.getSubnameChild().getText();
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SyntaxProblemReporter.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SyntaxProblemReporter.java
index 35f2845..56bdda9 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SyntaxProblemReporter.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/sourcemodel/SyntaxProblemReporter.java
@@ -15,44 +15,44 @@
 package org.eclipse.statet.internal.r.core.sourcemodel;
 
 import static org.eclipse.statet.ltk.ast.core.AstNode.NA_OFFSET;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_NUMBER_HEX_DIGIT_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_NUMBER_HEX_FLOAT_EXP_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_NUMBER_INT_WITH_DEC_POINT;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_NUMBER_NON_INT_WITH_L;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_HEX_DIGIT_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_NOT_CLOSED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNKOWN;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_TEXT_NULLCHAR;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS12_SYNTAX_TEXT_INVALID;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS12_SYNTAX_TOKEN_UNEXPECTED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS12_SYNTAX_TOKEN_UNKNOWN;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_CC_NOT_CLOSED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_CONDITION_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_CONDITION_NOT_CLOSED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_ELEMENTNAME_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AFTER_OP_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_ARGVALUE_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_BODY_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_CONDITION_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_FORSEQ_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_BEFORE_OP_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_IN_GROUP_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_FCALL_NOT_CLOSED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_FDEF_ARGS_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_FDEF_ARGS_NOT_CLOSED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_IF_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_IN_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_OPERATOR_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_SYMBOL_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUSFLAG_SUBSEQUENT;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS_MASK_12;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS_MASK_123;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS_MASK_3;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS_OK;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS_RUNTIME_ERROR;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_HEX_DIGIT_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_HEX_FLOAT_EXP_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_INT_WITH_DEC_POINT;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_NON_INT_WITH_L;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_HEX_DIGIT_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNKOWN;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_TEXT_NULLCHAR;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS12_SYNTAX_TEXT_INVALID;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS12_SYNTAX_TOKEN_UNEXPECTED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS12_SYNTAX_TOKEN_UNKNOWN;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_CC_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_CONDITION_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_CONDITION_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_ELEMENTNAME_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AFTER_OP_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_ARGVALUE_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_BODY_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_CONDITION_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_FORSEQ_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_BEFORE_OP_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_IN_GROUP_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_FCALL_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_FDEF_ARGS_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_FDEF_ARGS_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_IF_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_IN_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_OPERATOR_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_SYMBOL_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUSFLAG_SUBSEQUENT;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS_MASK_12;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS_MASK_123;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS_MASK_3;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS_OK;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS_RUNTIME_ERROR;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
@@ -74,11 +74,11 @@
 import org.eclipse.statet.ltk.issues.core.BasicProblem;
 import org.eclipse.statet.ltk.issues.core.Problem;
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.r.core.rsource.IRSourceConstants;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.rsource.RSourceConstants;
 import org.eclipse.statet.r.core.rsource.ast.Arithmetic;
 import org.eclipse.statet.r.core.rsource.ast.Assignment;
 import org.eclipse.statet.r.core.rsource.ast.Block;
@@ -128,7 +128,7 @@
 	
 	private final boolean reportSubsequent= false;
 	
-	private ISourceUnit sourceUnit;
+	private SourceUnit sourceUnit;
 	private SourceContent sourceContent;
 	private String currentText;
 	private ProblemRequestor currentRequestor;
@@ -143,7 +143,7 @@
 	}
 	
 	
-	public void run(final IRSourceUnit su, final SourceContent content,
+	public void run(final RSourceUnit su, final SourceContent content,
 			final RAstNode node, final ProblemRequestor problemRequestor) {
 		try {
 			this.sourceUnit= su;
@@ -295,7 +295,7 @@
 		final int code= (node.getStatusCode() & MASK);
 		if (requiredCheck(code)) {
 			try {
-//				STATUS: switch ((code & IRSourceConstants.STATUS_MASK_2)) {
+//				STATUS: switch ((code & RSourceConstants.STATUS_MASK_2)) {
 //				default:
 					handleCommonCodes(node, code);
 //					break STATUS;
@@ -649,7 +649,7 @@
 		final int code= (node.getStatusCode() & MASK);
 		if (requiredCheck(code)) {
 			try {
-				if ((code & STATUS_MASK_123) == (IRSourceConstants.STATUS123_SYNTAX_SEQREL_UNEXPECTED)) {
+				if ((code & STATUS_MASK_123) == (RSourceConstants.STATUS123_SYNTAX_SEQREL_UNEXPECTED)) {
 					addProblem(Problem.SEVERITY_ERROR, code, this.messageBuilder.bind(
 							ProblemMessages.Syntax_TokenUnexpected_SeqRel_message,
 							node.getOperator(0).text ),
@@ -789,7 +789,7 @@
 		if (requiredCheck(code)) {
 			try {
 				STATUS: switch ((code & STATUS_MASK_12)) {
-				case IRSourceConstants.STATUS2_SYNTAX_SUBINDEXED_NOT_CLOSED:
+				case RSourceConstants.STATUS2_SYNTAX_SUBINDEXED_NOT_CLOSED:
 					if (node.getNodeType() == NodeType.SUB_INDEXED_S) {
 						addProblem(Problem.SEVERITY_ERROR, code, this.messageBuilder.bind(
 								ProblemMessages.Syntax_SubindexedNotClosed_S_message,
@@ -1122,19 +1122,19 @@
 				case STATUS2_SYNTAX_EXPR_AS_BODY_MISSING:
 				{
 					final String message;
-					STATUS3: switch (code & IRSourceConstants.STATUS_MASK_3) {
-					case IRSourceConstants.STATUS3_IF:
+					STATUS3: switch (code & RSourceConstants.STATUS_MASK_3) {
+					case RSourceConstants.STATUS3_IF:
 						message= ProblemMessages.Syntax_ExprAsThenBodyMissing_message;
 						break STATUS3;
-					case IRSourceConstants.STATUS3_ELSE:
+					case RSourceConstants.STATUS3_ELSE:
 						message= ProblemMessages.Syntax_ExprAsElseBodyMissing_message;
 						break STATUS3;
-					case IRSourceConstants.STATUS3_FOR:
-					case IRSourceConstants.STATUS3_WHILE:
-					case IRSourceConstants.STATUS3_REPEAT:
+					case RSourceConstants.STATUS3_FOR:
+					case RSourceConstants.STATUS3_WHILE:
+					case RSourceConstants.STATUS3_REPEAT:
 						message= ProblemMessages.Syntax_ExprAsLoopBodyMissing_message;
 						break STATUS3;
-					case IRSourceConstants.STATUS3_FDEF:
+					case RSourceConstants.STATUS3_FDEF:
 						message= ProblemMessages.Syntax_ExprAsFdefBodyMissing_message;
 						break STATUS3;
 					default:
@@ -1157,7 +1157,7 @@
 							node.getStartOffset() - 1, node.getEndOffset() + 1 );
 					break STATUS;
 				case STATUS2_SYNTAX_EXPR_AS_ARGVALUE_MISSING:
-					if ((code & STATUS_MASK_3) == IRSourceConstants.STATUS3_FDEF) {
+					if ((code & STATUS_MASK_3) == RSourceConstants.STATUS3_FDEF) {
 						addProblem(Problem.SEVERITY_ERROR, code,
 								ProblemMessages.Syntax_ExprAsFdefArgDefaultMissing_message,
 								node.getStartOffset() - 1, node.getEndOffset() );
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RResourceUnit.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/BasicRResourceSourceUnit.java
similarity index 72%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RResourceUnit.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/BasicRResourceSourceUnit.java
index 1e2dff5..e20fb01 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RResourceUnit.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/BasicRResourceSourceUnit.java
@@ -18,9 +18,11 @@
 
 import org.eclipse.core.resources.IFile;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 
-import org.eclipse.statet.ltk.core.ElementName;
 import org.eclipse.statet.ltk.model.core.impl.AbstractFilePersistenceSourceUnitFactory;
 import org.eclipse.statet.ltk.model.core.impl.GenericResourceSourceUnit;
 import org.eclipse.statet.r.core.model.RElementName;
@@ -29,7 +31,9 @@
 /**
  * Generic source unit for R related files.
  */
-public abstract class RResourceUnit extends GenericResourceSourceUnit {
+@NonNullByDefault
+public abstract class BasicRResourceSourceUnit
+		extends GenericResourceSourceUnit {
 	
 	
 	public static String createResourceId(final URI uri) {
@@ -37,9 +41,9 @@
 	}
 	
 	@Deprecated
-	public static RResourceUnit createTempUnit(final IFile file, final String modelTypeId) {
+	public static BasicRResourceSourceUnit createTempUnit(final IFile file, final String modelTypeId) {
 		final String id= AbstractFilePersistenceSourceUnitFactory.createResourceId(file);
-		return new RResourceUnit(id, file) {
+		return new BasicRResourceSourceUnit(id, file) {
 			@Override
 			public String getModelTypeId() {
 				return modelTypeId;
@@ -52,16 +56,12 @@
 	}
 	
 	
-	public RResourceUnit(final String id, final IFile file) {
-		super(id, file);
+	public BasicRResourceSourceUnit(final String id, final IFile file) {
+		super(id, RElementName.create(RElementName.RESOURCE, file.getName()), file);
 	}
 	
-	@Override
-	protected ElementName createElementName() {
-		return RElementName.create(RElementName.RESOURCE, getResource().getName());
-	}
 	
-	public IRCoreAccess getRCoreAccess() {
+	public RCoreAccess getRCoreAccess() {
 		final RProject rProject= RProjects.getRProject(getResource().getProject());
 		return (rProject != null) ? rProject : RCore.WORKBENCH_ACCESS;
 	}
@@ -69,9 +69,9 @@
 	
 	@Override
 	@SuppressWarnings("unchecked")
-	public <T> T getAdapter(final Class<T> adapterType) {
-		if (adapterType == IRCoreAccess.class) {
-			return (T) getRCoreAccess();
+	public <T> @Nullable T getAdapter(final Class<T> adapterType) {
+		if (adapterType == RCoreAccess.class) {
+			return (T)getRCoreAccess();
 		}
 		return super.getAdapter(adapterType);
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RBuildpaths.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RBuildpaths.java
index 305001f..95c6ba0 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RBuildpaths.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RBuildpaths.java
@@ -20,14 +20,16 @@
 
 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.internal.r.core.RProjectNature;
-import org.eclipse.statet.ltk.buildpaths.core.BuildpathElementType;
-import org.eclipse.statet.ltk.buildpaths.core.IBuildpathAttribute;
-import org.eclipse.statet.ltk.buildpaths.core.IBuildpathElement;
+import org.eclipse.statet.ltk.buildpath.core.BuildpathAttribute;
+import org.eclipse.statet.ltk.buildpath.core.BuildpathElement;
+import org.eclipse.statet.ltk.buildpath.core.BuildpathElementType;
 import org.eclipse.statet.r.core.model.RModel;
 
 
+@NonNullByDefault
 public class RBuildpaths {
 	
 	
@@ -63,13 +65,15 @@
 	
 	
 	public static final BuildpathElementType R_SOURCE_TYPE= new BuildpathElementType(R_TYPE_ID,
-			IBuildpathElement.SOURCE, ImCollections.newList(
-					IBuildpathAttribute.FILTER_INCLUSIONS, IBuildpathAttribute.FILTER_EXCLUSIONS ));
+			BuildpathElement.SOURCE, ImCollections.newList(
+					BuildpathAttribute.FILTER_INCLUSIONS, BuildpathAttribute.FILTER_EXCLUSIONS ));
 	
 	
-	public static void set(final IProject project, final ImList<IBuildpathElement> rawBuildpath) {
+	public static void set(final IProject project, final ImList<BuildpathElement> rawBuildpath) {
 		final RProjectNature rProject= RProjectNature.getRProject(project);
-		rProject.saveBuildpath(rawBuildpath);
+		if (rProject != null) {
+			rProject.saveBuildpath(rawBuildpath);
+		}
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RCore.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RCore.java
index a3f94fb..b4a0efe 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RCore.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RCore.java
@@ -91,20 +91,20 @@
 	public static final String DEFAULT_RHELP_BROWSE_URL= RHelpHttpService.PORTABLE_URI_SCHEME + ":/browse/" + DEFAULT_WORKBENCH_ENV_ID + '/'; //$NON-NLS-1$
 	
 	
-	public static final IRCoreAccess WORKBENCH_ACCESS= RCorePlugin.getInstance().getWorkspaceRCoreAccess();
+	public static final RCoreAccess WORKBENCH_ACCESS= RCorePlugin.getInstance().getWorkspaceRCoreAccess();
 	
 	
 	/**
 	 * Usually used, if no other context (e.g. project) specified.
 	 */
-	public static IRCoreAccess getWorkbenchAccess() {
+	public static RCoreAccess getWorkbenchAccess() {
 		return WORKBENCH_ACCESS;
 	}
 	
 	/**
 	 * Usually only used in special cases like preference dialogs.
 	 */
-	public static IRCoreAccess getDefaultsAccess() {
+	public static RCoreAccess getDefaultsAccess() {
 		return RCorePlugin.getInstance().getDefaultsRCoreAccess();
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/IRCoreAccess.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RCoreAccess.java
similarity index 90%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/IRCoreAccess.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RCoreAccess.java
index a8e6fb9..00d2bc1 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/IRCoreAccess.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RCoreAccess.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.statet.r.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.preferences.core.PreferenceAccess;
 
 import org.eclipse.statet.rj.renv.core.REnv;
@@ -22,7 +24,8 @@
 /**
  * Interface to access R Core services, respecting the scope.
  */
-public interface IRCoreAccess {
+@NonNullByDefault
+public interface RCoreAccess {
 	
 	
 	PreferenceAccess getPrefs();
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RProject.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RProject.java
index 2132c71..5e0be2c 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RProject.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/RProject.java
@@ -26,11 +26,11 @@
 import org.eclipse.statet.ecommons.preferences.core.PreferenceAccess;
 
 import org.eclipse.statet.internal.r.core.RProjectNature;
-import org.eclipse.statet.ltk.buildpaths.core.IBuildpathElement;
+import org.eclipse.statet.ltk.buildpath.core.BuildpathElement;
 
 
 @NonNullByDefault
-public interface RProject extends PreferenceAccess, IRCoreAccess {
+public interface RProject extends PreferenceAccess, RCoreAccess {
 	
 	
 	String BUILD_PREF_QUALIFIER= RCore.BUNDLE_ID + "/build/RProject"; //$NON-NLS-1$
@@ -50,7 +50,7 @@
 	IProject getProject();
 	
 	
-	ImList<IBuildpathElement> getRawBuildpath();
+	ImList<BuildpathElement> getRawBuildpath();
 	
 	
 	/**
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/data/CombinedRElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/data/CombinedRElement.java
index 285cef5..5b5a955 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/data/CombinedRElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/data/CombinedRElement.java
@@ -19,20 +19,21 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.r.core.model.IRLangElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.r.core.model.RLangElement;
 import org.eclipse.statet.rj.data.RObject;
 
 
 @NonNullByDefault
-public interface CombinedRElement extends IRLangElement, RObject {
+public interface CombinedRElement extends RLangElement<RLangElement<?>>, RObject {
 	
 	
 	@Override
 	@Nullable CombinedRElement getModelParent();
 	
 	@Override
-	boolean hasModelChildren(@Nullable Filter filter);
+	boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super RLangElement<?>> filter);
 	@Override
-	List<? extends CombinedRElement> getModelChildren(@Nullable Filter filter);
+	List<? extends CombinedRElement> getModelChildren(final @Nullable LtkModelElementFilter<? super RLangElement<?>> filter);
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/data/RValueValidator.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/data/RValueValidator.java
index 8b9f90a..f884778 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/data/RValueValidator.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/data/RValueValidator.java
@@ -17,8 +17,8 @@
 import org.eclipse.statet.jcommons.text.core.input.StringParserInput;
 
 import org.eclipse.statet.r.core.rlang.RTerminal;
-import org.eclipse.statet.r.core.rsource.IRSourceConstants;
 import org.eclipse.statet.r.core.rsource.RLexer;
+import org.eclipse.statet.r.core.rsource.RSourceConstants;
 import org.eclipse.statet.rj.data.RCharacterStore;
 import org.eclipse.statet.rj.data.RComplexStore;
 import org.eclipse.statet.rj.data.RFactorStore;
@@ -294,7 +294,7 @@
 			break;
 		}
 		
-		if ((this.lexer.getFlags() & IRSourceConstants.STATUSFLAG_REAL_ERROR) != 0) {
+		if ((this.lexer.getFlags() & RSourceConstants.STATUSFLAG_REAL_ERROR) != 0) {
 			return INVALID;
 		}
 		
@@ -371,7 +371,7 @@
 				this.complexValue.setNum(0, addSign(sign, value));
 				sign= (this.lexer.getType() == RTerminal.PLUS) ? 1 : -1;
 				nextToken= this.lexer.next();
-				if ((this.lexer.getFlags() & IRSourceConstants.STATUSFLAG_REAL_ERROR) != 0) {
+				if ((this.lexer.getFlags() & RSourceConstants.STATUSFLAG_REAL_ERROR) != 0) {
 					return INVALID;
 				}
 				switch (nextToken) {
@@ -483,7 +483,7 @@
 			this.lexer.reset(new StringParserInput(expression).init());
 			
 			if (this.lexer.next() != RTerminal.STRING_D
-					|| (this.lexer.getFlags() & IRSourceConstants.STATUSFLAG_REAL_ERROR) != 0) {
+					|| (this.lexer.getFlags() & RSourceConstants.STATUSFLAG_REAL_ERROR) != 0) {
 				return false;
 			}
 			expression= this.lexer.getText();
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/ArgsBuilder.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/ArgsBuilder.java
index 1830437..fbc4d70 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/ArgsBuilder.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/ArgsBuilder.java
@@ -18,6 +18,9 @@
 import java.util.List;
 
 import org.eclipse.statet.jcommons.lang.Builder;
+import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.r.core.model.ArgsDefinition.Arg;
 
@@ -25,6 +28,7 @@
 /**
  * Builder for {@link ArgsDefinition}
  */
+@NonNullByDefault
 public final class ArgsBuilder implements Builder<ArgsDefinition> {
 	
 	
@@ -35,24 +39,24 @@
 	}
 	
 	
-	public ArgsBuilder add(final String name) {
+	public ArgsBuilder add(final @Nullable String name) {
 		this.args.add(new Arg(this.args.size(), name, 0, null));
 		return this;
 	}
 	
-	public ArgsBuilder add(final String... name) {
+	public ArgsBuilder add(final @Nullable String... name) {
 		for (int i= 0; i < name.length; i++) {
 			this.args.add(new Arg(this.args.size(), name[i], 0, null));
 		}
 		return this;
 	}
 	
-	public ArgsBuilder add(final String name, final int type) {
+	public ArgsBuilder add(final @Nullable String name, final int type) {
 		this.args.add(new Arg(this.args.size(), name, type, null));
 		return this;
 	}
 	
-	public ArgsBuilder add(final String name, final int type, final String className) {
+	public ArgsBuilder add(final @Nullable String name, final int type, final @Nullable String className) {
 		this.args.add(new Arg(this.args.size(), name, type, className));
 		return this;
 	}
@@ -60,7 +64,7 @@
 	
 	@Override
 	public ArgsDefinition build() {
-		return new ArgsDefinition(this.args.toArray(new Arg[this.args.size()]));
+		return new ArgsDefinition(this.args.toArray(new @NonNull Arg[this.args.size()]));
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/ArgsDefinition.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/ArgsDefinition.java
index 4d6882b..f7f937e 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/ArgsDefinition.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/ArgsDefinition.java
@@ -17,11 +17,15 @@
 import java.io.Serializable;
 
 import org.eclipse.statet.jcommons.lang.Immutable;
+import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 
 /**
  * Formals of an R function
  */
+@NonNullByDefault
 public final class ArgsDefinition implements Immutable, Serializable {
 	
 	
@@ -61,12 +65,12 @@
 		
 		
 		public final int index;
-		public final String name;
+		public final @Nullable String name;
 		public final int type;
-		public final String className;
+		public final @Nullable String className;
 //		String defaultAsCode;
 		
-		Arg(final int index, final String name, final int type, final String className) {
+		Arg(final int index, final @Nullable String name, final int type, final @Nullable String className) {
 			this.index= index;
 			this.name= name;
 			this.type= type;
@@ -83,7 +87,7 @@
 	 * For more detailed definitions, use an {@link ArgsBuilder}.
 	 */
 	public ArgsDefinition(final String... argNames) {
-		this.args= new Arg[argNames.length];
+		this.args= new @NonNull Arg[argNames.length];
 		for (int i= 0; i < argNames.length; i++) {
 			this.args[i]= new Arg(i, argNames[i], 0, null);
 		}
@@ -98,19 +102,23 @@
 		return this.args.length;
 	}
 	
+	@SuppressWarnings("null")
 	public boolean contains(final String argName) {
 		for (int i= 0; i < this.args.length; i++) {
-			if (this.args[i].name.equals(argName)) {
+			final Arg arg= this.args[i];
+			if (arg.name != null && arg.name.equals(argName)) {
 				return true;
 			}
 		}
 		return false;
 	}
 	
-	public Arg get(final String argName) {
+	@SuppressWarnings("null")
+	public @Nullable Arg get(final String argName) {
 		for (int i= 0; i < this.args.length; i++) {
-			if (this.args[i].name.equals(argName)) {
-				return this.args[i];
+			final Arg arg= this.args[i];
+			if (arg.name != null && arg.name.equals(argName)) {
+				return arg;
 			}
 		}
 		return null;
@@ -120,10 +128,12 @@
 		return this.args[argIndex];
 	}
 	
+	@SuppressWarnings("null")
 	public int indexOf(final String argName) {
 		for (int i= 0; i < this.args.length; i++) {
-			if (this.args[i].name.equals(argName)) {
-				return this.args[i].index;
+			final Arg arg= this.args[i];
+			if (arg.name != null && arg.name.equals(argName)) {
+				return arg.index;
 			}
 		}
 		return -1;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IPackageReferences.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IPackageReferences.java
deleted file mode 100644
index 2acb697..0000000
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IPackageReferences.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2009, 2020 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.r.core.model;
-
-import java.util.List;
-import java.util.Set;
-
-
-/**
- * 
- */
-public interface IPackageReferences {
-	
-	public Set<String> getAllPackageNames();
-	
-	public boolean isImported(final String name);
-	
-	public List<? extends RElementAccess> getAllAccessOfPackage(
-			final String name);
-	
-}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRLangSourceElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRLangSourceElement.java
deleted file mode 100644
index ec3b622..0000000
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRLangSourceElement.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2008, 2020 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.r.core.model;
-
-import java.util.List;
-
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
-
-
-public interface IRLangSourceElement extends IRLangElement, ISourceStructElement {
-	
-	
-	@Override
-	public IRSourceUnit getSourceUnit();
-	
-	@Override
-	boolean hasModelChildren(IModelElement.Filter filter);
-	@Override
-	List<? extends IRLangSourceElement> getModelChildren(IModelElement.Filter filter);
-	
-	@Override
-	boolean hasSourceChildren(IModelElement.Filter filter);
-	@Override
-	List<? extends IRLangSourceElement> getSourceChildren(IModelElement.Filter filter);
-	
-}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRWorkspaceSourceUnit.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRWorkspaceSourceUnit.java
deleted file mode 100644
index e1d0dc8..0000000
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRWorkspaceSourceUnit.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2011, 2020 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.r.core.model;
-
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
-
-
-public interface IRWorkspaceSourceUnit extends IRSourceUnit, IWorkspaceSourceUnit {
-	
-}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRLangElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/PackageReferences.java
similarity index 75%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRLangElement.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/PackageReferences.java
index b37b173..a760d85 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRLangElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/PackageReferences.java
@@ -15,20 +15,23 @@
 package org.eclipse.statet.r.core.model;
 
 import java.util.List;
+import java.util.Set;
 
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceElement;
 
-
+/**
+ * 
+ */
 @NonNullByDefault
-public interface IRLangElement extends IRElement, ISourceElement {
+public interface PackageReferences {
 	
 	
-	@Override
-	boolean hasModelChildren(@Nullable Filter filter);
-	@Override
-	List<? extends IRLangElement> getModelChildren(@Nullable Filter filter);
+	Set<String> getAllPackageNames();
+	
+	boolean isImported(final String name);
+	
+	@Nullable List<? extends RElementAccess> getAllAccessOfPackage(final String name);
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RChunkElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RChunkElement.java
index dd90e2e..a1ecce3 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RChunkElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RChunkElement.java
@@ -15,19 +15,22 @@
 package org.eclipse.statet.r.core.model;
 
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
-import org.eclipse.statet.internal.r.core.sourcemodel.RChunkBuildElement;
+import org.eclipse.statet.internal.r.core.sourcemodel.EmbeddedRBuildElement;
 import org.eclipse.statet.ltk.ast.core.AstNode;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.r.core.rsource.ast.SourceComponent;
 
 
-public abstract class RChunkElement extends RChunkBuildElement implements IRLangSourceElement {
+@NonNullByDefault
+public abstract class RChunkElement extends EmbeddedRBuildElement implements RLangSourceElement {
 	
 	
-	public RChunkElement(final ISourceStructElement parent, final AstNode node,
-			final RElementName name, final TextRegion nameRegion) {
+	public RChunkElement(final SourceStructElement<?, ?> parent, final AstNode node,
+			final RElementName name, final @Nullable TextRegion nameRegion) {
 		super(parent, node, name, nameRegion);
 	}
 	
@@ -40,49 +43,14 @@
 	
 	
 	@Override
-	public final String getModelTypeId() {
-		return RModel.R_TYPE_ID;
-	}
-	
-	@Override
 	public final int getElementType() {
-		return IRElement.C2_SOURCE_CHUNK;
-	}
-	
-	@Override
-	public RElementName getElementName() {
-		return this.name;
-	}
-	
-	@Override
-	public String getId() {
-		return this.name.getSegmentName();
-	}
-	
-	@Override
-	public TextRegion getSourceRange() {
-		return this.node;
-	}
-	
-	@Override
-	public TextRegion getNameSourceRange() {
-		return this.nameRegion;
-	}
-	
-	@Override
-	public TextRegion getDocumentationRange() {
-		return null;
+		return RElement.C2_SOURCE_CHUNK;
 	}
 	
 	
 	@Override
-	public IRSourceUnit getSourceUnit() {
-		return (IRSourceUnit) this.parent.getSourceUnit();
-	}
-	
-	@Override
-	public boolean isReadOnly() {
-		return this.parent.isReadOnly();
+	public RSourceUnit getSourceUnit() {
+		return (RSourceUnit)this.parent.getSourceUnit();
 	}
 	
 	@Override
@@ -90,12 +58,17 @@
 		return this.parent.exists();
 	}
 	
+	@Override
+	public boolean isReadOnly() {
+		return this.parent.isReadOnly();
+	}
+	
 	
 	@Override
 	@SuppressWarnings("unchecked")
-	public <T> T getAdapter(final Class<T> adapterType) {
+	public <T> @Nullable T getAdapter(final Class<T> adapterType) {
 		if (adapterType == SourceComponent.class) {
-			return (T) getSourceComponents();
+			return (T)getSourceComponents();
 		}
 		return super.getAdapter(adapterType);
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRCompositeSourceElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RCompositeSourceElement.java
similarity index 78%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRCompositeSourceElement.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RCompositeSourceElement.java
index 294112d..f875f1a 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRCompositeSourceElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RCompositeSourceElement.java
@@ -16,10 +16,13 @@
 
 import java.util.List;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
-public interface IRCompositeSourceElement extends IRLangSourceElement {
+
+@NonNullByDefault
+public interface RCompositeSourceElement extends RLangSourceElement {
 	
 	
-	List<? extends IRLangSourceElement> getCompositeElements();
+	List<? extends RLangSourceElement> getCompositeElements();
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RCoreFunctions.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RCoreFunctions.java
index 45e9d22..a7c3e3b 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RCoreFunctions.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RCoreFunctions.java
@@ -31,8 +31,11 @@
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.collections.ImSet;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 
+@NonNullByDefault
 public class RCoreFunctions {
 	
 	
@@ -906,7 +909,7 @@
 		return this.nameDefMapIm.keySet();
 	}
 	
-	public ArgsDefinition getArgs(final String name) {
+	public @Nullable ArgsDefinition getArgs(final String name) {
 		return this.nameDefMap.get(name);
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RDocuLink.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RDocuLink.java
index 7f2303e..b37f21d 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RDocuLink.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RDocuLink.java
@@ -14,23 +14,26 @@
 
 package org.eclipse.statet.r.core.model;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.r.core.rsource.ast.DocuComment;
 
 
+@NonNullByDefault
 public class RDocuLink {
 	
 	
-	private final IRLangSourceElement element;
+	private final RLangSourceElement element;
 	private final DocuComment docuNode;
 	
 	
-	public RDocuLink(final IRLangSourceElement element, final DocuComment docuNode) {
+	public RDocuLink(final RLangSourceElement element, final DocuComment docuNode) {
 		this.element= element;
 		this.docuNode= docuNode;
 	}
 	
 	
-	public IRLangSourceElement getModelElement() {
+	public RLangSourceElement getModelElement() {
 		return this.element;
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RElement.java
similarity index 68%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRElement.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RElement.java
index 24df849..652546e 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RElement.java
@@ -16,10 +16,16 @@
 
 import java.util.List;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 
 
-public interface IRElement extends IModelElement {
+@NonNullByDefault
+public interface RElement<TModelChild extends RElement<?>>
+		extends LtkModelElement<TModelChild> {
 	
 	
 	static final int R_S4CLASS=                C1_CLASS    | 0x80;
@@ -40,9 +46,9 @@
 	static final int R_DOC_EXAMPLE_CHUNK=      C2_SOURCE_CHUNK | 0x4;
 	
 	
-	static final IModelElement.Filter R_S4SLOT_FILTER= new IModelElement.Filter() {
+	static final LtkModelElementFilter<RElement<?>> R_S4SLOT_FILTER= new LtkModelElementFilter<RElement<?>>() {
 		@Override
-		public boolean include(final IModelElement element) {
+		public boolean include(final RElement<?> element) {
 			return (element.getElementType() == R_S4SLOT);
 		}
 	};
@@ -52,11 +58,10 @@
 	RElementName getElementName();
 	
 	@Override
-	IRElement getModelParent();
-	
+	@Nullable RElement<? extends RElement<?>> getModelParent();
 	@Override
-	boolean hasModelChildren(IModelElement.Filter filter);
+	boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super TModelChild> filter);
 	@Override
-	List<? extends IRElement> getModelChildren(IModelElement.Filter filter);
+	List<? extends TModelChild> getModelChildren(final @Nullable LtkModelElementFilter<? super TModelChild> filter);
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RElementAccess.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RElementAccess.java
index 03f26c2..22690fd 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RElementAccess.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RElementAccess.java
@@ -36,45 +36,37 @@
 	
 	public static final Comparator<RElementAccess> NAME_POSITION_COMPARATOR=
 		new Comparator<RElementAccess>() {
-			private int comparePosition(final @Nullable RAstNode n1, final @Nullable RAstNode n2) {
-				if (n1 != null) {
-					if (n2 != null) {
-						return n1.getStartOffset() - n2.getStartOffset();
-					}
-					else {
-						return -1;
-					}
+			private int comparePosition(final @Nullable RAstNode node1, final @Nullable RAstNode node2) {
+				if (node1 == node2) {
+					return 0;
 				}
-				else {
-					if (n2 != null) {
-						return 1;
-					}
-					else {
-						return 0;
-					}
+				if (node1 == null) {
+					return -1;
 				}
+				if (node2 == null) {
+					return 1;
+				}
+				return Integer.compare(node1.getStartOffset(), node2.getStartOffset());
 			}
 			@Override
-			public int compare(RElementAccess o1, RElementAccess o2) {
-				int offset= comparePosition(o1.getNameNode(), o2.getNameNode());
-				while (offset == 0) {
-					o1= o1.getNextSegment();
-					o2= o2.getNextSegment();
-					if (o1 != null) {
-						if (o2 != null) {
-							offset= comparePosition(o1.getNameNode(), o2.getNameNode());
-						}
-						else {
-							return 1;
-						}
+			public int compare(final RElementAccess o1, final RElementAccess o2) {
+				if (o1 == o2) {
+					return 0;
+				}
+				RElementAccess segment1= o1;
+				RElementAccess segment2= o2;
+				int offset;
+				while ((offset= comparePosition(segment1.getNameNode(), segment2.getNameNode())) == 0) {
+					segment1= o1.getNextSegment();
+					segment2= o2.getNextSegment();
+					if (segment1 == segment2) {
+						return 0;
 					}
-					else {
-						if (o2 != null) {
-							return -1;
-						}
-						else {
-							return 0;
-						}
+					if (segment1 == null) {
+						return -1;
+					}
+					if (segment2 == null) {
+						return 1;
 					}
 				}
 				return offset;
@@ -87,10 +79,10 @@
 			final List<Object> attachments= node.getAttachments();
 			for (final Object attachment : attachments) {
 				if (attachment instanceof RElementAccess) {
-					RElementAccess access= (RElementAccess) attachment;
+					RElementAccess access= (RElementAccess)attachment;
 					do {
 						if (access.isMaster() && access.getNameNode() == nameNode) {
-							return (RElementAccess) attachment;
+							return (RElementAccess)attachment;
 						}
 						access= access.getNextSegment();
 					} while (access != null);
@@ -107,7 +99,7 @@
 			final List<Object> attachments= node.getAttachments();
 			for (final Object attachment : attachments) {
 				if (attachment instanceof RElementAccess) {
-					RElementAccess access= (RElementAccess) attachment;
+					RElementAccess access= (RElementAccess)attachment;
 					do {
 						if (access.isMaster() && access.getNameNode() == nameNode) {
 							return access;
@@ -122,7 +114,7 @@
 	}
 	
 	
-	public abstract IRFrame getFrame();
+	public abstract RFrame getFrame();
 	
 	public abstract boolean isWriteAccess();
 	public abstract boolean isFunctionAccess();
@@ -159,6 +151,6 @@
 		return lastSegment;
 	}
 	
-	public abstract ImList<? extends RElementAccess> getAllInUnit(boolean includeSlaves);
+	public abstract ImList<? extends RElementAccess> getAllInUnit(final boolean includeSlaves);
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RElementComparator.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RElementComparator.java
index 6c97dc8..0e5bdfc 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RElementComparator.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RElementComparator.java
@@ -16,25 +16,39 @@
 
 import java.util.Comparator;
 
+import com.ibm.icu.text.Collator;
+
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
 import org.eclipse.statet.ltk.core.ElementName;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
 import org.eclipse.statet.r.core.RSymbolComparator;
 
 
 @NonNullByDefault
-public class RElementComparator implements Comparator<IModelElement> {
+public class RElementComparator implements Comparator<RElement> {
 	
 	
-	private final Comparator<Object> nameComparator= RSymbolComparator.R_NAMES_COLLATOR;
+	private final Collator nameComparator= RSymbolComparator.R_NAMES_COLLATOR;
 	
 	
 	@Override
-	public int compare(final IModelElement o1, final IModelElement o2) {
-		final ElementName name1= o1.getElementName();
-		final ElementName name2= o2.getElementName();
-		return this.nameComparator.compare(name1.getSegmentName(), name2.getSegmentName());
+	public int compare(final RElement o1, final RElement o2) {
+		final ElementName elementName1= o1.getElementName();
+		final ElementName elementName2= o2.getElementName();
+		final String s1= elementName1.getSegmentName();
+		final String s2= elementName2.getSegmentName();
+		if (s1 == s2) {
+			return 0;
+		}
+		if (s1 != null) {
+			if (s2 != null) {
+				return this.nameComparator.compare(s1, s2);
+			}
+			return -1;
+		}
+		else /* (s2 != null) */ {
+			return 1;
+		}
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRFrame.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RFrame.java
similarity index 64%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRFrame.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RFrame.java
index 1966e41..ce12586 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRFrame.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RFrame.java
@@ -16,13 +16,15 @@
 
 import java.util.List;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 
 
-// TODO extend IRElement? return as model parent of elements
-public interface IRFrame {
+// TODO extend RElement? return as model parent of elements
+@NonNullByDefault
+public interface RFrame<TModelChild extends RLangElement> {
 	
 	/** Simple project */
 	static final int PROJECT= 1;
@@ -40,12 +42,12 @@
 	int getFrameType();
 //	String getFrameName();
 	/** Combination of frametype and name */
-	String getFrameId();
-	RElementName getElementName();
+	@Nullable String getFrameId();
+	@Nullable RElementName getElementName();
 	
-	List<? extends IRElement> getModelElements();
-	boolean hasModelChildren(final IModelElement.Filter filter);
-	List<? extends IRLangElement> getModelChildren(final IModelElement. @Nullable Filter filter);
-	List<? extends IRFrame> getPotentialParents();
+	List<? extends TModelChild> getModelElements();
+	boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super TModelChild> filter);
+	List<? extends TModelChild> getModelChildren(final @Nullable LtkModelElementFilter<? super TModelChild> filter);
+	List<? extends RFrame> getPotentialParents();
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RGraphicFunctions.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RGraphicFunctions.java
index ec16c22..0a3531c 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RGraphicFunctions.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RGraphicFunctions.java
@@ -21,6 +21,8 @@
 import java.util.Map;
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.ecommons.graphics.core.ColorAlphaDef;
 import org.eclipse.statet.ecommons.graphics.core.ColorDef;
@@ -28,15 +30,16 @@
 import org.eclipse.statet.ecommons.graphics.core.NamedColorDef;
 import org.eclipse.statet.ecommons.graphics.core.NumberedRefColorDef;
 
-import org.eclipse.statet.r.core.rsource.IRSourceConstants;
+import org.eclipse.statet.r.core.rsource.RSourceConstants;
 import org.eclipse.statet.r.core.rsource.ast.FCall;
 import org.eclipse.statet.r.core.rsource.ast.NSGet;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
-import org.eclipse.statet.r.core.rsource.ast.RAst.FCallArgMatch;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
+import org.eclipse.statet.r.core.rsource.ast.RAsts.FCallArgMatch;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 
 
+@NonNullByDefault
 public class RGraphicFunctions {
 	
 	
@@ -823,7 +826,7 @@
 	}
 	
 	
-	public ColorDef parseColorDef(final RAstNode node) {
+	public @Nullable ColorDef parseColorDef(final RAstNode node) {
 		if (node != null) {
 			switch (node.getNodeType()) {
 			case F_CALL:
@@ -839,15 +842,15 @@
 		return null;
 	}
 	
-	private ColorDef analyzeColorCall(final FCall node) {
+	private @Nullable ColorDef analyzeColorCall(final FCall node) {
 		final String fName= resolveElementName(node.getRefChild());
 		if (fName != null && !fName.isEmpty()) {
 			if (fName.equals(RGraphicFunctions.RGB_NAME)) {
-				final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.RGB_args);
-				final Integer red= RAst.toJavaInt(args.getArgValueNode(0));
-				final Integer green= RAst.toJavaInt(args.getArgValueNode(1));
-				final Integer blue= RAst.toJavaInt(args.getArgValueNode(2));
-				final Integer alpha= RAst.toJavaInt(args.getArgValueNode(3));
+				final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.RGB_args);
+				final Integer red= RAsts.toJavaInt(args.getArgValueNode(0));
+				final Integer green= RAsts.toJavaInt(args.getArgValueNode(1));
+				final Integer blue= RAsts.toJavaInt(args.getArgValueNode(2));
+				final Integer alpha= RAsts.toJavaInt(args.getArgValueNode(3));
 				if (red != null && green != null && blue != null
 						&& (args.getArgValueNode(3) == null || alpha != null)) {
 					try {
@@ -861,11 +864,11 @@
 				return null;
 			}
 			if (fName.equals(RGraphicFunctions.HSV_NAME)) {
-				final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.HSV_args);
-				final Float hue= RAst.toJavaFloat(args.getArgValueNode(0));
-				final Float saturation= RAst.toJavaFloat(args.getArgValueNode(1));
-				final Float value= RAst.toJavaFloat(args.getArgValueNode(2));
-				final Float alpha= RAst.toJavaFloat(args.getArgValueNode(3));
+				final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.HSV_args);
+				final Float hue= RAsts.toJavaFloat(args.getArgValueNode(0));
+				final Float saturation= RAsts.toJavaFloat(args.getArgValueNode(1));
+				final Float value= RAsts.toJavaFloat(args.getArgValueNode(2));
+				final Float alpha= RAsts.toJavaFloat(args.getArgValueNode(3));
 				if (hue != null && saturation != null && value != null) {
 					try {
 						final ColorDef color= new HSVColorDef(hue, saturation, value);
@@ -878,13 +881,13 @@
 				return null;
 			}
 			if (fName.equals(RGraphicFunctions.ADJUST_COLOR_NAME)) {
-				final FCallArgMatch args= RAst.matchArgs(node.getArgsChild(), this.ADJUST_COLOR_args);
+				final FCallArgMatch args= RAsts.matchArgs(node.getArgsChild(), this.ADJUST_COLOR_args);
 				final RAstNode colorArg= args.getArgValueNode(0);
 				if (colorArg != null && !hasMoreArgs(args, 2)) {
 					try {
 						final ColorDef color= parseColorDef(colorArg);
 						if (color != null) {
-							final Float alpha= RAst.toJavaFloat(args.getArgValueNode(1));
+							final Float alpha= RAsts.toJavaFloat(args.getArgValueNode(1));
 							return (alpha != null) ?
 									new ColorAlphaDef(color, alpha.floatValue()) :
 									color;
@@ -907,7 +910,7 @@
 		return false;
 	}
 	
-	private ColorDef analyzeColorString(final String s) {
+	private @Nullable ColorDef analyzeColorString(final String s) {
 		if (s != null && !s.isEmpty()) {
 			if (s.length() == 7 && s.charAt(0) == '#') {
 				try {
@@ -937,8 +940,8 @@
 		return null;
 	}
 	
-	private ColorDef analyzeColorNum(final RAstNode node) {
-		final Integer num= RAst.toJavaInt(node);
+	private @Nullable ColorDef analyzeColorNum(final RAstNode node) {
+		final Integer num= RAsts.toJavaInt(node);
 		if (num != null) {
 			final int idx= num.intValue() - 1;
 			final List<? extends ColorDef> palette= this.defaultPalette;
@@ -949,7 +952,7 @@
 		return null;
 	}
 	
-	public Float parseAlpha(final RAstNode node) {
+	public @Nullable Float parseAlpha(final RAstNode node) {
 		if (node != null) {
 			switch (node.getNodeType()) {
 			case NUM_CONST:
@@ -961,8 +964,8 @@
 		return null;
 	}
 	
-	private Float analyzeAlphaNum(final RAstNode node) {
-		final Float num= RAst.toJavaFloat(node);
+	private @Nullable Float analyzeAlphaNum(final RAstNode node) {
+		final Float num= RAsts.toJavaFloat(node);
 		if (num != null) {
 			final float v= num.floatValue();
 			if (v >= 0 && v <= 1f) {
@@ -972,7 +975,7 @@
 		return null;
 	}
 	
-	public String parseFontFamily(final RAstNode node) {
+	public @Nullable String parseFontFamily(final RAstNode node) {
 		if (node != null) {
 			switch (node.getNodeType()) {
 			case STRING_CONST:
@@ -984,8 +987,8 @@
 		return null;
 	}
 	
-	private String resolveElementName(final RAstNode node) {
-		if ((node.getStatusCode() & IRSourceConstants.STATUSFLAG_REAL_ERROR) != 0) {
+	private @Nullable String resolveElementName(final RAstNode node) {
+		if ((node.getStatusCode() & RSourceConstants.STATUSFLAG_REAL_ERROR) != 0) {
 			return null;
 		}
 		switch (node.getNodeType()) {
@@ -995,13 +998,14 @@
 		case NS_GET: {
 			final NSGet ns= (NSGet) node;
 			if (ns.getNamespaceChild().getNodeType() == NodeType.SYMBOL
-					&& (ns.getNamespaceChild().getStatusCode() & IRSourceConstants.STATUSFLAG_REAL_ERROR) == 0
+					&& (ns.getNamespaceChild().getStatusCode() & RSourceConstants.STATUSFLAG_REAL_ERROR) == 0
 					&& ns.getElementChild().getNodeType() == NodeType.SYMBOL
-					&& (ns.getElementChild().getStatusCode() & IRSourceConstants.STATUSFLAG_REAL_ERROR) == 0) {
+					&& (ns.getElementChild().getStatusCode() & RSourceConstants.STATUSFLAG_REAL_ERROR) == 0) {
 				final String namespace= ns.getNamespaceChild().getText();
-				if (namespace.equals("base") //$NON-NLS-1$
-						|| namespace.equals("utils") //$NON-NLS-1$
-						|| namespace.equals("grDevices") ) { //$NON-NLS-1$
+				if (namespace != null
+						&& (namespace.equals("base") //$NON-NLS-1$
+								|| namespace.equals("utils") //$NON-NLS-1$
+								|| namespace.equals("grDevices") )) { //$NON-NLS-1$
 					return ns.getElementChild().getText();
 				}
 			}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRClass.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangClass.java
similarity index 78%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRClass.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangClass.java
index c726480..fa2fa30 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRClass.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangClass.java
@@ -16,13 +16,17 @@
 
 import java.util.List;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * An R class definition element
  */
-public interface IRClass extends IRLangElement {
+@NonNullByDefault
+public interface RLangClass<TModelChild extends RLangElement>
+		extends RLangElement<TModelChild> {
 	
 	
-	public List<String> getExtendedClassNames();
+	List<String> getExtendedClassNames();
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRClassExtension.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangClassExtension.java
similarity index 72%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRClassExtension.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangClassExtension.java
index cbbfce1..fba1a10 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRClassExtension.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangClassExtension.java
@@ -14,15 +14,20 @@
 
 package org.eclipse.statet.r.core.model;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
  * An element extending an R class
  */
-public interface IRClassExtension extends IRLangElement {
+@NonNullByDefault
+public interface RLangClassExtension<TModelChild extends RLangElement>
+		extends RLangElement<TModelChild> {
 	
 	
-	public String getExtCommand();
-	public String getExtTypeName();
+	String getExtCommand();
+	@Nullable String getExtTypeName();
 	
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRLangElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangElement.java
similarity index 65%
copy from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRLangElement.java
copy to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangElement.java
index b37b173..072d479 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRLangElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangElement.java
@@ -19,16 +19,18 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceElement;
 
 
 @NonNullByDefault
-public interface IRLangElement extends IRElement, ISourceElement {
+public interface RLangElement<TModelChild extends RLangElement<?>>
+		extends RElement<TModelChild>, SourceElement<TModelChild> {
 	
 	
 	@Override
-	boolean hasModelChildren(@Nullable Filter filter);
+	boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super TModelChild> filter);
 	@Override
-	List<? extends IRLangElement> getModelChildren(@Nullable Filter filter);
+	List<? extends TModelChild> getModelChildren(final @Nullable LtkModelElementFilter<? super TModelChild> filter);
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRMethod.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangMethod.java
similarity index 85%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRMethod.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangMethod.java
index 542ace5..fd57b9e 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRMethod.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangMethod.java
@@ -14,13 +14,16 @@
 
 package org.eclipse.statet.r.core.model;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
 
 /**
  * An R function like element, can be a general function, a generic function or a method
  */
-public interface IRMethod extends IRLangElement {
+@NonNullByDefault
+public interface RLangMethod<TModelChild extends RLangElement>
+		extends RLangElement<TModelChild> {
 	
 	
 	/**
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRPackageLoad.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangPackageLoad.java
similarity index 81%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRPackageLoad.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangPackageLoad.java
index d807426..e62ca56 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRPackageLoad.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangPackageLoad.java
@@ -14,12 +14,16 @@
 
 package org.eclipse.statet.r.core.model;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * An R package import element
  * 
  * The name is name of loaded package.
  */
-public interface IRPackageLoad extends IRLangElement {
+@NonNullByDefault
+public interface RLangPackageLoad<TModelChild extends RLangElement>
+		extends RLangElement<TModelChild> {
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRSlot.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangSlot.java
similarity index 74%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRSlot.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangSlot.java
index b854cff..8f6c8f5 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRSlot.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangSlot.java
@@ -14,13 +14,18 @@
 
 package org.eclipse.statet.r.core.model;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
  * An R slot in an class definition
  */
-public interface IRSlot extends IRLangElement {
+@NonNullByDefault
+public interface RLangSlot<TModelChild extends RLangElement>
+		extends RLangElement<TModelChild> {
 	
 	
-	public String getTypeName();
+	@Nullable String getTypeName();
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangSourceElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangSourceElement.java
new file mode 100644
index 0000000..c667dea
--- /dev/null
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RLangSourceElement.java
@@ -0,0 +1,45 @@
+/*=============================================================================#
+ # Copyright (c) 2008, 2020 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.r.core.model;
+
+import java.util.List;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
+
+
+@NonNullByDefault
+public interface RLangSourceElement
+		extends RLangElement<RLangSourceElement>,
+				SourceStructElement<RLangSourceElement, RLangSourceElement> {
+	
+	
+	@Override
+	RSourceUnit getSourceUnit();
+	
+	@Override
+	boolean hasModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter);
+	@Override
+	List<? extends RLangSourceElement> getModelChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter);
+	
+	@Override
+	boolean hasSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter);
+	@Override
+	List<? extends RLangSourceElement> getSourceChildren(final @Nullable LtkModelElementFilter<? super RLangSourceElement> filter);
+	
+}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RModel.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RModel.java
index efd8079..1824c60 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RModel.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RModel.java
@@ -17,21 +17,23 @@
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.internal.r.core.FilteredFrame;
 import org.eclipse.statet.internal.r.core.RCorePlugin;
 import org.eclipse.statet.internal.r.core.RProjectNature;
-import org.eclipse.statet.internal.r.core.sourcemodel.RModelManager;
-import org.eclipse.statet.ltk.model.core.elements.ISourceElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
+import org.eclipse.statet.internal.r.core.sourcemodel.RModelManagerImpl;
+import org.eclipse.statet.ltk.model.core.element.SourceElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 import org.eclipse.statet.r.core.RProject;
 import org.eclipse.statet.r.core.RProjects;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
@@ -40,6 +42,7 @@
 /**
  * R LTK model
  */
+@NonNullByDefault
 public final class RModel {
 	
 	
@@ -57,18 +60,18 @@
 	/**
 	 * @return the manager for the R model
 	 */
-	public static IRModelManager getRModelManager() {
+	public static RModelManager getRModelManager() {
 		return RCorePlugin.getInstance().getRModelManager();
 	}
 	
-	public static IRModelInfo getRModelInfo(final ISourceUnitModelInfo modelInfo) {
+	public static @Nullable RSourceUnitModelInfo getRModelInfo(final @Nullable SourceUnitModelInfo modelInfo) {
 		if (modelInfo != null) {
-			if (modelInfo instanceof IRModelInfo) {
-				return (IRModelInfo) modelInfo;
+			if (modelInfo instanceof RSourceUnitModelInfo) {
+				return (RSourceUnitModelInfo)modelInfo;
 			}
 			for (final Object aAttachment : modelInfo.getAttachments()) {
-				if (aAttachment instanceof IRModelInfo) {
-					return (IRModelInfo) aAttachment;
+				if (aAttachment instanceof RSourceUnitModelInfo) {
+					return (RSourceUnitModelInfo)aAttachment;
 				}
 			}
 		}
@@ -76,12 +79,12 @@
 	}
 	
 	
-	public static IRFrameInSource searchFrame(RAstNode node) {
+	public static @Nullable RSourceFrame searchFrame(@Nullable RAstNode node) {
 		while (node != null) {
 			final List<Object> attachments= node.getAttachments();
 			for (final Object attachment : attachments) {
-				if (attachment instanceof IRFrameInSource) {
-					return (IRFrameInSource) attachment;
+				if (attachment instanceof RSourceFrame) {
+					return (RSourceFrame)attachment;
 				}
 			}
 			node= node.getRParent();
@@ -90,26 +93,31 @@
 	}
 	
 	
-	private static boolean isValidPkgFrame(final IRFrame frame) {
-		return (frame.getFrameType() == IRFrame.PACKAGE
-				&& frame.getElementName().getSegmentName() != null );
+	private static @Nullable String checkValidPkgFrame(final RFrame frame) {
+		final RElementName elementName;
+		return (frame.getFrameType() == RFrame.PACKAGE
+						&& (elementName= frame.getElementName()) != null) ?
+				elementName.getSegmentName() :
+				null;
 	}
 	
-	private static boolean isValidFrame(final IRFrame frame, final String pkgName) {
+	private static boolean isValidFrame(final RFrame frame, final @Nullable String pkgName) {
+		final String name;
 		return (pkgName == null
-				|| (isValidPkgFrame(frame)
-						&& frame.getElementName().getSegmentName().equals(pkgName) ));
+				|| ((name= checkValidPkgFrame(frame)) != null
+						&& name.equals(pkgName) ));
 	}
 	
-	private static boolean isValidFrame(final IRFrame frame, final Set<String> pkgNames) {
+	private static boolean isValidFrame(final RFrame frame, final @Nullable Set<String> pkgNames) {
+		final String name;
 		return (pkgNames == null
-				|| (isValidPkgFrame(frame)
-						&& pkgNames.contains(frame.getElementName().getSegmentName()) ));
+				|| ((name= checkValidPkgFrame(frame)) != null
+						&& pkgNames.contains(name) ));
 	}
 	
-	public static List<IRFrame> createDirectFrameList(final IRFrame frame,
-			final RElementName expliciteScope) {
-		final ArrayList<IRFrame> list= new ArrayList<>();
+	public static List<RFrame> createDirectFrameList(final RFrame frame,
+			final @Nullable RElementName expliciteScope) {
+		final ArrayList<RFrame> list= new ArrayList<>();
 		final String pkgName= (expliciteScope != null && RElementName.isPackageFacetScopeType(expliciteScope.getType())) ?
 				expliciteScope.getSegmentName() : null;
 		int idx= 0;
@@ -117,8 +125,8 @@
 			list.add(frame);
 		}
 		while (idx < list.size()) {
-			final List<? extends IRFrame> ps= list.get(idx++).getPotentialParents();
-			for (final IRFrame parent : ps) {
+			final List<? extends RFrame> ps= list.get(idx++).getPotentialParents();
+			for (final RFrame parent : ps) {
 				if (isValidFrame(parent, pkgName) && !list.contains(parent)) {
 					list.add(parent);
 				}
@@ -127,16 +135,16 @@
 		return list;
 	}
 	
-	public static List<IRFrame> createDirectFrameList(final IRFrame frame) {
+	public static List<RFrame> createDirectFrameList(final RFrame frame) {
 		return createDirectFrameList(frame, null);
 	}
 	
-	public static Set<String> createImportedPackageList(final IRModelInfo modelInfo) {
+	public static Set<String> createImportedPackageList(final RSourceUnitModelInfo modelInfo) {
 		final Set<String> importedPackages= new HashSet<>();
 		importedPackages.add("base"); //$NON-NLS-1$
 		
 		if (modelInfo != null) {
-			final IPackageReferences packages= modelInfo.getReferencedPackages();
+			final PackageReferences packages= modelInfo.getReferencedPackages();
 			for (final String name : packages.getAllPackageNames()) {
 				if (packages.isImported(name)) {
 					importedPackages.add(name);
@@ -147,19 +155,19 @@
 		return importedPackages;
 	}
 	
-	public static List<IRFrame> createProjectFrameList(RProject project1,
-			final IRSourceUnit scope, 
+	public static List<RFrame> createProjectFrameList(@Nullable RProject project1,
+			final RSourceUnit scope, 
 			final boolean pkgImports, final boolean projectDependencies,
-			Set<String> importedPackages, Set<String> pkgNames)
+			@Nullable Set<String> importedPackages, @Nullable Set<String> pkgNames)
 			throws CoreException {
-		final ArrayList<IRFrame> list= new ArrayList<>();
-		final IRModelManager manager= getRModelManager();
-		if (project1 == null && scope instanceof IWorkspaceSourceUnit) {
+		final ArrayList<RFrame> list= new ArrayList<>();
+		final RModelManager manager= getRModelManager();
+		if (project1 == null && scope instanceof WorkspaceSourceUnit) {
 			if (pkgImports && importedPackages == null) {
 				importedPackages= createImportedPackageList(
-						(IRModelInfo) scope.getModelInfo(R_TYPE_ID, RModelManager.MODEL_FILE, null ));
+						(RSourceUnitModelInfo)scope.getModelInfo(R_TYPE_ID, RModelManagerImpl.MODEL_FILE, null ));
 			}
-			project1= RProjects.getRProject(((IWorkspaceSourceUnit) scope).getResource().getProject());
+			project1= RProjects.getRProject(((WorkspaceSourceUnit)scope).getResource().getProject());
 		}
 		if (pkgImports && importedPackages == null) {
 			importedPackages= ImCollections.emptySet();
@@ -170,11 +178,12 @@
 		}
 		
 		if (project1 != null) {
-			{	final IRFrame frame= manager.getProjectFrame(project1);
+			{	final RFrame frame= manager.getProjectFrame(project1);
 				if (frame != null) {
 					if (projectDependencies || (pkgImports && isValidFrame(frame, importedPackages))) {
-						if (isValidPkgFrame(frame)) {
-							pkgNames.add(frame.getElementName().getSegmentName());
+						final String name;
+						if ((name= checkValidPkgFrame(frame)) != null) {
+							pkgNames.add(name);
 						}
 						list.add(new FilteredFrame(frame, scope));
 					}
@@ -193,11 +202,12 @@
 			} catch (final CoreException e) {}
 			for (int i= 0; i < projects.size(); i++) {
 				final RProject project= projects.get(i);
-				final IRFrame frame= manager.getProjectFrame(project);
+				final RFrame frame= manager.getProjectFrame(project);
 				if (frame != null) {
 					if (projectDependencies || (pkgImports && isValidFrame(frame, importedPackages))) {
-						if (isValidPkgFrame(frame)) {
-							pkgNames.add(frame.getElementName().getSegmentName());
+						final String name;
+						if ((name= checkValidPkgFrame(frame)) != null) {
+							pkgNames.add(name);
 						}
 						list.add(frame);
 					}
@@ -217,7 +227,7 @@
 		if (pkgImports && importedPackages != null) {
 			for (final String pkgName : importedPackages) {
 				if (!pkgNames.contains(pkgName)) {
-					final IRFrame frame= manager.getPkgProjectFrame(pkgName);
+					final RFrame frame= manager.getPkgProjectFrame(pkgName);
 					if (frame != null) {
 						list.add(frame);
 					}
@@ -228,29 +238,29 @@
 		return list;
 	}
 	
-	public static List<IRFrame> createProjectFrameList(final RProject project1,
-			final IRSourceUnit scope) throws CoreException {
+	public static List<RFrame> createProjectFrameList(final @Nullable RProject project1,
+			final RSourceUnit scope) throws CoreException {
 		return createProjectFrameList(project1, scope, true, true, null, null);
 	}
 	
-	public static List<ISourceElement> searchDeclaration(final RElementAccess access,
-			final IRSourceUnit su) throws CoreException {
+	public static List<SourceElement> searchDeclaration(final RElementAccess access,
+			final RSourceUnit su) throws CoreException {
 		assert (access != null);
-		final List<ISourceElement> list= new ArrayList<>();
+		final List<SourceElement> list= new ArrayList<>();
 		
 		if (access.getSegmentName() == null) {
 			return list;
 		}
 		
-		final IRFrame suFrame= access.getFrame();
-		final List<IRFrame> directFrames= RModel.createDirectFrameList(suFrame);
-		for (final IRFrame frame : directFrames) {
+		final RFrame suFrame= access.getFrame();
+		final List<RFrame> directFrames= createDirectFrameList(suFrame);
+		for (final RFrame frame : directFrames) {
 			if (checkFrame(frame, access, list)) {
 				return list;
 			}
 		}
-		final List<IRFrame> projectFrames= RModel.createProjectFrameList(null, su);
-		for (final IRFrame frame : projectFrames) {
+		final List<RFrame> projectFrames= createProjectFrameList(null, su);
+		for (final RFrame frame : projectFrames) {
 			if (checkFrame(frame, access, list)) {
 				return list;
 			}
@@ -258,23 +268,23 @@
 		return list;
 	}
 	
-	private static boolean checkFrame(final IRFrame frame, final RElementAccess access, final List<ISourceElement> list) {
-		final List<? extends IRElement> elements= frame.getModelChildren(null);
-		for (final IRElement element : elements) {
+	private static boolean checkFrame(final RFrame frame, final RElementAccess access, final List<SourceElement> list) {
+		final List<? extends RElement> elements= frame.getModelChildren(null);
+		for (final RElement element : elements) {
 			final RElementName name= element.getElementName();
 			if (name != null
 					&& access.getType() == name.getType()
-					&& access.getSegmentName().equals(name.getSegmentName())
-					&& element instanceof ISourceElement) {
-				list.add((ISourceElement) element);
+					&& Objects.equals(access.getSegmentName(), name.getSegmentName())
+					&& element instanceof SourceElement) {
+				list.add((SourceElement)element);
 			}
 		}
 		
 		if (!list.isEmpty()) {
-			final ISourceElement first= list.get(0);
-			switch (first.getElementType()  & IRElement.MASK_C2) {
-			case IRElement.R_S4METHOD:
-			case IRElement.R_GENERAL_VARIABLE:
+			final SourceElement first= list.get(0);
+			switch (first.getElementType()  & RElement.MASK_C2) {
+			case RElement.R_S4METHOD:
+			case RElement.R_GENERAL_VARIABLE:
 				return false;
 			default:
 				return true;
@@ -284,12 +294,12 @@
 	}
 	
 	
-	public static @Nullable RElementName getFQElementName(final @Nullable IRElement var) {
+	public static @Nullable RElementName getFQElementName(final @Nullable RElement var) {
 		final List<RElementName> segments= getFQFullName(var, 0);
 		return (segments != null) ? RElementName.create(segments) : null;
 	}
 	
-	private static @Nullable List<RElementName> getFQFullName(final @Nullable IRElement var, int count) {
+	private static @Nullable List<RElementName> getFQFullName(final @Nullable RElement var, int count) {
 		if (var != null) {
 			final RElementName elementName= var.getElementName();
 			if (elementName != null) {
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRModelManager.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RModelManager.java
similarity index 62%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRModelManager.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RModelManager.java
index 5a7186a..96a243b 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRModelManager.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RModelManager.java
@@ -20,14 +20,18 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
-import org.eclipse.statet.ltk.model.core.IModelManager;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ltk.model.core.ModelManager;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.r.core.RProject;
 import org.eclipse.statet.r.core.rsource.ast.SourceComponent;
 
 
-public interface IRModelManager extends IModelManager {
+@NonNullByDefault
+public interface RModelManager extends ModelManager {
 	
 	
 	/**
@@ -38,7 +42,7 @@
 	 * @return the R frame
 	 * @throws CoreException
 	 */
-	IRFrame getProjectFrame(RProject rProject) throws CoreException;
+	@Nullable RFrame getProjectFrame(final RProject rProject) throws CoreException;
 	
 	/**
 	 * Returns the package names of R package projects in the workspace.
@@ -47,17 +51,17 @@
 	 */
 	Set<String> getPkgNames();
 	
-	IRFrame getPkgProjectFrame(String pkgName) throws CoreException;
+	@Nullable RFrame getPkgProjectFrame(final String pkgName) throws CoreException;
 	
 	
-	IRModelInfo reconcile(IRSourceUnit su, ISourceUnitModelInfo modelInfo,
-			List<? extends RChunkElement> chunks, List<? extends SourceComponent> inlineNodes,
-			int level, IProgressMonitor monitor);
+	RSourceUnitModelInfo reconcile(final RSourceUnit su, final SourceUnitModelInfo modelInfo,
+			final List<? extends RChunkElement> chunks, List<? extends SourceComponent> inlineNodes,
+			final int level, final IProgressMonitor monitor);
 	
 	/**
 	 * Find source units with references to the specified name in the specified project.
 	 * 
-	 * Note: The returned source units are already {@link ISourceUnit#connect(IProgressMonitor) connected}.
+	 * Note: The returned source units are already {@link SourceUnit#connect(IProgressMonitor) connected}.
 	 * The caller is responsible to disconnect, if they are no longer required.
 	 * 
 	 * @param rProject the R project
@@ -66,8 +70,8 @@
 	 * @return list of referencing source units
 	 * @throws CoreException
 	 */
-	List<ISourceUnit> findReferencingSourceUnits(RProject rProject, RElementName name,
-			IProgressMonitor monitor) throws CoreException;
+	@Nullable List<SourceUnit> findReferencingSourceUnits(final RProject rProject, final RElementName name,
+			final IProgressMonitor monitor) throws CoreException;
 	
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRFrameInSource.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RSourceFrame.java
similarity index 70%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRFrameInSource.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RSourceFrame.java
index 7d270b0..02af288 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRFrameInSource.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RSourceFrame.java
@@ -17,13 +17,16 @@
 import java.util.Set;
 
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 
-public interface IRFrameInSource extends IRFrame {
+@NonNullByDefault
+public interface RSourceFrame extends RFrame<RLangSourceElement> {
 	
 	
-	Set<String> getAllAccessNames();
-	ImList<? extends RElementAccess> getAllAccessOf(final String name, boolean includeSlaves);
+	Set<@Nullable String> getAllAccessNames();
+	ImList<? extends RElementAccess> getAllAccessOf(final @Nullable String name, boolean includeSlaves);
 	boolean isResolved(String name);
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRSourceUnit.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RSourceUnit.java
similarity index 81%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRSourceUnit.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RSourceUnit.java
index 25fa647..01151e2 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRSourceUnit.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RSourceUnit.java
@@ -14,14 +14,17 @@
 
 package org.eclipse.statet.r.core.model;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.r.core.IRCoreAccess;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.r.core.RCoreAccess;
 
 
 /**
  * An R source (script) file
  */
-public interface IRSourceUnit extends ISourceUnit {
+@NonNullByDefault
+public interface RSourceUnit extends SourceUnit {
 	
 	
 	/**
@@ -44,6 +47,6 @@
 	 * Returns the R core access provider for the source unit
 	 * @return access of scope of the source unit
 	 */
-	IRCoreAccess getRCoreAccess();
+	RCoreAccess getRCoreAccess();
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRModelInfo.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RSourceUnitModelInfo.java
similarity index 65%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRModelInfo.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RSourceUnitModelInfo.java
index 318db02..5342a1d 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRModelInfo.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RSourceUnitModelInfo.java
@@ -16,21 +16,24 @@
 
 import java.util.Map;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 
 
 /**
  * Container for model information of a R source unit
  */
-public interface IRModelInfo extends ISourceUnitModelInfo {
+@NonNullByDefault
+public interface RSourceUnitModelInfo extends SourceUnitModelInfo {
 	
 	
 	@Override
-	IRLangSourceElement getSourceElement();
+	RLangSourceElement getSourceElement();
 	
-	Map<String, ? extends IRFrameInSource> getSourceFrames();
-	IRFrameInSource getTopFrame();
-	IPackageReferences getReferencedPackages();
-	Map<String, ? extends IRFrame> getReferencedFrames();
+	Map<String, ? extends RSourceFrame> getSourceFrames();
+	RSourceFrame getTopFrame();
+	PackageReferences getReferencedPackages();
+	Map<String, ? extends RFrame> getReferencedFrames();
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RSuModelContainer.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RSuModelContainer.java
deleted file mode 100644
index aa472e5..0000000
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RSuModelContainer.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2011, 2020 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.r.core.model;
-
-import org.eclipse.statet.ltk.model.core.IModelManager;
-import org.eclipse.statet.ltk.model.core.impl.SourceUnitModelContainer;
-
-
-public class RSuModelContainer extends SourceUnitModelContainer<IRSourceUnit, IRModelInfo> {
-	
-	
-	public RSuModelContainer(final IRSourceUnit sourceUnit) {
-		super(sourceUnit);
-	}
-	
-	
-	@Override
-	public boolean isContainerFor(final String modelTypeId) {
-		return (modelTypeId == RModel.R_TYPE_ID);
-	}
-	
-	@Override
-	public Class<?> getAdapterClass() {
-		return RSuModelContainer.class;
-	}
-	
-	@Override
-	protected IModelManager getModelManager() {
-		return RModel.getRModelManager();
-	}
-	
-}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRCompositeSourceElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RWorkspaceSourceUnit.java
similarity index 75%
copy from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRCompositeSourceElement.java
copy to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RWorkspaceSourceUnit.java
index 294112d..f815fc0 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/IRCompositeSourceElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RWorkspaceSourceUnit.java
@@ -14,12 +14,12 @@
 
 package org.eclipse.statet.r.core.model;
 
-import java.util.List;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 
 
-public interface IRCompositeSourceElement extends IRLangSourceElement {
-	
-	
-	List<? extends IRLangSourceElement> getCompositeElements();
+@NonNullByDefault
+public interface RWorkspaceSourceUnit extends RSourceUnit, WorkspaceSourceUnit {
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RModelIndexUpdate.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/build/RModelIndexUpdate.java
similarity index 78%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RModelIndexUpdate.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/build/RModelIndexUpdate.java
index a0ed492..d52e6e2 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RModelIndexUpdate.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/build/RModelIndexUpdate.java
@@ -12,7 +12,7 @@
  #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
  #=============================================================================*/
 
-package org.eclipse.statet.r.core.model;
+package org.eclipse.statet.r.core.model.build;
 
 import java.util.List;
 
@@ -20,14 +20,20 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.internal.r.core.RCorePlugin;
 import org.eclipse.statet.internal.r.core.builder.RPkgData;
 import org.eclipse.statet.internal.r.core.sourcemodel.RModelIndexOrder;
-import org.eclipse.statet.internal.r.core.sourcemodel.RModelManager;
+import org.eclipse.statet.internal.r.core.sourcemodel.RModelManagerImpl;
 import org.eclipse.statet.ltk.model.core.impl.GenericResourceSourceUnit;
 import org.eclipse.statet.r.core.RProject;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 
 
+@NonNullByDefault
 public class RModelIndexUpdate extends RModelIndexOrder {
 	
 	
@@ -41,14 +47,14 @@
 		this.pkgData= pkgData;
 	}
 	
-	public void update(final IRSourceUnit sourceUnit, final IRModelInfo model) {
+	public void update(final RSourceUnit sourceUnit, final @Nullable RSourceUnitModelInfo model) {
 		final Result result= createResult(sourceUnit, model);
 		if (result != null) {
 			this.updated.add(result);
 		}
 	}
 	
-	public void remove(final IRSourceUnit sourceUnit) {
+	public void remove(final RSourceUnit sourceUnit) {
 		if (!this.isFullBuild) {
 			this.removed.add(sourceUnit.getId());
 		}
@@ -61,7 +67,7 @@
 	}
 	
 	public void submit(final IProgressMonitor monitor) throws CoreException {
-		final RModelManager rManager= RCorePlugin.getInstance().getRModelManager();
+		final RModelManagerImpl rManager= RCorePlugin.getInstance().getRModelManager();
 		rManager.getIndex().update(this, monitor);
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RProblemReporter.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/build/RProblemReporter.java
similarity index 78%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RProblemReporter.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/build/RProblemReporter.java
index f7bc934..fc2ae6c 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/RProblemReporter.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/build/RProblemReporter.java
@@ -12,15 +12,19 @@
  #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
  #=============================================================================*/
 
-package org.eclipse.statet.r.core.model;
+package org.eclipse.statet.r.core.model.build;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
 import org.eclipse.statet.internal.r.core.sourcemodel.SyntaxProblemReporter;
 import org.eclipse.statet.ltk.ast.core.AstNode;
 import org.eclipse.statet.ltk.core.SourceContent;
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 
 
+@NonNullByDefault
 public class RProblemReporter {
 	
 	
@@ -31,22 +35,22 @@
 	}
 	
 	
-	public void run(final IRSourceUnit su, final SourceContent content,
+	public void run(final RSourceUnit su, final SourceContent content,
 			final RAstNode node, final ProblemRequestor problemRequestor) {
 		this.syntaxProblemReporter.run(su, content, node, problemRequestor);
 	}
 	
-	public void run(final IRSourceUnit su, final SourceContent content,
+	public void run(final RSourceUnit su, final SourceContent content,
 			final AstNode node, final ProblemRequestor problemRequestor) {
 		if (node instanceof RAstNode) {
-			run(su, content, (RAstNode) node, problemRequestor);
+			run(su, content, (RAstNode)node, problemRequestor);
 		}
 		else {
 			final int n= node.getChildCount();
 			for (int i= 0; i < n; i++) {
 				final AstNode child= node.getChild(i);
 				if (child instanceof RAstNode) {
-					run(su, content, (RAstNode) child, problemRequestor);
+					run(su, content, (RAstNode)child, problemRequestor);
 				}
 			}
 		}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/build/RSourceUnitModelContainer.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/build/RSourceUnitModelContainer.java
new file mode 100644
index 0000000..eeda84b
--- /dev/null
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/model/build/RSourceUnitModelContainer.java
@@ -0,0 +1,50 @@
+/*=============================================================================#
+ # Copyright (c) 2011, 2020 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.r.core.model.build;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ltk.model.core.ModelManager;
+import org.eclipse.statet.ltk.model.core.build.SourceUnitModelContainer;
+import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
+
+
+@NonNullByDefault
+public class RSourceUnitModelContainer extends SourceUnitModelContainer<RSourceUnit, RSourceUnitModelInfo> {
+	
+	
+	public RSourceUnitModelContainer(final RSourceUnit sourceUnit) {
+		super(sourceUnit);
+	}
+	
+	
+	@Override
+	public boolean isContainerFor(final String modelTypeId) {
+		return (modelTypeId == RModel.R_TYPE_ID);
+	}
+	
+	@Override
+	public Class<?> getAdapterClass() {
+		return RSourceUnitModelContainer.class;
+	}
+	
+	@Override
+	protected ModelManager getModelManager() {
+		return RModel.getRModelManager();
+	}
+	
+}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/ExtractFunctionRefactoring.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/ExtractFunctionRefactoring.java
index c2f71b1..9d628d3 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/ExtractFunctionRefactoring.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/ExtractFunctionRefactoring.java
@@ -49,7 +49,7 @@
 import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.ltk.ast.core.AstNode;
 import org.eclipse.statet.ltk.ast.core.util.AstSelection;
-import org.eclipse.statet.ltk.core.LTK;
+import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.model.core.ElementSet;
 import org.eclipse.statet.ltk.refactoring.core.CommonRefactoringDescriptor;
 import org.eclipse.statet.ltk.refactoring.core.RefactoringChange;
@@ -59,20 +59,20 @@
 import org.eclipse.statet.r.core.RCodeStyleSettings;
 import org.eclipse.statet.r.core.RCore;
 import org.eclipse.statet.r.core.RUtil;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRFrameInSource;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRModelManager;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RModelManager;
+import org.eclipse.statet.r.core.model.RSourceFrame;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 import org.eclipse.statet.r.core.rsource.ast.Assignment;
 import org.eclipse.statet.r.core.rsource.ast.Block;
 import org.eclipse.statet.r.core.rsource.ast.FDef;
 import org.eclipse.statet.r.core.rsource.ast.GenericVisitor;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 
@@ -112,9 +112,9 @@
 		}
 		
 		private void add(final RElementAccess access) {
-			final IRFrame frame= access.getFrame();
-			if (!(frame instanceof IRFrameInSource)
-					|| frame.getFrameType() == IRFrame.PACKAGE) {
+			final RFrame frame= access.getFrame();
+			if (!(frame instanceof RSourceFrame)
+					|| frame.getFrameType() == RFrame.PACKAGE) {
 				return;
 			}
 			final String name= access.getSegmentName();
@@ -180,7 +180,7 @@
 	private TextRegion selectionRegion;
 	private TextRegion operationRegion;
 	
-	private final IRSourceUnit sourceUnit;
+	private final RSourceUnit sourceUnit;
 	private RAstNode[] expressions;
 	
 //	private RAstNode container;
@@ -194,7 +194,7 @@
 	 * @param su the source unit
 	 * @param region (selected) region of the statements to extract
 	 */
-	public ExtractFunctionRefactoring(final IRSourceUnit su, final TextRegion selection) {
+	public ExtractFunctionRefactoring(final RSourceUnit su, final TextRegion selection) {
 		this.sourceUnit= su;
 		this.elementSet= new ElementSet(new Object[] { su });
 		
@@ -237,7 +237,7 @@
 					final AbstractDocument document= this.sourceUnit.getDocument(monitor);
 					final RHeuristicTokenScanner scanner= this.adapter.getScanner(this.sourceUnit);
 					
-					final IRModelInfo modelInfo= (IRModelInfo) this.sourceUnit.getModelInfo(RModel.R_TYPE_ID, IRModelManager.MODEL_FILE, m.newChild(1));
+					final RSourceUnitModelInfo modelInfo= (RSourceUnitModelInfo) this.sourceUnit.getModelInfo(RModel.R_TYPE_ID, RModelManager.MODEL_FILE, m.newChild(1));
 					if (modelInfo != null) {
 						final TextRegion region= this.adapter.trimToAstRegion(document,
 								this.selectionRegion, scanner );
@@ -313,7 +313,7 @@
 	
 	private void checkExpressions(final RefactoringStatus result) {
 		for (final RAstNode node : this.expressions) {
-			if (RAst.hasErrors(node)) {
+			if (RAsts.hasErrors(node)) {
 				result.merge(RefactoringStatus.createWarningStatus(Messages.ExtractFunction_warning_SelectionSyntaxError_message));
 				break;
 			}
@@ -368,7 +368,7 @@
 		final SubMonitor m= SubMonitor.convert(monitor, RefactoringMessages.Common_CreateChanges_label, 3);
 		try {
 			final TextFileChange textFileChange= new SourceUnitChange(this.sourceUnit);
-			if (this.sourceUnit.getWorkingContext() == LTK.EDITOR_CONTEXT) {
+			if (this.sourceUnit.getWorkingContext() == Ltk.EDITOR_CONTEXT) {
 				textFileChange.setSaveMode(TextFileChange.LEAVE_DIRTY);
 			}
 			createChanges(textFileChange, m.newChild(2));
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/ExtractTempRefactoring.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/ExtractTempRefactoring.java
index 1e87ef7..ec422a1 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/ExtractTempRefactoring.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/ExtractTempRefactoring.java
@@ -41,7 +41,7 @@
 import org.eclipse.statet.internal.r.core.refactoring.Messages;
 import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.ltk.ast.core.util.AstSelection;
-import org.eclipse.statet.ltk.core.LTK;
+import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.model.core.ElementSet;
 import org.eclipse.statet.ltk.refactoring.core.CommonRefactoringDescriptor;
 import org.eclipse.statet.ltk.refactoring.core.RefactoringChange;
@@ -50,13 +50,13 @@
 import org.eclipse.statet.ltk.refactoring.core.TextChangeCompatibility;
 import org.eclipse.statet.r.core.RCore;
 import org.eclipse.statet.r.core.RUtil;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRModelManager;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RModelManager;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 import org.eclipse.statet.r.core.rsource.ast.FDef;
 import org.eclipse.statet.r.core.rsource.ast.GenericVisitor;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 
@@ -93,7 +93,7 @@
 	private TextRegion selectionRegion;
 	private TextRegion operationRegion;
 	
-	private final IRSourceUnit sourceUnit;
+	private final RSourceUnit sourceUnit;
 	private RAstNode expression;
 	
 	private RAstNode container;
@@ -107,7 +107,7 @@
 	 * @param su the source unit
 	 * @param region (selected) regino of the expression to extract
 	 */
-	public ExtractTempRefactoring(final IRSourceUnit su, final TextRegion region) {
+	public ExtractTempRefactoring(final RSourceUnit su, final TextRegion region) {
 		this.sourceUnit= su;
 		this.elementSet= new ElementSet(new Object[] { su });
 		
@@ -157,7 +157,7 @@
 					final AbstractDocument document= this.sourceUnit.getDocument(monitor);
 					final RHeuristicTokenScanner scanner= this.adapter.getScanner(this.sourceUnit);
 					
-					final IRModelInfo modelInfo= (IRModelInfo) this.sourceUnit.getModelInfo(RModel.R_TYPE_ID, IRModelManager.MODEL_FILE, m.newChild(1));
+					final RSourceUnitModelInfo modelInfo= (RSourceUnitModelInfo)this.sourceUnit.getModelInfo(RModel.R_TYPE_ID, RModelManager.MODEL_FILE, m.newChild(1));
 					if (modelInfo != null) {
 						final TextRegion region= this.adapter.trimToAstRegion(document,
 								this.selectionRegion, scanner );
@@ -272,7 +272,7 @@
 		catch (final InvocationTargetException e) {}
 		
 		for (final RAstNode node : this.occurrencesList) {
-			if (RAst.hasErrors(node)) {
+			if (RAsts.hasErrors(node)) {
 				result.merge(RefactoringStatus.createWarningStatus(Messages.ExtractTemp_warning_OccurrencesSyntaxError_message));
 				break;
 			}
@@ -309,7 +309,7 @@
 		try {
 			
 			final TextFileChange textFileChange= new SourceUnitChange(this.sourceUnit);
-			if (this.sourceUnit.getWorkingContext() == LTK.EDITOR_CONTEXT) {
+			if (this.sourceUnit.getWorkingContext() == Ltk.EDITOR_CONTEXT) {
 				textFileChange.setSaveMode(TextFileChange.LEAVE_DIRTY);
 			}
 			createChanges(textFileChange, m.newChild(2));
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/FunctionToS4MethodRefactoring.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/FunctionToS4MethodRefactoring.java
index 0bf527e..729d242 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/FunctionToS4MethodRefactoring.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/FunctionToS4MethodRefactoring.java
@@ -40,10 +40,10 @@
 
 import org.eclipse.statet.internal.r.core.refactoring.Messages;
 import org.eclipse.statet.ltk.ast.core.AstNode;
-import org.eclipse.statet.ltk.core.LTK;
-import org.eclipse.statet.ltk.core.LTKUtils;
+import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.model.core.ElementSet;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
+import org.eclipse.statet.ltk.model.core.LtkModelUtils;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.ltk.refactoring.core.CommonRefactoringDescriptor;
 import org.eclipse.statet.ltk.refactoring.core.RefactoringChange;
 import org.eclipse.statet.ltk.refactoring.core.RefactoringMessages;
@@ -54,17 +54,17 @@
 import org.eclipse.statet.r.core.RUtil;
 import org.eclipse.statet.r.core.model.ArgsDefinition;
 import org.eclipse.statet.r.core.model.ArgsDefinition.Arg;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRMethod;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRModelManager;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RLangMethod;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RModelManager;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 import org.eclipse.statet.r.core.rlang.RTerminal;
 import org.eclipse.statet.r.core.rsource.ast.FDef;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 
@@ -127,8 +127,8 @@
 	private TextRegion selectionRegion;
 	private TextRegion operationRegion;
 	
-	private final IRSourceUnit sourceUnit;
-	private IRMethod function;
+	private final RSourceUnit sourceUnit;
+	private RLangMethod function;
 	
 //	private RAstNode container;
 	private List<Variable> variablesList;
@@ -141,7 +141,7 @@
 	 * @param su the source unit
 	 * @param region (selected) region of the function to convert
 	 */
-	public FunctionToS4MethodRefactoring(final IRSourceUnit su, final TextRegion selection) {
+	public FunctionToS4MethodRefactoring(final RSourceUnit su, final TextRegion selection) {
 		this.sourceUnit= su;
 		this.elementSet= new ElementSet(new Object[] { su });
 		
@@ -191,15 +191,15 @@
 					final AbstractDocument document= this.sourceUnit.getDocument(monitor);
 					final RHeuristicTokenScanner scanner= this.adapter.getScanner(this.sourceUnit);
 					
-					final IRModelInfo modelInfo= (IRModelInfo) this.sourceUnit.getModelInfo(RModel.R_TYPE_ID, IRModelManager.MODEL_FILE, m.newChild(1));
+					final RSourceUnitModelInfo modelInfo= (RSourceUnitModelInfo)this.sourceUnit.getModelInfo(RModel.R_TYPE_ID, RModelManager.MODEL_FILE, m.newChild(1));
 					if (modelInfo != null) {
 						final TextRegion region= this.adapter.trimToAstRegion(document,
 								this.selectionRegion, scanner );
-						ISourceStructElement element= LTKUtils.getCoveringSourceElement(
+						SourceStructElement element= LtkModelUtils.getCoveringSourceElement(
 								modelInfo.getSourceElement(), region );
 						while (element != null) {
-							if (element instanceof IRMethod) {
-								this.function= (IRMethod) element;
+							if (element instanceof RLangMethod) {
+								this.function= (RLangMethod)element;
 								break;
 							}
 							element= element.getSourceParent();
@@ -207,7 +207,7 @@
 					}
 					
 					if (this.function != null) {
-						final ISourceStructElement source= (ISourceStructElement) this.function;
+						final SourceStructElement source= (SourceStructElement) this.function;
 						this.operationRegion= this.adapter.expandSelectionRegion(document,
 								source.getSourceRange(), this.selectionRegion, scanner );
 					}
@@ -238,13 +238,13 @@
 	}
 	
 	private void checkFunction(final RefactoringStatus result) {
-		if ((this.function.getElementType() & IRElement.MASK_C2) != IRElement.R_COMMON_FUNCTION
-				&& (this.function.getElementType() & IRElement.MASK_C2) != IRElement.R_COMMON_FUNCTION) {
+		if ((this.function.getElementType() & RElement.MASK_C2) != RElement.R_COMMON_FUNCTION
+				&& (this.function.getElementType() & RElement.MASK_C2) != RElement.R_COMMON_FUNCTION) {
 			result.merge(RefactoringStatus.createFatalErrorStatus(Messages.FunctionToS4Method_error_SelectionAlreadyS4_message));
 			return;
 		}
 		final RAstNode node= (RAstNode) this.function.getAdapter(AstNode.class);
-		if (RAst.hasErrors(node)) {
+		if (RAsts.hasErrors(node)) {
 			result.merge(RefactoringStatus.createWarningStatus(Messages.FunctionToS4Method_warning_SelectionSyntaxError_message));
 		}
 //		if (fSelectionRegion != null
@@ -302,7 +302,7 @@
 		try {
 			
 			final TextFileChange textFileChange= new SourceUnitChange(this.sourceUnit);
-			if (this.sourceUnit.getWorkingContext() == LTK.EDITOR_CONTEXT) {
+			if (this.sourceUnit.getWorkingContext() == Ltk.EDITOR_CONTEXT) {
 				textFileChange.setSaveMode(TextFileChange.LEAVE_DIRTY);
 			}
 			createChanges(textFileChange, m.newChild(2));
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/InlineTempRefactoring.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/InlineTempRefactoring.java
index ee3bc24..3a22bf1 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/InlineTempRefactoring.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/InlineTempRefactoring.java
@@ -44,7 +44,7 @@
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
 import org.eclipse.statet.internal.r.core.refactoring.Messages;
-import org.eclipse.statet.ltk.core.LTK;
+import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.model.core.ElementSet;
 import org.eclipse.statet.ltk.refactoring.core.CommonRefactoringDescriptor;
 import org.eclipse.statet.ltk.refactoring.core.RefactoringChange;
@@ -53,13 +53,13 @@
 import org.eclipse.statet.ltk.refactoring.core.TextChangeCompatibility;
 import org.eclipse.statet.r.core.RCore;
 import org.eclipse.statet.r.core.RUtil;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.rsource.ast.Assignment;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 
@@ -73,7 +73,7 @@
 	
 	private final @Nullable TextRegion selectionRegion;
 	
-	private final IRSourceUnit sourceUnit;
+	private final RSourceUnit sourceUnit;
 	
 	private @Nullable RAstNode symbolNode;
 	/** [0]= write/assignment, [>= 1] read */
@@ -86,7 +86,7 @@
 	 * @param su the source unit
 	 * @param region (selected) region of an occurrence of the variable
 	 */
-	public InlineTempRefactoring(final IRSourceUnit su, final TextRegion region) {
+	public InlineTempRefactoring(final RSourceUnit su, final TextRegion region) {
 		this.sourceUnit= su;
 		this.elementSet= new ElementSet(new Object[] { su });
 		
@@ -144,9 +144,9 @@
 			result.merge(RefactoringStatus.createFatalErrorStatus(Messages.InlineTemp_error_InvalidSelection_message)); // no common variable
 			return;
 		}
-		final IRFrame frame= currentAccess.getFrame();
+		final RFrame frame= currentAccess.getFrame();
 		if (frame != null
-				&& (frame.getFrameType() == IRFrame.PACKAGE || frame.getFrameType() == IRFrame.EXPLICIT)) {
+				&& (frame.getFrameType() == RFrame.PACKAGE || frame.getFrameType() == RFrame.EXPLICIT)) {
 			result.merge(RefactoringStatus.createFatalErrorStatus(Messages.InlineTemp_error_InvalidSelectionNotLocal_message));
 			return;
 		}
@@ -192,7 +192,7 @@
 		}
 		final Assignment assignment= (Assignment) node;
 		final RAstNode source= assignment.getSourceChild();
-		if (RAst.hasErrors(source)) {
+		if (RAsts.hasErrors(source)) {
 			result.merge(RefactoringStatus.createWarningStatus(Messages.InlineTemp_warning_ValueSyntaxError_message));
 		}
 		
@@ -239,7 +239,7 @@
 		try {
 			
 			final TextFileChange textFileChange= new SourceUnitChange(this.sourceUnit);
-			if (this.sourceUnit.getWorkingContext() == LTK.EDITOR_CONTEXT) {
+			if (this.sourceUnit.getWorkingContext() == Ltk.EDITOR_CONTEXT) {
 				textFileChange.setSaveMode(TextFileChange.LEAVE_DIRTY);
 			}
 			createChanges(textFileChange, m.newChild(2));
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RElementSearchProcessor.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RElementSearchProcessor.java
index 2c03611..e9372ff 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RElementSearchProcessor.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RElementSearchProcessor.java
@@ -33,20 +33,21 @@
 import org.eclipse.statet.jcommons.collections.ImList;
 
 import org.eclipse.statet.internal.r.core.refactoring.Messages;
-import org.eclipse.statet.ltk.core.LTK;
-import org.eclipse.statet.ltk.model.core.IModelManager;
-import org.eclipse.statet.ltk.model.core.ISourceUnitManager;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.model.core.LtkModels;
+import org.eclipse.statet.ltk.model.core.ModelManager;
+import org.eclipse.statet.ltk.model.core.SourceUnitManager;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.r.core.RCore;
 import org.eclipse.statet.r.core.RProject;
 import org.eclipse.statet.r.core.RProjects;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRFrameInSource;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceFrame;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 
 
 public class RElementSearchProcessor {
@@ -99,7 +100,7 @@
 			Mode.CURRENT_FILE );
 	
 	
-	private final IRSourceUnit initialSourceUnit;
+	private final RSourceUnit initialSourceUnit;
 	
 	private List<Mode> availableModes;
 	private Mode mode;
@@ -112,7 +113,7 @@
 	private final int flags;
 	
 	private final List<RProject> allProjects= new ArrayList<>();
-	private final List<List<ISourceUnit>> allProjectsSourceUnits= new ArrayList<>();
+	private final List<List<SourceUnit>> allProjectsSourceUnits= new ArrayList<>();
 	protected final List<RProject> definitionProjects= new ArrayList<>();
 	protected final Set<String> definitionFrameIds= new HashSet<>();
 	protected final List<RProject> matchProjects= new ArrayList<>();
@@ -130,7 +131,7 @@
 	 * @param flags
 	 */
 	public RElementSearchProcessor(final RElementName name,
-			final IRSourceUnit sourceUnit, final RElementAccess mainAccess,
+			final RSourceUnit sourceUnit, final RElementAccess mainAccess,
 			final Mode mode, final int flags) {
 		this.initialSourceUnit= sourceUnit;
 		this.mode= mode;
@@ -230,7 +231,7 @@
 		}
 	}
 	
-	public IRSourceUnit getInitialSourceUnit() {
+	public RSourceUnit getInitialSourceUnit() {
 		return this.initialSourceUnit;
 	}
 	
@@ -239,8 +240,8 @@
 	}
 	
 	protected List<Mode> getAvailableModes(final RElementAccess access) {
-		final IRFrame frame= access.getFrame();
-		if (frame == null || (frame.getFrameType() != IRFrame.PACKAGE && frame.getFrameType() != IRFrame.PROJECT)) {
+		final RFrame frame= access.getFrame();
+		if (frame == null || (frame.getFrameType() != RFrame.PACKAGE && frame.getFrameType() != RFrame.PROJECT)) {
 			return MODES_LOCAL;
 		}
 		else if (getInitialRProject() == null) {
@@ -338,13 +339,13 @@
 				final RProject initialProject= getInitialRProject();
 				this.allProjects.add(initialProject);
 				if (initialProject != null && getMode().compareTo(Mode.CURRENT_PROJECT) <= 0) {
-					final List<ISourceUnit> sus= loadSus(initialProject, this.allProjectsSourceUnits, true,
+					final List<SourceUnit> sus= loadSus(initialProject, this.allProjectsSourceUnits, true,
 							m.newChild(2) );
 					sus.add(this.initialSourceUnit);
 				}
 				else {
 					this.initialSourceUnit.connect(m.newChild(1));
-					this.allProjectsSourceUnits.add(Collections.<ISourceUnit>singletonList(this.initialSourceUnit));
+					this.allProjectsSourceUnits.add(Collections.<SourceUnit>singletonList(this.initialSourceUnit));
 				}
 				m.worked(1);
 			}
@@ -367,7 +368,7 @@
 						throw new CoreException(Status.CANCEL_STATUS);
 					}
 					
-					List<ISourceUnit> sus;
+					List<SourceUnit> sus;
 					if (i < this.allProjectsSourceUnits.size()) {
 						sus= this.allProjectsSourceUnits.get(i);
 						m1.worked(1);
@@ -431,7 +432,7 @@
 			
 			// referencing occurrences - create text changes
 			if (this.matchProjects.isEmpty() && getMode() == Mode.CURRENT_FILE) {
-				final List<ISourceUnit> sus= new ArrayList<>();
+				final List<SourceUnit> sus= new ArrayList<>();
 				sus.add(this.initialSourceUnit);
 				process(null, sus, m.newChild(40));
 			}
@@ -447,7 +448,7 @@
 						throw new CoreException(Status.CANCEL_STATUS);
 					}
 					
-					List<ISourceUnit> sus;
+					List<SourceUnit> sus;
 					if (idx >= 0) {
 						sus= this.allProjectsSourceUnits.get(idx);
 					}
@@ -479,7 +480,7 @@
 		}
 		finally {
 			for (int i= 0; i < this.allProjectsSourceUnits.size(); i++) {
-				final List<ISourceUnit> sus= this.allProjectsSourceUnits.get(i);
+				final List<SourceUnit> sus= this.allProjectsSourceUnits.get(i);
 				if (sus != null) {
 					m.setWorkRemaining(this.allProjectsSourceUnits.size() - i);
 					closeSus(sus, m.newChild(1));
@@ -488,9 +489,9 @@
 		}
 	}
 	
-	private void closeSus(final List<ISourceUnit> sus, final SubMonitor m) {
+	private void closeSus(final List<SourceUnit> sus, final SubMonitor m) {
 		m.setWorkRemaining(sus.size());
-		for (final ISourceUnit su : sus) {
+		for (final SourceUnit su : sus) {
 			try {
 				su.disconnect(m.newChild(1));
 			}
@@ -524,12 +525,12 @@
 		}
 	}
 	
-	private List<ISourceUnit> loadSus(final RProject project, final List<List<ISourceUnit>> projectsSus,
+	private List<SourceUnit> loadSus(final RProject project, final List<List<SourceUnit>> projectsSus,
 			final boolean force, final SubMonitor m) throws CoreException {
 		m.setWorkRemaining(10 + 10);
 		
-		final ISourceUnitManager suManager= LTK.getSourceUnitManager();
-		List<ISourceUnit> sourceUnits= RModel.getRModelManager().findReferencingSourceUnits(
+		final SourceUnitManager suManager= LtkModels.getSourceUnitManager();
+		List<SourceUnit> sourceUnits= RModel.getRModelManager().findReferencingSourceUnits(
 				project, this.mainName, m.newChild(10) );
 		if (sourceUnits == null && force) {
 			sourceUnits= new ArrayList<>(1);
@@ -541,14 +542,14 @@
 			for (int i= 0; i < sourceUnits.size(); i++) {
 				m.setWorkRemaining(workRemaining--);
 				
-				final ISourceUnit sourceUnit= sourceUnits.get(i);
+				final SourceUnit sourceUnit= sourceUnits.get(i);
 				if (sourceUnit.getId().equals(this.initialSourceUnit.getId())) {
 					sourceUnits.remove(i--);
 				}
 				else {
 					try {
-						final ISourceUnit editUnit= suManager.getSourceUnit(
-								LTK.EDITOR_CONTEXT, sourceUnit, null, true, m.newChild(1) );
+						final SourceUnit editUnit= suManager.getSourceUnit(
+								Ltk.EDITOR_CONTEXT, sourceUnit, null, true, m.newChild(1) );
 						if (editUnit != null) {
 							sourceUnits.set(i, editUnit);
 						}
@@ -569,13 +570,13 @@
 		}
 	}
 	
-	private int searchDefinition(final RProject project, final List<ISourceUnit> sus,
+	private int searchDefinition(final RProject project, final List<SourceUnit> sus,
 			final SubMonitor m) {
 		final String packageName= project.getPkgName();
 		if (this.scopeFrameId != null && packageName != null
 				&& this.scopeFrameId.equals(createPackageFrameId(packageName))) {
 			m.setWorkRemaining(sus.size() * 2);
-			for (final ISourceUnit su : sus) {
+			for (final SourceUnit su : sus) {
 				searchDefinition(su, null, m.newChild(1));
 				searchDefinition(su, this.scopeFrameId, m.newChild(1));
 			}
@@ -584,33 +585,33 @@
 		else {
 			m.setWorkRemaining(sus.size());
 			boolean found= false;
-			for (final ISourceUnit su : sus) {
+			for (final SourceUnit su : sus) {
 				found |= searchDefinition(su, this.scopeFrameId, m.newChild(1));
 			}
 			return (found) ? 1 : 0;
 		}
 	}
 	
-	private boolean searchDefinition(final ISourceUnit su, final String specificFrameId,
+	private boolean searchDefinition(final SourceUnit su, final String specificFrameId,
 			final SubMonitor m) {
 		m.setWorkRemaining(2 + 4);
 		
 		su.connect(m.newChild(1));
 		try {
-			final IRModelInfo modelInfo= (IRModelInfo) su.getModelInfo(RModel.R_TYPE_ID,
-					IModelManager.MODEL_FILE, m.newChild(2) );
+			final RSourceUnitModelInfo modelInfo= (RSourceUnitModelInfo)su.getModelInfo(RModel.R_TYPE_ID,
+					ModelManager.MODEL_FILE, m.newChild(2) );
 			if (modelInfo == null) {
 				return false;
 			}
-			final IRFrame frame;
+			final RFrame frame;
 			if (specificFrameId == null) {
 				frame= modelInfo.getTopFrame();
 			}
 			else {
 				frame= modelInfo.getReferencedFrames().get(specificFrameId);
 			}
-			if (frame instanceof IRFrameInSource) {
-				final List<? extends RElementAccess> allAccess= ((IRFrameInSource) frame).getAllAccessOf(
+			if (frame instanceof RSourceFrame) {
+				final List<? extends RElementAccess> allAccess= ((RSourceFrame)frame).getAllAccessOf(
 						this.mainName.getSegmentName(), false );
 				if (allAccess != null) {
 					for (final RElementAccess access : allAccess) {
@@ -639,7 +640,7 @@
 	protected void beginFinalProcessing(final SubMonitor m) {
 	}
 	
-	protected void process(final RProject project, final List<ISourceUnit> sus,
+	protected void process(final RProject project, final List<SourceUnit> sus,
 			final SubMonitor m) throws BadLocationException {
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RRefactoringAdapter.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RRefactoringAdapter.java
index 35ad798..db50c34 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RRefactoringAdapter.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RRefactoringAdapter.java
@@ -35,24 +35,24 @@
 import org.eclipse.statet.internal.r.core.refactoring.Messages;
 import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.ltk.ast.core.util.AstSelection;
-import org.eclipse.statet.ltk.model.core.IModelManager;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
+import org.eclipse.statet.ltk.model.core.ModelManager;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.ltk.refactoring.core.RefactoringAdapter;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCodeStyleSettings;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.rlang.RTerminal;
-import org.eclipse.statet.r.core.rsource.IRSourceConstants;
 import org.eclipse.statet.r.core.rsource.RLexer;
+import org.eclipse.statet.r.core.rsource.RSourceConstants;
 import org.eclipse.statet.r.core.rsource.RSourceIndenter;
 import org.eclipse.statet.r.core.rsource.ast.Assignment;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.core.rsource.ast.RScanner;
 import org.eclipse.statet.r.core.rsource.ast.SourceComponent;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 
 
@@ -76,19 +76,19 @@
 	}
 	
 	@Override
-	public RHeuristicTokenScanner getScanner(final ISourceUnit su) {
+	public RHeuristicTokenScanner getScanner(final SourceUnit su) {
 		return RHeuristicTokenScanner.create(su.getDocumentContentInfo());
 	}
 	
 	@Override
 	public boolean isCommentContent(final ITypedRegion partition) {
 		return (partition != null
-				&& partition.getType() == IRDocumentConstants.R_COMMENT_CONTENT_TYPE );
+				&& partition.getType() == RDocumentConstants.R_COMMENT_CONTENT_TYPE );
 	}
 	
 	public TextRegion trimToAstRegion(final AbstractDocument document, final TextRegion region,
 			final RHeuristicTokenScanner scanner) {
-		scanner.configure(document, IRDocumentConstants.R_CODE_CONTENT_CONSTRAINT);
+		scanner.configure(document, RDocumentConstants.R_CODE_CONTENT_CONSTRAINT);
 		int start= region.getStartOffset();
 		int stop= region.getEndOffset();
 		int result;
@@ -132,7 +132,7 @@
 		return new BasicTextRegion(start, stop);
 	}
 	
-	public RAstNode searchPotentialNameNode(final ISourceUnit su, TextRegion region,
+	public RAstNode searchPotentialNameNode(final SourceUnit su, TextRegion region,
 			final boolean allowAssignRegion, final IProgressMonitor monitor) {
 		final SubMonitor m= SubMonitor.convert(monitor, 5);
 		
@@ -143,8 +143,8 @@
 			
 			region= trimToAstRegion(document, region, scanner);
 			
-			final ISourceUnitModelInfo modelInfo= su.getModelInfo(RModel.R_TYPE_ID,
-					IModelManager.MODEL_FILE, m.newChild(1) );
+			final SourceUnitModelInfo modelInfo= su.getModelInfo(RModel.R_TYPE_ID,
+					ModelManager.MODEL_FILE, m.newChild(1) );
 			if (modelInfo != null) {
 				final AstSelection astSelection= AstSelection.search(modelInfo.getAst().getRoot(),
 						region.getStartOffset(), region.getEndOffset(),
@@ -167,7 +167,7 @@
 		scanner.configure(document, new PartitionConstraint() {
 			@Override
 			public boolean matches(final String partitionType) {
-				return (partitionType != IRDocumentConstants.R_COMMENT_CONTENT_TYPE);
+				return (partitionType != RDocumentConstants.R_COMMENT_CONTENT_TYPE);
 			}
 		});
 		final int min= limit.getStartOffset();
@@ -179,7 +179,7 @@
 		while (start > min) {
 			result= scanner.findNonBlankBackward(start, min, true);
 			if (result >= 0) {
-				if (IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(scanner.getPartition(result).getType())
+				if (RDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(scanner.getPartition(result).getType())
 						&& scanner.getChar() == ';') {
 					start= result;
 					continue;
@@ -198,7 +198,7 @@
 		while (end < max) {
 			result= scanner.findNonBlankForward(end, max, true);
 			if (result >= 0) {
-				if (IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(scanner.getPartition(result).getType())
+				if (RDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(scanner.getPartition(result).getType())
 						&& scanner.getChar() == ';') {
 					end= result + 1;
 					continue;
@@ -235,7 +235,7 @@
 					Messages.RIdentifiers_error_Empty_message;
 		}
 		if ((nextToken != RTerminal.SYMBOL && nextToken != RTerminal.SYMBOL_G)
-				|| ((this.lexer.getFlags() & IRSourceConstants.STATUSFLAG_REAL_ERROR) != 0)
+				|| ((this.lexer.getFlags() & RSourceConstants.STATUSFLAG_REAL_ERROR) != 0)
 				|| (this.lexer.next() != RTerminal.EOF)) {
 			return (identifierMessageName != null) ?
 					NLS.bind(Messages.RIdentifiers_error_InvalidFor_message, identifierMessageName, Messages.RIdentifiers_error_Empty_message) :
@@ -308,8 +308,8 @@
 	}
 	
 	static String indent(final StringBuilder sb, final AbstractDocument orgDoc, final int offset,
-			final ISourceUnit su, final RHeuristicTokenScanner scanner) throws BadLocationException, CoreException {
-		final IRCoreAccess coreConfig= (su instanceof IRSourceUnit) ? ((IRSourceUnit) su).getRCoreAccess() : RCore.getWorkbenchAccess();
+			final SourceUnit su, final RHeuristicTokenScanner scanner) throws BadLocationException, CoreException {
+		final RCoreAccess coreConfig= (su instanceof RSourceUnit) ? ((RSourceUnit)su).getRCoreAccess() : RCore.getWorkbenchAccess();
 		
 		final IndentUtil indentUtil= new IndentUtil(orgDoc, coreConfig.getRCodeStyle());
 		final int column= indentUtil.getColumn(offset);
@@ -345,8 +345,8 @@
 	 * @throws CoreException
 	 */
 	static int prepareInsertBefore(final StringBuilder text, final AbstractDocument orgDoc, final int offset,
-			final ISourceUnit su) throws BadLocationException, CoreException {
-		final IRCoreAccess coreConfig= (su instanceof IRSourceUnit) ? ((IRSourceUnit) su).getRCoreAccess() : RCore.getWorkbenchAccess();
+			final SourceUnit su) throws BadLocationException, CoreException {
+		final RCoreAccess coreConfig= (su instanceof RSourceUnit) ? ((RSourceUnit)su).getRCoreAccess() : RCore.getWorkbenchAccess();
 		
 		final IndentUtil indentUtil= new IndentUtil(orgDoc, coreConfig.getRCodeStyle());
 		final int line= orgDoc.getLineOfOffset(offset);
@@ -362,9 +362,9 @@
 		}
 	}
 	
-	static RCodeStyleSettings getCodeStyle(final ISourceUnit su) {
-		if (su instanceof IRSourceUnit) {
-			return ((IRSourceUnit) su).getRCoreAccess().getRCodeStyle();
+	static RCodeStyleSettings getCodeStyle(final SourceUnit su) {
+		if (su instanceof RSourceUnit) {
+			return ((RSourceUnit)su).getRCoreAccess().getRCodeStyle();
 		}
 		return RCore.getWorkbenchAccess().getRCodeStyle();
 	}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RenameInRegionRefactoring.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RenameInRegionRefactoring.java
index 8267bcd..ae9ab77 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RenameInRegionRefactoring.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RenameInRegionRefactoring.java
@@ -43,7 +43,7 @@
 import org.eclipse.statet.internal.r.core.refactoring.Messages;
 import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.ltk.ast.core.util.AstSelection;
-import org.eclipse.statet.ltk.core.LTK;
+import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.model.core.ElementSet;
 import org.eclipse.statet.ltk.refactoring.core.CommonRefactoringDescriptor;
 import org.eclipse.statet.ltk.refactoring.core.RefactoringChange;
@@ -52,18 +52,18 @@
 import org.eclipse.statet.ltk.refactoring.core.TextChangeCompatibility;
 import org.eclipse.statet.r.core.RCore;
 import org.eclipse.statet.r.core.RUtil;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRFrameInSource;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRModelManager;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RModelManager;
+import org.eclipse.statet.r.core.model.RSourceFrame;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 import org.eclipse.statet.r.core.rlang.RTerminal;
 import org.eclipse.statet.r.core.rsource.ast.GenericVisitor;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 
@@ -98,9 +98,9 @@
 		}
 		
 		private void add(final RElementAccess access) {
-			final IRFrame frame= access.getFrame();
-			if (!(frame instanceof IRFrameInSource)
-					|| frame.getFrameType() == IRFrame.PACKAGE) {
+			final RFrame frame= access.getFrame();
+			if (!(frame instanceof RSourceFrame)
+					|| frame.getFrameType() == RFrame.PACKAGE) {
 				return;
 			}
 			Map<String, Variable> map= RenameInRegionRefactoring.this.variablesList.get(frame);
@@ -176,9 +176,9 @@
 	
 	private TextRegion selectionRegion;
 	
-	private final IRSourceUnit sourceUnit;
+	private final RSourceUnit sourceUnit;
 	
-	private Map<IRFrame, Map<String, Variable>> variablesList;
+	private Map<RFrame, Map<String, Variable>> variablesList;
 	
 	
 	/**
@@ -186,7 +186,7 @@
 	 * @param su the source unit
 	 * @param region (selected) region
 	 */
-	public RenameInRegionRefactoring(final IRSourceUnit su, final TextRegion region) {
+	public RenameInRegionRefactoring(final RSourceUnit su, final TextRegion region) {
 		this.sourceUnit= su;
 		this.elementSet= new ElementSet(new Object[] { su });
 		
@@ -205,7 +205,7 @@
 		return RRefactoring.RENAME_IN_REGION_REFACTORING_ID;
 	}
 	
-	public Map<IRFrame, Map<String, Variable>> getVariables() {
+	public Map<RFrame, Map<String, Variable>> getVariables() {
 		return this.variablesList;
 	}
 	
@@ -221,7 +221,7 @@
 					final AbstractDocument document= this.sourceUnit.getDocument(monitor);
 					final RHeuristicTokenScanner scanner= this.adapter.getScanner(this.sourceUnit);
 					
-					final IRModelInfo modelInfo= (IRModelInfo) this.sourceUnit.getModelInfo(RModel.R_TYPE_ID, IRModelManager.MODEL_FILE, m.newChild(1));
+					final RSourceUnitModelInfo modelInfo= (RSourceUnitModelInfo)this.sourceUnit.getModelInfo(RModel.R_TYPE_ID, RModelManager.MODEL_FILE, m.newChild(1));
 					if (modelInfo != null) {
 						final TextRegion region= this.adapter.trimToAstRegion(document,
 								this.selectionRegion, scanner );
@@ -317,7 +317,7 @@
 		try {
 			
 			final TextFileChange textFileChange= new SourceUnitChange(this.sourceUnit);
-			if (this.sourceUnit.getWorkingContext() == LTK.EDITOR_CONTEXT) {
+			if (this.sourceUnit.getWorkingContext() == Ltk.EDITOR_CONTEXT) {
 				textFileChange.setSaveMode(TextFileChange.LEAVE_DIRTY);
 			}
 			final List<String> variableNames= createChanges(textFileChange, m.newChild(2));
@@ -373,7 +373,7 @@
 				final String oldMsgName= RUtil.formatVarName(oldName);
 				final boolean isQuoted= (variable.newName.charAt(0) == '`');
 				final GroupCategorySet set= new GroupCategorySet(new GroupCategory(
-						((IRFrameInSource) variable.getParent()).getFrameId() + '$' + variable.name,
+						((RSourceFrame)variable.getParent()).getFrameId() + '$' + variable.name,
 						NLS.bind(Messages.RenameInRegion_Changes_VariableGroup_name, oldMsgName), "")); //$NON-NLS-1$
 				final String message= NLS.bind(Messages.RenameInRegion_Changes_ReplaceOccurrence_name,
 						oldMsgName);
@@ -385,7 +385,7 @@
 					}
 					final String text= (isQuoted && nameNode.getNodeType() == NodeType.SYMBOL && nameNode.getOperator(0) == RTerminal.SYMBOL) ?
 							variable.newName : RRefactoringAdapter.getUnquotedIdentifier(variable.newName);
-					final TextRegion nameRegion= RAst.getElementNameRegion(nameNode);
+					final TextRegion nameRegion= RAsts.getElementNameRegion(nameNode);
 					TextChangeCompatibility.addTextEdit(change, message,
 							new ReplaceEdit(nameRegion.getStartOffset(), nameRegion.getLength(), text),
 							set );
@@ -408,7 +408,7 @@
 				final String oldMsgName= RUtil.formatVarName(oldName);
 				final boolean isQuoted= (variable.newName.charAt(0) == '`');
 				final GroupCategorySet set= new GroupCategorySet(new GroupCategory(
-						((IRFrameInSource) parent.getParent()).getFrameId() + '$' + parent.name,
+						((RSourceFrame)parent.getParent()).getFrameId() + '$' + parent.name,
 						NLS.bind(Messages.RenameInRegion_Changes_VariableGroup_name, parentMsgName), "")); //$NON-NLS-1$
 				final String message= NLS.bind(Messages.RenameInRegion_Changes_ReplaceOccurrenceOf_name,
 						oldMsgName, parentMsgName );
@@ -420,7 +420,7 @@
 					}
 					final String text= (isQuoted && nameNode.getNodeType() == NodeType.SYMBOL && nameNode.getOperator(0) == RTerminal.SYMBOL) ?
 							variable.newName : RRefactoringAdapter.getUnquotedIdentifier(variable.newName);
-					final TextRegion nameRegion= RAst.getElementNameRegion(nameNode);
+					final TextRegion nameRegion= RAsts.getElementNameRegion(nameNode);
 					TextChangeCompatibility.addTextEdit(change, message,
 							new ReplaceEdit(nameRegion.getStartOffset(), nameRegion.getLength(), text),
 							set );
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RenameInWorkspaceRefactoring.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RenameInWorkspaceRefactoring.java
index 41f9775..83730dd 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RenameInWorkspaceRefactoring.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/RenameInWorkspaceRefactoring.java
@@ -38,9 +38,9 @@
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
 import org.eclipse.statet.internal.r.core.refactoring.Messages;
-import org.eclipse.statet.ltk.core.LTK;
+import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.model.core.ElementSet;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.refactoring.core.CommonRefactoringDescriptor;
 import org.eclipse.statet.ltk.refactoring.core.RefactoringChange;
 import org.eclipse.statet.ltk.refactoring.core.RefactoringMessages;
@@ -49,19 +49,19 @@
 import org.eclipse.statet.ltk.refactoring.core.TextChangeManager;
 import org.eclipse.statet.r.core.RProject;
 import org.eclipse.statet.r.core.RUtil;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRFrameInSource;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRModelManager;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RModelManager;
+import org.eclipse.statet.r.core.model.RSourceFrame;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.refactoring.RElementSearchProcessor.Mode;
 import org.eclipse.statet.r.core.rlang.RTerminal;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 
 
@@ -80,7 +80,7 @@
 		
 		
 		public SearchProcessor(final RElementName elementName,
-				final IRSourceUnit sourceUnit, final RElementAccess mainAccess) {
+				final RSourceUnit sourceUnit, final RElementAccess mainAccess) {
 			super(elementName, sourceUnit, mainAccess, null, WARN_NO_DEFINITION);
 		}
 		
@@ -94,19 +94,19 @@
 		public void beginFinalProcessing(final SubMonitor m) {
 			m.subTask(RefactoringMessages.Common_CreateChanges_label);
 			
-			final IRSourceUnit initialSu= getInitialSourceUnit();
+			final RSourceUnit initialSu= getInitialSourceUnit();
 			final TextFileChange textFileChange= this.changeManager.get(initialSu);
-			if (initialSu.getWorkingContext() == LTK.EDITOR_CONTEXT) {
+			if (initialSu.getWorkingContext() == Ltk.EDITOR_CONTEXT) {
 				textFileChange.setSaveMode(TextFileChange.LEAVE_DIRTY);
 			}
 		}
 		
 		@Override
-		public void process(final RProject project, final List<ISourceUnit> sus,
+		public void process(final RProject project, final List<SourceUnit> sus,
 				final SubMonitor m) throws BadLocationException {
 			if (sus != null) {
 				int workRemaining= sus.size();
-				for (final ISourceUnit su : sus) {
+				for (final SourceUnit su : sus) {
 					m.setWorkRemaining(workRemaining--);
 					final TextFileChange change= this.changeManager.get(su);
 					createChanges(su, change, this.definitionFrameIds, m.newChild(1));
@@ -122,7 +122,7 @@
 	
 	private TextRegion selectionRegion;
 	
-	private final IRWorkspaceSourceUnit sourceUnit;
+	private final RWorkspaceSourceUnit sourceUnit;
 	
 	private RAstNode initialSymbolNode;
 	private RElementAccess initialAccess;
@@ -138,7 +138,7 @@
 	 * @param su the source unit
 	 * @param region (selected) region of an occurrence of the variable
 	 */
-	public RenameInWorkspaceRefactoring(final IRWorkspaceSourceUnit su, final TextRegion region) {
+	public RenameInWorkspaceRefactoring(final RWorkspaceSourceUnit su, final TextRegion region) {
 		this.sourceUnit= su;
 		this.elementSet= new ElementSet(new Object[] { su });
 		
@@ -153,7 +153,7 @@
 	 * @param su the source unit
 	 * @param region (selected) region of an occurrence of the variable
 	 */
-	public RenameInWorkspaceRefactoring(final IRWorkspaceSourceUnit su, final RAstNode node) {
+	public RenameInWorkspaceRefactoring(final RWorkspaceSourceUnit su, final RAstNode node) {
 		this.sourceUnit= su;
 		this.elementSet= new ElementSet(new Object[] { su });
 		
@@ -309,7 +309,7 @@
 		m.setWorkRemaining(2 + 4);
 		
 		final TextFileChange change= new SourceUnitChange(this.sourceUnit);
-		if (this.sourceUnit.getWorkingContext() == LTK.EDITOR_CONTEXT) {
+		if (this.sourceUnit.getWorkingContext() == Ltk.EDITOR_CONTEXT) {
 			change.setSaveMode(TextFileChange.LEAVE_DIRTY);
 		}
 		
@@ -325,7 +325,7 @@
 				final RAstNode nameNode= aAccess.getNameNode();
 				final String text= (isQuoted && nameNode.getNodeType() == NodeType.SYMBOL && nameNode.getOperator(0) == RTerminal.SYMBOL) ?
 						this.newName : unquoted;
-				final TextRegion nameRegion= RAst.getElementNameRegion(nameNode);
+				final TextRegion nameRegion= RAsts.getElementNameRegion(nameNode);
 				TextChangeCompatibility.addTextEdit(change, Messages.RenameInWorkspace_Changes_ReplaceOccurrence_name,
 						new ReplaceEdit(nameRegion.getStartOffset(), nameRegion.getLength(), text));
 			}
@@ -339,15 +339,15 @@
 	}
 	
 	
-	private int createChanges(final ISourceUnit su, final TextFileChange change,
+	private int createChanges(final SourceUnit su, final TextFileChange change,
 			final Set<String> definitionFrameIds, final SubMonitor m) throws BadLocationException {
 		m.setWorkRemaining(3 + 6);
 		
 		int found= FOUND_NONE;
 		su.connect(m.newChild(1));
 		try {
-			final IRModelInfo modelInfo= (IRModelInfo) su.getModelInfo(RModel.R_TYPE_ID,
-					IRModelManager.MODEL_FILE, m.newChild(1) );
+			final RSourceUnitModelInfo modelInfo= (RSourceUnitModelInfo)su.getModelInfo(RModel.R_TYPE_ID,
+					RModelManager.MODEL_FILE, m.newChild(1) );
 			
 			final String unquoted= RRefactoringAdapter.getUnquotedIdentifier(this.newName);
 			final String quoted= RRefactoringAdapter.getQuotedIdentifier(this.newName);
@@ -355,15 +355,15 @@
 			
 			final List<List<? extends RElementAccess>> allFrameAccess= new ArrayList<>();
 			for (final String frameId : definitionFrameIds) {
-				final IRFrame frame;
+				final RFrame frame;
 				if (frameId == null) {
 					frame= modelInfo.getTopFrame();
 				}
 				else {
 					frame= modelInfo.getReferencedFrames().get(frameId);
 				}
-				if (frame instanceof IRFrameInSource) {
-					final List<? extends RElementAccess> allAccess= ((IRFrameInSource) frame).getAllAccessOf(
+				if (frame instanceof RSourceFrame) {
+					final List<? extends RElementAccess> allAccess= ((RSourceFrame)frame).getAllAccessOf(
 							this.searchProcessor.mainName.getSegmentName(), false );
 					if (allAccess != null && allAccess.size() > 0) {
 						allFrameAccess.add(allAccess);
@@ -378,7 +378,7 @@
 					final RAstNode nameNode= access.getNameNode();
 					final String text= (isQuoted && nameNode.getNodeType() == NodeType.SYMBOL && nameNode.getOperator(0) == RTerminal.SYMBOL) ?
 							this.newName : unquoted;
-					final TextRegion nameRegion= RAst.getElementNameRegion(nameNode);
+					final TextRegion nameRegion= RAsts.getElementNameRegion(nameNode);
 					TextChangeCompatibility.addTextEdit(change, Messages.RenameInWorkspace_Changes_ReplaceOccurrence_name,
 							new ReplaceEdit(nameRegion.getStartOffset(), nameRegion.getLength(), text));
 				}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/RLexer.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/RLexer.java
index 2251586..540bcf8 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/RLexer.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/RLexer.java
@@ -14,17 +14,17 @@
 
 package org.eclipse.statet.r.core.rsource;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_NUMBER_HEX_DIGIT_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_NUMBER_HEX_FLOAT_EXP_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_NUMBER_INT_WITH_DEC_POINT;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_NUMBER_NON_INT_WITH_L;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_HEX_DIGIT_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_NOT_CLOSED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNKOWN;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_TEXT_NULLCHAR;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS_MASK_12;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_EXP_DIGIT_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_HEX_DIGIT_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_HEX_FLOAT_EXP_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_INT_WITH_DEC_POINT;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_NUMBER_NON_INT_WITH_L;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_HEX_DIGIT_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNKOWN;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_TEXT_NULLCHAR;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS_MASK_12;
 
 import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.string.StringFactory;
@@ -1791,13 +1791,13 @@
 						if (type == RTerminal.SYMBOL_G) {
 							if (in.get(n + digits + 2) != '}') {
 								readQuoted(in, type, cQuote, n + digits + 2,
-										IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED,
+										RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED,
 										createDetail(in, n - 1, n + digits + 2, "\\u{xxxx}") );
 								return;
 							}
 							else {
 								readQuoted(in, type, cQuote, n + digits + 3,
-										IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED,
+										RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED,
 										createDetail(in, n - 1, n + digits + 3, "\\u{xxxx}") );
 								return;
 							}
@@ -1862,7 +1862,7 @@
 						}
 						if (type == RTerminal.SYMBOL_G) {
 							readQuoted(in, type, cQuote, n + digits + 1,
-									IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED,
+									RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED,
 									createDetail(in, n - 1, n + digits + 1, "\\uxxxx") );
 							return;
 						}
@@ -1922,13 +1922,13 @@
 						if (type == RTerminal.SYMBOL_G) {
 							if (in.get(n + digits + 2) != '}') {
 								readQuoted(in, type, cQuote, n + digits + 2,
-										IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED,
+										RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED,
 										createDetail(in, n - 1, n + digits + 2, "\\U{xxxxxxxx}") );
 								return;
 							}
 							else {
 								readQuoted(in, type, cQuote, n + digits + 3,
-										IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED,
+										RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED,
 										createDetail(in, n - 1, n + digits + 3, "\\U{xxxxxxxx}") );
 								return;
 							}
@@ -2005,7 +2005,7 @@
 						}
 						if (type == RTerminal.SYMBOL_G) {
 							readQuoted(in, type, cQuote, n + digits + 1,
-									IRSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED,
+									RSourceConstants.STATUS123_SYNTAX_TEXT_ESCAPE_SEQ_UNEXPECTED,
 									createDetail(in, n - 1, n + digits + 1, "\\Uxxxxxxxx") );
 							return;
 						}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/IRSourceConstants.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/RSourceConstants.java
similarity index 99%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/IRSourceConstants.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/RSourceConstants.java
index 8adf393..04c24bd 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/IRSourceConstants.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/RSourceConstants.java
@@ -15,7 +15,7 @@
 package org.eclipse.statet.r.core.rsource;
 
 
-public interface IRSourceConstants {
+public interface RSourceConstants {
 	
 	public static final int STATUS_MASK_1=                  0x0_0000_ff00;
 	public static final int STATUS_MASK_12=                 0x0_000f_fff0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/RSourceIndenter.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/RSourceIndenter.java
index f2f9b95..5de2c2d 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/RSourceIndenter.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/RSourceIndenter.java
@@ -31,9 +31,9 @@
 import org.eclipse.statet.internal.r.core.RCorePlugin;
 import org.eclipse.statet.ltk.ast.core.AstNode;
 import org.eclipse.statet.ltk.ast.core.AstVisitor;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCodeStyleSettings;
 import org.eclipse.statet.r.core.RCore;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.rsource.ast.Block;
 import org.eclipse.statet.r.core.rsource.ast.CForLoop;
 import org.eclipse.statet.r.core.rsource.ast.CIfElse;
@@ -436,14 +436,14 @@
 		this.computeVisitor= new ComputeIndentVisitor();
 	}
 	
-	public RSourceIndenter(final RHeuristicTokenScanner scanner, final IRCoreAccess access) {
+	public RSourceIndenter(final RHeuristicTokenScanner scanner, final RCoreAccess access) {
 		this(scanner);
 		setup(access);
 	}
 	
 	
 //	public void indent(final AbstractDocument document, final AstInfo<RAstNode> ast, final int firstLine, final int lastLine,
-//			final IRCoreAccess access, final WorkingContext context) throws CoreException {
+//			final RCoreAccess access, final WorkingContext context) throws CoreException {
 //		try {
 //			setup(document, ast, access);
 //			computeIndent(firstLine, lastLine);
@@ -475,7 +475,7 @@
 //	}
 	
 //	public void indentLine(final AbstractDocument document, final AstInfo<RAstNode> ast, final int line,
-//			final IRCoreAccess access) throws CoreException {
+//			final RCoreAccess access) throws CoreException {
 //		try {
 //			setup(document, ast, access);
 //			computeIndent(line, 0);
@@ -489,7 +489,7 @@
 //		}
 //	}
 	
-	public void setup(final IRCoreAccess access) {
+	public void setup(final RCoreAccess access) {
 		this.codeStyle= access.getRCodeStyle();
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CForLoop.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CForLoop.java
index 28abe65..e7b43ed 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CForLoop.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CForLoop.java
@@ -14,9 +14,9 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_BODY_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_FORSEQ_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS3_FOR;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_BODY_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_FORSEQ_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS3_FOR;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CIfElse.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CIfElse.java
index f3f7fe1..7d53c0a 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CIfElse.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CIfElse.java
@@ -14,10 +14,10 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_BODY_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_CONDITION_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS3_ELSE;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS3_IF;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_BODY_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_CONDITION_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS3_ELSE;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS3_IF;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CRepeatLoop.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CRepeatLoop.java
index de57ac7..776666d 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CRepeatLoop.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CRepeatLoop.java
@@ -14,8 +14,8 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_BODY_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS3_REPEAT;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_BODY_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS3_REPEAT;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CWhileLoop.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CWhileLoop.java
index 84e3140..f5f4e40 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CWhileLoop.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CWhileLoop.java
@@ -14,9 +14,9 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_BODY_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_CONDITION_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS3_WHILE;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_BODY_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_CONDITION_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS3_WHILE;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Dummy.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Dummy.java
index 625a15d..6eec84b 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Dummy.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Dummy.java
@@ -14,8 +14,8 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AFTER_OP_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_BEFORE_OP_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AFTER_OP_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_BEFORE_OP_MISSING;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/ExpressionList.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/ExpressionList.java
index a86388a..a9b7f10 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/ExpressionList.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/ExpressionList.java
@@ -14,7 +14,7 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS1_SYNTAX_MISSING_TOKEN;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS1_SYNTAX_MISSING_TOKEN;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FCall.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FCall.java
index 18cffb9..c6c1d88 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FCall.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FCall.java
@@ -14,7 +14,7 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_REF_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_REF_MISSING;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FDef.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FDef.java
index f619f99..3ce7678 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FDef.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FDef.java
@@ -14,9 +14,9 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_ARGVALUE_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_BODY_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS3_FDEF;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_ARGVALUE_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_BODY_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS3_FDEF;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Group.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Group.java
index 60c29a1..8d0a1ac 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Group.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Group.java
@@ -14,7 +14,7 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_IN_GROUP_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_IN_GROUP_MISSING;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Help.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Help.java
index f512a08..6e0935a 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Help.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Help.java
@@ -14,8 +14,8 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AFTER_OP_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS_OK;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AFTER_OP_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS_OK;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/IRAstVisitorTest.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/IRAstVisitorTest.java
deleted file mode 100644
index e72be8b..0000000
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/IRAstVisitorTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2007, 2020 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.r.core.rsource.ast;
-
-import java.lang.reflect.InvocationTargetException;
-
-
-/**
- * No intended to implement. It can be used to test which methods RAstVisitor are implemented.
- */
-public interface IRAstVisitorTest {
-	
-	public void visit(SourceComponent node) throws InvocationTargetException;
-	
-	public void visit(Block node) throws InvocationTargetException;
-	
-	public void visit(Group node) throws InvocationTargetException;
-	
-	public void visit(CIfElse node) throws InvocationTargetException;
-	
-	public void visit(CForLoop node) throws InvocationTargetException;
-	
-	public void visit(CRepeatLoop node) throws InvocationTargetException;
-	
-	public void visit(CWhileLoop node) throws InvocationTargetException;
-	
-	public void visit(CLoopCommand node) throws InvocationTargetException;
-	
-	public void visit(FCall node) throws InvocationTargetException;
-	
-	public void visit(FCall.Args node) throws InvocationTargetException;
-	
-	public void visit(FCall.Arg node) throws InvocationTargetException;
-	
-	public void visit(FDef node) throws InvocationTargetException;
-	
-	public void visit(FDef.Args node) throws InvocationTargetException;
-	
-	public void visit(FDef.Arg node) throws InvocationTargetException;
-	
-	public void visit(Assignment node) throws InvocationTargetException;
-	
-	public void visit(Model node) throws InvocationTargetException;
-	
-	public void visit(Relational node) throws InvocationTargetException;
-	
-	public void visit(Logical node) throws InvocationTargetException;
-	
-	public void visit(Arithmetic node) throws InvocationTargetException;
-	
-	public void visit(Power node) throws InvocationTargetException;
-	
-	public void visit(Seq node) throws InvocationTargetException;
-	
-	public void visit(Special node) throws InvocationTargetException;
-	
-	public void visit(Sign node) throws InvocationTargetException;
-	
-	public void visit(SubIndexed node) throws InvocationTargetException;
-	
-	public void visit(SubIndexed.Args node) throws InvocationTargetException;
-	
-	public void visit(SubIndexed.Arg node) throws InvocationTargetException;
-	
-	public void visit(SubNamed node) throws InvocationTargetException;
-	
-	public void visit(NSGet node) throws InvocationTargetException;
-	
-	public void visit(StringConst node) throws InvocationTargetException;
-	
-	public void visit(NumberConst node) throws InvocationTargetException;
-	
-	public void visit(NullConst node) throws InvocationTargetException;
-	
-	public void visit(Symbol node) throws InvocationTargetException;
-	
-	public void visit(Help node) throws InvocationTargetException;
-	
-	public void visit(Dummy node) throws InvocationTargetException;
-	
-}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Model.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Model.java
index dbb9c53..fc35a3a 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Model.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Model.java
@@ -14,8 +14,8 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AFTER_OP_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS_OK;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AFTER_OP_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS_OK;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstNode.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstNode.java
index fdfe94b..21551f0 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstNode.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstNode.java
@@ -14,7 +14,7 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS_OK;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS_OK;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.List;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstVisitor.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstVisitor.java
index 23c6e08..347f55f 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstVisitor.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstVisitor.java
@@ -16,10 +16,13 @@
 
 import java.lang.reflect.InvocationTargetException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * 
  */
+@NonNullByDefault
 public class RAstVisitor {
 	
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAst.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAsts.java
similarity index 97%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAst.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAsts.java
index abbb022..be9dcb0 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAst.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAsts.java
@@ -32,20 +32,20 @@
 import org.eclipse.statet.jcommons.text.core.BasicTextRegion;
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
-import org.eclipse.statet.ltk.ast.core.Ast;
+import org.eclipse.statet.ltk.ast.core.Asts;
 import org.eclipse.statet.ltk.ast.core.AstNode;
 import org.eclipse.statet.ltk.ast.core.AstVisitor;
 import org.eclipse.statet.r.core.model.ArgsDefinition;
 import org.eclipse.statet.r.core.model.ArgsDefinition.Arg;
 import org.eclipse.statet.r.core.model.RCoreFunctions;
 import org.eclipse.statet.r.core.rlang.RTerminal;
-import org.eclipse.statet.r.core.rsource.IRSourceConstants;
+import org.eclipse.statet.r.core.rsource.RSourceConstants;
 
 
 /**
  * 
  */
-public class RAst extends Ast {
+public class RAsts extends Asts {
 	
 	
 	private static class LowestFDefAssignmentSearchVisitor extends GenericVisitor implements AstVisitor {
@@ -618,14 +618,14 @@
 		switch (node.getNodeType()) {
 		case SYMBOL:
 			if (node.getOperator(0) == RTerminal.SYMBOL_G) {
-				if ((node.getStatusCode() & IRSourceConstants.STATUS_MASK_12) == IRSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED) {
+				if ((node.getStatusCode() & RSourceConstants.STATUS_MASK_12) == RSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED) {
 					return new Position(node.getStartOffset() + 1, node.getLength() - 1);
 				}
 				return new Position(node.getStartOffset() + 1, node.getLength() - 2);
 			}
 			return new Position(node.getStartOffset(), node.getLength());
 		case STRING_CONST:
-			if ((node.getStatusCode() & IRSourceConstants.STATUS_MASK_12) == IRSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED) {
+			if ((node.getStatusCode() & RSourceConstants.STATUS_MASK_12) == RSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED) {
 				return new Position(node.getStartOffset() + 1, node.getLength() - 1);
 			}
 			return new Position(node.getStartOffset() + 1, node.getLength() - 2);
@@ -641,14 +641,14 @@
 		switch (node.getNodeType()) {
 		case SYMBOL:
 			if (node.getOperator(0) == RTerminal.SYMBOL_G) {
-				if ((node.getStatusCode() & IRSourceConstants.STATUS_MASK_12) == IRSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED) {
+				if ((node.getStatusCode() & RSourceConstants.STATUS_MASK_12) == RSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED) {
 					return new BasicTextRegion(node.getStartOffset() + 1, node.getEndOffset());
 				}
 				return new BasicTextRegion(node.getStartOffset() + 1, node.getEndOffset() - 1);
 			}
 			return node;
 		case STRING_CONST:
-			if ((node.getStatusCode() & IRSourceConstants.STATUS_MASK_12) == IRSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED) {
+			if ((node.getStatusCode() & RSourceConstants.STATUS_MASK_12) == RSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED) {
 				return new BasicTextRegion(node.getStartOffset() + 1, node.getEndOffset());
 			}
 			return new BasicTextRegion(node.getStartOffset() + 1, node.getEndOffset() - 1);
@@ -659,7 +659,7 @@
 	
 	public static boolean hasErrors(final RAstNode node) {
 		return ((node.getStatusCode() &
-						(IRSourceConstants.STATUSFLAG_REAL_ERROR | IRSourceConstants.STATUSFLAG_ERROR_IN_CHILD)
+						(RSourceConstants.STATUSFLAG_REAL_ERROR | RSourceConstants.STATUSFLAG_ERROR_IN_CHILD)
 				) != 0 );
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RScanner.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RScanner.java
index 8e944ea..b4005d3 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RScanner.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RScanner.java
@@ -15,38 +15,39 @@
 package org.eclipse.statet.r.core.rsource.ast;
 
 import static org.eclipse.statet.ltk.ast.core.AstNode.NA_OFFSET;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS123_SYNTAX_SEQREL_UNEXPECTED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS12_SYNTAX_TOKEN_UNEXPECTED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS12_SYNTAX_TOKEN_UNKNOWN;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_CC_NOT_CLOSED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_CONDITION_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_CONDITION_NOT_CLOSED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_ELEMENTNAME_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_BODY_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_CONDITION_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_BEFORE_OP_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_FCALL_NOT_CLOSED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_FDEF_ARGS_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_FDEF_ARGS_NOT_CLOSED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_IF_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_IN_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_OPERATOR_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_SUBINDEXED_NOT_CLOSED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_SYMBOL_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS3_FDEF;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS3_FOR;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS3_IF;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS3_WHILE;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUSFLAG_ERROR_IN_CHILD;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUSFLAG_REAL_ERROR;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUSFLAG_SUBSEQUENT;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS_RUNTIME_ERROR;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS123_SYNTAX_SEQREL_UNEXPECTED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS12_SYNTAX_TOKEN_UNEXPECTED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS12_SYNTAX_TOKEN_UNKNOWN;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_CC_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_CONDITION_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_CONDITION_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_ELEMENTNAME_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_BODY_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_CONDITION_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_BEFORE_OP_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_FCALL_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_FDEF_ARGS_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_FDEF_ARGS_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_IF_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_IN_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_OPERATOR_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_SUBINDEXED_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_SYMBOL_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS3_FDEF;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS3_FOR;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS3_IF;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS3_WHILE;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUSFLAG_ERROR_IN_CHILD;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUSFLAG_REAL_ERROR;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUSFLAG_SUBSEQUENT;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS_RUNTIME_ERROR;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.string.BasicStringFactory;
 import org.eclipse.statet.jcommons.string.StringFactory;
@@ -194,10 +195,12 @@
 	}
 	
 	
+	@NonNullByDefault
 	public SourceComponent scanSourceUnit(final TextParserInput input) {
 		return scanSourceRange(input, null, false);
 	}
 	
+	@NonNullByDefault
 	public SourceComponent scanSourceRange(final TextParserInput input,
 			final @Nullable AstNode parent, final boolean expand) {
 		try {
@@ -218,12 +221,14 @@
 		}
 	}
 	
+	@NonNullByDefault
 	public SourceComponent scanSourceRange(final TextParserInput input,
 			final @Nullable AstNode parent) {
 		return scanSourceRange(input, parent, false);
 	}
 	
-	public RAstNode scanExpr(final TextParserInput input) {
+	@NonNullByDefault
+	public @Nullable RAstNode scanExpr(final TextParserInput input) {
 		try {
 			this.lexer.reset(input);
 			init();
@@ -238,7 +243,8 @@
 		return null;
 	}
 	
-	public FDef scanFDef(final TextParserInput input) {
+	@NonNullByDefault
+	public @Nullable FDef scanFDef(final TextParserInput input) {
 		try {
 			this.lexer.reset(input);
 			init();
@@ -252,7 +258,8 @@
 		return null;
 	}
 	
-	public FCall.Args scanFCallArgs(final TextParserInput input, final boolean expand) {
+	@NonNullByDefault
+	public FCall. @Nullable Args scanFCallArgs(final TextParserInput input, final boolean expand) {
 		try {
 			this.lexer.reset(input);
 			init();
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RScannerPostExprVisitor.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RScannerPostExprVisitor.java
index af5de4c..8c500fc 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RScannerPostExprVisitor.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RScannerPostExprVisitor.java
@@ -14,8 +14,8 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUSFLAG_ERROR_IN_CHILD;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUSFLAG_REAL_ERROR;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUSFLAG_ERROR_IN_CHILD;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUSFLAG_REAL_ERROR;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RoxygenScanner.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RoxygenScanner.java
index f0a298a..ada1335 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RoxygenScanner.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RoxygenScanner.java
@@ -17,8 +17,8 @@
 import static org.eclipse.statet.internal.r.core.sourcemodel.RoxygenTagType.SCAN_MODE_FREETEXT;
 import static org.eclipse.statet.internal.r.core.sourcemodel.RoxygenTagType.SCAN_MODE_RCODE;
 import static org.eclipse.statet.internal.r.core.sourcemodel.RoxygenTagType.SCAN_MODE_SYMBOL;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_SYMBOL_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_SYMBOL_MISSING;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Sign.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Sign.java
index 036dc09..9c65586 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Sign.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Sign.java
@@ -14,7 +14,7 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AFTER_OP_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AFTER_OP_MISSING;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecItem.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecItem.java
index 2b177ea..0ac0fab 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecItem.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecItem.java
@@ -14,7 +14,7 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS_OK;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS_OK;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/StdBinary.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/StdBinary.java
index c20cd06..bc32a6a 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/StdBinary.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/StdBinary.java
@@ -14,8 +14,8 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AFTER_OP_MISSING;
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_BEFORE_OP_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AFTER_OP_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_BEFORE_OP_MISSING;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubIndexed.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubIndexed.java
index e997c1c..27b757b 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubIndexed.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubIndexed.java
@@ -14,7 +14,7 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_REF_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_REF_MISSING;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubNamed.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubNamed.java
index 10f673d..b47c14d 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubNamed.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubNamed.java
@@ -14,7 +14,7 @@
 
 package org.eclipse.statet.r.core.rsource.ast;
 
-import static org.eclipse.statet.r.core.rsource.IRSourceConstants.STATUS2_SYNTAX_EXPR_AS_REF_MISSING;
+import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS2_SYNTAX_EXPR_AS_REF_MISSING;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RChunkHeuristicTokenScanner.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RChunkHeuristicTokenScanner.java
index 02e79a7..13b57a0 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RChunkHeuristicTokenScanner.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RChunkHeuristicTokenScanner.java
@@ -36,7 +36,7 @@
 	@Override
 	protected int createForwardBound(final int start) throws BadLocationException {
 		final PartitionConstraint matcher= getPartitionConstraint();
-		if (matcher.matches(IRDocumentConstants.R_DEFAULT_CONTENT_TYPE)) {
+		if (matcher.matches(RDocumentConstants.R_DEFAULT_CONTENT_TYPE)) {
 			final TextRegion rCodeRegion= getRCodeRegion(start);
 			if (rCodeRegion != null) {
 				return rCodeRegion.getEndOffset();
@@ -49,7 +49,7 @@
 	@Override
 	protected int createBackwardBound(final int start) throws BadLocationException {
 		final PartitionConstraint matcher= getPartitionConstraint();
-		if (matcher.matches(IRDocumentConstants.R_DEFAULT_CONTENT_TYPE)) {
+		if (matcher.matches(RDocumentConstants.R_DEFAULT_CONTENT_TYPE)) {
 			final TextRegion rCodeRegion= getRCodeRegion(start);
 			if (rCodeRegion != null) {
 				return rCodeRegion.getStartOffset();
@@ -61,7 +61,7 @@
 	
 	private TextRegion getRCodeRegion(final int offset) throws BadLocationException {
 		return TreePartitionUtils.searchNode(getDocument(), getDocumentPartitioning(), offset, true,
-				IRDocumentConstants.R_DEFAULT_CONTENT_TYPE );
+				RDocumentConstants.R_DEFAULT_CONTENT_TYPE );
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/IRDocumentConstants.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RDocumentConstants.java
similarity index 84%
rename from r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/IRDocumentConstants.java
rename to r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RDocumentConstants.java
index 35fa93f..e25ec1b 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/IRDocumentConstants.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RDocumentConstants.java
@@ -18,11 +18,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.PartitionConstraint;
 
 
-public interface IRDocumentConstants {
+@NonNullByDefault
+public interface RDocumentConstants {
 	
 /* R *************************************************************************/
 	
@@ -98,28 +100,28 @@
 		@Override
 		public boolean matches(final String partitionType) {
 			return (partitionType == R_DEFAULT_CONTENT_TYPE
-					|| partitionType == IRDocumentConstants.R_STRING_CONTENT_TYPE
-					|| partitionType == IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE
-					|| partitionType == IRDocumentConstants.R_INFIX_OPERATOR_CONTENT_TYPE );
+					|| partitionType == R_STRING_CONTENT_TYPE
+					|| partitionType == R_QUOTED_SYMBOL_CONTENT_TYPE
+					|| partitionType == R_INFIX_OPERATOR_CONTENT_TYPE );
 		}
 	};
 	
 	PartitionConstraint R_ANY_CONTENT_CONSTRAINT= new PartitionConstraint() {
 		@Override
 		public boolean matches(final String partitionType) {
-			return (partitionType == IRDocumentConstants.R_DEFAULT_CONTENT_TYPE
-					|| partitionType == IRDocumentConstants.R_STRING_CONTENT_TYPE
-					|| partitionType == IRDocumentConstants.R_COMMENT_CONTENT_TYPE
-					|| partitionType == IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE
-					|| partitionType == IRDocumentConstants.R_INFIX_OPERATOR_CONTENT_TYPE
-					|| partitionType == IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE );
+			return (partitionType == R_DEFAULT_CONTENT_TYPE
+					|| partitionType == R_STRING_CONTENT_TYPE
+					|| partitionType == R_COMMENT_CONTENT_TYPE
+					|| partitionType == R_ROXYGEN_CONTENT_TYPE
+					|| partitionType == R_INFIX_OPERATOR_CONTENT_TYPE
+					|| partitionType == R_QUOTED_SYMBOL_CONTENT_TYPE );
 		}
 	};
 	
 	PartitionConstraint R_NO_COMMENT_CONTENT_CONSTRAINT= new PartitionConstraint() {
 		@Override
 		public boolean matches(final String contentType) {
-			return (contentType != IRDocumentConstants.R_COMMENT_CONTENT_TYPE);
+			return (contentType != R_COMMENT_CONTENT_TYPE);
 		}
 	};
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RDocumentContentInfo.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RDocumentContentInfo.java
index 7ebb2db..cf594d9 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RDocumentContentInfo.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RDocumentContentInfo.java
@@ -23,14 +23,14 @@
 public class RDocumentContentInfo extends BasicDocContentSections {
 	
 	
-	public static final String R=                           IRDocumentConstants.R_PARTITIONING;
+	public static final String R=                           RDocumentConstants.R_PARTITIONING;
 	
 	
 	public static final RDocumentContentInfo INSTANCE= new RDocumentContentInfo();
 	
 	
 	public RDocumentContentInfo() {
-		super(IRDocumentConstants.R_PARTITIONING, R);
+		super(RDocumentConstants.R_PARTITIONING, R);
 	}
 	
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RDocumentSetupParticipant.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RDocumentSetupParticipant.java
index a1862fb..31e0c72 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RDocumentSetupParticipant.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RDocumentSetupParticipant.java
@@ -32,14 +32,14 @@
 	
 	@Override
 	public String getPartitioningId() {
-		return IRDocumentConstants.R_PARTITIONING;
+		return RDocumentConstants.R_PARTITIONING;
 	}
 	
 	@Override
 	protected IDocumentPartitioner createDocumentPartitioner() {
 		return new TreePartitioner(getPartitioningId(),
 				new RPartitionNodeScanner(),
-				IRDocumentConstants.R_CONTENT_TYPES );
+				RDocumentConstants.R_CONTENT_TYPES );
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RHeuristicTokenScanner.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RHeuristicTokenScanner.java
index 22b4b7f..59ceeb2 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RHeuristicTokenScanner.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RHeuristicTokenScanner.java
@@ -53,14 +53,14 @@
 	}
 	
 	public static RHeuristicTokenScanner create(final DocContentSections documentContentInfo) {
-		return (documentContentInfo.getPrimaryType() == IRDocumentConstants.R_PARTITIONING) ?
+		return (documentContentInfo.getPrimaryType() == RDocumentConstants.R_PARTITIONING) ?
 				new RHeuristicTokenScanner(documentContentInfo) :
 				new RChunkHeuristicTokenScanner(documentContentInfo);
 	}
 	
 	
 	protected RHeuristicTokenScanner(final DocContentSections documentContentInfo) {
-		super(documentContentInfo, IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT);
+		super(documentContentInfo, RDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT);
 	}
 	
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RPartitionNodeType.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RPartitionNodeType.java
index ab1383a..148d3ee 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RPartitionNodeType.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RPartitionNodeType.java
@@ -30,7 +30,7 @@
 		
 		@Override
 		public String getPartitionType() {
-			return IRDocumentConstants.R_DEFAULT_CONTENT_TYPE;
+			return RDocumentConstants.R_DEFAULT_CONTENT_TYPE;
 		}
 		
 		@Override
@@ -54,7 +54,7 @@
 		
 		@Override
 		public String getPartitionType() {
-			return IRDocumentConstants.R_STRING_CONTENT_TYPE;
+			return RDocumentConstants.R_STRING_CONTENT_TYPE;
 		}
 		
 		@Override
@@ -73,7 +73,7 @@
 		
 		@Override
 		public String getPartitionType() {
-			return IRDocumentConstants.R_STRING_CONTENT_TYPE;
+			return RDocumentConstants.R_STRING_CONTENT_TYPE;
 		}
 		
 		@Override
@@ -92,7 +92,7 @@
 		
 		@Override
 		public String getPartitionType() {
-			return IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE;
+			return RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE;
 		}
 		
 		@Override
@@ -111,7 +111,7 @@
 		
 		@Override
 		public String getPartitionType() {
-			return IRDocumentConstants.R_INFIX_OPERATOR_CONTENT_TYPE;
+			return RDocumentConstants.R_INFIX_OPERATOR_CONTENT_TYPE;
 		}
 		
 		@Override
@@ -144,7 +144,7 @@
 		
 		@Override
 		public String getPartitionType() {
-			return IRDocumentConstants.R_COMMENT_CONTENT_TYPE;
+			return RDocumentConstants.R_COMMENT_CONTENT_TYPE;
 		}
 		
 		@Override
@@ -159,7 +159,7 @@
 		
 		@Override
 		public String getPartitionType() {
-			return IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE;
+			return RDocumentConstants.R_ROXYGEN_CONTENT_TYPE;
 		}
 		
 		@Override
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RdDocumentContentInfo.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RdDocumentContentInfo.java
index addfbf5..aeeebeb 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RdDocumentContentInfo.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/RdDocumentContentInfo.java
@@ -23,14 +23,14 @@
 public class RdDocumentContentInfo extends BasicDocContentSections {
 	
 	
-	public static final String RDOC=                        IRDocumentConstants.RDOC_PARTITIONING;
+	public static final String RDOC=                        RDocumentConstants.RDOC_PARTITIONING;
 	
 	
 	public static final RdDocumentContentInfo INSTANCE= new RdDocumentContentInfo();
 	
 	
 	public RdDocumentContentInfo() {
-		super(IRDocumentConstants.RDOC_PARTITIONING, RDOC);
+		super(RDocumentConstants.RDOC_PARTITIONING, RDOC);
 	}
 	
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/util/RCoreAccessWrapper.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/util/RCoreAccessWrapper.java
index c4f75a5..87b8946 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/util/RCoreAccessWrapper.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/util/RCoreAccessWrapper.java
@@ -14,42 +14,44 @@
 
 package org.eclipse.statet.r.core.util;
 
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+
 import org.eclipse.core.runtime.preferences.IScopeContext;
 
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.ecommons.preferences.core.PreferenceAccess;
 import org.eclipse.statet.ecommons.preferences.core.util.PreferenceAccessWrapper;
 
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCodeStyleSettings;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.rj.renv.core.REnv;
 
 
+@NonNullByDefault
 public class RCoreAccessWrapper extends PreferenceAccessWrapper
-		implements IRCoreAccess {
+		implements RCoreAccess {
 	
 	
-	private IRCoreAccess parent;
+	private RCoreAccess parent;
 	
 	
-	public RCoreAccessWrapper(final IRCoreAccess rCoreAccess) {
-		if (rCoreAccess == null) {
-			throw new NullPointerException("rCoreAccess"); //$NON-NLS-1$
-		}
+	public RCoreAccessWrapper(final RCoreAccess rCoreAccess) {
+		nonNullAssert(rCoreAccess);
 		
 		updateParent(null, rCoreAccess);
 	}
 	
 	
-	public synchronized IRCoreAccess getParent() {
+	public synchronized RCoreAccess getParent() {
 		return this.parent;
 	}
 	
-	public synchronized boolean setParent(final IRCoreAccess rCoreAccess) {
-		if (rCoreAccess == null) {
-			throw new NullPointerException("rCoreAccess"); //$NON-NLS-1$
-		}
+	public synchronized boolean setParent(final RCoreAccess rCoreAccess) {
+		nonNullAssert(rCoreAccess);
+		
 		if (rCoreAccess != this.parent) {
 			updateParent(this.parent, rCoreAccess);
 			return true;
@@ -57,7 +59,7 @@
 		return false;
 	}
 	
-	protected void updateParent(final IRCoreAccess oldParent, final IRCoreAccess newParent) {
+	protected void updateParent(final @Nullable RCoreAccess oldParent, final RCoreAccess newParent) {
 		this.parent= newParent;
 		
 		super.setPreferenceContexts(newParent.getPrefs().getPreferenceContexts());
diff --git a/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/breakpoints/RControllerBreakpointAdapter.java b/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/breakpoints/RControllerBreakpointAdapter.java
index dfb1774..9d2edca 100644
--- a/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/breakpoints/RControllerBreakpointAdapter.java
+++ b/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/breakpoints/RControllerBreakpointAdapter.java
@@ -66,21 +66,22 @@
 import org.eclipse.statet.ecommons.text.IMarkerPositionResolver;
 
 import org.eclipse.statet.internal.r.debug.core.RDebugCorePlugin;
-import org.eclipse.statet.ltk.core.LTK;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.model.core.LtkModels;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.nico.core.runtime.Queue;
 import org.eclipse.statet.nico.core.runtime.ToolStatus;
 import org.eclipse.statet.r.console.core.RDbg;
 import org.eclipse.statet.r.console.core.RProcessREnvironment;
 import org.eclipse.statet.r.core.RProject;
 import org.eclipse.statet.r.core.RProjects;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRModelManager;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RModelManager;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 import org.eclipse.statet.r.debug.core.IRDebugTarget;
 import org.eclipse.statet.r.debug.core.RDebugModel;
 import org.eclipse.statet.r.debug.core.breakpoints.IRBreakpoint;
@@ -587,11 +588,11 @@
 		try {
 			if (srcref instanceof IAdaptable) {
 				final IMarker marker= ((IAdaptable) srcref).getAdapter(IMarker.class);
-				final ISourceUnit su= srcref.getFile();
-				if (marker != null && su instanceof IRWorkspaceSourceUnit
+				final SourceUnit su= srcref.getFile();
+				if (marker != null && su instanceof RWorkspaceSourceUnit
 						&& marker.getResource() == su.getResource()) {
 					return doMatchScriptBreakpoint(srcref,
-							(IRWorkspaceSourceUnit) su, marker,
+							(RWorkspaceSourceUnit)su, marker,
 							m );
 				}
 			}
@@ -605,7 +606,7 @@
 	}
 	
 	private boolean doMatchScriptBreakpoint(final IRModelSrcref srcref,
-			final IRWorkspaceSourceUnit rSourceUnit, final IMarker marker,
+			final RWorkspaceSourceUnit rSourceUnit, final IMarker marker,
 			final ProgressMonitor m) throws CoreException {
 		final List<IRLineBreakpoint> breakpoints= RDebugModel.getLineBreakpoints(
 				(IFile) rSourceUnit.getResource() );
@@ -677,9 +678,9 @@
 			final IRModelSrcref srcref,
 			final ProgressMonitor m) {
 		try {
-			final ISourceUnit su= srcref.getFile();
-			if (su instanceof IRWorkspaceSourceUnit) {
-				return doGetElementTracepoints(srcfile, srcref, (IRWorkspaceSourceUnit) su, m);
+			final SourceUnit su= srcref.getFile();
+			if (su instanceof RWorkspaceSourceUnit) {
+				return doGetElementTracepoints(srcfile, srcref, (RWorkspaceSourceUnit)su, m);
 			}
 			return null;
 		}
@@ -692,14 +693,14 @@
 	
 	private @Nullable ElementTracepointInstallationRequest doGetElementTracepoints(final SrcfileData srcfile,
 			final IRModelSrcref srcref,
-			final IRWorkspaceSourceUnit rSourceUnit,
+			final RWorkspaceSourceUnit rSourceUnit,
 			final ProgressMonitor m) throws CoreException, BadLocationException {
 		if (rSourceUnit.getResource().getType() != IResource.FILE
 				|| !rSourceUnit.getResource().exists()) {
 			return null;
 		}
 		
-		List<? extends IRLangSourceElement> elements= srcref.getElements();
+		List<? extends RLangSourceElement> elements= srcref.getElements();
 		if (elements.isEmpty()) {
 			return null;
 		}
@@ -715,13 +716,13 @@
 		try {
 			final AbstractDocument document= rSourceUnit.getDocument(eMonitor);
 			synchronized ((document instanceof ISynchronizable) ? ((ISynchronizable) document).getLockObject() : new Object()) {
-				final IRModelInfo modelInfo= (IRModelInfo) rSourceUnit.getModelInfo(
-						RModel.R_TYPE_ID, IRModelManager.MODEL_FILE, eMonitor );
+				final RSourceUnitModelInfo modelInfo= (RSourceUnitModelInfo)rSourceUnit.getModelInfo(
+						RModel.R_TYPE_ID, RModelManager.MODEL_FILE, eMonitor );
 				if (elements.get(0).getSourceParent() != modelInfo.getSourceElement()) {
-					final List<? extends IRLangSourceElement> orgElements= elements;
-					elements= modelInfo.getSourceElement().getSourceChildren(new IModelElement.Filter() {
+					final List<? extends RLangSourceElement> orgElements= elements;
+					elements= modelInfo.getSourceElement().getSourceChildren(new LtkModelElementFilter<RLangSourceElement>() {
 						@Override
-						public boolean include(final IModelElement element) {
+						public boolean include(final RLangSourceElement element) {
 							return orgElements.contains(element);
 //									return map.containsKey(element.getId());
 						}
@@ -813,12 +814,12 @@
 	
 	@Override
 	public @Nullable ElementTracepointInstallationRequest prepareFileElementTracepoints(final SrcfileData srcfile,
-			final IRSourceUnit su,
+			final RSourceUnit su,
 			final ProgressMonitor m) {
 		try {
-			if (su instanceof IRWorkspaceSourceUnit) {
+			if (su instanceof RWorkspaceSourceUnit) {
 				final ElementTracepointInstallationRequest request= doPrepareFileElementTracepoints(
-						srcfile, (IRWorkspaceSourceUnit) su, m );
+						srcfile, (RWorkspaceSourceUnit)su, m );
 				if (request != null) {
 					installElementTracepoints(request, m);
 					
@@ -841,7 +842,7 @@
 	}
 	
 	@Override
-	public void finishFileElementTracepoints(final SrcfileData srcfile, final IRSourceUnit su,
+	public void finishFileElementTracepoints(final SrcfileData srcfile, final RSourceUnit su,
 			final ElementTracepointInstallationRequest request,
 			final ProgressMonitor m) {
 		for (final ElementTracepoints positions : request.getRequests()) {
@@ -853,7 +854,7 @@
 		ElementTracepointInstallationRequest installRequest= request;
 		if (srcfile != null) {
 			try {
-				installRequest= doPrepareFileElementTracepoints(srcfile, (IRWorkspaceSourceUnit) su,
+				installRequest= doPrepareFileElementTracepoints(srcfile, (RWorkspaceSourceUnit)su,
 						m );
 			}
 			catch (final CoreException e) {}
@@ -864,7 +865,7 @@
 	}
 	
 	private @Nullable ElementTracepointInstallationRequest doPrepareFileElementTracepoints(
-			final SrcfileData srcfile, final IRWorkspaceSourceUnit rSourceUnit,
+			final SrcfileData srcfile, final RWorkspaceSourceUnit rSourceUnit,
 			final ProgressMonitor m) throws CoreException {
 		if (rSourceUnit.getResource().getType() != IResource.FILE
 				|| !rSourceUnit.getResource().exists()) {
@@ -1003,12 +1004,12 @@
 			try {
 				final SrcfileData srcfile= RDbg.createRJSrcfileData(resource);
 				if (resource.exists() && resource.getType() == IResource.FILE) {
-					final ISourceUnit su= LTK.getSourceUnitManager().getSourceUnit(
-							LTK.PERSISTENCE_CONTEXT, resource, null, true, eMonitor );
+					final SourceUnit su= LtkModels.getSourceUnitManager().getSourceUnit(
+							Ltk.PERSISTENCE_CONTEXT, resource, null, true, eMonitor );
 					if (su != null) {
 						try {
-							if (su instanceof IRWorkspaceSourceUnit) {
-								doGetPendingElementPositions(srcfile, (IRWorkspaceSourceUnit) su,
+							if (su instanceof RWorkspaceSourceUnit) {
+								doGetPendingElementPositions(srcfile, (RWorkspaceSourceUnit)su,
 										breakpointsToUpdate, map, eMonitor);
 								continue;
 							}
@@ -1038,7 +1039,7 @@
 		return list;
 	}
 	
-	private void doGetPendingElementPositions(final SrcfileData srcfile, final IRWorkspaceSourceUnit rSourceUnit,
+	private void doGetPendingElementPositions(final SrcfileData srcfile, final RWorkspaceSourceUnit rSourceUnit,
 			final IRBreakpoint[] breakpointsToUpdate, final Map<String, @Nullable Element> map,
 			final IProgressMonitor eMonitor) throws CoreException {
 		final int modCounter= this.positionModCounter.get();
diff --git a/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/eval/ExpressionValidator.java b/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/eval/ExpressionValidator.java
index 0bd69b6..81f455d 100644
--- a/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/eval/ExpressionValidator.java
+++ b/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/eval/ExpressionValidator.java
@@ -27,8 +27,8 @@
 import org.eclipse.statet.ltk.core.SourceContent;
 import org.eclipse.statet.ltk.issues.core.Problem;
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
-import org.eclipse.statet.r.core.model.RProblemReporter;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.model.build.RProblemReporter;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.core.rsource.ast.RScanner;
 
@@ -64,7 +64,7 @@
 			if (node == null) {
 				this.errorMessage= Messages.Expression_Validate_Detail_SingleExpression_message;
 			}
-			else if (RAst.hasErrors(node)) {
+			else if (RAsts.hasErrors(node)) {
 				final SourceContent content= new SourceContent(0, expression);
 				try {
 					this.rProblemReporter.run(null, content, node, this);
diff --git a/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/model/RFunctionValue.java b/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/model/RFunctionValue.java
index ecd92f6..e5f6045 100644
--- a/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/model/RFunctionValue.java
+++ b/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/model/RFunctionValue.java
@@ -21,7 +21,7 @@
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.model.ArgsDefinition;
 import org.eclipse.statet.r.core.model.ArgsDefinition.Arg;
-import org.eclipse.statet.r.core.model.IRMethod;
+import org.eclipse.statet.r.core.model.RLangMethod;
 
 
 @NonNullByDefault
@@ -35,8 +35,8 @@
 	
 	@Override
 	public String getValueString() throws DebugException {
-		if (this.element instanceof IRMethod) {
-			final IRMethod lang= (IRMethod) this.element;
+		if (this.element instanceof RLangMethod) {
+			final RLangMethod lang= (RLangMethod)this.element;
 			final StringBuilder sb= new StringBuilder();
 			final ArgsDefinition args= lang.getArgsDefinition();
 			sb.append("function("); //$NON-NLS-1$
diff --git a/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/model/RStackFrame.java b/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/model/RStackFrame.java
index 2471f43..dc3dd13 100644
--- a/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/model/RStackFrame.java
+++ b/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/model/RStackFrame.java
@@ -37,7 +37,7 @@
 
 import org.eclipse.statet.internal.r.debug.core.Messages;
 import org.eclipse.statet.internal.r.debug.core.RDebugCorePlugin;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.data.CombinedRReference;
 import org.eclipse.statet.r.core.model.RElementName;
@@ -545,7 +545,7 @@
 			final RBreakpointStatus breakpointStatus= this.breakpointStatus;
 			return (breakpointStatus != null) ? (T) breakpointStatus.getBreakpoint() : null;
 		}
-		if (type == IModelElement.class) {
+		if (type == LtkModelElement.class) {
 			final RElementVariable variable= this.frameVariable;
 			return (variable != null) ? (T) this.frameVariable.getElement() : null;
 		}
diff --git a/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/sourcelookup/RSourceLookupParticipant.java b/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/sourcelookup/RSourceLookupParticipant.java
index f68ed1b..ba0660e 100644
--- a/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/sourcelookup/RSourceLookupParticipant.java
+++ b/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/sourcelookup/RSourceLookupParticipant.java
@@ -46,23 +46,24 @@
 
 import org.eclipse.statet.internal.r.debug.core.RDebugCorePlugin;
 import org.eclipse.statet.internal.r.debug.core.model.RStackFrame;
-import org.eclipse.statet.ltk.core.LTK;
-import org.eclipse.statet.ltk.model.core.IModelManager;
-import org.eclipse.statet.ltk.model.core.ISourceUnitManager;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
+import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.model.core.LtkModels;
+import org.eclipse.statet.ltk.model.core.ModelManager;
+import org.eclipse.statet.ltk.model.core.SourceUnitManager;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.r.console.core.RDbg;
 import org.eclipse.statet.r.console.core.RProcess;
-import org.eclipse.statet.r.core.model.IRMethod;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RLangMethod;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 import org.eclipse.statet.r.core.rsource.ast.Block;
 import org.eclipse.statet.r.core.rsource.ast.FDef;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
-import org.eclipse.statet.r.core.rsource.ast.RAst.AssignExpr;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
+import org.eclipse.statet.r.core.rsource.ast.RAsts.AssignExpr;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.debug.core.sourcelookup.IRSourceContainer;
 import org.eclipse.statet.r.debug.core.sourcelookup.IRSourceLookupMatch;
@@ -602,16 +603,16 @@
 		return null;
 	}
 	
-	private IRSourceUnit getSourceUnit(final RSourceLookupMatch match, final IProgressMonitor monitor) {
-		final ISourceUnitManager suManager= LTK.getSourceUnitManager();
-		ISourceUnit su= suManager.getSourceUnit(
-				LTK.PERSISTENCE_CONTEXT, match.sourceElement, null, true, monitor );
-		final ISourceUnit editorSu= LTK.getSourceUnitManager().getSourceUnit(
-				LTK.EDITOR_CONTEXT, (su != null) ? su : match.sourceElement, null, true, monitor );
+	private RSourceUnit getSourceUnit(final RSourceLookupMatch match, final IProgressMonitor monitor) {
+		final SourceUnitManager suManager= LtkModels.getSourceUnitManager();
+		SourceUnit su= suManager.getSourceUnit(
+				Ltk.PERSISTENCE_CONTEXT, match.sourceElement, null, true, monitor );
+		final SourceUnit editorSu= LtkModels.getSourceUnitManager().getSourceUnit(
+				Ltk.EDITOR_CONTEXT, (su != null) ? su : match.sourceElement, null, true, monitor );
 		if (editorSu != null) {
 			su= editorSu;
 		}
-		return (IRSourceUnit) ((su instanceof IRSourceUnit) ? su : null);
+		return (RSourceUnit)((su instanceof RSourceUnit) ? su : null);
 	}
 	
 	protected int checkPosition(final LookupData data, final RSourceLookupMatch match) {
@@ -623,8 +624,8 @@
 			match.charEnd= -1;
 			match.lineNumber= -1;
 			
-			final ISourceUnit su= getSourceUnit(match, monitor);
-			ISourceUnit fragmentSu= null;
+			final SourceUnit su= getSourceUnit(match, monitor);
+			SourceUnit fragmentSu= null;
 			if (su != null) {
 				try {
 					final AbstractDocument suDocument= su.getDocument(monitor);
@@ -700,13 +701,13 @@
 							}
 							else if (data.context.getSourceType() == 3) {
 								createFragment(data);
-								fragmentSu= LTK.getSourceUnitManager().getSourceUnit(RModel.R_TYPE_ID,
-										LTK.EDITOR_CONTEXT, data.fragment, true, monitor);
+								fragmentSu= LtkModels.getSourceUnitManager().getSourceUnit(RModel.R_TYPE_ID,
+										Ltk.EDITOR_CONTEXT, data.fragment, true, monitor);
 								if (fragmentSu != null
 										&& firstSrcref != null
 										&& firstSrcref.hasBeginDetail() ) {
-									final ISourceUnitModelInfo modelInfo= fragmentSu.getModelInfo(
-											RModel.R_TYPE_ID, IModelManager.MODEL_FILE, monitor);
+									final SourceUnitModelInfo modelInfo= fragmentSu.getModelInfo(
+											RModel.R_TYPE_ID, ModelManager.MODEL_FILE, monitor);
 									final RAstNode body= findFBody(modelInfo);
 									if (body != null) {
 										bDocument= fragmentSu.getDocument(monitor);
@@ -795,13 +796,13 @@
 		return 0;
 	}
 	
-	private Block findFBody(final ISourceUnitModelInfo modelInfo) {
-		if (modelInfo instanceof IRModelInfo && modelInfo.getSourceElement() != null) {
+	private Block findFBody(final SourceUnitModelInfo modelInfo) {
+		if (modelInfo instanceof RSourceUnitModelInfo && modelInfo.getSourceElement() != null) {
 			FDef fDef= null;
-			final List<? extends IModelElement> children= modelInfo.getSourceElement().getSourceChildren(null);
+			final List<? extends LtkModelElement> children= modelInfo.getSourceElement().getSourceChildren(null);
 			if (children.size() == 1) {
-				final IModelElement modelElement= children.get(0);
-				if (modelElement instanceof IRMethod) {
+				final LtkModelElement modelElement= children.get(0);
+				if (modelElement instanceof RLangMethod) {
 					fDef= modelElement.getAdapter(FDef.class);
 				}
 			}
@@ -811,7 +812,7 @@
 					fDef= (FDef) node;
 				}
 				if (fDef == null) {
-					final AssignExpr assign= RAst.checkAssign(node);
+					final AssignExpr assign= RAsts.checkAssign(node);
 					if (assign != null && assign.valueNode != null
 							&& assign.valueNode.getNodeType() == NodeType.F_DEF) {
 						fDef= (FDef) assign.valueNode;
diff --git a/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/r/debug/core/breakpoints/RLineBreakpointValidator.java b/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/r/debug/core/breakpoints/RLineBreakpointValidator.java
index 1d4c586..0848195 100644
--- a/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/r/debug/core/breakpoints/RLineBreakpointValidator.java
+++ b/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/r/debug/core/breakpoints/RLineBreakpointValidator.java
@@ -37,22 +37,22 @@
 import org.eclipse.statet.internal.r.debug.core.breakpoints.RMethodBreakpoint;
 import org.eclipse.statet.ltk.ast.core.AstNode;
 import org.eclipse.statet.ltk.ast.core.util.AstSelection;
-import org.eclipse.statet.ltk.core.LTKUtils;
-import org.eclipse.statet.ltk.model.core.IModelManager;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
+import org.eclipse.statet.ltk.model.core.LtkModelUtils;
+import org.eclipse.statet.ltk.model.core.ModelManager;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.r.console.core.RDbg;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.RElement;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.rsource.ast.FDef;
 import org.eclipse.statet.r.core.rsource.ast.GenericVisitor;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 import org.eclipse.statet.r.debug.core.RDebugModel;
 import org.eclipse.statet.r.nico.IRSrcref;
@@ -96,13 +96,13 @@
 	
 	private static final int LINE_TOLERANCE= 5;
 	
-	private static final String TOPLEVEL_ELEMENT_ID= "200:"; // Integer.toHexString(IModelElement.C1_SOURCE) + ':' //$NON-NLS-1$
+	private static final String TOPLEVEL_ELEMENT_ID= "200:"; // Integer.toHexString(LtkModelElement.C1_SOURCE) + ':' //$NON-NLS-1$
 	
 	
-	private final IRWorkspaceSourceUnit sourceUnit;
+	private final RWorkspaceSourceUnit sourceUnit;
 	private final AbstractDocument document;
 	
-	private IRModelInfo modelInfo;
+	private RSourceUnitModelInfo modelInfo;
 	
 	private String type;
 	
@@ -111,13 +111,13 @@
 	private int startOffset;
 	private int endOffset;
 	
-	private IRLangSourceElement methodElement; // the deepest method element
-	private IRLangSourceElement baseElement; // main element, null for script list
+	private RLangSourceElement methodElement; // the deepest method element
+	private RLangSourceElement baseElement; // main element, null for script list
 	private RAstNode astNode;
 	private RAstNode baseExpressionRootNode; // the root for the R expression index
 	
 	
-	public RLineBreakpointValidator(final IRWorkspaceSourceUnit su, final String type,
+	public RLineBreakpointValidator(final RWorkspaceSourceUnit su, final String type,
 			final int offset, final IProgressMonitor monitor) {
 		this.sourceUnit= su;
 		if (!initType(type)
@@ -132,7 +132,7 @@
 		check(offset, monitor);
 	}
 	
-	public RLineBreakpointValidator(final IRWorkspaceSourceUnit su, final IRLineBreakpoint breakpoint,
+	public RLineBreakpointValidator(final RWorkspaceSourceUnit su, final IRLineBreakpoint breakpoint,
 			final IProgressMonitor monitor) throws CoreException {
 		this.sourceUnit= su;
 		if (!initType(breakpoint.getBreakpointType())
@@ -150,7 +150,7 @@
 		
 		if (this.type != null && breakpoint instanceof RGenericLineBreakpoint && su.isSynchronized()) {
 			((RGenericLineBreakpoint) breakpoint).setCachedData(new CachedData(
-					this.modelInfo.getStamp().getSourceStamp(), computeElementId(), computeRExpressionIndex() ));
+					this.modelInfo.getStamp().getContentStamp(), computeElementId(), computeRExpressionIndex() ));
 		}
 	}
 	
@@ -190,7 +190,7 @@
 				IRegion lineInformation= this.document.getLineInformation(this.line);
 				final RHeuristicTokenScanner scanner= RHeuristicTokenScanner.create(
 						this.sourceUnit.getDocumentContentInfo() );
-				scanner.configure(this.document, IRDocumentConstants.R_CODE_CONTENT_CONSTRAINT);
+				scanner.configure(this.document, RDocumentConstants.R_CODE_CONTENT_CONSTRAINT);
 				{	final IRegion lastLineInformation= this.document.getLineInformation(
 							Math.min(this.line + LINE_TOLERANCE, this.document.getNumberOfLines()-1) );
 					this.startOffset= scanner.findNonBlankForward(
@@ -258,7 +258,7 @@
 					
 					final RHeuristicTokenScanner scanner= RHeuristicTokenScanner.create(
 							this.sourceUnit.getDocumentContentInfo() );
-					scanner.configure(this.document, IRDocumentConstants.R_CODE_CONTENT_CONSTRAINT);
+					scanner.configure(this.document, RDocumentConstants.R_CODE_CONTENT_CONSTRAINT);
 					
 					this.endOffset= scanner.findNonBlankBackward(
 							Math.min(lineInformation.getOffset() + lineInformation.getLength(),
@@ -306,13 +306,13 @@
 	private boolean isBaseExpressionRootNodeValid() {
 		return (this.baseExpressionRootNode != null
 				&& this.baseExpressionRootNode.getNodeType() == NodeType.BLOCK
-				&& RAst.isParentChild(this.baseExpressionRootNode, this.astNode) );
+				&& RAsts.isParentChild(this.baseExpressionRootNode, this.astNode) );
 	}
 	
-	private IRModelInfo getModelInfo(final IProgressMonitor monitor) {
+	private RSourceUnitModelInfo getModelInfo(final IProgressMonitor monitor) {
 		if (this.modelInfo == null) {
-			this.modelInfo= (IRModelInfo) this.sourceUnit.getModelInfo(RModel.R_TYPE_ID,
-					IModelManager.MODEL_FILE, monitor );
+			this.modelInfo= (RSourceUnitModelInfo)this.sourceUnit.getModelInfo(RModel.R_TYPE_ID,
+					ModelManager.MODEL_FILE, monitor );
 		}
 		return this.modelInfo;
 	}
@@ -322,9 +322,9 @@
 	}
 	
 	
-	private IRLangSourceElement searchMethodElement(final int offset, final IProgressMonitor monitor)
+	private RLangSourceElement searchMethodElement(final int offset, final IProgressMonitor monitor)
 			throws BadLocationException {
-		final IRModelInfo modelInfo= getModelInfo(monitor);
+		final RSourceUnitModelInfo modelInfo= getModelInfo(monitor);
 		if (modelInfo == null) {
 			return null;
 		}
@@ -332,7 +332,7 @@
 		final IRegion lineInformation= this.document.getLineInformationOfOffset(offset);
 		final RHeuristicTokenScanner scanner= RHeuristicTokenScanner.create(
 				this.sourceUnit.getDocumentContentInfo() );
-		scanner.configure(this.document, IRDocumentConstants.R_CODE_CONTENT_CONSTRAINT);
+		scanner.configure(this.document, RDocumentConstants.R_CODE_CONTENT_CONSTRAINT);
 		int charStart= scanner.findNonBlankForward(
 				lineInformation.getOffset(),
 				lineInformation.getOffset() + lineInformation.getLength(),
@@ -340,13 +340,13 @@
 		if (charStart < 0) {
 			charStart= offset;
 		}
-		ISourceStructElement element= LTKUtils.getCoveringSourceElement(
+		SourceStructElement element= LtkModelUtils.getCoveringSourceElement(
 				modelInfo.getSourceElement(), charStart, charStart );
 		
 		while (element != null) {
-			if (element instanceof IRLangSourceElement
-					&& (element.getElementType() & IModelElement.MASK_C1) == IModelElement.C1_METHOD) {
-				return (IRLangSourceElement) element;
+			if (element instanceof RLangSourceElement
+					&& (element.getElementType() & LtkModelElement.MASK_C1) == LtkModelElement.C1_METHOD) {
+				return (RLangSourceElement)element;
 			}
 			element= element.getSourceParent();
 		}
@@ -354,7 +354,7 @@
 	}
 	
 	private RAstNode searchSuspendAstNode(final int offset, final IProgressMonitor monitor) {
-		final IRModelInfo modelInfo= getModelInfo(monitor);
+		final RSourceUnitModelInfo modelInfo= getModelInfo(monitor);
 		if (modelInfo == null) {
 			return null;
 		}
@@ -398,32 +398,32 @@
 		return null;
 	}
 	
-	private IRLangSourceElement searchBaseElement(IRLangSourceElement element) {
+	private RLangSourceElement searchBaseElement(RLangSourceElement element) {
 		while (element != null) {
-			final ISourceStructElement parent= element.getSourceParent();
-			if (!(parent instanceof IRLangSourceElement)) {
+			final SourceStructElement parent= element.getSourceParent();
+			if (!(parent instanceof RLangSourceElement)) {
 				return null;
 			}
-			if ((parent.getElementType() & IModelElement.MASK_C1) == IModelElement.C1_SOURCE) {
-				if ((element.getElementType() & IModelElement.MASK_C1) == IModelElement.C1_METHOD
+			if ((parent.getElementType() & LtkModelElement.MASK_C1) == LtkModelElement.C1_SOURCE) {
+				if ((element.getElementType() & LtkModelElement.MASK_C1) == LtkModelElement.C1_METHOD
 						&& element.getAdapter(FDef.class) != null) {
 					return element;
 				}
 				return null;
 			}
-			element= (IRLangSourceElement) parent;
+			element= (RLangSourceElement)parent;
 		}
 //		while (element != null) {
-//			IRFrame frame= (IRFrame) element.getAdapter(IRFrame.class);
+//			RFrame frame= (RFrame)element.getAdapter(RFrame.class);
 //			if (frame == null) {
 //				return null;
 //			}
 //			switch (frame.getFrameType()) {
-//			case IRFrame.FUNCTION:
+//			case RFrame.FUNCTION:
 //				element= element.getSourceParent();
 //				continue;
-//			case IRFrame.PROJECT:
-//			case IRFrame.PACKAGE:
+//			case RFrame.PROJECT:
+//			case RFrame.PACKAGE:
 //				return element;
 //			default:
 //				return null;
@@ -473,11 +473,11 @@
 		return (this.endOffset >= 0) ? (this.endOffset + 1) : -1;
 	}
 	
-	public ISourceStructElement getMethodElement() {
+	public SourceStructElement getMethodElement() {
 		return this.methodElement;
 	}
 	
-	public ISourceStructElement getBaseElement() {
+	public SourceStructElement getBaseElement() {
 		return this.baseElement;
 	}
 	
@@ -491,8 +491,8 @@
 			throw invalid();
 		}
 		if (this.baseElement != null) {
-			if ((this.baseElement.getElementType() & IModelElement.MASK_C1) == IModelElement.C1_METHOD) {
-				if (this.baseElement.getElementType() == IRElement.R_S4METHOD) {
+			if ((this.baseElement.getElementType() & LtkModelElement.MASK_C1) == LtkModelElement.C1_METHOD) {
+				if (this.baseElement.getElementType() == RElement.R_S4METHOD) {
 					return IRLineBreakpoint.R_S4_METHOD_ELEMENT_TYPE;
 				}
 				return IRLineBreakpoint.R_COMMON_FUNCTION_ELEMENT_TYPE;
@@ -559,7 +559,7 @@
 		}
 	}
 	
-	private String getLabel(final ISourceStructElement element) {
+	private String getLabel(final SourceStructElement element) {
 		return element.getElementName().toString();
 	}
 	
@@ -591,7 +591,7 @@
 			throw invalid();
 		}
 		if (this.astNode != null && this.baseExpressionRootNode != null) {
-			return RAst.computeRExpressionIndex(this.astNode, this.baseExpressionRootNode);
+			return RAsts.computeRExpressionIndex(this.astNode, this.baseExpressionRootNode);
 		}
 		else {
 			return null;
@@ -603,7 +603,7 @@
 			throw invalid();
 		}
 		if (this.astNode != null && this.baseExpressionRootNode != null) {
-			final List<RAstNode> nodes= RAst.computeRExpressionNodes(this.astNode, this.baseExpressionRootNode);
+			final List<RAstNode> nodes= RAsts.computeRExpressionNodes(this.astNode, this.baseExpressionRootNode);
 			try {
 				final RSrcref[] srcrefs= new RSrcref[nodes.size()];
 				for (int i= 0; i < srcrefs.length; i++) {
@@ -642,7 +642,7 @@
 						computeElementType(), elementId, computeElementLabel(), computeSubLabel(),
 						false );
 				internal.setCachedData(new CachedData(
-						this.modelInfo.getStamp().getSourceStamp(), elementId,
+						this.modelInfo.getStamp().getContentStamp(), elementId,
 						computeRExpressionIndex() ));
 				return internal;
 			}
@@ -663,7 +663,7 @@
 						computeElementType(), elementId, computeElementLabel(), computeSubLabel(),
 						false );
 				internal.setCachedData(new CachedData(
-						this.modelInfo.getStamp().getSourceStamp(), elementId,
+						this.modelInfo.getStamp().getContentStamp(), elementId,
 						computeRExpressionIndex() ));
 				return internal;
 			}
@@ -694,7 +694,7 @@
 				computeElementType(), elementId, computeElementLabel(), computeSubLabel() );
 		if (breakpoint instanceof RGenericLineBreakpoint) {
 			((RGenericLineBreakpoint) breakpoint).setCachedData(new CachedData(
-					this.modelInfo.getStamp().getSourceStamp(), elementId,
+					this.modelInfo.getStamp().getContentStamp(), elementId,
 					computeRExpressionIndex() ));
 		}
 	}
diff --git a/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/actions/StepIntoSelectionHandler.java b/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/actions/StepIntoSelectionHandler.java
index 27c46fa..5eaf3c4 100644
--- a/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/actions/StepIntoSelectionHandler.java
+++ b/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/actions/StepIntoSelectionHandler.java
@@ -43,18 +43,18 @@
 import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.ltk.ast.core.AstNode;
 import org.eclipse.statet.ltk.ast.core.util.AstSelection;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.nico.core.runtime.ToolStatus;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRModelManager;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RModelManager;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 import org.eclipse.statet.r.core.rlang.RTokens;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.debug.core.IRStackFrame;
 import org.eclipse.statet.r.nico.AbstractRDbgController;
 
@@ -67,14 +67,14 @@
 			final IDocument document = editor.getViewer().getDocument();
 			final ITypedRegion partition = TextUtilities.getPartition(document,
 					editor.getDocumentContentInfo().getPartitioning(), region.getOffset(), false );
-			final ISourceUnit su = editor.getSourceUnit();
-			if (su instanceof IRSourceUnit && region.getOffset() < document.getLength()
-					&& ( (IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(partition.getType())
+			final SourceUnit su = editor.getSourceUnit();
+			if (su instanceof RSourceUnit && region.getOffset() < document.getLength()
+					&& ( (RDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(partition.getType())
 							&& !RTokens.isRobustSeparator(document.getChar(region.getOffset()), false) )
-						|| partition.getType() == IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE
-						|| partition.getType() == IRDocumentConstants.R_STRING_CONTENT_TYPE )) {
+						|| partition.getType() == RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE
+						|| partition.getType() == RDocumentConstants.R_STRING_CONTENT_TYPE )) {
 				
-				final IRModelInfo info = (IRModelInfo) su.getModelInfo(RModel.R_TYPE_ID, IRModelManager.MODEL_FILE, new NullProgressMonitor());
+				final RSourceUnitModelInfo info = (RSourceUnitModelInfo) su.getModelInfo(RModel.R_TYPE_ID, RModelManager.MODEL_FILE, new NullProgressMonitor());
 				if (info != null) {
 					final AstInfo astInfo = info.getAst();
 					final AstSelection selection = AstSelection.search(astInfo.getRoot(),
diff --git a/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/breakpoints/BreakpointMarkerUpdater.java b/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/breakpoints/BreakpointMarkerUpdater.java
index 3b4e8c0..01e70dd 100644
--- a/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/breakpoints/BreakpointMarkerUpdater.java
+++ b/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/internal/r/debug/ui/breakpoints/BreakpointMarkerUpdater.java
@@ -33,10 +33,11 @@
 import org.eclipse.ui.texteditor.IMarkerUpdater;
 import org.eclipse.ui.texteditor.MarkerUtilities;
 
-import org.eclipse.statet.ltk.core.LTK;
-import org.eclipse.statet.ltk.model.core.ISourceUnitManager;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
+import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.model.core.LtkModels;
+import org.eclipse.statet.ltk.model.core.SourceUnitManager;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 import org.eclipse.statet.r.debug.core.breakpoints.IRLineBreakpoint;
 import org.eclipse.statet.r.debug.core.breakpoints.RLineBreakpointValidator;
 import org.eclipse.statet.r.ui.RUI;
@@ -89,16 +90,16 @@
 	private boolean update(final IRLineBreakpoint breakpoint, final IMarker marker,
 			final IDocument document, final Position position) {
 		final IProgressMonitor monitor= new NullProgressMonitor();
-		final ISourceUnitManager suManager= LTK.getSourceUnitManager();
-		ISourceUnit su= suManager.getSourceUnit(LTK.PERSISTENCE_CONTEXT, marker.getResource(),
+		final SourceUnitManager suManager= LtkModels.getSourceUnitManager();
+		SourceUnit su= suManager.getSourceUnit(Ltk.PERSISTENCE_CONTEXT, marker.getResource(),
 				null, true, monitor );
 		if (su != null) {
 			try {
-				su= suManager.getSourceUnit(LTK.EDITOR_CONTEXT, su, null, true, monitor);
+				su= suManager.getSourceUnit(Ltk.EDITOR_CONTEXT, su, null, true, monitor);
 				assert (su.getDocument(null) == document);
 				
-				if (su instanceof IRWorkspaceSourceUnit) {
-					final IRWorkspaceSourceUnit rSourceUnit= (IRWorkspaceSourceUnit) su;
+				if (su instanceof RWorkspaceSourceUnit) {
+					final RWorkspaceSourceUnit rSourceUnit= (RWorkspaceSourceUnit)su;
 					final RLineBreakpointValidator validator= new RLineBreakpointValidator(rSourceUnit,
 							breakpoint.getBreakpointType(), position.getOffset(), monitor );
 					if (validator.getType() != null) {
diff --git a/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/r/debug/ui/actions/RToggleBreakpointAdapter.java b/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/r/debug/ui/actions/RToggleBreakpointAdapter.java
index d28061a..48a04ec 100644
--- a/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/r/debug/ui/actions/RToggleBreakpointAdapter.java
+++ b/r/org.eclipse.statet.r.debug.ui/src/org/eclipse/statet/r/debug/ui/actions/RToggleBreakpointAdapter.java
@@ -46,10 +46,10 @@
 import org.eclipse.statet.ecommons.text.IMarkerPositionResolver;
 import org.eclipse.statet.ecommons.text.ui.AnnotationMarkerPositionResolver;
 
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 import org.eclipse.statet.r.debug.core.RDebugModel;
 import org.eclipse.statet.r.debug.core.breakpoints.IRBreakpoint;
 import org.eclipse.statet.r.debug.core.breakpoints.IRLineBreakpoint;
@@ -70,12 +70,12 @@
 		
 		private final IRSourceEditor fEditor;
 		
-		private final IRWorkspaceSourceUnit fSourceUnit;
+		private final RWorkspaceSourceUnit fSourceUnit;
 		
 		private AbstractDocument fDocument;
 		
 		
-		Data(final IRSourceEditor editor, final IRWorkspaceSourceUnit su) {
+		Data(final IRSourceEditor editor, final RWorkspaceSourceUnit su) {
 			fEditor = editor;
 			fSourceUnit = su;
 		}
@@ -85,7 +85,7 @@
 			return fEditor;
 		}
 		
-		public IRWorkspaceSourceUnit getSourceUnit() {
+		public RWorkspaceSourceUnit getSourceUnit() {
 			return fSourceUnit;
 		}
 		
@@ -112,17 +112,17 @@
 		if (editor == null) {
 			return null;
 		}
-		final IRSourceUnit su = editor.getSourceUnit();
-		if (!(su instanceof IRWorkspaceSourceUnit)) {
+		final RSourceUnit su = editor.getSourceUnit();
+		if (!(su instanceof RWorkspaceSourceUnit)) {
 			return null;
 		}
-		return new Data(editor, (IRWorkspaceSourceUnit) su);
+		return new Data(editor, (RWorkspaceSourceUnit)su);
 	}
 	
 	@Override
 	public boolean canToggleLineBreakpoints(final IWorkbenchPart part, final ISelection selection) {
 		final IRSourceEditor editor = getREditor(part, selection);
-		return (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
+		return (editor != null && editor.getSourceUnit() instanceof WorkspaceSourceUnit
 				&& selection instanceof ITextSelection );
 	}
 	
@@ -158,7 +158,7 @@
 	@Override
 	public boolean canToggleMethodBreakpoints(final IWorkbenchPart part, final ISelection selection) {
 		final IRSourceEditor editor = getREditor(part, selection);
-		return (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
+		return (editor != null && editor.getSourceUnit() instanceof WorkspaceSourceUnit
 				&& selection instanceof ITextSelection );
 	}
 	
@@ -203,7 +203,7 @@
 	@Override
 	public boolean canToggleBreakpoints(final IWorkbenchPart part, final ISelection selection) {
 		final IRSourceEditor editor = getREditor(part, selection);
-		return (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
+		return (editor != null && editor.getSourceUnit() instanceof WorkspaceSourceUnit
 				&& selection instanceof ITextSelection );
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF b/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF
index c30275e..63dc0e9 100644
--- a/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF
+++ b/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF
@@ -29,7 +29,7 @@
  org.eclipse.statet.rj.eclient.graphics,
  org.eclipse.statet.ltk.core,
  org.eclipse.statet.ltk.ui,
- org.eclipse.statet.ltk.buildpaths.ui,
+ org.eclipse.statet.ltk.buildpath.ui,
  org.eclipse.ltk.core.refactoring,
  org.eclipse.ltk.ui.refactoring,
  org.eclipse.statet.ecommons.waltable.core;bundle-version="[4.2.0,4.3.0)",
diff --git a/r/org.eclipse.statet.r.ui/plugin.xml b/r/org.eclipse.statet.r.ui/plugin.xml
index 1b49767..4a1c33b 100644
--- a/r/org.eclipse.statet.r.ui/plugin.xml
+++ b/r/org.eclipse.statet.r.ui/plugin.xml
@@ -329,7 +329,7 @@
                      ifEmpty="false"
                      operator="and">
                   <instanceof
-                        value="org.eclipse.statet.r.core.model.IRLangElement">
+                        value="org.eclipse.statet.r.core.model.RLangElement">
                   </instanceof>
                </iterate>
             </with>
@@ -1720,7 +1720,7 @@
                         ifEmpty="false"
                         operator="and">
                      <instanceof
-                           value="org.eclipse.statet.ltk.model.core.elements.ISourceStructElement">
+                           value="org.eclipse.statet.ltk.model.core.element.SourceStructElement">
                      </instanceof>
                   </iterate>
                   <iterate
@@ -1759,7 +1759,7 @@
                         ifEmpty="false"
                         operator="and">
                      <instanceof
-                           value="org.eclipse.statet.ltk.model.core.elements.ISourceStructElement">
+                           value="org.eclipse.statet.ltk.model.core.element.SourceStructElement">
                      </instanceof>
                   </iterate>
                   <iterate
@@ -1838,7 +1838,7 @@
                         ifEmpty="false"
                         operator="and">
                      <instanceof
-                           value="org.eclipse.statet.ltk.model.core.elements.ISourceStructElement">
+                           value="org.eclipse.statet.ltk.model.core.element.SourceStructElement">
                      </instanceof>
                   </iterate>
                </with>
@@ -2255,7 +2255,7 @@
    <extension
          point="org.eclipse.core.runtime.adapters">
       <factory
-            adaptableType="org.eclipse.statet.r.core.model.IRElement"
+            adaptableType="org.eclipse.statet.r.core.model.RElement"
             class="org.eclipse.statet.internal.r.ui.RElementAdapterFactory">
          <adapter
                type="org.eclipse.core.resources.IResource">
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/FCallNamePattern.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/FCallNamePattern.java
index 919d09f..da13992 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/FCallNamePattern.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/FCallNamePattern.java
@@ -16,10 +16,10 @@
 
 import java.util.List;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRMethod;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangMethod;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.r.ui.sourceediting.RFrameSearchPath;
 import org.eclipse.statet.r.ui.sourceediting.RFrameSearchPath.RFrameIterator;
@@ -72,7 +72,7 @@
 	
 	public void searchFDef(final RFrameSearchPath searchPath) {
 		ITER_FRAMES: for (final RFrameIterator iter= searchPath.iterator(); iter.hasNext(); ) {
-			final IRFrame frame= iter.next();
+			final RFrame frame= iter.next();
 			if (this.packageName != null) {
 				final RElementName frameName= frame.getElementName();
 				if (!(frameName != null
@@ -81,18 +81,18 @@
 					continue ITER_FRAMES;
 				}
 			}
-			final List<? extends IModelElement> elements= frame.getModelChildren(null);
-			for (final IModelElement candidate : elements) {
+			final List<? extends LtkModelElement> elements= frame.getModelChildren(null);
+			for (final LtkModelElement candidate : elements) {
 				if (candidate.getModelTypeId() == RModel.R_TYPE_ID
-						&& (candidate.getElementType() & IModelElement.MASK_C1) == IModelElement.C1_METHOD
+						&& (candidate.getElementType() & LtkModelElement.MASK_C1) == LtkModelElement.C1_METHOD
 						&& matches((RElementName) candidate.getElementName()) ) {
-					handleMatch((IRMethod) candidate, frame, iter);
+					handleMatch((RLangMethod)candidate, frame, iter);
 				}
 			}
 		}
 	}
 	
-	protected void handleMatch(final IRMethod element, final IRFrame frame,
+	protected void handleMatch(final RLangMethod element, final RFrame frame,
 			final RFrameIterator iterator) {
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorInputAdapterFactory.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorInputAdapterFactory.java
index c038580..75e554c 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorInputAdapterFactory.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorInputAdapterFactory.java
@@ -25,7 +25,7 @@
 	
 	
 	private static Class<?>[] PROPERTIES = new Class<?>[] {
-//		IRElement.class,
+//		RElement.class,
 	};
 	
 	/*
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorUriSourceUnit.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorUriSourceUnit.java
index d99220c..ceca5a1 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorUriSourceUnit.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorUriSourceUnit.java
@@ -19,23 +19,27 @@
 import org.eclipse.core.filesystem.IFileStore;
 import org.eclipse.core.runtime.SubMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 
-import org.eclipse.statet.ltk.core.LTK;
+import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.core.WorkingContext;
-import org.eclipse.statet.ltk.model.core.SourceDocumentRunnable;
+import org.eclipse.statet.ltk.model.core.element.SourceDocumentRunnable;
 import org.eclipse.statet.ltk.model.core.impl.GenericUriSourceUnit2;
-import org.eclipse.statet.ltk.model.core.impl.IWorkingBuffer;
+import org.eclipse.statet.ltk.model.core.impl.WorkingBuffer;
 import org.eclipse.statet.ltk.ui.FileBufferWorkingBuffer;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.source.RDocumentContentInfo;
 
 
-public class REditorUriSourceUnit extends GenericUriSourceUnit2<RUISuModelContainer>
-		implements IRSourceUnit {
+@NonNullByDefault
+public class REditorUriSourceUnit
+		extends GenericUriSourceUnit2<RUISuModelContainer>
+		implements RSourceUnit {
 	
 	
 	public REditorUriSourceUnit(final String id, final IFileStore store) {
@@ -50,7 +54,7 @@
 	
 	@Override
 	public WorkingContext getWorkingContext() {
-		return LTK.EDITOR_CONTEXT;
+		return Ltk.EDITOR_CONTEXT;
 	}
 	
 	@Override
@@ -70,7 +74,7 @@
 	
 	
 	@Override
-	protected IWorkingBuffer createWorkingBuffer(final SubMonitor m) {
+	protected WorkingBuffer createWorkingBuffer(final SubMonitor m) {
 		return new FileBufferWorkingBuffer(this);
 	}
 	
@@ -93,7 +97,7 @@
 	}
 	
 	@Override
-	public IRCoreAccess getRCoreAccess() {
+	public RCoreAccess getRCoreAccess() {
 		return RCore.WORKBENCH_ACCESS;
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorWorkingCopy.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorWorkingCopy.java
index f7a1998..5504818 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorWorkingCopy.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorWorkingCopy.java
@@ -14,28 +14,31 @@
 
 package org.eclipse.statet.internal.r.ui;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ltk.ui.GenericEditorWorkspaceSourceUnitWorkingCopy2;
-import org.eclipse.statet.r.core.IRCoreAccess;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.r.core.model.RSuModelContainer;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.build.RSourceUnitModelContainer;
 
 
 /**
  * R source unit working copy which can be processed by the model manager.
  */
+@NonNullByDefault
 public class REditorWorkingCopy
-		extends GenericEditorWorkspaceSourceUnitWorkingCopy2<RSuModelContainer>
-		implements IRWorkspaceSourceUnit {
+		extends GenericEditorWorkspaceSourceUnitWorkingCopy2<RSourceUnitModelContainer>
+		implements RWorkspaceSourceUnit {
 	
 	
-	public REditorWorkingCopy(final IRWorkspaceSourceUnit from) {
+	public REditorWorkingCopy(final RWorkspaceSourceUnit from) {
 		super(from);
 	}
 	
 	@Override
-	protected RSuModelContainer createModelContainer() {
+	protected RSourceUnitModelContainer createModelContainer() {
 		return new RUISuModelContainer(this);
 	}
 	
@@ -59,8 +62,8 @@
 	}
 	
 	@Override
-	public IRCoreAccess getRCoreAccess() {
-		return ((IRSourceUnit) getUnderlyingUnit()).getRCoreAccess();
+	public RCoreAccess getRCoreAccess() {
+		return ((RSourceUnit)getUnderlyingUnit()).getRCoreAccess();
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorWorkingCopyFactory.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorWorkingCopyFactory.java
index 671bcf0..faeeab3 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorWorkingCopyFactory.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/REditorWorkingCopyFactory.java
@@ -16,17 +16,20 @@
 
 import org.eclipse.core.filesystem.IFileStore;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.text.ISourceFragment;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 import org.eclipse.statet.ltk.model.core.impl.AbstractEditorSourceUnitFactory;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 
 
 /**
  * R source unit factory for editor context
  */
+@NonNullByDefault
 public final class REditorWorkingCopyFactory extends AbstractEditorSourceUnitFactory {
 	
 	
@@ -35,17 +38,17 @@
 	
 	
 	@Override
-	protected ISourceUnit createSourceUnit(final String id, final IWorkspaceSourceUnit su) {
-		return new REditorWorkingCopy((IRWorkspaceSourceUnit) su);
+	protected SourceUnit createSourceUnit(final String id, final WorkspaceSourceUnit su) {
+		return new REditorWorkingCopy((RWorkspaceSourceUnit)su);
 	}
 	
 	@Override
-	protected ISourceUnit createSourceUnit(final String id, final IFileStore file) {
+	protected SourceUnit createSourceUnit(final String id, final IFileStore file) {
 		return new REditorUriSourceUnit(id, file);
 	}
 	
 	@Override
-	protected ISourceUnit createSourceUnit(final String id, final ISourceFragment fragment) {
+	protected SourceUnit createSourceUnit(final String id, final ISourceFragment fragment) {
 		return new RFragmentSourceUnit(id, fragment);
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RElementAdapterFactory.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RElementAdapterFactory.java
index 248f2ad..9a591b0 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RElementAdapterFactory.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RElementAdapterFactory.java
@@ -20,10 +20,10 @@
 import org.eclipse.search.ui.ISearchPageScoreComputer;
 import org.eclipse.ui.IContributorResourceAdapter;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
-import org.eclipse.statet.r.core.model.IRElement;
+import org.eclipse.statet.ltk.model.core.element.SourceElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.RElement;
 
 
 /**
@@ -32,7 +32,7 @@
 public class RElementAdapterFactory implements IAdapterFactory, IContributorResourceAdapter {
 	
 	
-	private static Class<?>[] PROPERTIES = new Class<?>[] {
+	private static Class<?>[] PROPERTIES= new Class<?>[] {
 		IResource.class,
 		IContributorResourceAdapter.class,
 	};
@@ -56,7 +56,7 @@
 	@SuppressWarnings("unchecked")
 	public <T> T getAdapter(final Object adaptableObject, final Class<T> adapterType) {
 		updateLazyLoadedAdapters();
-		final IRElement element = getRElement(adaptableObject);
+		final RElement element= getRElement(adaptableObject);
 //		if (IPropertySource.class.equals(key)) {
 //			return getProperties(java);
 //		}
@@ -88,26 +88,26 @@
 		return null;
 	}
 	
-	private IResource getResource(final IRElement element) {
-		switch (element.getElementType() & IRElement.MASK_C1) {
-//		case IRElement.C1_CLASS:
-//		case IRElement.C1_METHOD:
+	private IResource getResource(final RElement element) {
+		switch (element.getElementType() & RElement.MASK_C1) {
+//		case RElement.C1_CLASS:
+//		case RElement.C1_METHOD:
 //			// top level types behave like the CU
-//			if (element instanceof ISourceStructElement) {
-//				final ISourceStructElement parent = ((ISourceStructElement)element).getSourceParent();
-//				if ((parent.getElementType() & IRElement.MASK_C1) == IRElement.C1_SOURCE) {
-//					final ISourceUnit su = parent.getSourceUnit();
-//					if (su instanceof IWorkspaceSourceUnit) {
-//						return ((IWorkspaceSourceUnit) su).getResource();
+//			if (element instanceof SourceStructElement) {
+//				final SourceStructElement parent= ((SourceStructElement)element).getSourceParent();
+//				if ((parent.getElementType() & RElement.MASK_C1) == RElement.C1_SOURCE) {
+//					final SourceUnit su= parent.getSourceUnit();
+//					if (su instanceof WorkspaceSourceUnit) {
+//						return ((WorkspaceSourceUnit)su).getResource();
 //					}
 //				}
 //			}
 //			return null;
-		case IRElement.C1_SOURCE:
-			if (element instanceof ISourceElement) {
-				final ISourceUnit su = ((ISourceElement) element).getSourceUnit();
-				if (su instanceof IWorkspaceSourceUnit) {
-					return ((IWorkspaceSourceUnit) su).getResource();
+		case RElement.C1_SOURCE:
+			if (element instanceof SourceElement) {
+				final SourceUnit su= ((SourceElement)element).getSourceUnit();
+				if (su instanceof WorkspaceSourceUnit) {
+					return ((WorkspaceSourceUnit)su).getResource();
 				}
 			}
 			return null;
@@ -118,7 +118,7 @@
 	
 	@Override
 	public IResource getAdaptedResource(final IAdaptable adaptable) {
-		final IRElement element = getRElement(adaptable);
+		final RElement element= getRElement(adaptable);
 		if (element != null) {
 			return getResource(element);
 		}
@@ -126,16 +126,16 @@
 	}
 	
 //	public IResourceMapping getAdaptedResourceMapping(final IAdaptable adaptable) {
-//		final IRElement element = getRElement(adaptable);
+//		final RElement element= getRElement(adaptable);
 //		if (element != null) {
 //			return
 //		}
 //		return null;
 //	}
 	
-	private IRElement getRElement(final Object element) {
-		if (element instanceof IRElement) {
-			return (IRElement) element;
+	private RElement getRElement(final Object element) {
+		if (element instanceof RElement) {
+			return (RElement)element;
 		}
 		return null;
 	}
@@ -147,17 +147,17 @@
 	}
 	
 	private void createSearchPageScoreComputer() {
-		fSearchPageScoreComputerClass = ISearchPageScoreComputer.class;
-		fSearchPageScoreComputer = new RSearchPageScoreComputer();
-		final Class<?>[] newProperties = new Class[PROPERTIES.length+1];
+		fSearchPageScoreComputerClass= ISearchPageScoreComputer.class;
+		fSearchPageScoreComputer= new RSearchPageScoreComputer();
+		final Class<?>[] newProperties= new Class[PROPERTIES.length+1];
 		System.arraycopy(PROPERTIES, 0, newProperties, 0, PROPERTIES.length);
-		newProperties[PROPERTIES.length] = fSearchPageScoreComputerClass;
-		PROPERTIES = newProperties;
+		newProperties[PROPERTIES.length]= fSearchPageScoreComputerClass;
+		PROPERTIES= newProperties;
 	}
 	
 //	private RWorkbenchAdapter getRWorkbenchAdapter() {
 //		if (fWorkbenchAdapter == null)
-//			fWorkbenchAdapter =;
+//			fWorkbenchAdapter=;
 //		return fWorkbenchAdapter;
 //	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RFragmentSourceUnit.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RFragmentSourceUnit.java
index dbf01a7..06ea70d 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RFragmentSourceUnit.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RFragmentSourceUnit.java
@@ -16,25 +16,30 @@
 
 import java.lang.reflect.InvocationTargetException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.preferences.core.PreferenceAccess;
 import org.eclipse.statet.ecommons.text.ISourceFragment;
 import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 
-import org.eclipse.statet.ltk.core.LTK;
+import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.core.WorkingContext;
-import org.eclipse.statet.ltk.model.core.SourceDocumentRunnable;
+import org.eclipse.statet.ltk.model.core.element.SourceDocumentRunnable;
 import org.eclipse.statet.ltk.model.core.impl.GenericFragmentSourceUnit2;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCodeStyleSettings;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.r.core.model.RSuModelContainer;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.build.RSourceUnitModelContainer;
 import org.eclipse.statet.r.core.source.RDocumentContentInfo;
 import org.eclipse.statet.rj.renv.core.REnv;
 
 
-public class RFragmentSourceUnit extends GenericFragmentSourceUnit2<RSuModelContainer> implements IRSourceUnit, IRCoreAccess {
+@NonNullByDefault
+public class RFragmentSourceUnit
+		extends GenericFragmentSourceUnit2<RSourceUnitModelContainer>
+		implements RSourceUnit, RCoreAccess {
 	
 	
 	public RFragmentSourceUnit(final String id, final ISourceFragment fragment) {
@@ -42,14 +47,14 @@
 	}
 	
 	@Override
-	protected RSuModelContainer createModelContainer() {
-		return new RSuModelContainer(this);
+	protected RSourceUnitModelContainer createModelContainer() {
+		return new RSourceUnitModelContainer(this);
 	}
 	
 	
 	@Override
 	public WorkingContext getWorkingContext() {
-		return LTK.EDITOR_CONTEXT;
+		return Ltk.EDITOR_CONTEXT;
 	}
 	
 	@Override
@@ -87,7 +92,7 @@
 	}
 	
 	@Override
-	public IRCoreAccess getRCoreAccess() {
+	public RCoreAccess getRCoreAccess() {
 		return this;
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RProjectPropertyPage.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RProjectPropertyPage.java
index 68f597d..cbf00de 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RProjectPropertyPage.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RProjectPropertyPage.java
@@ -62,8 +62,8 @@
 import org.eclipse.statet.ecommons.ui.util.UIAccess;
 
 import org.eclipse.statet.internal.r.ui.buildpaths.RBuildpathsUIDescription;
-import org.eclipse.statet.ltk.buildpaths.core.IBuildpathElement;
-import org.eclipse.statet.ltk.buildpaths.ui.SourceContainerComponent;
+import org.eclipse.statet.ltk.buildpath.core.BuildpathElement;
+import org.eclipse.statet.ltk.buildpath.ui.SourceContainerComponent;
 import org.eclipse.statet.r.core.RBuildpaths;
 import org.eclipse.statet.r.core.RProject;
 import org.eclipse.statet.r.core.RProjects;
@@ -347,7 +347,7 @@
 	}
 	
 	private void saveProjectConfig() {
-		final ImList<IBuildpathElement> newBuildpath= this.buildpathUIDescription.toCoreElements(this.buildpathList);
+		final ImList<BuildpathElement> newBuildpath= this.buildpathUIDescription.toCoreElements(this.buildpathList);
 		RBuildpaths.set(getProject(), newBuildpath);
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RSearchPageScoreComputer.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RSearchPageScoreComputer.java
index 87307bb..1c0f521 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RSearchPageScoreComputer.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RSearchPageScoreComputer.java
@@ -18,9 +18,9 @@
 import org.eclipse.ui.IEditorInput;
 
 import org.eclipse.statet.ltk.ui.EditorUtils;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.ui.RUI;
 
 
@@ -34,7 +34,7 @@
 	@Override
 	public int computeScore(final String pageId, final Object input) {
 		if (RUI.R_HELP_SEARCH_PAGE_ID.equals(pageId)) {
-			if (input instanceof IRElement || input instanceof IRSourceUnit) {
+			if (input instanceof RElement || input instanceof RSourceUnit) {
 				return 85;
 			}
 			if (input instanceof IEditorInput
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RUISuModelContainer.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RUISuModelContainer.java
index e1dc085..999ac01 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RUISuModelContainer.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/RUISuModelContainer.java
@@ -14,21 +14,25 @@
 
 package org.eclipse.statet.internal.r.ui;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
-import org.eclipse.statet.r.core.model.RSuModelContainer;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.build.RSourceUnitModelContainer;
 
 
-public class RUISuModelContainer extends RSuModelContainer {
+@NonNullByDefault
+public class RUISuModelContainer extends RSourceUnitModelContainer {
 	
 	
-	public RUISuModelContainer(final IRSourceUnit su) {
+	public RUISuModelContainer(final RSourceUnit su) {
 		super(su);
 	}
 	
 	
 	@Override
-	public ProblemRequestor createProblemRequestor() {
+	public @Nullable ProblemRequestor createProblemRequestor() {
 		return RUIPlugin.getInstance().getRDocumentProvider().createProblemRequestor(
 				getSourceUnit() );
 	}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/buildpaths/RBuildpathsUIDescription.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/buildpaths/RBuildpathsUIDescription.java
index 683d4b1..277964a 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/buildpaths/RBuildpathsUIDescription.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/buildpaths/RBuildpathsUIDescription.java
@@ -16,9 +16,9 @@
 
 import org.eclipse.core.resources.IProject;
 
-import org.eclipse.statet.ltk.buildpaths.core.BuildpathElementType;
-import org.eclipse.statet.ltk.buildpaths.ui.BuildpathListElement;
-import org.eclipse.statet.ltk.buildpaths.ui.BuildpathsUIDescription;
+import org.eclipse.statet.ltk.buildpath.core.BuildpathElementType;
+import org.eclipse.statet.ltk.buildpath.ui.BuildpathListElement;
+import org.eclipse.statet.ltk.buildpath.ui.BuildpathsUIDescription;
 
 
 public class RBuildpathsUIDescription extends BuildpathsUIDescription {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RLinkedNamesAssistProposal.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RLinkedNamesAssistProposal.java
index 6a7c4dd..7b76e09 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RLinkedNamesAssistProposal.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RLinkedNamesAssistProposal.java
@@ -27,7 +27,7 @@
 import org.eclipse.statet.ltk.ui.sourceediting.assist.AssistInvocationContext;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.LinkedNamesAssistProposal;
 import org.eclipse.statet.r.core.model.RElementAccess;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 
 
 public class RLinkedNamesAssistProposal extends LinkedNamesAssistProposal {
@@ -133,7 +133,7 @@
 	}
 	
 	private Position getPosition(final RElementAccess access) {
-		return RAst.getElementNamePosition(access.getNameNode());
+		return RAsts.getElementNamePosition(access.getNameNode());
 	}
 	
 }
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RenameInRegionAssistProposal.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RenameInRegionAssistProposal.java
index 9de561d..31d9ef5 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RenameInRegionAssistProposal.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RenameInRegionAssistProposal.java
@@ -24,7 +24,7 @@
 import org.eclipse.statet.ltk.ui.sourceediting.assist.AssistInvocationContext;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.CommandAssistProposal;
 import org.eclipse.statet.ltk.ui.util.LTKSelectionUtils;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.refactoring.RenameInRegionRefactoring;
 
 
@@ -43,7 +43,7 @@
 		
 		RenameInRegionRefactoring refactoring = null;
 		{	final ITextSelection textSelection = (ITextSelection) viewer.getSelectionProvider().getSelection();
-			refactoring = new RenameInRegionRefactoring((IRSourceUnit) context.getSourceUnit(),
+			refactoring = new RenameInRegionRefactoring((RSourceUnit)context.getSourceUnit(),
 					LTKSelectionUtils.toTextRegion(textSelection) );
 		}
 		if (refactoring != null) {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RenameInWorkspaceAssistProposal.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RenameInWorkspaceAssistProposal.java
index 579c8b5..40a7c16 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RenameInWorkspaceAssistProposal.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RenameInWorkspaceAssistProposal.java
@@ -22,7 +22,7 @@
 import org.eclipse.statet.ltk.ui.refactoring.RefactoringWizardExecutionHelper;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.AssistInvocationContext;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.CommandAssistProposal;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.refactoring.RenameInWorkspaceRefactoring;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 
@@ -47,7 +47,7 @@
 		final AssistInvocationContext context= getInvocationContext();
 		
 		RenameInWorkspaceRefactoring refactoring = null;
-		{	refactoring = new RenameInWorkspaceRefactoring((IRWorkspaceSourceUnit) context.getSourceUnit(),
+		{	refactoring = new RenameInWorkspaceRefactoring((RWorkspaceSourceUnit)context.getSourceUnit(),
 					this.nameNode );
 		}
 		if (refactoring != null) {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/dataeditor/RDataLabelProvider.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/dataeditor/RDataLabelProvider.java
index 36e0ddf..362acc3 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/dataeditor/RDataLabelProvider.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/dataeditor/RDataLabelProvider.java
@@ -22,7 +22,7 @@
 import org.eclipse.swt.graphics.Image;
 
 import org.eclipse.statet.internal.r.ui.dataeditor.RDataEditorOutlinePage.VariablePropertyItem;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.ui.RLabelProvider;
 import org.eclipse.statet.r.ui.RUI;
@@ -76,7 +76,7 @@
 		if (element instanceof RDataTableContentDescription) {
 			final RDataTableContentDescription description= (RDataTableContentDescription) element;
 			if (description.getRElementStruct() instanceof CombinedRElement) {
-				this.fRLabelProvider.update(cell, (IModelElement) description.getRElementStruct());
+				this.fRLabelProvider.update(cell, (LtkModelElement) description.getRElementStruct());
 				super.update(cell);
 				return;
 			}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/GenerateRoxygenElementComment.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/GenerateRoxygenElementComment.java
index 0cac3d0..01f7e97 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/GenerateRoxygenElementComment.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/GenerateRoxygenElementComment.java
@@ -49,11 +49,11 @@
 import org.eclipse.statet.ecommons.ui.workbench.WorkbenchUIUtils;
 
 import org.eclipse.statet.internal.r.ui.RUIMessages;
-import org.eclipse.statet.ltk.model.core.IModelManager;
-import org.eclipse.statet.ltk.model.core.SourceDocumentRunnable;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
+import org.eclipse.statet.ltk.model.core.ModelManager;
+import org.eclipse.statet.ltk.model.core.element.SourceDocumentRunnable;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditorAssociated;
 import org.eclipse.statet.ltk.ui.templates.TemplateUtils;
@@ -61,11 +61,11 @@
 import org.eclipse.statet.ltk.ui.util.LTKSelectionUtils;
 import org.eclipse.statet.ltk.ui.util.LTKWorkbenchUIUtil;
 import org.eclipse.statet.r.codegeneration.CodeGeneration;
-import org.eclipse.statet.r.core.model.IRClass;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRMethod;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RElement;
+import org.eclipse.statet.r.core.model.RLangClass;
+import org.eclipse.statet.r.core.model.RLangMethod;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.refactoring.RRefactoring;
 
 
@@ -95,9 +95,9 @@
 		
 		final SubMonitor m= SubMonitor.convert(null, 2);
 		
-		ISourceUnit su= null;
-		ISourceStructElement[] elements= null;
-		ISourceUnitModelInfo info= null;
+		SourceUnit su= null;
+		SourceStructElement[] elements= null;
+		SourceUnitModelInfo info= null;
 		
 		final IEvaluationContext context= (IEvaluationContext) event.getApplicationContext();
 		final ISelection selection= WorkbenchUIUtils.getCurrentSelection(context);
@@ -114,7 +114,7 @@
 						return null;
 					}
 				}
-				info= su.getModelInfo(RModel.R_TYPE_ID, IModelManager.MODEL_FILE, m.newChild(1));
+				info= su.getModelInfo(RModel.R_TYPE_ID, ModelManager.MODEL_FILE, m.newChild(1));
 				// update elements if necessary
 			}
 			final ISourceEditorAssociated associated= part.getAdapter(ISourceEditorAssociated.class);
@@ -125,7 +125,7 @@
 			if (editor != null) {
 				su= editor.getSourceUnit();
 				if (su != null) {
-					info= su.getModelInfo(RModel.R_TYPE_ID, IModelManager.MODEL_FILE, m.newChild(1));
+					info= su.getModelInfo(RModel.R_TYPE_ID, ModelManager.MODEL_FILE, m.newChild(1));
 					elements= LTKSelectionUtils.getSelectedSourceStructElement(info, (ITextSelection) selection);
 				}
 			}
@@ -134,31 +134,31 @@
 			editor= null;
 		}
 		
-		if (su == null || elements == null || elements.length == 0 || !(su instanceof IRSourceUnit)) {
+		if (su == null || elements == null || elements.length == 0 || !(su instanceof RSourceUnit)) {
 			return null;
 		}
 		
 		if (!su.checkState(true, new NullProgressMonitor())) {
 			return false;
 		}
-		final IRSourceUnit rsu= (IRSourceUnit) su;
+		final RSourceUnit rsu= (RSourceUnit)su;
 		try {
 			final AbstractDocument doc= su.getDocument(null);
 			final EvaluatedTemplate[] templates= new EvaluatedTemplate[elements.length];
 			final String lineDelimiter= doc.getDefaultLineDelimiter();
 			Arrays.sort(elements, RRefactoring.getFactory().createAdapter(elements).getModelElementComparator());
 			ITER_ELEMENTS: for (int i= 0; i < elements.length; i++) {
-				switch (elements[i].getElementType() & IRElement.MASK_C1) {
-				case IRElement.C1_CLASS:
-					templates[i]= CodeGeneration.getClassRoxygenComment((IRClass) elements[i], lineDelimiter);
+				switch (elements[i].getElementType() & RElement.MASK_C1) {
+				case RElement.C1_CLASS:
+					templates[i]= CodeGeneration.getClassRoxygenComment((RLangClass)elements[i], lineDelimiter);
 					continue ITER_ELEMENTS;
-				case IRElement.C1_METHOD:
-					switch (elements[i].getElementType() & IRElement.MASK_C2) {
-					case IRElement.R_S4METHOD:
-						templates[i]= CodeGeneration.getMethodRoxygenComment((IRMethod) elements[i], lineDelimiter);
+				case RElement.C1_METHOD:
+					switch (elements[i].getElementType() & RElement.MASK_C2) {
+					case RElement.R_S4METHOD:
+						templates[i]= CodeGeneration.getMethodRoxygenComment((RLangMethod)elements[i], lineDelimiter);
 						continue ITER_ELEMENTS;
 					default:
-						templates[i]= CodeGeneration.getCommonFunctionRoxygenComment((IRMethod) elements[i], lineDelimiter);
+						templates[i]= CodeGeneration.getCommonFunctionRoxygenComment((RLangMethod)elements[i], lineDelimiter);
 						continue ITER_ELEMENTS;
 					}
 				}
@@ -202,7 +202,7 @@
 			
 			final IFile resource= (IFile) su.getResource();
 			final IRegion initialSelection= new Region(selectionStart, selectionLength);
-			su.syncExec(new SourceDocumentRunnable(doc, info.getStamp().getSourceStamp(),
+			su.syncExec(new SourceDocumentRunnable(doc, info.getStamp().getContentStamp(),
 					DocumentRewriteSessionType.SEQUENTIAL ) {
 				@Override
 				public void run() throws InvocationTargetException {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/OpenRElementHyperlink.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/OpenRElementHyperlink.java
index 003b46b..30a5aaf 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/OpenRElementHyperlink.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/OpenRElementHyperlink.java
@@ -29,12 +29,12 @@
 import org.eclipse.statet.ecommons.text.core.JFaceTextRegion;
 import org.eclipse.statet.ecommons.ui.SharedUIResources;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceElement;
+import org.eclipse.statet.ltk.model.core.element.SourceElement;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 import org.eclipse.statet.r.ui.sourceediting.ROpenDeclaration;
 
 
@@ -44,17 +44,17 @@
 	private final ISourceEditor editor;
 	private final IRegion region;
 	
-	private final IRSourceUnit su;
+	private final RSourceUnit su;
 	private final RElementAccess access;
 	
 	
-	public OpenRElementHyperlink(final ISourceEditor editor, final IRSourceUnit su, final RElementAccess access) {
+	public OpenRElementHyperlink(final ISourceEditor editor, final RSourceUnit su, final RElementAccess access) {
 		assert (su != null);
 		assert (access != null);
 		
 		this.editor= editor;
 		this.region= JFaceTextRegion.toJFaceRegion(
-				RAst.getElementNameRegion(access.getNameNode()) );
+				RAsts.getElementNameRegion(access.getNameNode()) );
 		this.su= su;
 		this.access= access;
 	}
@@ -78,9 +78,9 @@
 	@Override
 	public void open() {
 		try {
-			final List<ISourceElement> list= RModel.searchDeclaration(this.access, this.su);
+			final List<SourceElement> list= RModel.searchDeclaration(this.access, this.su);
 			final ROpenDeclaration open= new ROpenDeclaration();
-			final ISourceElement element= open.selectElement(list, this.editor.getWorkbenchPart());
+			final SourceElement element= open.selectElement(list, this.editor.getWorkbenchPart());
 			if (element != null) {
 				open.open(element, true);
 			}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RArgumentListContextInformation.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RArgumentListContextInformation.java
index bca07c7..da6e76e 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RArgumentListContextInformation.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RArgumentListContextInformation.java
@@ -24,7 +24,7 @@
 
 import org.eclipse.statet.ltk.ui.sourceediting.assist.AssistInformationProposal;
 import org.eclipse.statet.r.core.model.ArgsDefinition;
-import org.eclipse.statet.r.core.model.IRMethod;
+import org.eclipse.statet.r.core.model.RLangMethod;
 import org.eclipse.statet.r.ui.RLabelProvider;
 
 
@@ -41,7 +41,7 @@
 	private final int[] informationArgumentIdxs;
 	
 	
-	public RArgumentListContextInformation(final int offset, final IRMethod method) {
+	public RArgumentListContextInformation(final int offset, final RLangMethod method) {
 		this.offset= offset;
 		this.args= method.getArgsDefinition();
 		final StringBuilder sb= new StringBuilder();
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java
index 6d7d457..71176e2 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java
@@ -38,8 +38,8 @@
 import org.eclipse.statet.r.core.model.ArgsDefinition;
 import org.eclipse.statet.r.core.rsource.ast.FCall;
 import org.eclipse.statet.r.core.rsource.ast.FCall.Args;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
-import org.eclipse.statet.r.core.rsource.ast.RAst.FCallArgMatch;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
+import org.eclipse.statet.r.core.rsource.ast.RAsts.FCallArgMatch;
 import org.eclipse.statet.r.core.rsource.ast.RScanner;
 import org.eclipse.statet.r.core.source.RPartitionNodeScanner;
 import org.eclipse.statet.r.ui.editors.IRSourceEditor;
@@ -176,7 +176,7 @@
 		if (args != null) {
 			final int callArgIdx= getCurrentArgInFCall(args, offset);
 			if (callArgIdx >= 0) {
-				final FCallArgMatch match= RAst.matchArgs(args, this.info.getArgsDefinition());
+				final FCallArgMatch match= RAsts.matchArgs(args, this.info.getArgsDefinition());
 				final ArgsDefinition.Arg argDef= match.getArgDef(callArgIdx);
 				if (argDef != null) {
 					return argDef.index;
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RDocumentProvider.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RDocumentProvider.java
index 9c77334..479eb8b 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RDocumentProvider.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RDocumentProvider.java
@@ -28,19 +28,20 @@
 import org.eclipse.statet.ecommons.preferences.core.PreferenceAccess;
 import org.eclipse.statet.ecommons.preferences.core.util.PreferenceUtils;
 
-import org.eclipse.statet.ltk.core.LTK;
+import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.issues.core.Problem;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.LtkModels;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceAnnotationModel;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceDocumentProvider;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceProblemAnnotation;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.source.RDocumentSetupParticipant;
 import org.eclipse.statet.r.ui.editors.REditorBuild;
 
 
-public class RDocumentProvider extends SourceDocumentProvider<IRSourceUnit> implements Disposable {
+public class RDocumentProvider extends SourceDocumentProvider<RSourceUnit> implements Disposable {
 	
 	
 	private class ThisAnnotationModel extends SourceAnnotationModel {
@@ -111,12 +112,12 @@
 		if (fHandleTemporaryProblems != newHandleTemporaryProblems) {
 			fHandleTemporaryProblems = newHandleTemporaryProblems;
 			if (fHandleTemporaryProblems) {
-				RModel.getRModelManager().refresh(LTK.EDITOR_CONTEXT);
+				RModel.getRModelManager().refresh(Ltk.EDITOR_CONTEXT);
 			}
 			else {
-				final List<? extends ISourceUnit> sus = LTK.getSourceUnitManager().getOpenSourceUnits(
-						RModel.R_TYPE_ID, LTK.EDITOR_CONTEXT );
-				for (final ISourceUnit su : sus) {
+				final List<? extends SourceUnit> sus = LtkModels.getSourceUnitManager().getOpenSourceUnits(
+						RModel.R_TYPE_ID, Ltk.EDITOR_CONTEXT );
+				for (final SourceUnit su : sus) {
 					final IAnnotationModel model = getAnnotationModel(su);
 					if (model instanceof ThisAnnotationModel) {
 						((ThisAnnotationModel) model).clearProblems(null);
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RDoubleCommentAction.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RDoubleCommentAction.java
index 829c827..ff3b510 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RDoubleCommentAction.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RDoubleCommentAction.java
@@ -32,7 +32,7 @@
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
 import org.eclipse.statet.ltk.ui.LTKUI;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
-import org.eclipse.statet.r.core.IRCoreAccess;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 
 
@@ -45,10 +45,10 @@
 	
 	
 	private final ISourceEditor fEditor;
-	private final IRCoreAccess fCore;
+	private final RCoreAccess fCore;
 	
 	
-	public RDoubleCommentAction(final ISourceEditor editor, final IRCoreAccess core) {
+	public RDoubleCommentAction(final ISourceEditor editor, final RCoreAccess core) {
 		fEditor = editor;
 		fCore = core;
 		setId(ACTION_ID);
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditor.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditor.java
index 30339f7..93ef6ac 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditor.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditor.java
@@ -54,8 +54,8 @@
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
 import org.eclipse.statet.internal.r.ui.help.IRUIHelpContextIds;
 import org.eclipse.statet.ltk.ast.core.util.AstSelection;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.ltk.ui.LTKUI;
 import org.eclipse.statet.ltk.ui.sourceediting.AbstractMarkOccurrencesProvider;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditorAddon;
@@ -64,13 +64,13 @@
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor1OutlinePage;
 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.model.IRSourceUnit;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.rsource.ast.FDef;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RDocumentContentInfo;
 import org.eclipse.statet.r.launching.RCodeLaunching;
 import org.eclipse.statet.r.ui.RUI;
@@ -103,11 +103,11 @@
 		
 		
 		public MarkOccurrencesProvider(final SourceEditor1 editor) {
-			super(editor, IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT);
+			super(editor, RDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT);
 		}
 		
 		@Override
-		protected void doUpdate(final RunData run, final ISourceUnitModelInfo info,
+		protected void doUpdate(final RunData run, final SourceUnitModelInfo info,
 				final AstSelection astSelection, final ITextSelection orgSelection)
 				throws BadLocationException, BadPartitioningException, UnsupportedOperationException {
 			this.locator.run(run, info, astSelection, orgSelection);
@@ -144,7 +144,7 @@
 				REditorOptions.FOLDING_ENABLED_PREF,
 				REditorOptions.PREF_MARKOCCURRENCES_ENABLED );
 		
-		final IRCoreAccess initAccess= RCore.WORKBENCH_ACCESS;
+		final RCoreAccess initAccess= RCore.WORKBENCH_ACCESS;
 		this.rConfig= new RSourceViewerConfigurator(initAccess,
 				new RSourceViewerConfiguration(RDocumentContentInfo.INSTANCE, 0, this,
 						null, null, null ));
@@ -201,12 +201,12 @@
 	
 	
 	@Override
-	public IRSourceUnit getSourceUnit() {
-		return (IRSourceUnit) super.getSourceUnit();
+	public RSourceUnit getSourceUnit() {
+		return (RSourceUnit)super.getSourceUnit();
 	}
 	
 	@Override
-	public IRCoreAccess getRCoreAccess() {
+	public RCoreAccess getRCoreAccess() {
 		return this.rConfig.getRCoreAccess();
 	}
 	
@@ -214,7 +214,7 @@
 	protected void setupConfiguration(final IEditorInput newInput) {
 		super.setupConfiguration(newInput);
 		
-		final IRSourceUnit su= getSourceUnit();
+		final RSourceUnit su= getSourceUnit();
 		this.rConfig.setSource((su != null) ? su.getRCoreAccess() : RCore.WORKBENCH_ACCESS);
 	}
 	
@@ -276,7 +276,7 @@
 	@Override
 	protected void editorContextMenuAboutToShow(final IMenuManager m) {
 		super.editorContextMenuAboutToShow(m);
-		final IRSourceUnit su= getSourceUnit();
+		final RSourceUnit su= getSourceUnit();
 		
 		m.insertBefore(ADDITIONS_GROUP_ID, new Separator("search")); //$NON-NLS-1$
 		
@@ -300,7 +300,7 @@
 	}
 	
 	@Override
-	protected IRegion getRangeToReveal(final ISourceUnitModelInfo modelInfo, final ISourceStructElement element) {
+	protected IRegion getRangeToReveal(final SourceUnitModelInfo modelInfo, final SourceStructElement element) {
 		final FDef def= element.getAdapter(FDef.class);
 		if (def != null) {
 			final RAstNode cont= def.getContChild();
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorInformationProvider.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorInformationProvider.java
index 199f76d..5444f6e 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorInformationProvider.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorInformationProvider.java
@@ -31,7 +31,7 @@
 import org.eclipse.statet.internal.r.ui.rhelp.RHelpHover;
 import org.eclipse.statet.ltk.ui.sourceediting.EditorInformationProvider;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.AssistInvocationContext;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 import org.eclipse.statet.r.ui.editors.IRSourceEditor;
 import org.eclipse.statet.r.ui.sourceediting.RAssistInvocationContext;
@@ -63,9 +63,9 @@
 			final IRegion word= scanner.findRWord(offset, false, true);
 			if (word != null) {
 				final ITypedRegion partition= scanner.getPartition(word.getOffset());
-				if (IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(partition.getType())
-						|| partition.getType() == IRDocumentConstants.R_STRING_CONTENT_TYPE
-						|| partition.getType() == IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE) {
+				if (RDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(partition.getType())
+						|| partition.getType() == RDocumentConstants.R_STRING_CONTENT_TYPE
+						|| partition.getType() == RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE) {
 					return word;
 				}
 			}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTemplateCompletionComputer.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTemplateCompletionComputer.java
index 806c1d4..8dc3d72 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTemplateCompletionComputer.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTemplateCompletionComputer.java
@@ -30,7 +30,7 @@
 import org.eclipse.statet.ltk.ui.sourceediting.assist.AssistInvocationContext;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.TemplateCompletionComputer;
 import org.eclipse.statet.ltk.ui.templates.SourceEditorTemplateContext;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.ui.editors.templates.REditorContext;
 import org.eclipse.statet.r.ui.editors.templates.REditorTemplateContextType;
 
@@ -79,7 +79,7 @@
 			final AbstractDocument document= (AbstractDocument) context.getSourceViewer().getDocument();
 			final ITypedRegion partition= document.getPartition(
 					editor.getDocumentContentInfo().getPartitioning(), region.getStartOffset(), true );
-			if (partition.getType() == IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
+			if (partition.getType() == RDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
 				return getTypeRegistry().getContextType(REditorTemplateContextType.ROXYGEN_CONTEXTTYPE_ID);
 			}
 			else {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTemplatesPage.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTemplatesPage.java
index 7e74fd3..1cc8c8d 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTemplatesPage.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTemplatesPage.java
@@ -35,7 +35,7 @@
 import org.eclipse.statet.ltk.ui.sourceediting.assist.TemplateCompletionComputer;
 import org.eclipse.statet.ltk.ui.templates.config.AbstractEditorTemplatesPage;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RPartitionNodeType;
 import org.eclipse.statet.r.ui.editors.templates.REditorTemplateContextType;
 import org.eclipse.statet.r.ui.sourceediting.RTemplateSourceViewerConfigurator;
@@ -72,7 +72,7 @@
 		try {
 			final String partitionType= TextUtilities.getContentType(document,
 					getSourceEditor().getDocumentContentInfo().getPartitioning(), offset, true );
-			if (partitionType == IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
+			if (partitionType == RDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
 				return new String[] { REditorTemplateContextType.ROXYGEN_CONTEXTTYPE_ID };
 			}
 		}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTextHover.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTextHover.java
index 3e11f02..d88124e 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTextHover.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/REditorTextHover.java
@@ -25,7 +25,7 @@
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfiguration;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.AssistInvocationContext;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.InfoHoverDescriptor;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 import org.eclipse.statet.r.ui.editors.IRSourceEditor;
 import org.eclipse.statet.r.ui.sourceediting.RAssistInvocationContext;
@@ -54,16 +54,16 @@
 			final IRegion word= this.scanner.findRWord(offset, false, true);
 			if (word != null) {
 				final ITypedRegion partition= this.scanner.getPartition(word.getOffset());
-				if (IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(partition.getType())
-						|| partition.getType() == IRDocumentConstants.R_STRING_CONTENT_TYPE
-						|| partition.getType() == IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE) {
+				if (RDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(partition.getType())
+						|| partition.getType() == RDocumentConstants.R_STRING_CONTENT_TYPE
+						|| partition.getType() == RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE) {
 					return word;
 				}
 			}
 			final char c= document.getChar(offset);
 			if (c == '[') {
 				final ITypedRegion partition= this.scanner.getPartition(offset);
-				if (IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(partition.getType())) {
+				if (RDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(partition.getType())) {
 					return new Region(offset, 1);
 				}
 			}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RElementCompletionProposal.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RElementCompletionProposal.java
index e223ff9..080e9e1 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RElementCompletionProposal.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RElementCompletionProposal.java
@@ -44,13 +44,13 @@
 import org.eclipse.statet.ltk.ui.sourceediting.assist.ElementNameCompletionProposal;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.InfoHover;
 import org.eclipse.statet.nico.ui.console.InputSourceViewer;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCodeStyleSettings;
 import org.eclipse.statet.r.core.RCore;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.model.ArgsDefinition;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRMethod;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RLangMethod;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 import org.eclipse.statet.r.ui.RUI;
 import org.eclipse.statet.r.ui.sourceediting.RAssistInvocationContext;
@@ -62,7 +62,7 @@
 
 @NonNullByDefault
 public class RElementCompletionProposal
-		extends ElementNameCompletionProposal<RAssistInvocationContext, IRElement>
+		extends ElementNameCompletionProposal<RAssistInvocationContext, RElement>
 		implements ICompletionProposalExtension5 {
 	
 	
@@ -74,7 +74,7 @@
 		
 		public ElementName replacementName;
 		
-		public IRElement element;
+		public RElement element;
 		
 		
 		public RElementProposalParameters(final RAssistInvocationContext context, final int replacementOffset,
@@ -179,7 +179,7 @@
 			applyData.clearSelection();
 			applyData.setContextInformation(new RArgumentListContextInformation(
 					getReplacementOffset(), // allow negative offsets
-					(IRMethod) getElement() ));
+					(RLangMethod)getElement() ));
 		}
 		
 	}
@@ -229,13 +229,13 @@
 	}
 	
 	
-	protected IRCoreAccess getRCoreAccess() {
+	protected RCoreAccess getRCoreAccess() {
 		return getInvocationContext().getEditor().getRCoreAccess();
 	}
 	
 	protected int getMode() {
 		return (getElement() != null
-						&& (getElement().getElementType() & IRElement.MASK_C1) == IRElement.C1_METHOD) ?
+						&& (getElement().getElementType() & RElement.MASK_C1) == RElement.C1_METHOD) ?
 				FUNCTION : 0;
 	}
 	
@@ -323,7 +323,7 @@
 		
 		case FUNCTION:
 			subMode= 1;
-			final IRMethod rMethod= (IRMethod) getElement();
+			final RLangMethod rMethod= (RLangMethod) getElement();
 			
 			if (replacementOffset+replacementLength < document.getLength()-1
 					&& document.getChar(replacementOffset+replacementLength) == '(') {
@@ -445,7 +445,7 @@
 			}
 		
 		default: {
-				final IRElement element= getElement();
+				final RElement element= getElement();
 				if (element == null) {
 					return null;
 				}
@@ -453,7 +453,7 @@
 				final RElementName elementName= element.getElementName();
 				if (elementName.getType() == RElementName.MAIN_DEFAULT) {
 					RElementName scope= elementName.getScope();
-					if (scope == null && (element.getModelParent() instanceof IRElement)) {
+					if (scope == null && (element.getModelParent() instanceof RElement)) {
 						scope= element.getModelParent().getElementName();
 					}
 					if (scope == null || !RElementName.isPackageFacetScopeType(scope.getType())) {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RElementHyperlinkDetector.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RElementHyperlinkDetector.java
index 6e70a4e..648286c 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RElementHyperlinkDetector.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RElementHyperlinkDetector.java
@@ -23,8 +23,8 @@
 import org.eclipse.jface.text.hyperlink.IHyperlink;
 
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RElementAccess;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.ui.sourceediting.ROpenDeclarationHandler;
 
 
@@ -46,7 +46,7 @@
 		final List<IHyperlink> hyperlinks= new ArrayList<>(4);
 		final RElementAccess access= ROpenDeclarationHandler.searchAccess(editor, region);
 		if (access != null) {
-			hyperlinks.add(new OpenRElementHyperlink(editor, (IRSourceUnit) editor.getSourceUnit(), access));
+			hyperlinks.add(new OpenRElementHyperlink(editor, (RSourceUnit)editor.getSourceUnit(), access));
 		}
 		
 		if (!hyperlinks.isEmpty()) {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RFileHyperlinkDetector.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RFileHyperlinkDetector.java
index e802b90..234cc12 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RFileHyperlinkDetector.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RFileHyperlinkDetector.java
@@ -35,10 +35,10 @@
 import org.eclipse.statet.ecommons.io.FileUtil;
 import org.eclipse.statet.ecommons.text.ui.OpenFileHyperlink;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 
 
 public class RFileHyperlinkDetector extends AbstractHyperlinkDetector {
@@ -65,8 +65,8 @@
 			final ITypedRegion partition= TextUtilities.getPartition(document,
 					editor.getDocumentContentInfo().getPartitioning(), region.getOffset(), false );
 			if (partition != null && partition.getLength() > 3) {
-				if (partition.getType().equals(IRDocumentConstants.R_COMMENT_CONTENT_TYPE)
-						|| partition.getType().equals(IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE) ) {
+				if (partition.getType().equals(RDocumentConstants.R_COMMENT_CONTENT_TYPE)
+						|| partition.getType().equals(RDocumentConstants.R_ROXYGEN_CONTENT_TYPE) ) {
 					boolean quote= false;
 					start= region.getOffset();
 					{	final int bound= partition.getOffset()+1;
@@ -99,7 +99,7 @@
 						}
 					}
 				}
-				else if (partition.getType().equals(IRDocumentConstants.R_STRING_CONTENT_TYPE)) {
+				else if (partition.getType().equals(RDocumentConstants.R_STRING_CONTENT_TYPE)) {
 					start= partition.getOffset()+1;
 					stop= partition.getOffset()+partition.getLength();
 					if (document.getChar(stop-1) == document.getChar(partition.getOffset())) {
@@ -112,9 +112,9 @@
 				}
 				IContainer relativeBase= null;
 				
-				final ISourceUnit su= editor.getSourceUnit();
-				if (su instanceof IWorkspaceSourceUnit) {
-					final IResource resource= ((IWorkspaceSourceUnit) su).getResource();
+				final SourceUnit su= editor.getSourceUnit();
+				if (su instanceof WorkspaceSourceUnit) {
+					final IResource resource= ((WorkspaceSourceUnit)su).getResource();
 //					final IRProject rProject= RProjects.getRProject(resource.getProject());
 //					if (rProject != null) {
 //						relativeBase= rProject.getRawBuildpath();
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/ROutlinePage.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/ROutlinePage.java
index f94cd8a..100c12a 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/ROutlinePage.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/ROutlinePage.java
@@ -39,10 +39,11 @@
 import org.eclipse.statet.base.ui.IStatetUIMenuIds;
 import org.eclipse.statet.internal.r.ui.RUIMessages;
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.ltk.ui.ElementNameComparator;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor2OutlinePage;
-import org.eclipse.statet.r.core.model.IRElement;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.r.core.refactoring.RRefactoring;
@@ -118,21 +119,21 @@
 		
 	}
 	
-	private class ContentFilter implements IModelElement.Filter {
+	private class ContentFilter implements LtkModelElementFilter {
 		
 		private boolean hideCommonVariables;
 		private boolean hideLocalDefinitions;
 		
 		@Override
-		public boolean include(final IModelElement element) {
+		public boolean include(final LtkModelElement element) {
 			switch (element.getElementType()) {
-			case IRElement.R_ARGUMENT:
+			case RElement.R_ARGUMENT:
 				return false;
-			case IRElement.R_GENERAL_VARIABLE:
+			case RElement.R_GENERAL_VARIABLE:
 				return !this.hideCommonVariables;
-			case IRElement.R_GENERAL_LOCAL_VARIABLE:
+			case RElement.R_GENERAL_LOCAL_VARIABLE:
 				return !this.hideCommonVariables && !this.hideLocalDefinitions;
-			case IRElement.R_COMMON_LOCAL_FUNCTION:
+			case RElement.R_COMMON_LOCAL_FUNCTION:
 				return !this.hideLocalDefinitions;
 			default:
 				return true;
@@ -156,7 +157,7 @@
 	}
 	
 	@Override
-	protected IModelElement.Filter getContentFilter() {
+	protected LtkModelElementFilter getContentFilter() {
 		return this.fFilter;
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RQuickOutlineInformationControl.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RQuickOutlineInformationControl.java
index 28592b6..079eb0f 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RQuickOutlineInformationControl.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RQuickOutlineInformationControl.java
@@ -21,10 +21,10 @@
 import org.eclipse.statet.ecommons.ui.content.ITextElementFilter;
 import org.eclipse.statet.ecommons.ui.content.TextElementFilter;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement.Filter;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.ltk.ui.sourceediting.QuickOutlineInformationControl;
-import org.eclipse.statet.r.core.model.IRElement;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.r.ui.RLabelProvider;
 import org.eclipse.statet.r.ui.sourceediting.ROpenDeclaration;
@@ -34,12 +34,12 @@
 public class RQuickOutlineInformationControl extends QuickOutlineInformationControl {
 	
 	
-	private class ContentFilter implements IModelElement.Filter {
+	private class ContentFilter implements LtkModelElementFilter {
 		
 		@Override
-		public boolean include(final IModelElement element) {
+		public boolean include(final LtkModelElement element) {
 			switch (element.getElementType()) {
-			case IRElement.R_ARGUMENT:
+			case RElement.R_ARGUMENT:
 				return false;
 			default:
 				return true;
@@ -63,7 +63,7 @@
 	}
 	
 	@Override
-	protected Filter getContentFilter() {
+	protected LtkModelElementFilter getContentFilter() {
 		return this.contentFilter;
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RQuickOutlineInformationProvider.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RQuickOutlineInformationProvider.java
index 050fda5..6e03dbf 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RQuickOutlineInformationProvider.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RQuickOutlineInformationProvider.java
@@ -26,7 +26,7 @@
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.sourceediting.QuickInformationProvider;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 
 
@@ -52,9 +52,9 @@
 			final IRegion word = this.scanner.findRWord(offset, false, true);
 			if (word != null) {
 				final ITypedRegion partition = this.scanner.getPartition(word.getOffset());
-				if (IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(partition.getType())
-						|| partition.getType() == IRDocumentConstants.R_STRING_CONTENT_TYPE
-						|| partition.getType() == IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE) {
+				if (RDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(partition.getType())
+						|| partition.getType() == RDocumentConstants.R_STRING_CONTENT_TYPE
+						|| partition.getType() == RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE) {
 					return word;
 				}
 			}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RQuickRefactoringComputer.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RQuickRefactoringComputer.java
index 0d799aa..48874f4 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RQuickRefactoringComputer.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RQuickRefactoringComputer.java
@@ -26,16 +26,16 @@
 import org.eclipse.statet.internal.r.ui.correction.RLinkedNamesAssistProposal;
 import org.eclipse.statet.internal.r.ui.correction.RenameInRegionAssistProposal;
 import org.eclipse.statet.internal.r.ui.correction.RenameInWorkspaceAssistProposal;
-import org.eclipse.statet.ltk.core.LTKUtils;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
+import org.eclipse.statet.ltk.model.core.LtkModelUtils;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.AssistInvocationContext;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.AssistProposalCollector;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.QuickAssistComputer;
-import org.eclipse.statet.r.core.model.IRCompositeSourceElement;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.RCompositeSourceElement;
 import org.eclipse.statet.r.core.model.RElementAccess;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 
@@ -78,7 +78,7 @@
 				candidate = candidate.getRParent();
 			}
 		}
-		else if (context.getLength() > 0 && context.getSourceUnit() instanceof IRSourceUnit) {
+		else if (context.getLength() > 0 && context.getSourceUnit() instanceof RSourceUnit) {
 			proposals.add(new RenameInRegionAssistProposal(context));
 		}
 	}
@@ -93,10 +93,10 @@
 		
 		if (allAccess.size() > 2) {
 			TextRegion chunk= null;
-			{	final ISourceStructElement sourceElement= context.getModelInfo().getSourceElement();
-				if (sourceElement instanceof IRCompositeSourceElement) {
-					final List<? extends IRLangSourceElement> elements= ((IRCompositeSourceElement) sourceElement).getCompositeElements();
-					final IRLangSourceElement element= LTKUtils.getCoveringSourceElement(elements, access.getNameNode().getStartOffset());
+			{	final SourceStructElement sourceElement= context.getModelInfo().getSourceElement();
+				if (sourceElement instanceof RCompositeSourceElement) {
+					final List<? extends RLangSourceElement> elements= ((RCompositeSourceElement) sourceElement).getCompositeElements();
+					final RLangSourceElement element= LtkModelUtils.getCoveringSourceElement(elements, access.getNameNode().getStartOffset());
 					if (element != null) {
 						chunk= element.getSourceRange();
 					}
@@ -129,7 +129,7 @@
 				}
 			}
 		}
-		if (context.getSourceUnit() instanceof IRWorkspaceSourceUnit) {
+		if (context.getSourceUnit() instanceof RWorkspaceSourceUnit) {
 			proposals.add(new RenameInWorkspaceAssistProposal(context, access.getNameNode()));
 		}
 	}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RStripCommentsHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RStripCommentsHandler.java
index 21fc7cd..dcc205e 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RStripCommentsHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RStripCommentsHandler.java
@@ -32,10 +32,10 @@
 
 import org.eclipse.statet.internal.r.ui.RUIMessages;
 import org.eclipse.statet.ltk.ast.core.AstNode;
-import org.eclipse.statet.ltk.model.core.IModelManager;
-import org.eclipse.statet.ltk.model.core.SourceDocumentRunnable;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
+import org.eclipse.statet.ltk.model.core.ModelManager;
+import org.eclipse.statet.ltk.model.core.element.SourceDocumentRunnable;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorProgressHandler;
 import org.eclipse.statet.r.core.rsource.ast.SourceComponent;
@@ -61,10 +61,10 @@
 	}
 	
 	@Override
-	protected void doExecute(final ISourceEditor editor, final ISourceUnit su,
+	protected void doExecute(final ISourceEditor editor, final SourceUnit su,
 			final ITextSelection selection, final IProgressMonitor monitor) throws Exception {
 		final AbstractDocument document = su.getDocument(monitor);
-		final ISourceUnitModelInfo model = su.getModelInfo(null, IModelManager.MODEL_FILE, monitor);
+		final SourceUnitModelInfo model = su.getModelInfo(null, ModelManager.MODEL_FILE, monitor);
 		final RHeuristicTokenScanner scanner= RHeuristicTokenScanner.create(editor.getDocumentContentInfo());
 		
 		if (model == null || scanner == null || monitor.isCanceled()) {
@@ -106,7 +106,7 @@
 		}
 		
 		if (edits.getChildrenSize() > 0) {
-			su.syncExec(new SourceDocumentRunnable(document, model.getStamp().getSourceStamp(),
+			su.syncExec(new SourceDocumentRunnable(document, model.getStamp().getContentStamp(),
 					DocumentRewriteSessionType.SEQUENTIAL ) {
 				@Override
 				public void run() throws InvocationTargetException {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RdDocumentProvider.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RdDocumentProvider.java
index 4259827..8a88809 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RdDocumentProvider.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RdDocumentProvider.java
@@ -18,7 +18,7 @@
 import org.eclipse.ui.editors.text.TextFileDocumentProvider;
 import org.eclipse.ui.texteditor.IDocumentProvider;
 
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.ui.editors.RdDocumentSetupParticipant;
 
 
@@ -26,7 +26,7 @@
 	
 	
 	public RdDocumentProvider() {
-		final IDocumentProvider provider = new ForwardingDocumentProvider(IRDocumentConstants.RDOC_PARTITIONING,
+		final IDocumentProvider provider = new ForwardingDocumentProvider(RDocumentConstants.RDOC_PARTITIONING,
 				new RdDocumentSetupParticipant(), new TextFileDocumentProvider());
 		setParentDocumentProvider(provider);
 	}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/RdCodeTemplatesProvider.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/RdCodeTemplatesProvider.java
index 9a9417e..2e5e79a 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/RdCodeTemplatesProvider.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/preferences/RdCodeTemplatesProvider.java
@@ -24,7 +24,7 @@
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfiguration;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
-import org.eclipse.statet.r.core.IRCoreAccess;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.RProjects;
 import org.eclipse.statet.r.ui.editors.RdSourceViewerConfiguration;
 import org.eclipse.statet.r.ui.editors.RdSourceViewerConfigurator;
@@ -40,7 +40,7 @@
 	public static class RdTemplateConfigurator extends RdSourceViewerConfigurator {
 		
 		public RdTemplateConfigurator(
-				final IRCoreAccess rCoreAccess,
+				final RCoreAccess rCoreAccess,
 				final TemplateVariableProcessor processor) {
 			super(rCoreAccess, new RdSourceViewerConfiguration(SourceEditorViewerConfiguration.TEMPLATE_MODE) {
 				@Override
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractFunctionHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractFunctionHandler.java
index 2a4aa78..7442d86 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractFunctionHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractFunctionHandler.java
@@ -23,11 +23,11 @@
 
 import org.eclipse.statet.ecommons.ui.workbench.WorkbenchUIUtils;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.refactoring.RefactoringSaveHelper;
 import org.eclipse.statet.ltk.ui.refactoring.RefactoringWizardExecutionHelper;
 import org.eclipse.statet.ltk.ui.util.LTKSelectionUtils;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.refactoring.ExtractFunctionRefactoring;
 
 
@@ -45,14 +45,14 @@
 		if (selection == null || activePart == null) {
 			return null;
 		}
-		final ISourceUnit su= LTKSelectionUtils.getSingleSourceUnit(activePart);
-		if (!(su instanceof IRSourceUnit)) {
+		final SourceUnit su= LTKSelectionUtils.getSingleSourceUnit(activePart);
+		if (!(su instanceof RSourceUnit)) {
 			return null;
 		}
 		ExtractFunctionRefactoring refactoring= null;
 		if (selection instanceof ITextSelection) {
 			final ITextSelection textSelection= (ITextSelection) selection;
-			refactoring= new ExtractFunctionRefactoring((IRSourceUnit) su,
+			refactoring= new ExtractFunctionRefactoring((RSourceUnit)su,
 					LTKSelectionUtils.toTextRegion(textSelection) );
 		}
 		if (refactoring != null) {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractTempHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractTempHandler.java
index 6a4e503..dad1487 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractTempHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/ExtractTempHandler.java
@@ -23,11 +23,11 @@
 
 import org.eclipse.statet.ecommons.ui.workbench.WorkbenchUIUtils;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.refactoring.RefactoringSaveHelper;
 import org.eclipse.statet.ltk.ui.refactoring.RefactoringWizardExecutionHelper;
 import org.eclipse.statet.ltk.ui.util.LTKSelectionUtils;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.refactoring.ExtractTempRefactoring;
 
 
@@ -45,14 +45,14 @@
 		if (selection == null || activePart == null) {
 			return null;
 		}
-		final ISourceUnit su= LTKSelectionUtils.getSingleSourceUnit(activePart);
-		if (!(su instanceof IRSourceUnit)) {
+		final SourceUnit su= LTKSelectionUtils.getSingleSourceUnit(activePart);
+		if (!(su instanceof RSourceUnit)) {
 			return null;
 		}
 		ExtractTempRefactoring refactoring= null;
 		if (selection instanceof ITextSelection) {
 			final ITextSelection textSelection= (ITextSelection) selection;
-			refactoring= new ExtractTempRefactoring((IRSourceUnit) su,
+			refactoring= new ExtractTempRefactoring((RSourceUnit)su,
 					LTKSelectionUtils.toTextRegion(textSelection) );
 		}
 		if (refactoring != null) {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/FunctionToS4MethodHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/FunctionToS4MethodHandler.java
index d5c61fe..22d44c2 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/FunctionToS4MethodHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/FunctionToS4MethodHandler.java
@@ -23,11 +23,11 @@
 
 import org.eclipse.statet.ecommons.ui.workbench.WorkbenchUIUtils;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.refactoring.RefactoringSaveHelper;
 import org.eclipse.statet.ltk.ui.refactoring.RefactoringWizardExecutionHelper;
 import org.eclipse.statet.ltk.ui.util.LTKSelectionUtils;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.refactoring.FunctionToS4MethodRefactoring;
 
 
@@ -45,14 +45,14 @@
 		if (selection == null || activePart == null) {
 			return null;
 		}
-		final ISourceUnit su= LTKSelectionUtils.getSingleSourceUnit(activePart);
-		if (!(su instanceof IRSourceUnit)) {
+		final SourceUnit su= LTKSelectionUtils.getSingleSourceUnit(activePart);
+		if (!(su instanceof RSourceUnit)) {
 			return null;
 		}
 		FunctionToS4MethodRefactoring refactoring= null;
 		if (selection instanceof ITextSelection) {
 			final ITextSelection textSelection= (ITextSelection) selection;
-			refactoring= new FunctionToS4MethodRefactoring((IRSourceUnit) su,
+			refactoring= new FunctionToS4MethodRefactoring((RSourceUnit)su,
 					LTKSelectionUtils.toTextRegion(textSelection) );
 		}
 		if (refactoring != null) {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/InlineTempHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/InlineTempHandler.java
index eaf498c..26ecef6 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/InlineTempHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/InlineTempHandler.java
@@ -23,11 +23,11 @@
 
 import org.eclipse.statet.ecommons.ui.workbench.WorkbenchUIUtils;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.refactoring.RefactoringSaveHelper;
 import org.eclipse.statet.ltk.ui.refactoring.RefactoringWizardExecutionHelper;
 import org.eclipse.statet.ltk.ui.util.LTKSelectionUtils;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.refactoring.InlineTempRefactoring;
 
 
@@ -45,14 +45,14 @@
 		if (selection == null || activePart == null) {
 			return null;
 		}
-		final ISourceUnit su= LTKSelectionUtils.getSingleSourceUnit(activePart);
-		if (!(su instanceof IRSourceUnit)) {
+		final SourceUnit su= LTKSelectionUtils.getSingleSourceUnit(activePart);
+		if (!(su instanceof RSourceUnit)) {
 			return null;
 		}
 		InlineTempRefactoring refactoring= null;
 		if (selection instanceof ITextSelection) {
 			final ITextSelection textSelection= (ITextSelection) selection;
-			refactoring= new InlineTempRefactoring((IRSourceUnit) su,
+			refactoring= new InlineTempRefactoring((RSourceUnit)su,
 					LTKSelectionUtils.toTextRegion(textSelection) );
 		}
 		if (refactoring != null) {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInRegionHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInRegionHandler.java
index f15503a..fd02090 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInRegionHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInRegionHandler.java
@@ -23,11 +23,11 @@
 
 import org.eclipse.statet.ecommons.ui.workbench.WorkbenchUIUtils;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.refactoring.RefactoringSaveHelper;
 import org.eclipse.statet.ltk.ui.refactoring.RefactoringWizardExecutionHelper;
 import org.eclipse.statet.ltk.ui.util.LTKSelectionUtils;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.refactoring.RenameInRegionRefactoring;
 
 
@@ -45,14 +45,14 @@
 		if (selection == null || activePart == null) {
 			return null;
 		}
-		final ISourceUnit su= LTKSelectionUtils.getSingleSourceUnit(activePart);
-		if (!(su instanceof IRSourceUnit)) {
+		final SourceUnit su= LTKSelectionUtils.getSingleSourceUnit(activePart);
+		if (!(su instanceof RSourceUnit)) {
 			return null;
 		}
 		RenameInRegionRefactoring refactoring= null;
 		if (selection instanceof ITextSelection) {
 			final ITextSelection textSelection= (ITextSelection) selection;
-			refactoring= new RenameInRegionRefactoring((IRSourceUnit) su,
+			refactoring= new RenameInRegionRefactoring((RSourceUnit)su,
 					LTKSelectionUtils.toTextRegion(textSelection) );
 		}
 		if (refactoring != null) {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInRegionWizard.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInRegionWizard.java
index 02b4b78..4435158 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInRegionWizard.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInRegionWizard.java
@@ -52,9 +52,9 @@
 import org.eclipse.statet.ecommons.ui.viewers.ViewerUtils.TreeComposite;
 
 import org.eclipse.statet.internal.r.ui.RIdentifierCellValidator;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRFrameInSource;
+import org.eclipse.statet.r.core.model.RElement;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RSourceFrame;
 import org.eclipse.statet.r.core.refactoring.RenameInRegionRefactoring;
 import org.eclipse.statet.r.core.refactoring.RenameInRegionRefactoring.Variable;
 import org.eclipse.statet.r.ui.RLabelProvider;
@@ -122,8 +122,8 @@
 				public boolean select(final Viewer viewer, final Object parentElement, final Object element) {
 					if (element instanceof Variable) {
 						final Variable variable= (Variable) element;
-						if (variable.getParent() instanceof IRFrameInSource) {
-							final IRFrameInSource frame= (IRFrameInSource) variable.getParent();
+						if (variable.getParent() instanceof RSourceFrame) {
+							final RSourceFrame frame= (RSourceFrame)variable.getParent();
 							return frame.isResolved(variable.getName());
 						}
 					}
@@ -229,10 +229,10 @@
 					public void update(final ViewerCell cell) {
 						cell.setBackground(null);
 						final Object element= cell.getElement();
-						if (element instanceof IRFrame) {
+						if (element instanceof RFrame) {
 							cell.setFont(null);
-							final IRFrame frame= (IRFrame) element;
-							final List<? extends IRElement> modelElements= frame.getModelElements();
+							final RFrame frame= (RFrame) element;
+							final List<? extends RElement> modelElements= frame.getModelElements();
 							cell.setImage(null);
 							if (modelElements.size() > 0) {
 								this.fFrameLabelProvider.update(cell, modelElements.get(0));
@@ -320,10 +320,10 @@
 			ViewerUtils.installDefaultEditBehaviour(table.viewer);
 			
 			table.viewer.setContentProvider(new ITreeContentProvider() {
-				private Map<IRFrame, Map<String, Variable>> fVariables;
+				private Map<RFrame, Map<String, Variable>> fVariables;
 				@Override
 				public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
-					this.fVariables= (Map<IRFrame, Map<String, Variable>>) newInput;
+					this.fVariables= (Map<RFrame, Map<String, Variable>>)newInput;
 				}
 				@Override
 				public Object[] getElements(final Object inputElement) {
@@ -338,7 +338,7 @@
 				}
 				@Override
 				public boolean hasChildren(final Object element) {
-					if (element instanceof IRFrame) {
+					if (element instanceof RFrame) {
 						return true;
 					}
 					if (element instanceof Variable) {
@@ -348,7 +348,7 @@
 				}
 				@Override
 				public Object[] getChildren(final Object parentElement) {
-					if (parentElement instanceof IRFrame) {
+					if (parentElement instanceof RFrame) {
 						return this.fVariables.get(parentElement).values().toArray();
 					}
 					if (parentElement instanceof Variable) {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInWorkspaceHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInWorkspaceHandler.java
index 1600c65..25576c7 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInWorkspaceHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/refactoring/RenameInWorkspaceHandler.java
@@ -23,11 +23,11 @@
 
 import org.eclipse.statet.ecommons.ui.workbench.WorkbenchUIUtils;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.refactoring.RefactoringSaveHelper;
 import org.eclipse.statet.ltk.ui.refactoring.RefactoringWizardExecutionHelper;
 import org.eclipse.statet.ltk.ui.util.LTKSelectionUtils;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.refactoring.RenameInWorkspaceRefactoring;
 
 
@@ -45,14 +45,14 @@
 		if (selection == null || activePart == null) {
 			return null;
 		}
-		final ISourceUnit su= LTKSelectionUtils.getSingleSourceUnit(activePart);
-		if (!(su instanceof IRWorkspaceSourceUnit)) {
+		final SourceUnit su= LTKSelectionUtils.getSingleSourceUnit(activePart);
+		if (!(su instanceof RWorkspaceSourceUnit)) {
 			return null;
 		}
 		RenameInWorkspaceRefactoring refactoring= null;
 		if (selection instanceof ITextSelection) {
 			final ITextSelection textSelection= (ITextSelection) selection;
-			refactoring= new RenameInWorkspaceRefactoring((IRWorkspaceSourceUnit) su,
+			refactoring= new RenameInWorkspaceRefactoring((RWorkspaceSourceUnit) su,
 					LTKSelectionUtils.toTextRegion(textSelection) );
 		}
 		if (refactoring != null) {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpHover.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpHover.java
index 02630a2..87f3520 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpHover.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpHover.java
@@ -34,8 +34,8 @@
 import org.eclipse.statet.ltk.ui.sourceediting.assist.AssistInvocationContext;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.InfoHover;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.rsource.ast.FCall;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
@@ -70,8 +70,8 @@
 		if (!(astSelection.getCovering() instanceof RAstNode)) {
 			return null;
 		}
-		final IRSourceUnit rSourceUnit= (context.getSourceUnit() instanceof IRSourceUnit) ?
-				(IRSourceUnit) context.getSourceUnit() : null;
+		final RSourceUnit rSourceUnit= (context.getSourceUnit() instanceof RSourceUnit) ?
+				(RSourceUnit)context.getSourceUnit() : null;
 		
 		final RAstNode rNode= (RAstNode) astSelection.getCovering();
 		RElementName name= RHelpLtkUI.searchName(rNode, context, true);
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpLtkUI.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpLtkUI.java
index 486fb62..1e48143 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpLtkUI.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpLtkUI.java
@@ -25,14 +25,14 @@
 import org.eclipse.statet.jcommons.status.StatusException;
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRFrameInSource;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceFrame;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.rsource.ast.FCall;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
@@ -50,9 +50,9 @@
 	public static final String INFO_TARGET= "info"; //$NON-NLS-1$
 	
 	
-	public static REnvHelp getEnvHelp(final @Nullable IRSourceUnit sourceUnit)
+	public static REnvHelp getEnvHelp(final @Nullable RSourceUnit sourceUnit)
 			throws StatusException {
-		final IRCoreAccess rCoreAccess= (sourceUnit != null) ?
+		final RCoreAccess rCoreAccess= (sourceUnit != null) ?
 				sourceUnit.getRCoreAccess() : RCore.WORKBENCH_ACCESS;
 		REnv rEnv= rCoreAccess.getREnv();
 		if (rEnv == null) {
@@ -63,10 +63,10 @@
 	
 	
 	public static @Nullable Object searchTopicObject1(final REnvHelp help, final String topic,
-			final @Nullable RAstNode covering, final @Nullable IRSourceUnit sourceUnit)
+			final @Nullable RAstNode covering, final @Nullable RSourceUnit sourceUnit)
 			throws CoreException {
 		if (covering != null) {
-			final IRFrameInSource frame= RModel.searchFrame(covering);
+			final RSourceFrame frame= RModel.searchFrame(covering);
 			if (frame != null) {
 				final RHelpPage page= searchFrames(topic,
 						RModel.createDirectFrameList(frame), help );
@@ -98,12 +98,12 @@
 	}
 	
 	private static @Nullable RHelpPage searchFrames(final String topic,
-			final @Nullable List<IRFrame> frames, final REnvHelp help) {
+			final @Nullable List<RFrame> frames, final REnvHelp help) {
 		if (frames == null) {
 			return null;
 		}
-		for (final IRFrame frame : frames) {
-			if (frame.getFrameType() == IRFrame.PACKAGE) {
+		for (final RFrame frame : frames) {
+			if (frame.getFrameType() == RFrame.PACKAGE) {
 				final RPkgHelp pkgHelp= help.getPkgHelp(frame.getElementName().getSegmentName());
 				if (pkgHelp != null) {
 					final RHelpPage page= pkgHelp.getPageForTopic(topic);
@@ -128,8 +128,8 @@
 			for (final Object attachment : attachments) {
 				if (attachment instanceof RElementAccess) {
 					access= (RElementAccess)attachment;
-					final IRFrame frame= access.getFrame();
-					if ((frame != null && frame.getFrameType() != IRFrame.FUNCTION)
+					final RFrame frame= access.getFrame();
+					if ((frame != null && frame.getFrameType() != RFrame.FUNCTION)
 							|| (RElementName.isPackageFacetScopeType(access.getType())) ) {
 						final RElementName e= getElementAccessOfRegion(access, region);
 						if (e != null) {
@@ -153,9 +153,9 @@
 					for (final Object attachment : attachments) {
 						if (attachment instanceof RElementAccess) {
 							final RElementAccess access= (RElementAccess) attachment;
-							final IRFrame frame= access.getFrame();
+							final RFrame frame= access.getFrame();
 							if (access.getNode() == fcall
-									&& frame != null && frame.getFrameType() != IRFrame.FUNCTION
+									&& frame != null && frame.getFrameType() != RFrame.FUNCTION
 									&& access.getNextSegment() == null) {
 								final RElementName fName= RElementName.normalize(access);
 								if (RElementName.isRegularMainType(fName.getType())) {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpSearchInputPage.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpSearchInputPage.java
index fc782af..0bfebc7 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpSearchInputPage.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpSearchInputPage.java
@@ -56,7 +56,7 @@
 import org.eclipse.statet.internal.r.ui.REnvSelectionComposite;
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
 import org.eclipse.statet.internal.r.ui.help.IRUIHelpContextIds;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
 import org.eclipse.statet.r.core.RCore;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.rhelp.core.REnvHelp;
@@ -486,8 +486,8 @@
 		}
 		if (selection instanceof IStructuredSelection) {
 			final Object firstElement= ((IStructuredSelection) selection).getFirstElement();
-			if (firstElement instanceof IModelElement) {
-				final IModelElement element= (IModelElement) firstElement;
+			if (firstElement instanceof LtkModelElement) {
+				final LtkModelElement element= (LtkModelElement)firstElement;
 				if (element.getModelTypeId() == RModel.R_TYPE_ID
 						&& element.getElementName().getSegmentName() != null) {
 					this.searchTextControl.setText(element.getElementName().getDisplayName());
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpView.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpView.java
index c36d4cd..9c87ada 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpView.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpView.java
@@ -88,9 +88,9 @@
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor1;
 import org.eclipse.statet.ltk.ui.util.LTKSelectionUtils;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.launching.RCodeLaunching;
 import org.eclipse.statet.r.ui.RUI;
@@ -477,9 +477,9 @@
 		}
 		try {
 			if (state.getInputElement().getModelTypeId() == RModel.R_TYPE_ID
-					|| state.getInputElement() instanceof IRSourceUnit) {
+					|| state.getInputElement() instanceof RSourceUnit) {
 				final AstSelection astSelection= state.getAstSelection();
-				final IRSourceUnit rSourceUnit= (IRSourceUnit) state.getInputElement();
+				final RSourceUnit rSourceUnit= (RSourceUnit)state.getInputElement();
 				
 				final ISelection selection= state.getSelection();
 				if (astSelection != null && selection instanceof ITextSelection) {
@@ -515,7 +515,7 @@
 	}
 	
 	private boolean doShow1(final RequestKey request,
-			final @Nullable IRSourceUnit rSourceUnit, final RAstNode rNode, final RElementName name) {
+			final @Nullable RSourceUnit rSourceUnit, final RAstNode rNode, final RElementName name) {
 		final REnvHelp help;
 		Object helpObject= null;
 		try {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementMatch.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementMatch.java
index 0e31699..6f1d32e 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementMatch.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementMatch.java
@@ -18,16 +18,16 @@
 
 import org.eclipse.statet.ecommons.workbench.search.ui.LineElement;
 
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 
 
 public class RElementMatch extends Match {
 	
 	
-	private final LineElement<IRSourceUnit> group;
+	private final LineElement<RSourceUnit> group;
 	
 	
-	public RElementMatch(final LineElement<IRSourceUnit> group,
+	public RElementMatch(final LineElement<RSourceUnit> group,
 			final int offset, final int length,
 			final boolean isWriteAccess) {
 		super(group.getElement(), UNIT_CHARACTER, offset, length);
@@ -36,7 +36,7 @@
 	}
 	
 	
-	public LineElement<IRSourceUnit> getMatchGroup() {
+	public LineElement<RSourceUnit> getMatchGroup() {
 		return this.group;
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearch.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearch.java
index eff53a7..554aee6 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearch.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearch.java
@@ -28,18 +28,18 @@
 import org.eclipse.statet.ecommons.workbench.search.ui.LineElement;
 
 import org.eclipse.statet.ltk.core.SourceContent;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.r.core.RProject;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRFrameInSource;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRModelManager;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RModelManager;
+import org.eclipse.statet.r.core.model.RSourceFrame;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 import org.eclipse.statet.r.core.refactoring.RElementSearchProcessor;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 
 
@@ -54,7 +54,7 @@
 	
 	
 	public RElementSearch(final RElementName name,
-			final IRSourceUnit sourceUnit, final RElementAccess mainAccess,
+			final RSourceUnit sourceUnit, final RElementAccess mainAccess,
 			final Mode mode, final boolean searchWrite) {
 		super(name, sourceUnit, mainAccess, mode, ALLOW_SUB_NAMEDPART);
 		
@@ -74,42 +74,42 @@
 	}
 	
 	@Override
-	protected void process(final RProject project, final List<ISourceUnit> sus,
+	protected void process(final RProject project, final List<SourceUnit> sus,
 			final SubMonitor progress) throws BadLocationException {
 		if (sus != null) {
 			int remaining= sus.size();
-			for (final ISourceUnit su : sus) {
+			for (final SourceUnit su : sus) {
 				progress.setWorkRemaining(remaining--);
 				
-				process((IRSourceUnit) su, progress.newChild(1));
+				process((RSourceUnit)su, progress.newChild(1));
 			}
 		}
 	}
 	
-	protected void process(final IRSourceUnit sourceUnit, final SubMonitor progress) throws BadLocationException {
+	protected void process(final RSourceUnit sourceUnit, final SubMonitor progress) throws BadLocationException {
 		progress.setWorkRemaining(10);
 		sourceUnit.connect(progress.newChild(1));
 		try {
-			IRSourceUnit bestUnit= sourceUnit;
+			RSourceUnit bestUnit= sourceUnit;
 			if (bestUnit.getUnderlyingUnit() != null && bestUnit.isSynchronized()) {
 				bestUnit= sourceUnit;
 			}
 			
-			final IRModelInfo modelInfo= (IRModelInfo) sourceUnit.getModelInfo(RModel.R_TYPE_ID,
-					IRModelManager.MODEL_FILE, progress.newChild(1) );
+			final RSourceUnitModelInfo modelInfo= (RSourceUnitModelInfo)sourceUnit.getModelInfo(RModel.R_TYPE_ID,
+					RModelManager.MODEL_FILE, progress.newChild(1) );
 			final SourceContent content= sourceUnit.getContent(progress.newChild(1));
 			
 			final List<List<? extends RElementAccess>> allFrameAccess= new ArrayList<>();
 			for (final String frameId : this.definitionFrameIds) {
-				final IRFrame frame;
+				final RFrame frame;
 				if (frameId == null) {
 					frame= modelInfo.getTopFrame();
 				}
 				else {
 					frame= modelInfo.getReferencedFrames().get(frameId);
 				}
-				if (frame instanceof IRFrameInSource) {
-					final List<? extends RElementAccess> allAccess= ((IRFrameInSource) frame).getAllAccessOf(
+				if (frame instanceof RSourceFrame) {
+					final List<? extends RElementAccess> allAccess= ((RSourceFrame)frame).getAllAccessOf(
 							this.mainName.getSegmentName(), true );
 					if (allAccess != null && allAccess.size() > 0) {
 						allFrameAccess.add(allAccess);
@@ -119,18 +119,18 @@
 			
 			final String contentText= content.getText();
 			final TextLineInformation lineInformation= content.getLines();
-			final Map<Integer, LineElement<IRSourceUnit>> lineElements= new HashMap<>();
+			final Map<Integer, LineElement<RSourceUnit>> lineElements= new HashMap<>();
 			
 			for (final List<? extends RElementAccess> allAccess : allFrameAccess) {
 				for (RElementAccess access : allAccess) {
 					access= include(access);
 					if (access != null) {
 						final RAstNode nameNode= access.getNameNode();
-						final TextRegion nameRegion= RAst.getElementNameRegion(nameNode);
+						final TextRegion nameRegion= RAsts.getElementNameRegion(nameNode);
 						
 						final Integer lineNumber= Integer.valueOf(
 								lineInformation.getLineOfOffset(nameRegion.getStartOffset()) );
-						LineElement<IRSourceUnit> lineElement= lineElements.get(lineNumber);
+						LineElement<RSourceUnit> lineElement= lineElements.get(lineNumber);
 						if (lineElement == null) {
 							final int lineOffset= lineInformation.getStartOffset(lineNumber);
 							lineElement= new LineElement<>(bestUnit, lineNumber, lineOffset,
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchLabelProvider.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchLabelProvider.java
index 82ee863..6487543 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchLabelProvider.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchLabelProvider.java
@@ -24,9 +24,9 @@
 import org.eclipse.statet.ecommons.workbench.search.ui.LineElement;
 import org.eclipse.statet.ecommons.workbench.search.ui.TextSearchLabelUtil;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.ui.RLabelProvider;
 
 
@@ -67,7 +67,7 @@
 	
 	@Override
 	public boolean isLabelProperty(final Object element, final String property) {
-		if (element instanceof IModelElement) {
+		if (element instanceof LtkModelElement) {
 			return super.isLabelProperty(element, property);
 		}
 		if (element instanceof RElementMatch || element instanceof LineElement<?>) {
@@ -79,11 +79,11 @@
 	
 	@Override
 	public Image getImage(final Object element) {
-		if (element instanceof IModelElement) {
-			if (element instanceof ISourceUnit) {
-				return this.workbenchLabelProvider.getImage(((ISourceUnit) element).getResource());
+		if (element instanceof LtkModelElement) {
+			if (element instanceof SourceUnit) {
+				return this.workbenchLabelProvider.getImage(((SourceUnit) element).getResource());
 			}
-			return super.getImage((IModelElement) element);
+			return super.getImage((LtkModelElement)element);
 		}
 		if (element instanceof RElementMatch || element instanceof LineElement<?>) {
 			return SharedUIResources.getImages().get(SharedUIResources.OBJ_LINE_MATCH_IMAGE_ID);
@@ -93,9 +93,9 @@
 	
 	@Override
 	public StyledString getStyledText(final Object element) {
-		if (element instanceof IModelElement) {
-			final StyledString text= super.getStyledText((IModelElement) element);
-			if (element instanceof IRSourceUnit) {
+		if (element instanceof LtkModelElement) {
+			final StyledString text= super.getStyledText((LtkModelElement)element);
+			if (element instanceof RSourceUnit) {
 				final int count= this.page.getDisplayedMatchCount(element);
 				final StringBuilder sb= getTextBuilder();
 				sb.append(" ("); //$NON-NLS-1$
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchResult.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchResult.java
index 241930e..1caa519 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchResult.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchResult.java
@@ -27,23 +27,24 @@
 import org.eclipse.statet.ecommons.workbench.search.ui.ExtTextSearchResult;
 
 import org.eclipse.statet.ltk.core.IExtContentTypeManager;
-import org.eclipse.statet.ltk.core.IModelTypeDescriptor;
-import org.eclipse.statet.ltk.core.LTK;
-import org.eclipse.statet.ltk.model.core.elements.ISourceElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.util.ElementComparator;
+import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.model.core.LtkModels;
+import org.eclipse.statet.ltk.model.core.ModelTypeDescriptor;
+import org.eclipse.statet.ltk.model.core.element.SourceElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.util.LtkModelElementComparator;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.r.core.RSymbolComparator;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.ui.RUI;
 
 
-public class RElementSearchResult extends ExtTextSearchResult<IRSourceUnit, RElementMatch> 
+public class RElementSearchResult extends ExtTextSearchResult<RSourceUnit, RElementMatch> 
 		implements IFileMatchAdapter, IEditorMatchAdapter {
 	
 	
-	private static ISourceUnit getSourceUnit(final IEditorPart editor) {
+	private static SourceUnit getSourceUnit(final IEditorPart editor) {
 		final ISourceEditor sourceEditor= editor.getAdapter(ISourceEditor.class);
 		if (sourceEditor != null) {
 			return sourceEditor.getSourceUnit();
@@ -52,8 +53,8 @@
 	}
 	
 	
-	public static final ElementMatchComparator<IRSourceUnit, RElementMatch> COMPARATOR= new ElementMatchComparator<>(
-			new IRSourceUnit[0], new ElementComparator(RSymbolComparator.R_NAMES_COLLATOR),
+	public static final ElementMatchComparator<RSourceUnit, RElementMatch> COMPARATOR= new ElementMatchComparator<>(
+			new RSourceUnit[0], new LtkModelElementComparator(RSymbolComparator.R_NAMES_COLLATOR),
 			new RElementMatch[0], new DefaultMatchComparator<>() );
 	
 	
@@ -109,11 +110,11 @@
 	
 	@Override
 	public IFile getFile(Object element) {
-		if (element instanceof ISourceElement) {
-			element= ((ISourceElement) element).getSourceUnit();
+		if (element instanceof SourceElement) {
+			element= ((SourceElement)element).getSourceUnit();
 		}
-		if (element instanceof ISourceUnit) {
-			element= ((ISourceUnit) element).getResource();
+		if (element instanceof SourceUnit) {
+			element= ((SourceUnit)element).getResource();
 		}
 		if (element instanceof IFile) {
 			return (IFile) element;
@@ -124,12 +125,12 @@
 	@Override
 	public Match[] computeContainedMatches(final AbstractTextSearchResult result,
 			final IFile file) {
-		final ISourceUnit su= LTK.getSourceUnitManager().getSourceUnit(LTK.PERSISTENCE_CONTEXT, file,
+		final SourceUnit su= LtkModels.getSourceUnitManager().getSourceUnit(Ltk.PERSISTENCE_CONTEXT, file,
 				null, false, null );
 		if (su != null) {
 			try {
-				final IExtContentTypeManager typeManager= LTK.getExtContentTypeManager();
-				final IModelTypeDescriptor modelType= typeManager.getModelType(su.getModelTypeId());
+				final IExtContentTypeManager typeManager= Ltk.getExtContentTypeManager();
+				final ModelTypeDescriptor modelType= typeManager.getModelType(su.getModelTypeId());
 				if (modelType != null && (modelType.getId() == RModel.R_TYPE_ID
 						|| modelType.getSecondaryTypeIds().contains(RModel.R_TYPE_ID) )) {
 					return getMatches(su);
@@ -149,7 +150,7 @@
 	
 	@Override
 	public boolean isShownInEditor(final Match match, final IEditorPart editor) {
-		ISourceUnit su= getSourceUnit(editor);
+		SourceUnit su= getSourceUnit(editor);
 		while (su != null) {
 			if (su.equals(match.getElement())) {
 				return true;
@@ -162,7 +163,7 @@
 	@Override
 	public Match[] computeContainedMatches(final AbstractTextSearchResult result,
 			final IEditorPart editor) {
-		ISourceUnit su= getSourceUnit(editor);
+		SourceUnit su= getSourceUnit(editor);
 		while (su != null) {
 			final RElementMatch[] matches= getMatches(su);
 			if (matches.length > 0) {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchResultPage.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchResultPage.java
index 2ac48a2..2145bb3 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchResultPage.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchResultPage.java
@@ -25,12 +25,12 @@
 import org.eclipse.statet.ecommons.workbench.search.ui.LineElement;
 import org.eclipse.statet.ecommons.workbench.search.ui.TextSearchResultContentProvider;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.ui.RLabelProvider;
 
 
-public class RElementSearchResultPage extends ExtTextSearchResultPage<IRSourceUnit, RElementMatch> {
+public class RElementSearchResultPage extends ExtTextSearchResultPage<RSourceUnit, RElementMatch> {
 	
 	
 	private static class LTKDecoratingLabelProvider extends DecoratingStyledLabelProvider {
@@ -42,8 +42,8 @@
 		
 		@Override
 		protected Object getElementToDecorate(final Object element) {
-			if (element instanceof ISourceUnit) {
-				return ((ISourceUnit) element).getResource();
+			if (element instanceof SourceUnit) {
+				return ((SourceUnit)element).getResource();
 			}
 			return element;
 		}
@@ -57,7 +57,7 @@
 	
 	
 	@Override
-	protected TextSearchResultContentProvider<IRSourceUnit, RElementMatch, TreeViewer> createTreeContentProvider(final TreeViewer viewer) {
+	protected TextSearchResultContentProvider<RSourceUnit, RElementMatch, TreeViewer> createTreeContentProvider(final TreeViewer viewer) {
 		return new RElementSearchResultTreeContentProvider(this, viewer);
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchResultTreeContentProvider.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchResultTreeContentProvider.java
index 8e7f306..0fc7c08 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchResultTreeContentProvider.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/search/RElementSearchResultTreeContentProvider.java
@@ -34,11 +34,11 @@
 import org.eclipse.statet.ecommons.workbench.search.ui.LineElement;
 import org.eclipse.statet.ecommons.workbench.search.ui.TextSearchResultTreeContentProvider;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 
 
-public class RElementSearchResultTreeContentProvider extends TextSearchResultTreeContentProvider<IRSourceUnit, RElementMatch> {
+public class RElementSearchResultTreeContentProvider extends TextSearchResultTreeContentProvider<RSourceUnit, RElementMatch> {
 	
 	
 	private static class LevelComparator extends ResourceComparator implements Comparator<Object> {
@@ -51,11 +51,11 @@
 		
 		@Override
 		public int compare(Object o1, Object o2) {
-			if (o1 instanceof ISourceUnit) {
-				o1= ((ISourceUnit) o1).getResource();
+			if (o1 instanceof SourceUnit) {
+				o1= ((SourceUnit)o1).getResource();
 			}
-			if (o2 instanceof ISourceUnit) {
-				o2= ((ISourceUnit) o2).getResource();
+			if (o2 instanceof SourceUnit) {
+				o2= ((SourceUnit)o2).getResource();
 			}
 			return compare(null, o1, o2);
 		}
@@ -100,14 +100,14 @@
 	public Object[] getElements(final Object inputElement) {
 		if (this.level < BY_SOURCE_UNIT) {
 			if (!this.active) {
-				final ExtTextSearchResult<IRSourceUnit, RElementMatch> result= getInput();
+				final ExtTextSearchResult<RSourceUnit, RElementMatch> result= getInput();
 				assert (inputElement == result);
 				if (result == null) {
 					return NO_ELEMENTS;
 				}
 				assert (this.levelChildren.isEmpty());
 				
-				final IRSourceUnit[] elements= result.getElements();
+				final RSourceUnit[] elements= result.getElements();
 				for (int i= 0; i < elements.length; i++) {
 					doAdd(null, elements[i]);
 				}
@@ -121,9 +121,9 @@
 	
 	@Override
 	public Object getParent(final Object element) {
-		if (element instanceof ISourceUnit) {
+		if (element instanceof SourceUnit) {
 			if (this.level < BY_SOURCE_UNIT) {
-				final IFile file= (IFile) ((ISourceUnit) element).getResource();
+				final IFile file= (IFile)((SourceUnit)element).getResource();
 				return file.getParent();
 			}
 		}
@@ -164,7 +164,7 @@
 	
 	
 	@Override
-	protected void addElement(final TreeViewer viewer, final IRSourceUnit element, final int idx) {
+	protected void addElement(final TreeViewer viewer, final RSourceUnit element, final int idx) {
 		if (this.level < BY_SOURCE_UNIT) {
 			doAdd(viewer, element);
 		}
@@ -192,7 +192,7 @@
 	}
 	
 	@Override
-	protected void removeElement(final TreeViewer viewer, final IRSourceUnit element, final int idx) {
+	protected void removeElement(final TreeViewer viewer, final RSourceUnit element, final int idx) {
 		if (this.level < BY_SOURCE_UNIT) {
 			doRemove(viewer, element);
 		}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRFileCreationWizard.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRFileCreationWizard.java
index aef0cc4..2df1966 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRFileCreationWizard.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRFileCreationWizard.java
@@ -27,13 +27,14 @@
 import org.eclipse.statet.ecommons.ui.dialogs.DialogUtils;
 
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
-import org.eclipse.statet.ltk.core.LTK;
+import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.model.core.LtkModels;
 import org.eclipse.statet.ltk.ui.templates.TemplateUtils.EvaluatedTemplate;
 import org.eclipse.statet.ltk.ui.wizards.NewElementWizard;
 import org.eclipse.statet.ltk.ui.wizards.NewElementWizardPage.ResourceGroup;
 import org.eclipse.statet.r.codegeneration.CodeGeneration;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.ui.RUI;
 
 
@@ -50,8 +51,8 @@
 		protected String getInitialFileContent(final IFile newFileHandle,
 				final SubMonitor m) {
 			final String lineDelimiter= TextUtil.getLineDelimiter(newFileHandle.getProject());
-			final IRSourceUnit su= (IRSourceUnit) LTK.getSourceUnitManager().getSourceUnit(
-					LTK.PERSISTENCE_CONTEXT, newFileHandle, getContentType(newFileHandle),
+			final RSourceUnit su= (RSourceUnit)LtkModels.getSourceUnitManager().getSourceUnit(
+					Ltk.PERSISTENCE_CONTEXT, newFileHandle, getContentType(newFileHandle),
 					true, m );
 			try {
 				final EvaluatedTemplate data= CodeGeneration.getNewRFileContent(su, lineDelimiter);
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRFileCreationWizardPage.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRFileCreationWizardPage.java
index 0902c15..f50f3d1 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRFileCreationWizardPage.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRFileCreationWizardPage.java
@@ -25,8 +25,8 @@
 
 import org.eclipse.statet.ecommons.ui.workbench.ContainerSelectionComposite.ContainerFilter;
 
-import org.eclipse.statet.ltk.buildpaths.core.BuildpathsUtils;
-import org.eclipse.statet.ltk.buildpaths.core.IBuildpathElement;
+import org.eclipse.statet.ltk.buildpath.core.BuildpathElement;
+import org.eclipse.statet.ltk.buildpath.core.BuildpathUtils;
 import org.eclipse.statet.ltk.ui.wizards.NewElementWizardPage;
 import org.eclipse.statet.r.core.RProject;
 import org.eclipse.statet.r.core.RProjects;
@@ -57,10 +57,10 @@
 				else {
 					final RProject rProject= RProjects.getRProject(project);
 					if (rProject != null) {
-						final ImList<IBuildpathElement> buildpath= rProject.getRawBuildpath();
-						for (final IBuildpathElement sourceContainer : buildpath) {
+						final ImList<BuildpathElement> buildpath= rProject.getRawBuildpath();
+						for (final BuildpathElement sourceContainer : buildpath) {
 							if (sourceContainer.getPath().isPrefixOf(container.getFullPath())) {
-								return (!BuildpathsUtils.isExcluded(container, sourceContainer));
+								return (!BuildpathUtils.isExcluded(container, sourceContainer));
 							}
 						}
 					}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRPkgProjectWizard.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRPkgProjectWizard.java
index 3192a58..0973e93 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRPkgProjectWizard.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRPkgProjectWizard.java
@@ -36,15 +36,15 @@
 import org.eclipse.statet.ecommons.ui.dialogs.DialogUtils;
 
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.templates.CodeGenerationTemplateContext;
 import org.eclipse.statet.ltk.ui.templates.TemplateUtils.EvaluatedTemplate;
 import org.eclipse.statet.ltk.ui.wizards.LTKWizardsMessages;
 import org.eclipse.statet.ltk.ui.wizards.NewElementWizard;
+import org.eclipse.statet.r.core.BasicRResourceSourceUnit;
 import org.eclipse.statet.r.core.RBuildpaths;
 import org.eclipse.statet.r.core.RCore;
 import org.eclipse.statet.r.core.RProjects;
-import org.eclipse.statet.r.core.RResourceUnit;
 import org.eclipse.statet.r.ui.RUI;
 
 
@@ -69,7 +69,7 @@
 		@Override
 		protected String getInitialFileContent(final IFile newFileHandle, final SubMonitor m) {
 			final String lineDelimiter= TextUtil.getLineDelimiter(newFileHandle.getProject());
-			final ISourceUnit su= RResourceUnit.createTempUnit(newFileHandle, "RPkgDescription"); //$NON-NLS-1$
+			final SourceUnit su= BasicRResourceSourceUnit.createTempUnit(newFileHandle, "RPkgDescription"); //$NON-NLS-1$
 			
 			try {
 				final EvaluatedTemplate data= evaluateTemplate(su, lineDelimiter);
@@ -91,7 +91,7 @@
 			return null;
 		}
 		
-		private EvaluatedTemplate evaluateTemplate(final ISourceUnit su,
+		private EvaluatedTemplate evaluateTemplate(final SourceUnit su,
 				final String lineDelimiter)
 				throws CoreException {
 			final Template template= RUIPlugin.getInstance().getRPkgCodeGenerationTemplateStore()
@@ -135,7 +135,7 @@
 		@Override
 		protected String getInitialFileContent(final IFile newFileHandle, final SubMonitor m) {
 			final String lineDelimiter= TextUtil.getLineDelimiter(newFileHandle.getProject());
-			final ISourceUnit su= RResourceUnit.createTempUnit(newFileHandle, "RPkgDescription"); //$NON-NLS-1$
+			final SourceUnit su= BasicRResourceSourceUnit.createTempUnit(newFileHandle, "RPkgDescription"); //$NON-NLS-1$
 			
 			try {
 				final EvaluatedTemplate data= evaluateTemplate(su, lineDelimiter);
@@ -157,7 +157,7 @@
 			return null;
 		}
 		
-		private EvaluatedTemplate evaluateTemplate(final ISourceUnit su,
+		private EvaluatedTemplate evaluateTemplate(final SourceUnit su,
 				final String lineDelimiter)
 				throws CoreException {
 			final Template template= RUIPlugin.getInstance().getRPkgCodeGenerationTemplateStore()
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRdFileCreationWizard.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRdFileCreationWizard.java
index 06af0ab..00cb102 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRdFileCreationWizard.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/wizards/NewRdFileCreationWizard.java
@@ -34,8 +34,8 @@
 import org.eclipse.statet.ltk.ui.wizards.NewElementWizard;
 import org.eclipse.statet.ltk.ui.wizards.NewElementWizardPage.ResourceGroup;
 import org.eclipse.statet.r.codegeneration.CodeGeneration;
+import org.eclipse.statet.r.core.BasicRResourceSourceUnit;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.RResourceUnit;
 import org.eclipse.statet.r.ui.RUI;
 
 
@@ -53,7 +53,7 @@
 				final SubMonitor progress) {
 			final String lineDelimiter= TextUtil.getLineDelimiter(newFileHandle.getProject());
 			try {
-				final RResourceUnit rcu= RResourceUnit.createTempUnit(newFileHandle, "rd"); //$NON-NLS-1$
+				final BasicRResourceSourceUnit rcu= BasicRResourceSourceUnit.createTempUnit(newFileHandle, "rd"); //$NON-NLS-1$
 				final EvaluatedTemplate data= CodeGeneration.getNewRdFileContent(rcu, lineDelimiter);
 				if (data != null) {
 					this.initialSelection= data.getRegionToSelect();
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/CodeGeneration.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/CodeGeneration.java
index d7fa08f..fd5eb65 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/CodeGeneration.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/CodeGeneration.java
@@ -30,18 +30,18 @@
 import org.eclipse.statet.ecommons.templates.TemplateMessages;
 
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.templates.TemplateUtils;
 import org.eclipse.statet.ltk.ui.templates.TemplateUtils.EvaluatedTemplate;
-import org.eclipse.statet.r.core.RResourceUnit;
+import org.eclipse.statet.r.core.BasicRResourceSourceUnit;
 import org.eclipse.statet.r.core.model.ArgsDefinition;
 import org.eclipse.statet.r.core.model.ArgsDefinition.Arg;
-import org.eclipse.statet.r.core.model.IRClass;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRMethod;
-import org.eclipse.statet.r.core.model.IRSlot;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RElement;
+import org.eclipse.statet.r.core.model.RLangClass;
+import org.eclipse.statet.r.core.model.RLangMethod;
+import org.eclipse.statet.r.core.model.RLangSlot;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.ui.RUI;
 
 
@@ -59,7 +59,7 @@
 	 * @return the new content or <code>null</code> if the template is undefined or empty
 	 * @throws CoreException thrown when the evaluation of the code template fails
 	 */
-	public static EvaluatedTemplate getNewRFileContent(final IRSourceUnit su, final String lineDelimiter) throws CoreException {
+	public static EvaluatedTemplate getNewRFileContent(final RSourceUnit su, final String lineDelimiter) throws CoreException {
 		final Template template = RUIPlugin.getInstance().getRCodeGenerationTemplateStore().findTemplate(RCodeTemplateContextType.NEW_RSCRIPTFILE);
 		if (template == null) {
 			return null;
@@ -88,14 +88,14 @@
 	 * @return 
 	 * @throws CoreException thrown when the evaluation of the code template fails
 	 */
-	public static EvaluatedTemplate getCommonFunctionRoxygenComment(final IRMethod rMethod, final String lineDelimiter) throws CoreException {
+	public static EvaluatedTemplate getCommonFunctionRoxygenComment(final RLangMethod rMethod, final String lineDelimiter) throws CoreException {
 		final Template template = RUIPlugin.getInstance().getRCodeGenerationTemplateStore()
 				.findTemplate(RCodeTemplateContextType.ROXYGEN_COMMONFUNCTION_TEMPLATE_ID);
 		if (template == null) {
 			return null;
 		}
 		
-		final ISourceUnit su = rMethod.getSourceUnit();
+		final SourceUnit su = rMethod.getSourceUnit();
 		final RCodeTemplateContext context = new RCodeTemplateContext(
 				RCodeTemplateContextType.ROXYGEN_COMMONFUNCTION_CONTEXTTYPE, su, lineDelimiter);
 		context.setRElement(rMethod);
@@ -152,14 +152,14 @@
 	 * @return 
 	 * @throws CoreException thrown when the evaluation of the code template fails
 	 */
-	public static EvaluatedTemplate getClassRoxygenComment(final IRClass rClass, final String lineDelimiter) throws CoreException {
+	public static EvaluatedTemplate getClassRoxygenComment(final RLangClass rClass, final String lineDelimiter) throws CoreException {
 		final Template template = RUIPlugin.getInstance().getRCodeGenerationTemplateStore()
 				.findTemplate(RCodeTemplateContextType.ROXYGEN_S4CLASS_TEMPLATE_ID);
 		if (template == null) {
 			return null;
 		}
 		
-		final ISourceUnit su = rClass.getSourceUnit();
+		final SourceUnit su = rClass.getSourceUnit();
 		final RCodeTemplateContext context = new RCodeTemplateContext(
 				RCodeTemplateContextType.ROXYGEN_CLASS_CONTEXTTYPE, su, lineDelimiter);
 		context.setRElement(rClass);
@@ -183,11 +183,11 @@
 			
 			if (slotPositions.length > 0) {
 				String[] tags = null;
-				final List<? extends IModelElement> slots = rClass.getModelChildren(IRElement.R_S4SLOT_FILTER);
+				final List<? extends LtkModelElement> slots = rClass.getModelChildren(RElement.R_S4SLOT_FILTER);
 				final int count = slots.size();
 				tags = new String[count];
 				for (int i = 0; i < count; i++) {
-					final IRSlot slot = (IRSlot) slots.get(i);
+					final RLangSlot slot = (RLangSlot)slots.get(i);
 					tagBuffer.append("@slot "); //$NON-NLS-1$
 					tagBuffer.append(slot.getElementName().getDisplayName());
 					tagBuffer.append(" "); //$NON-NLS-1$
@@ -215,14 +215,14 @@
 	 * @return 
 	 * @throws CoreException thrown when the evaluation of the code template fails
 	 */
-	public static EvaluatedTemplate getMethodRoxygenComment(final IRMethod rMethod, final String lineDelimiter) throws CoreException {
+	public static EvaluatedTemplate getMethodRoxygenComment(final RLangMethod rMethod, final String lineDelimiter) throws CoreException {
 		final Template template = RUIPlugin.getInstance().getRCodeGenerationTemplateStore()
 				.findTemplate(RCodeTemplateContextType.ROXYGEN_S4METHOD_TEMPLATE_ID);
 		if (template == null) {
 			return null;
 		}
 		
-		final ISourceUnit su = rMethod.getSourceUnit();
+		final SourceUnit su = rMethod.getSourceUnit();
 		final RCodeTemplateContext context = new RCodeTemplateContext(
 				RCodeTemplateContextType.ROXYGEN_METHOD_CONTEXTTYPE, su, lineDelimiter);
 		context.setRElement(rMethod);
@@ -316,7 +316,7 @@
 	 * @return the new content or <code>null</code> if the template is undefined or empty
 	 * @throws CoreException thrown when the evaluation of the code template fails
 	 */
-	public static EvaluatedTemplate getNewRdFileContent(final RResourceUnit su, final String lineDelimiter) throws CoreException {
+	public static EvaluatedTemplate getNewRdFileContent(final BasicRResourceSourceUnit su, final String lineDelimiter) throws CoreException {
 		final Template template = RUIPlugin.getInstance().getRdCodeGenerationTemplateStore().findTemplate(RdCodeTemplateContextType.NEW_RDOCFILE);
 		if (template == null) {
 			return null;
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/RCodeTemplateContext.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/RCodeTemplateContext.java
index 86aac63..7e5695e 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/RCodeTemplateContext.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/RCodeTemplateContext.java
@@ -17,22 +17,22 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.templates.CodeGenerationTemplateContext;
-import org.eclipse.statet.r.core.model.IRElement;
+import org.eclipse.statet.r.core.model.RElement;
 
 
 @NonNullByDefault
 public class RCodeTemplateContext extends CodeGenerationTemplateContext {
 	
 	
-	RCodeTemplateContext(final String contextTypeName, final ISourceUnit su, final String lineDelim) {
+	RCodeTemplateContext(final String contextTypeName, final SourceUnit su, final String lineDelim) {
 		super(RUIPlugin.getInstance().getRCodeGenerationTemplateContextRegistry().getContextType(contextTypeName),
 				su, lineDelim);
 	}
 	
 	
-	public void setRElement(final IRElement element) {
+	public void setRElement(final RElement element) {
 		setVariable(RCodeTemplateContextType.ELEMENT_NAME_VAR_NAME, element.getElementName().getDisplayName());
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/RdCodeTemplateContext.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/RdCodeTemplateContext.java
index b96fe6c..0c4676c 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/RdCodeTemplateContext.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/RdCodeTemplateContext.java
@@ -15,14 +15,14 @@
 package org.eclipse.statet.r.codegeneration;
 
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.templates.CodeGenerationTemplateContext;
 
 
 public class RdCodeTemplateContext extends CodeGenerationTemplateContext {
 	
 	
-	RdCodeTemplateContext(final String contextTypeName, final ISourceUnit su, final String lineDelim) {
+	RdCodeTemplateContext(final String contextTypeName, final SourceUnit su, final String lineDelim) {
 		super(RUIPlugin.getInstance().getRdCodeGenerationTemplateContextRegistry().getContextType(contextTypeName),
 				su, lineDelim);
 	}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/RLabelProvider.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/RLabelProvider.java
index bb47093..4805bef 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/RLabelProvider.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/RLabelProvider.java
@@ -14,9 +14,9 @@
 
 package org.eclipse.statet.r.ui;
 
-import static org.eclipse.statet.ltk.model.core.elements.IModelElement.MASK_C1;
-import static org.eclipse.statet.ltk.model.core.elements.IModelElement.MASK_C2;
-import static org.eclipse.statet.ltk.model.core.elements.IModelElement.SHIFT_C1;
+import static org.eclipse.statet.ltk.model.core.element.LtkModelElement.MASK_C1;
+import static org.eclipse.statet.ltk.model.core.element.LtkModelElement.MASK_C2;
+import static org.eclipse.statet.ltk.model.core.element.LtkModelElement.SHIFT_C1;
 
 import java.util.List;
 
@@ -37,21 +37,21 @@
 
 import org.eclipse.statet.base.ui.StatetImages;
 import org.eclipse.statet.ltk.core.ElementName;
-import org.eclipse.statet.ltk.core.LTKUtils;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.ltk.model.core.LtkModelUtils;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
 import org.eclipse.statet.ltk.ui.ElementLabelProvider;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.data.CombinedRList;
 import org.eclipse.statet.r.core.model.ArgsDefinition;
 import org.eclipse.statet.r.core.model.ArgsDefinition.Arg;
-import org.eclipse.statet.r.core.model.IRClass;
-import org.eclipse.statet.r.core.model.IRClassExtension;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRMethod;
-import org.eclipse.statet.r.core.model.IRSlot;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangClass;
+import org.eclipse.statet.r.core.model.RLangClassExtension;
+import org.eclipse.statet.r.core.model.RLangMethod;
+import org.eclipse.statet.r.core.model.RLangSlot;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.rj.data.RArray;
 import org.eclipse.statet.rj.data.RDataFrame;
 import org.eclipse.statet.rj.data.RDataUtils;
@@ -111,44 +111,44 @@
 	
 	
 	@Override
-	public Image getImage(final IModelElement element) {
+	public Image getImage(final LtkModelElement element) {
 		switch ((element.getElementType() & MASK_C1) >> SHIFT_C1) {
 		
-		case (IModelElement.C1_SOURCE >> SHIFT_C1):
+		case (LtkModelElement.C1_SOURCE >> SHIFT_C1):
 			return RUI.getImage(RUI.IMG_OBJ_R_SCRIPT);
 			
-		case (IModelElement.C1_IMPORT >> SHIFT_C1):
+		case (LtkModelElement.C1_IMPORT >> SHIFT_C1):
 			return StatetImages.getImage(StatetImages.OBJ_IMPORT);
 			
-		case (IModelElement.C1_METHOD >> SHIFT_C1):
+		case (LtkModelElement.C1_METHOD >> SHIFT_C1):
 			switch (element.getElementType() & MASK_C2) {
-			case IRElement.R_GENERIC_FUNCTION:
+			case RElement.R_GENERIC_FUNCTION:
 				return RUI.getImage(RUI.IMG_OBJ_GENERIC_FUNCTION);
-			case IRElement.R_S4METHOD:
+			case RElement.R_S4METHOD:
 				return RUI.getImage(RUI.IMG_OBJ_METHOD);
-//				case IRLangElement.R_COMMON_FUNCTION:
+//				case RLangElement.R_COMMON_FUNCTION:
 			default:
 				return RUI.getImage( ((element.getElementType() & 0xf) != 0x1) ?
 						RUI.IMG_OBJ_COMMON_FUNCTION : RUI.IMG_OBJ_COMMON_LOCAL_FUNCTION);
 			}
-		case (IModelElement.C1_CLASS >> SHIFT_C1):
+		case (LtkModelElement.C1_CLASS >> SHIFT_C1):
 			switch (element.getElementType() & MASK_C2) {
-			case IRElement.R_S4CLASS:
+			case RElement.R_S4CLASS:
 				return StatetImages.getImage(StatetImages.OBJ_CLASS);
-			case IRElement.R_S4CLASS_EXTENSION:
+			case RElement.R_S4CLASS_EXTENSION:
 				return StatetImages.getImage(StatetImages.OBJ_CLASS_EXT);
 			default:
 				return null;
 			}
 		
-		case (IModelElement.C1_VARIABLE >> SHIFT_C1):
+		case (LtkModelElement.C1_VARIABLE >> SHIFT_C1):
 			if (element instanceof CombinedRElement) {
 				return getImage((CombinedRElement) element);
 			}
 			switch (element.getElementType() & MASK_C2) {
-			case IRElement.R_S4SLOT:
+			case RElement.R_S4SLOT:
 				return RUI.getImage(RUI.IMG_OBJ_SLOT);
-//				case IRLangElement.R_COMMON_VARIABLE:
+//				case RLangElement.R_COMMON_VARIABLE:
 			default:
 				return RUI.getImage( ((element.getElementType() & 0xf) != 0x1) ?
 						RUI.IMG_OBJ_GENERAL_VARIABLE : RUI.IMG_OBJ_GENERAL_LOCAL_VARIABLE);
@@ -221,30 +221,30 @@
 	
 	
 	@Override
-	public String getText(final IModelElement element) {
+	public String getText(final LtkModelElement element) {
 		final String name= element.getElementName().getDisplayName();
 		
 		final StringBuilder text;
 		switch ((element.getElementType() & MASK_C1) >> SHIFT_C1) {
 		
-		case (IModelElement.C1_METHOD >> SHIFT_C1):
+		case (LtkModelElement.C1_METHOD >> SHIFT_C1):
 			text= (name != null) ? new StringBuilder(name) : new StringBuilder();
-			appendMethodDetail(text, (IRMethod) element);
+			appendMethodDetail(text, (RLangMethod)element);
 			return text.toString();
 		
-		case (IModelElement.C1_CLASS >> SHIFT_C1):
+		case (LtkModelElement.C1_CLASS >> SHIFT_C1):
 			switch (element.getElementType() & MASK_C2) {
-			case IRElement.R_S4CLASS_EXTENSION:
+			case RElement.R_S4CLASS_EXTENSION:
 				text= (name != null) ? new StringBuilder(name) : new StringBuilder();
-				appendClassExtDetail(text, (IRClassExtension) element);
+				appendClassExtDetail(text, (RLangClassExtension)element);
 				return text.toString();
 			}
 			break;
-		case (IModelElement.C1_VARIABLE >> SHIFT_C1):
+		case (LtkModelElement.C1_VARIABLE >> SHIFT_C1):
 			switch (element.getElementType() & MASK_C2) {
-			case IRElement.R_S4SLOT:
+			case RElement.R_S4SLOT:
 				text= (name != null) ? new StringBuilder(name) : new StringBuilder();
-				appendSlotDetail(text, (IRSlot) element);
+				appendSlotDetail(text, (RLangSlot)element);
 				return text.toString();
 			}
 			break;
@@ -252,24 +252,24 @@
 		return name;
 	}
 	
-//	public void decorateText(final StringBuilder text, final IModelElement element) {
-//		switch (element.getElementType() & IModelElement.MASK_C1) {
+//	public void decorateText(final StringBuilder text, final LtkModelElement element) {
+//		switch (element.getElementType() & LtkModelElement.MASK_C1) {
 //		
-//		case IModelElement.C1_METHOD:
-//			appendMethodDetail(text, (IRMethod) element);
+//		case LtkModelElement.C1_METHOD:
+//			appendMethodDetail(text, (RLangMethod)element);
 //			return;
 //		
-//		case IModelElement.C1_CLASS:
-//			switch (element.getElementType() & IModelElement.MASK_C2) {
-//			case IRLangElement.R_S4CLASS_EXTENSION:
-//				appendClassExtDetail(text, (IRClassExtension) element);
+//		case LtkModelElement.C1_CLASS:
+//			switch (element.getElementType() & LtkModelElement.MASK_C2) {
+//			case RLangElement.R_S4CLASS_EXTENSION:
+//				appendClassExtDetail(text, (RLangClassExtension)element);
 //				return;
 //			}
 //		
-//		case IModelElement.C1_VARIABLE:
-//			switch (element.getElementType() & IModelElement.MASK_C2) {
-//			case IRLangElement.R_S4SLOT:
-//				appendSlotDetail(text, (IRSlot) element);
+//		case LtkModelElement.C1_VARIABLE:
+//			switch (element.getElementType() & LtkModelElement.MASK_C2) {
+//			case RLangElement.R_S4SLOT:
+//				appendSlotDetail(text, (RLangSlot)element);
 //				return;
 //			}
 //		
@@ -277,13 +277,13 @@
 //	}
 	
 	@Override
-	public StyledString getStyledText(final IModelElement element) {
-		if (element instanceof IRElement) {
-			final IRElement rElement= (IRElement) element;
+	public StyledString getStyledText(final LtkModelElement element) {
+		if (element instanceof RElement) {
+			final RElement rElement= (RElement)element;
 			return getStyledText(rElement, rElement.getElementName(), null);
 		}
-		else if (element instanceof IRSourceUnit) {
-			return getStyledText((IRSourceUnit) element);
+		else if (element instanceof RSourceUnit) {
+			return getStyledText((RSourceUnit)element);
 		}
 		else {
 			final ElementName elementName= element.getElementName();
@@ -292,15 +292,15 @@
 	}
 	
 	@Override
-	public int @Nullable [] getStyledTextRegions(final IModelElement element,
+	public int @Nullable [] getStyledTextRegions(final LtkModelElement element,
 			final int flags, final int[] regions) {
-		if (element instanceof IRElement) {
-			final IRElement rElement= (IRElement) element;
+		if (element instanceof RElement) {
+			final RElement rElement= (RElement)element;
 			return getStyledTextRegions(rElement, rElement.getElementName(),
 					flags, regions );
 		}
-		else if (element instanceof IRSourceUnit) {
-			return getStyledTextRegions((IRSourceUnit) element,
+		else if (element instanceof RSourceUnit) {
+			return getStyledTextRegions((RSourceUnit)element,
 					flags, regions );
 		}
 		else if (flags == 0) {
@@ -312,14 +312,14 @@
 		return null;
 	}
 	
-	public StyledString getStyledText(final IRElement element, final RElementName elementName, final RList elementAttr) {
+	public StyledString getStyledText(final RElement element, final RElementName elementName, final RList elementAttr) {
 		final RElementName elementName0= (elementName != null) ? elementName : element.getElementName();
 		final StyledString text= new StyledString();
 		final String name;
 		
 		switch ((element.getElementType() & MASK_C1) >> SHIFT_C1) {
 		
-		case (IModelElement.C1_METHOD >> SHIFT_C1):
+		case (LtkModelElement.C1_METHOD >> SHIFT_C1):
 			if (this.style != 0 && elementName0.getNextSegment() == null) {
 				final String segmentName= elementName0.getSegmentName();
 				int length;
@@ -327,7 +327,7 @@
 						&& segmentName.charAt(length - 2) == '<'
 						&& segmentName.charAt(length - 1) == '-' ) {
 					text.append(RElementName.create(RElementName.MAIN_DEFAULT, segmentName.substring(0, length-2)).getDisplayName(), this.defaultStyler);
-					appendMethodDetailAssignmentSpecial(text,  (IRMethod) element);
+					appendMethodDetailAssignmentSpecial(text,  (RLangMethod)element);
 					text.append(" <- value"); //$NON-NLS-1$
 					break;
 				}
@@ -336,21 +336,21 @@
 			if (name != null) {
 				text.append(name, this.defaultStyler);
 			}
-			appendMethodDetail(text, (IRMethod) element);
+			appendMethodDetail(text, (RLangMethod)element);
 			break;
 		
-		case (IModelElement.C1_CLASS >> SHIFT_C1):
+		case (LtkModelElement.C1_CLASS >> SHIFT_C1):
 			name= elementName0.getDisplayName();
 			if (name != null) {
 				text.append(name, this.defaultStyler);
 			}
 			switch (element.getElementType() & MASK_C2) {
-			case IRElement.R_S4CLASS_EXTENSION:
-				appendClassExtDetail(text, (IRClassExtension) element);
+			case RElement.R_S4CLASS_EXTENSION:
+				appendClassExtDetail(text, (RLangClassExtension)element);
 			}
 			break;
 		
-		case (IModelElement.C1_VARIABLE >> SHIFT_C1):
+		case (LtkModelElement.C1_VARIABLE >> SHIFT_C1):
 			if (element instanceof CombinedRElement) {
 				final CombinedRElement cElement= (CombinedRElement) element;
 				if (cElement.getRObjectType() == RObject.TYPE_ENVIRONMENT && elementName == null) {
@@ -370,8 +370,8 @@
 				text.append(name, this.defaultStyler);
 			}
 			switch (element.getElementType() & MASK_C2) {
-			case IRElement.R_S4SLOT:
-				appendSlotDetail(text, (IRSlot) element);
+			case RElement.R_S4SLOT:
+				appendSlotDetail(text, (RLangSlot)element);
 			}
 			break;
 			
@@ -387,9 +387,9 @@
 		if ((this.style & NAMESPACE) != 0) {
 			ElementName scope= elementName0.getScope();
 			if (scope == null) {
-				final IModelElement parent= element.getModelParent();
+				final LtkModelElement parent= element.getModelParent();
 				if (parent != null) {
-					final IRFrame frame= parent.getAdapter(IRFrame.class);
+					final RFrame frame= parent.getAdapter(RFrame.class);
 					if (frame != null) {
 						scope= frame.getElementName();
 					}
@@ -405,13 +405,13 @@
 		return text;
 	}
 	
-	public int[] getStyledTextRegions(final IRElement element, final RElementName elementName,
+	public int[] getStyledTextRegions(final RElement element, final RElementName elementName,
 			final int flags, int[] regions) {
 		final RElementName elementName0= (elementName != null) ? elementName : element.getElementName();
 		
 		switch ((element.getElementType() & MASK_C1) >> SHIFT_C1) {
 		
-		case (IModelElement.C1_METHOD >> SHIFT_C1):
+		case (LtkModelElement.C1_METHOD >> SHIFT_C1):
 			if (this.style != 0 && elementName0.getNextSegment() == null) {
 				final String segmentName= elementName0.getSegmentName();
 				int length;
@@ -478,35 +478,35 @@
 		return text;
 	}
 	
-//	public void decorateStyledText(final StyledString text, final IModelElement element) {
+//	public void decorateStyledText(final StyledString text, final LtkModelElement element) {
 //		decorateStyledText(text, element, null);
 //	}
 //	
-//	public void decorateStyledText(final StyledString text, final IModelElement element, final RList elementAttr) {
-//		switch (element.getElementType() & IModelElement.MASK_C1) {
+//	public void decorateStyledText(final StyledString text, final LtkModelElement element, final RList elementAttr) {
+//		switch (element.getElementType() & LtkModelElement.MASK_C1) {
 //		
-//		case IModelElement.C1_METHOD:
-//			appendMethodDetail(text, (IRMethod) element);
+//		case LtkModelElement.C1_METHOD:
+//			appendMethodDetail(text, (RLangMethod)element);
 //			break;
 //		
-//		case IModelElement.C1_CLASS:
-//			switch (element.getElementType() & IModelElement.MASK_C2) {
-//			case IRLangElement.R_S4CLASS_EXTENSION:
-//				appendClassExtDetail(text, (IRClassExtension) element);
+//		case LtkModelElement.C1_CLASS:
+//			switch (element.getElementType() & LtkModelElement.MASK_C2) {
+//			case RLangElement.R_S4CLASS_EXTENSION:
+//				appendClassExtDetail(text, (RLangClassExtension)element);
 //				break;
 //			}
 //		
-//		case IModelElement.C1_VARIABLE:
-//			switch (element.getElementType() & IModelElement.MASK_C2) {
-//			case IRLangElement.R_S4SLOT:
-//				appendSlotDetail(text, (IRSlot) element);
+//		case LtkModelElement.C1_VARIABLE:
+//			switch (element.getElementType() & LtkModelElement.MASK_C2) {
+//			case RLangElement.R_S4SLOT:
+//				appendSlotDetail(text, (RLangSlot)element);
 //				break;
 //			}
 //			
 //		}
 //	}
 	
-	public StyledString getStyledText(final IRSourceUnit sourceUnit) {
+	public StyledString getStyledText(final RSourceUnit sourceUnit) {
 		final ElementName elementName= sourceUnit.getElementName();
 		final StyledString text= new StyledString(elementName.getDisplayName(), this.defaultStyler);
 		if ((this.style & RESOURCE_PATH) != 0) {
@@ -518,7 +518,7 @@
 		return text;
 	}
 	
-	public int[] getStyledTextRegions(final IRSourceUnit sourceUnit,
+	public int[] getStyledTextRegions(final RSourceUnit sourceUnit,
 			final int flags, final int[] regions) {
 		return regions;
 	}
@@ -536,7 +536,7 @@
 	
 	@Override
 	public Image getImage(final Object element) {
-		final IModelElement modelElement= LTKUtils.getModelElement(element);
+		final LtkModelElement modelElement= LtkModelUtils.getModelElement(element);
 		if (modelElement != null) {
 			if (modelElement instanceof CombinedRElement) {
 				return getImage((CombinedRElement) modelElement);
@@ -551,7 +551,7 @@
 		if (element instanceof ElementPartition) {
 			return getText((ElementPartition) element);
 		}
-		final IModelElement modelElement= LTKUtils.getModelElement(element);
+		final LtkModelElement modelElement= LtkModelUtils.getModelElement(element);
 		if (modelElement != null) {
 //			if (modelElement instanceof ICombinedRElement) {
 //				return getText((ICombinedRElement) modelElement);
@@ -564,7 +564,7 @@
 	@Override
 	public void update(final ViewerCell cell) {
 		final Object element= cell.getElement();
-		final IModelElement modelElement= LTKUtils.getModelElement(element);
+		final LtkModelElement modelElement= LtkModelUtils.getModelElement(element);
 		if (element instanceof ElementPartition) {
 			update(cell, (ElementPartition) element, modelElement);
 			super.update(cell);
@@ -581,7 +581,7 @@
 		}
 	}
 	
-	public void update(final ViewerCell cell, final IModelElement element) {
+	public void update(final ViewerCell cell, final LtkModelElement element) {
 		Image image= null;
 		StyledString styledText= null;
 		
@@ -614,7 +614,7 @@
 		}
 	}
 	
-	public void update(final ViewerCell cell, final ElementPartition partition, final IModelElement element) {
+	public void update(final ViewerCell cell, final ElementPartition partition, final LtkModelElement element) {
 		cell.setImage(ECommonsDebugUIResources.INSTANCE.getImage(
 				ECommonsDebugUIResources.OBJ_VARIABLE_PARTITION ));
 		
@@ -647,24 +647,24 @@
 	public String getToolTipText(final Object element) {
 		final StringBuilder text;
 		
-		final IModelElement modelElement= LTKUtils.getModelElement(element);
+		final LtkModelElement modelElement= LtkModelUtils.getModelElement(element);
 		if (modelElement != null) {
 			switch ((modelElement.getElementType() & MASK_C1) >> SHIFT_C1) {
 			
-			case (IModelElement.C1_METHOD >> SHIFT_C1): {
+			case (LtkModelElement.C1_METHOD >> SHIFT_C1): {
 				text= new StringBuilder();
-				appendMethodMLText(text, (IRMethod) modelElement);
+				appendMethodMLText(text, (RLangMethod)modelElement);
 				return text.toString(); }
 			
-			case (IModelElement.C1_CLASS >> SHIFT_C1):
+			case (LtkModelElement.C1_CLASS >> SHIFT_C1):
 				switch (modelElement.getElementType() & MASK_C2) {
-				case IRElement.R_S4CLASS:
+				case RElement.R_S4CLASS:
 					text= new StringBuilder();
-					appendClassMLText(text, (IRClass) modelElement);
+					appendClassMLText(text, (RLangClass)modelElement);
 					return text.toString();
-				case IRElement.R_S4CLASS_EXTENSION:
+				case RElement.R_S4CLASS_EXTENSION:
 					text= new StringBuilder();
-					appendClassExtMLText(text, (IRClassExtension) modelElement);
+					appendClassExtMLText(text, (RLangClassExtension)modelElement);
 					return text.toString();
 				default:
 					return null;
@@ -674,9 +674,9 @@
 		return null;
 	}
 	
-	protected void appendMethodDetail(final StringBuilder text, final IRMethod method) {
+	protected void appendMethodDetail(final StringBuilder text, final RLangMethod method) {
 		final ArgsDefinition args= method.getArgsDefinition();
-		final boolean showTypes= (method.getElementType() == IRElement.R_S4METHOD);
+		final boolean showTypes= (method.getElementType() == RElement.R_S4METHOD);
 		text.append('(');
 		if (args == null) {
 			text.append("<unknown>");
@@ -722,9 +722,9 @@
 		}
 	}
 	
-	protected void appendMethodDetail(final StyledString text, final IRMethod method) {
+	protected void appendMethodDetail(final StyledString text, final RLangMethod method) {
 		final ArgsDefinition args= method.getArgsDefinition();
-		final boolean showTypes= (method.getElementType() == IRElement.R_S4METHOD);
+		final boolean showTypes= (method.getElementType() == RElement.R_S4METHOD);
 		text.append("(", this.defaultStyler); //$NON-NLS-1$
 		if (args == null) {
 			text.append("<unknown>", this.defaultStyler);
@@ -749,9 +749,9 @@
 		text.append(")", this.defaultStyler); //$NON-NLS-1$
 	}
 	
-	protected void appendMethodDetailAssignmentSpecial(final StyledString text, final IRMethod method) {
+	protected void appendMethodDetailAssignmentSpecial(final StyledString text, final RLangMethod method) {
 		final ArgsDefinition args= method.getArgsDefinition();
-		final boolean showTypes= (method.getElementType() == IRElement.R_S4METHOD);
+		final boolean showTypes= (method.getElementType() == RElement.R_S4METHOD);
 		text.append("(", this.defaultStyler); //$NON-NLS-1$
 		if (args == null) {
 			text.append("<unknown>", this.defaultStyler);
@@ -808,7 +808,7 @@
 		}
 	}
 	
-	protected void appendMethodMLText(final StringBuilder sb, final IRMethod method) {
+	protected void appendMethodMLText(final StringBuilder sb, final RLangMethod method) {
 		final ArgsDefinition args= method.getArgsDefinition();
 		final String name= method.getElementName().getDisplayName();
 		if (name != null) {
@@ -841,7 +841,7 @@
 		}
 	}
 	
-	protected void appendClassMLText(final StringBuilder sb, final IRClass clazz) {
+	protected void appendClassMLText(final StringBuilder sb, final RLangClass clazz) {
 		final List<String> extendedClassNames= clazz.getExtendedClassNames();
 		final String name= clazz.getElementName().getDisplayName();
 		if (name != null) {
@@ -859,7 +859,7 @@
 		}
 	}
 	
-	protected void appendClassExtDetail(final StyledString text, final IRClassExtension ext) {
+	protected void appendClassExtDetail(final StyledString text, final RLangClassExtension ext) {
 		final String command= ext.getExtCommand();
 		if (command != null) {
 			if (command.equals("setIs")) { //$NON-NLS-1$
@@ -875,7 +875,7 @@
 		}
 	}
 	
-	protected void appendClassExtDetail(final StringBuilder sb, final IRClassExtension ext) {
+	protected void appendClassExtDetail(final StringBuilder sb, final RLangClassExtension ext) {
 		final String command= ext.getExtCommand();
 		if (command != null) {
 			if (command.equals("setIs")) { //$NON-NLS-1$
@@ -891,7 +891,7 @@
 		}
 	}
 	
-	protected void appendClassExtMLText(final StringBuilder text, final IRClassExtension ext) {
+	protected void appendClassExtMLText(final StringBuilder text, final RLangClassExtension ext) {
 		final String name= ext.getElementName().getDisplayName();
 		if (name != null) {
 			text.append(name);
@@ -909,7 +909,7 @@
 		}
 	}
 	
-	protected void appendSlotDetail(final StyledString text, final IRSlot slot) {
+	protected void appendSlotDetail(final StyledString text, final RLangSlot slot) {
 		final String type= slot.getTypeName();
 		if (type != null) {
 			text.append(" : ", StyledString.DECORATIONS_STYLER); //$NON-NLS-1$
@@ -917,7 +917,7 @@
 		}
 	}
 	
-	protected void appendSlotDetail(final StringBuilder text, final IRSlot slot) {
+	protected void appendSlotDetail(final StringBuilder text, final RLangSlot slot) {
 	}
 	
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/IRSourceEditor.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/IRSourceEditor.java
index 179a582..2a32062 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/IRSourceEditor.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/IRSourceEditor.java
@@ -15,16 +15,16 @@
 package org.eclipse.statet.r.ui.editors;
 
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
-import org.eclipse.statet.r.core.IRCoreAccess;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.RCoreAccess;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 
 
 public interface IRSourceEditor extends ISourceEditor {
 	
 	
-	IRCoreAccess getRCoreAccess();
+	RCoreAccess getRCoreAccess();
 	
 	@Override
-	IRSourceUnit getSourceUnit();
+	RSourceUnit getSourceUnit();
 	
 }
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RCorrectIndentHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RCorrectIndentHandler.java
index 07e9cd0..1a93510 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RCorrectIndentHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RCorrectIndentHandler.java
@@ -34,12 +34,12 @@
 
 import org.eclipse.statet.internal.r.ui.RUIMessages;
 import org.eclipse.statet.ltk.ast.core.AstInfo;
-import org.eclipse.statet.ltk.model.core.SourceDocumentRunnable;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceDocumentRunnable;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorProgressHandler;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.rsource.RSourceIndenter;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 
@@ -70,7 +70,7 @@
 	}
 	
 	@Override
-	protected void doExecute(final ISourceEditor editor, final ISourceUnit su,
+	protected void doExecute(final ISourceEditor editor, final SourceUnit su,
 			final ITextSelection selection, final IProgressMonitor monitor) throws Exception {
 		final AbstractDocument document= su.getDocument(monitor);
 		final AstInfo ast= su.getAstInfo(null, true, monitor);
@@ -100,7 +100,7 @@
 				rEndLine--;
 			}
 			if (rStartLine <= rEndLine) {
-				this.fIndenter.setup((su instanceof IRSourceUnit) ? ((IRSourceUnit) su).getRCoreAccess() : RCore.getWorkbenchAccess());
+				this.fIndenter.setup((su instanceof RSourceUnit) ? ((RSourceUnit)su).getRCoreAccess() : RCore.getWorkbenchAccess());
 				final TextEdit rEdits= this.fIndenter.getIndentEdits(document, ast.getRoot(),
 						region.getStartOffset(), rStartLine, rEndLine );
 				if (rEdits.getChildrenSize() > 0) {
@@ -110,7 +110,7 @@
 		}
 		
 		if (edits.getChildrenSize() > 0) {
-			su.syncExec(new SourceDocumentRunnable(document, ast.getStamp().getSourceStamp(),
+			su.syncExec(new SourceDocumentRunnable(document, ast.getStamp().getContentStamp(),
 					DocumentRewriteSessionType.SEQUENTIAL ) {
 				@Override
 				public void run() throws InvocationTargetException {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RElementSearchHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RElementSearchHandler.java
index 879283f..e56400a 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RElementSearchHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RElementSearchHandler.java
@@ -34,14 +34,14 @@
 
 import org.eclipse.statet.internal.r.ui.search.RElementSearch;
 import org.eclipse.statet.internal.r.ui.search.RElementSearchQuery;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.LTKUI;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.util.LTKSelectionUtils;
 import org.eclipse.statet.ltk.ui.util.LTKWorkbenchUIUtil;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.refactoring.RElementSearchProcessor;
 import org.eclipse.statet.r.core.refactoring.RElementSearchProcessor.Mode;
 import org.eclipse.statet.r.core.refactoring.RRefactoringAdapter;
@@ -104,8 +104,8 @@
 			final ITextSelection textSelection= (ITextSelection) selection;
 			final ISourceEditor editor= part.getAdapter(ISourceEditor.class);
 			if (editor != null) {
-				final ISourceUnit su= editor.getSourceUnit();
-				if (su instanceof IRSourceUnit) {
+				final SourceUnit su= editor.getSourceUnit();
+				if (su instanceof RSourceUnit) {
 					final IProgressMonitor monitor= new NullProgressMonitor();
 					
 					final RAstNode node= this.ltkAdapter.searchPotentialNameNode(su,
@@ -115,7 +115,7 @@
 						final RElementAccess subAccess= RElementAccess.getElementAccessOfNameNode(node);
 						if (mainAccess != null && subAccess != null) {
 							final RElementName name= RElementName.create(mainAccess, subAccess.getNextSegment(), false);
-							status= startSearch(name, (IRSourceUnit) su, mainAccess, mode);
+							status= startSearch(name, (RSourceUnit) su, mainAccess, mode);
 						}
 					}
 				}
@@ -134,7 +134,7 @@
 	
 	
 	protected IStatus startSearch(final RElementName name,
-			final IRSourceUnit sourceUnit, final RElementAccess mainAccess,
+			final RSourceUnit sourceUnit, final RElementAccess mainAccess,
 			final Mode mode) {
 		final RElementSearch searchProcessor= new RElementSearch(name, sourceUnit, mainAccess,
 				mode, (this.commandId == LTKUI.SEARCH_WRITE_ELEMENT_ACCESS_COMMAND_ID) );
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RMarkOccurrencesLocator.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RMarkOccurrencesLocator.java
index e6fc47e..cb69b24 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RMarkOccurrencesLocator.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RMarkOccurrencesLocator.java
@@ -30,14 +30,14 @@
 import org.eclipse.statet.ecommons.text.ui.presentation.ITextPresentationConstants;
 
 import org.eclipse.statet.ltk.ast.core.util.AstSelection;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.ltk.ui.sourceediting.AbstractMarkOccurrencesProvider.RunData;
-import org.eclipse.statet.r.core.model.IRModelInfo;
 import org.eclipse.statet.r.core.model.RElementAccess;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 import org.eclipse.statet.r.core.rsource.ast.DocuComment;
 import org.eclipse.statet.r.core.rsource.ast.DocuTag;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.core.rsource.ast.SourceComponent;
 
@@ -45,7 +45,7 @@
 public class RMarkOccurrencesLocator {
 	
 	
-	public void run(final RunData run, final ISourceUnitModelInfo info,
+	public void run(final RunData run, final SourceUnitModelInfo info,
 			final AstSelection astSelection, final ITextSelection orgSelection)
 			throws BadLocationException, BadPartitioningException, UnsupportedOperationException {
 		RAstNode node = (RAstNode) astSelection.getCovering();
@@ -53,7 +53,7 @@
 			return;
 		}
 		
-		if (orgSelection != null && info instanceof IRModelInfo) {
+		if (orgSelection != null && info instanceof RSourceUnitModelInfo) {
 			final int start = orgSelection.getOffset();
 			final int stop = start + orgSelection.getLength();
 			if (info.getAst().getRoot() instanceof SourceComponent) {
@@ -127,7 +127,7 @@
 									ITextPresentationConstants.ANNOTATIONS_WRITE_OCCURRENCES_TYPE:
 									ITextPresentationConstants.ANNOTATIONS_COMMON_OCCURRENCES_TYPE,
 									false, message),
-							RAst.getElementNamePosition(aAccess.getNameNode()) );
+							RAsts.getElementNamePosition(aAccess.getNameNode()) );
 				}
 				return annotations;
 			}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RdDocumentSetupParticipant.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RdDocumentSetupParticipant.java
index 4946bd7..c0cc118 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RdDocumentSetupParticipant.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RdDocumentSetupParticipant.java
@@ -17,7 +17,7 @@
 import org.eclipse.statet.ecommons.text.Partitioner;
 import org.eclipse.statet.ecommons.text.PartitionerDocumentSetupParticipant;
 
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.ui.text.rd.RdFastPartitionScanner;
 
 
@@ -27,8 +27,8 @@
 public class RdDocumentSetupParticipant extends PartitionerDocumentSetupParticipant {
 	
 	
-	private static final String[] CONTENT_TYPES= IRDocumentConstants.RDOC_CONTENT_TYPES.toArray(
-			new String[IRDocumentConstants.RDOC_CONTENT_TYPES.size()] );
+	private static final String[] CONTENT_TYPES= RDocumentConstants.RDOC_CONTENT_TYPES.toArray(
+			new String[RDocumentConstants.RDOC_CONTENT_TYPES.size()] );
 	
 	
 	public RdDocumentSetupParticipant() {
@@ -37,7 +37,7 @@
 	
 	@Override
 	public String getPartitioningId() {
-		return IRDocumentConstants.RDOC_PARTITIONING;
+		return RDocumentConstants.RDOC_PARTITIONING;
 	}
 	
 	@Override
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RdSourceViewerConfiguration.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RdSourceViewerConfiguration.java
index 1513488..eed9b53 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RdSourceViewerConfiguration.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RdSourceViewerConfiguration.java
@@ -37,9 +37,9 @@
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfiguration;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.ContentAssist;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.RCoreAccess;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RdDocumentContentInfo;
 import org.eclipse.statet.r.ui.text.rd.RdCodeScanner;
 import org.eclipse.statet.r.ui.text.rd.RdDoubleClickStrategy;
@@ -52,15 +52,15 @@
 		implements ISettingsChangedHandler {
 	
 	
-	private static final String[] CONTENT_TYPES= IRDocumentConstants.RDOC_CONTENT_TYPES.toArray(
-			new String[IRDocumentConstants.RDOC_CONTENT_TYPES.size()] );
+	private static final String[] CONTENT_TYPES= RDocumentConstants.RDOC_CONTENT_TYPES.toArray(
+			new String[RDocumentConstants.RDOC_CONTENT_TYPES.size()] );
 	
 	private static final char[][] BRACKETS = { { '{', '}' } };
 	
 	
 	private final RdDoubleClickStrategy fDoubleClickStrategy;
 	
-	private IRCoreAccess fRCoreAccess;
+	private RCoreAccess fRCoreAccess;
 	
 	
 	public RdSourceViewerConfiguration(final int flags) {
@@ -69,7 +69,7 @@
 	
 	public RdSourceViewerConfiguration(final int flags,
 			final ISourceEditor sourceEditor,
-			final IRCoreAccess access,
+			final RCoreAccess access,
 			final IPreferenceStore preferenceStore, final TextStyleManager textStyles) {
 		super(RdDocumentContentInfo.INSTANCE, flags, sourceEditor);
 		setCoreAccess(access);
@@ -81,7 +81,7 @@
 		this.fDoubleClickStrategy = new RdDoubleClickStrategy();
 	}
 	
-	protected void setCoreAccess(final IRCoreAccess access) {
+	protected void setCoreAccess(final RCoreAccess access) {
 		this.fRCoreAccess = (access != null) ? access : RCore.getWorkbenchAccess();
 	}
 	
@@ -95,11 +95,11 @@
 	protected void initScanners() {
 		final TextStyleManager textStyles= getTextStyles();
 		
-		addScanner(IRDocumentConstants.RDOC_DEFAULT_CONTENT_TYPE,
+		addScanner(RDocumentConstants.RDOC_DEFAULT_CONTENT_TYPE,
 				new RdCodeScanner(textStyles) );
-		addScanner(IRDocumentConstants.RDOC_COMMENT_CONTENT_TYPE,
+		addScanner(RDocumentConstants.RDOC_COMMENT_CONTENT_TYPE,
 				new CommentScanner(textStyles, COMMENT, TASK_TAG, this.fRCoreAccess.getPrefs()) );
-		addScanner(IRDocumentConstants.RDOC_COMMENT_CONTENT_TYPE,
+		addScanner(RDocumentConstants.RDOC_COMMENT_CONTENT_TYPE,
 				new SingleTokenScanner(textStyles, PLATFORM_SPECIF ) );
 	}
 	
@@ -113,7 +113,7 @@
 	@Override
 	public ICharPairMatcher getPairMatcher() {
 		return new PairMatcher(BRACKETS, getDocumentContentInfo(),
-					new String[] { IRDocumentConstants.RDOC_DEFAULT_CONTENT_TYPE }, '\\');
+					new String[] { RDocumentConstants.RDOC_DEFAULT_CONTENT_TYPE }, '\\');
 	}
 	
 	@Override
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RdSourceViewerConfigurator.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RdSourceViewerConfigurator.java
index aa73a04..f5ab6ea 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RdSourceViewerConfigurator.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/RdSourceViewerConfigurator.java
@@ -24,9 +24,9 @@
 
 import org.eclipse.statet.base.core.preferences.TaskTagsPreferences;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCodeStyleSettings;
 import org.eclipse.statet.r.core.RCore;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.rj.renv.core.REnv;
 
 
@@ -34,7 +34,7 @@
  * Configurator for Rd source viewers.
  */
 public class RdSourceViewerConfigurator extends SourceEditorViewerConfigurator
-		implements IRCoreAccess {
+		implements RCoreAccess {
 	
 	
 	private static final Set<String> RESET_GROUPS_IDS= new HashSet<>(Arrays.asList(new String[] {
@@ -42,10 +42,10 @@
 	}));
 	
 	
-	private IRCoreAccess fSourceCoreAccess;
+	private RCoreAccess fSourceCoreAccess;
 	
 	
-	public RdSourceViewerConfigurator(final IRCoreAccess core,
+	public RdSourceViewerConfigurator(final RCoreAccess core,
 			final RdSourceViewerConfiguration config) {
 		super(config);
 		config.setCoreAccess(this);
@@ -64,7 +64,7 @@
 	}
 	
 	
-	public void setSource(IRCoreAccess newAccess) {
+	public void setSource(RCoreAccess newAccess) {
 		if (newAccess == null) {
 			newAccess = RCore.getWorkbenchAccess();
 		}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/templates/REditorContext.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/templates/REditorContext.java
index 7447a34..228346c 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/templates/REditorContext.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/editors/templates/REditorContext.java
@@ -36,9 +36,9 @@
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.templates.SourceEditorTemplateContext;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCodeStyleSettings;
 import org.eclipse.statet.r.core.RCore;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.rlang.RTerminal;
 import org.eclipse.statet.r.core.rlang.RTokens;
 import org.eclipse.statet.r.core.rsource.RLexer;
@@ -56,7 +56,7 @@
 	}
 	
 	
-	protected IRCoreAccess getRCoreAccess() {
+	protected RCoreAccess getRCoreAccess() {
 		final ISourceEditor editor= getEditor();
 		return (editor instanceof IRSourceEditor) ?
 				((IRSourceEditor) editor).getRCoreAccess() :
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/InsertAssignmentHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/InsertAssignmentHandler.java
index c1bd9b4..d63785b 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/InsertAssignmentHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/InsertAssignmentHandler.java
@@ -26,12 +26,12 @@
 import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCodeStyleSettings;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.RCoreAccess;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.rlang.RTokens;
 
 
@@ -64,9 +64,9 @@
 	}
 	
 	private RCodeStyleSettings getCodeStyle() {
-		final ISourceUnit sourceUnit= this.editor.getSourceUnit();
-		final IRCoreAccess coreAccess= (sourceUnit instanceof IRSourceUnit) ?
-				((IRSourceUnit) sourceUnit).getRCoreAccess() : RCore.getWorkbenchAccess();
+		final SourceUnit sourceUnit= this.editor.getSourceUnit();
+		final RCoreAccess coreAccess= (sourceUnit instanceof RSourceUnit) ?
+				((RSourceUnit)sourceUnit).getRCoreAccess() : RCore.getWorkbenchAccess();
 		return coreAccess.getRCodeStyle();
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAssistInvocationContext.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAssistInvocationContext.java
index 6514860..047ebe9 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAssistInvocationContext.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAssistInvocationContext.java
@@ -38,25 +38,25 @@
 import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.ltk.ast.core.AstNode;
 import org.eclipse.statet.ltk.ast.core.util.AstSelection;
-import org.eclipse.statet.ltk.model.core.IModelManager;
+import org.eclipse.statet.ltk.model.core.ModelManager;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.AssistInvocationContext;
 import org.eclipse.statet.nico.ui.NicoUITools;
 import org.eclipse.statet.nico.ui.console.ConsolePageEditor;
 import org.eclipse.statet.r.console.core.RProcess;
 import org.eclipse.statet.r.console.core.util.LoadReferencesUtil;
-import org.eclipse.statet.r.core.IRCoreAccess;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.data.CombinedRElement;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 import org.eclipse.statet.r.core.rlang.RTokens;
 import org.eclipse.statet.r.core.rsource.RLexer;
 import org.eclipse.statet.r.core.rsource.ast.FCall;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 import org.eclipse.statet.r.ui.editors.IRSourceEditor;
 
@@ -196,7 +196,7 @@
 			final RHeuristicTokenScanner scanner,
 			final IProgressMonitor monitor) {
 		super(editor, offset, contentType,
-				(isProposal) ? IModelManager.MODEL_FILE : IModelManager.NONE, monitor );
+				(isProposal) ? ModelManager.MODEL_FILE : ModelManager.NONE, monitor );
 		
 		this.scanner= scanner;
 		
@@ -207,7 +207,7 @@
 			final IRegion region, final String contentType,
 			final RHeuristicTokenScanner scanner,
 			final IProgressMonitor monitor) {
-		super(editor, region, contentType, IModelManager.MODEL_FILE, monitor);
+		super(editor, region, contentType, ModelManager.MODEL_FILE, monitor);
 		
 		this.scanner= scanner;
 		
@@ -252,11 +252,11 @@
 	}
 	
 	@Override
-	public @Nullable IRSourceUnit getSourceUnit() {
-		return (IRSourceUnit) super.getSourceUnit();
+	public @Nullable RSourceUnit getSourceUnit() {
+		return (RSourceUnit)super.getSourceUnit();
 	}
 	
-	public IRCoreAccess getRCoreAccess() {
+	public RCoreAccess getRCoreAccess() {
 		return getEditor().getRCoreAccess();
 	}
 	
@@ -299,8 +299,8 @@
 		byte validModes= (PARSE_SYMBOL | PARSE_OPERATOR);
 		final String partitioning= getEditor().getDocumentContentInfo().getPartitioning();
 		ITypedRegion partition= document.getPartition(partitioning, offset, true);
-		if (partition.getType() == IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE
-				|| partition.getType() == IRDocumentConstants.R_STRING_CONTENT_TYPE) {
+		if (partition.getType() == RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE
+				|| partition.getType() == RDocumentConstants.R_STRING_CONTENT_TYPE) {
 			offset= partition.getOffset();
 			currentMode= PARSE_OPERATOR;
 		}
@@ -347,7 +347,7 @@
 				case '`':
 					if ((currentMode & PARSE_SYMBOL) != 0) {
 						partition= document.getPartition(partitioning, offset - 1, false);
-						if (partition.getType() == IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE) {
+						if (partition.getType() == RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE) {
 							offset= partition.getOffset();
 							startOffset= offset;
 							currentMode= (byte) (validModes & PARSE_OPERATOR);
@@ -388,8 +388,8 @@
 		int offset= endOffset;
 		final String partitioning= getEditor().getDocumentContentInfo().getPartitioning();
 		final ITypedRegion partition= document.getPartition(partitioning, offset, true);
-		if (partition.getType() == IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE
-				|| partition.getType() == IRDocumentConstants.R_STRING_CONTENT_TYPE) {
+		if (partition.getType() == RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE
+				|| partition.getType() == RDocumentConstants.R_STRING_CONTENT_TYPE) {
 			return partition.getOffset();
 		}
 		int startOffset= offset;
@@ -551,7 +551,7 @@
 				final int bound= document.getLineOffset(
 						Math.max(document.getLineOfOffset(docOffset) - 2, 0) );
 				
-				scanner.configure(document, IRDocumentConstants.R_NO_COMMENT_CONTENT_CONSTRAINT);
+				scanner.configure(document, RDocumentConstants.R_NO_COMMENT_CONTENT_CONSTRAINT);
 				docOffset= scanner.findNonBlankBackward(docOffset, bound - 1, true);
 				if (docOffset != NOT_FOUND) {
 					return docOffset + 1 - docOffsetShift; // behind first relevant
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java
index 1651c6b..3884910 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java
@@ -16,7 +16,7 @@
 
 import static org.eclipse.statet.ecommons.text.ui.BracketLevel.AUTODELETE;
 
-import static org.eclipse.statet.r.core.source.IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT;
+import static org.eclipse.statet.r.core.source.RDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT;
 import static org.eclipse.statet.r.core.source.RHeuristicTokenScanner.CURLY_BRACKET_TYPE;
 import static org.eclipse.statet.r.core.source.RHeuristicTokenScanner.ROUND_BRACKET_TYPE;
 import static org.eclipse.statet.r.core.source.RHeuristicTokenScanner.SQUARE_BRACKET_TYPE;
@@ -72,12 +72,12 @@
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditorAddon;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor1;
 import org.eclipse.statet.nico.ui.console.InputSourceViewer;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCodeStyleSettings;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.rsource.RSourceIndenter;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.core.rsource.ast.RScanner;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 import org.eclipse.statet.r.ui.RUI;
 import org.eclipse.statet.r.ui.editors.REditorOptions;
@@ -141,7 +141,7 @@
 	private final SourceViewer viewer;
 	private final RealTypeListener typeListener;
 	
-	private final IRCoreAccess rCoreAccess;
+	private final RCoreAccess rCoreAccess;
 	private final REditorOptions editorOptions;
 	
 	private AbstractDocument document;
@@ -153,7 +153,7 @@
 	private boolean ignoreCommands= false;
 	
 	
-	public RAutoEditStrategy(final IRCoreAccess rCoreAccess, final ISourceEditor editor) {
+	public RAutoEditStrategy(final RCoreAccess rCoreAccess, final ISourceEditor editor) {
 		assert (rCoreAccess != null);
 		assert (editor != null);
 		
@@ -279,8 +279,9 @@
 		if (line > 0 && this.scanner.findAnyNonBlankBackward(offset, this.document.getLineOffset(line)-1, false) == ITokenScanner.NOT_FOUND) {
 			final IRegion prevLineInfo= this.document.getLineInformation(line-1);
 			if (prevLineInfo.getLength() > 0 && TextUtilities.getPartition(this.document,
-					this.scanner.getDocumentPartitioning(),
-					prevLineInfo.getOffset()+prevLineInfo.getLength()-1, false).getType() == IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
+							this.scanner.getDocumentPartitioning(),
+							prevLineInfo.getOffset() + prevLineInfo.getLength() - 1, false )
+					.getType() == RDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
 				return true;
 			}
 		}
@@ -358,8 +359,8 @@
 			KEY: switch (c) {
 			case '\t':
 				if (R_DEFAULT_CONTENT_CONSTRAINT.matches(contentType)
-						|| contentType == IRDocumentConstants.R_COMMENT_CONTENT_TYPE
-						|| contentType == IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE ) {
+						|| contentType == RDocumentConstants.R_COMMENT_CONTENT_TYPE
+						|| contentType == RDocumentConstants.R_ROXYGEN_CONTENT_TYPE ) {
 					if (command.length == 0 || this.document.getLineOfOffset(command.offset) == this.document.getLineOfOffset(cEnd)) {
 						command.text= "\t"; //$NON-NLS-1$
 						switch (smartIndentOnTab(command)) {
@@ -452,7 +453,7 @@
 				if (R_DEFAULT_CONTENT_CONSTRAINT.matches(contentType)
 						&& this.editorOptions.isSmartSpecialPercentEnabled()) {
 					final IRegion line= this.document.getLineInformationOfOffset(cEnd);
-					this.scanner.configure(this.document, IRDocumentConstants.R_INFIX_OPERATOR_CONTENT_TYPE);
+					this.scanner.configure(this.document, RDocumentConstants.R_INFIX_OPERATOR_CONTENT_TYPE);
 					if (this.scanner.count(cEnd, line.getOffset()+line.getLength(), '%') % 2 == 0) {
 						command.text= "%%"; //$NON-NLS-1$
 						linkedMode= 2 | AUTODELETE;
@@ -476,12 +477,12 @@
 				return false;
 			case '\n':
 				if (R_DEFAULT_CONTENT_CONSTRAINT.matches(contentType)
-						|| contentType == IRDocumentConstants.R_COMMENT_CONTENT_TYPE) {
+						|| contentType == RDocumentConstants.R_COMMENT_CONTENT_TYPE) {
 					command.text= TextUtilities.getDefaultLineDelimiter(this.document);
 					smartIndentOnNewLine(command, contentType);
 					break KEY;
 				}
-				else if (contentType == IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
+				else if (contentType == RDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
 					command.text= TextUtilities.getDefaultLineDelimiter(this.document);
 					smartIndentAfterNewLine1(command, command.text);
 					break KEY;
@@ -731,16 +732,16 @@
 		
 		final ITypedRegion partition= this.document.getPartition(
 				this.scanner.getDocumentPartitioning(), checkOffset, true );
-		if (partition.getType() == IRDocumentConstants.R_COMMENT_CONTENT_TYPE) {
+		if (partition.getType() == RDocumentConstants.R_COMMENT_CONTENT_TYPE) {
 			checkOffset= partition.getOffset();
 		}
-		else if (partition.getType() == IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
+		else if (partition.getType() == RDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
 			checkOffset= -1;
 			if (c.length == 0 && line + 1 < this.document.getNumberOfLines()) {
 				final int offset= this.document.getLineOffset(line + 1);
 				this.scanner.configure(this.document);
 				final int next= this.scanner.findAnyNonBlankForward(offset, ITokenScanner.UNBOUND, true);
-				if (next >= 0 && this.scanner.getPartition(next).getType() == IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
+				if (next >= 0 && this.scanner.getPartition(next).getType() == RDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
 					sb.append("#' "); //$NON-NLS-1$
 				}
 			}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RContentAssistProcessor.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RContentAssistProcessor.java
index 27bd02a..7241999 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RContentAssistProcessor.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RContentAssistProcessor.java
@@ -33,7 +33,7 @@
 import org.eclipse.statet.ltk.ui.sourceediting.assist.ContentAssistProcessor;
 import org.eclipse.statet.r.console.core.util.LoadReferencesUtil;
 import org.eclipse.statet.r.core.data.CombinedRElement;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 import org.eclipse.statet.r.ui.editors.IRSourceEditor;
 
@@ -137,13 +137,13 @@
 			if (offset < 2) {
 				return false;
 			}
-			this.scanner.configure(document, IRDocumentConstants.R_NO_COMMENT_CONTENT_CONSTRAINT);
+			this.scanner.configure(document, RDocumentConstants.R_NO_COMMENT_CONTENT_CONSTRAINT);
 			final int previousOffset = this.scanner.findNonBlankBackward(offset, RHeuristicTokenScanner.UNBOUND, true);
 			if (previousOffset > 0) {
 				final char c = document.getChar(previousOffset);
 				if (c == '(' || c == ',') {
 					final String partitionType = this.scanner.getPartition(previousOffset).getType();
-					return (IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(partitionType));
+					return (RDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(partitionType));
 				}
 			}
 		}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RElementCompletionComputer.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RElementCompletionComputer.java
index 07203f1..ee3ec87 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RElementCompletionComputer.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RElementCompletionComputer.java
@@ -46,7 +46,7 @@
 import org.eclipse.statet.internal.r.ui.editors.RPkgCompletionProposal;
 import org.eclipse.statet.internal.r.ui.editors.RSimpleCompletionProposal;
 import org.eclipse.statet.ltk.ast.core.AstNode;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
 import org.eclipse.statet.ltk.ui.ElementLabelProvider;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.AssistInvocationContext;
@@ -60,22 +60,22 @@
 import org.eclipse.statet.r.core.RSymbolComparator;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.model.ArgsDefinition;
-import org.eclipse.statet.r.core.model.IRElement;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRFrameInSource;
-import org.eclipse.statet.r.core.model.IRLangElement;
-import org.eclipse.statet.r.core.model.IRMethod;
 import org.eclipse.statet.r.core.model.RCoreFunctions;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
+import org.eclipse.statet.r.core.model.RLangElement;
+import org.eclipse.statet.r.core.model.RLangMethod;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceFrame;
 import org.eclipse.statet.r.core.pkgmanager.IRPkgManager;
 import org.eclipse.statet.r.core.rlang.RTokens;
 import org.eclipse.statet.r.core.rsource.ast.FCall;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
-import org.eclipse.statet.r.core.rsource.ast.RAst.FCallArgMatch;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
+import org.eclipse.statet.r.core.rsource.ast.RAsts.FCallArgMatch;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 import org.eclipse.statet.r.ui.RLabelProvider;
 import org.eclipse.statet.r.ui.sourceediting.RAssistInvocationContext.FCallInfo;
@@ -99,7 +99,7 @@
 	private static final PartitionConstraint NO_R_COMMENT_CONSTRAINT= new PartitionConstraint() {
 		@Override
 		public boolean matches(final String partitionType) {
-			return (partitionType != IRDocumentConstants.R_COMMENT_CONTENT_TYPE);
+			return (partitionType != RDocumentConstants.R_COMMENT_CONTENT_TYPE);
 		};
 	};
 	
@@ -250,7 +250,7 @@
 			return;
 		}
 		
-		this.inString= (context.getInvocationContentType() == IRDocumentConstants.R_STRING_CONTENT_TYPE);
+		this.inString= (context.getInvocationContentType() == RDocumentConstants.R_STRING_CONTENT_TYPE);
 		this.inDefault= !this.inString;
 		
 		this.pkgNamePrio= NA_PRIO;
@@ -317,8 +317,8 @@
 		}
 	}
 	
-	protected List<? extends IRLangElement> getChildren(final RAssistInvocationContext context,
-			IRLangElement e) {
+	protected List<? extends RLangElement> getChildren(final RAssistInvocationContext context,
+			RLangElement e) {
 		if (e instanceof RReference) {
 			final RReference ref= (RReference) e;
 			final RObject rObject= ref.getResolvedRObject();
@@ -403,15 +403,15 @@
 		final List<String> methodNames= new ArrayList<>();
 		
 		for (final RFrameIterator iter= this.searchPath.iterator(); iter.hasNext();) {
-			final IRFrame envir= iter.next();
+			final RFrame envir= iter.next();
 			parameters.baseRelevance= iter.getRelevance();
 			
-			final List<? extends IRElement> elements= envir.getModelChildren(null);
-			for (final IRElement element : elements) {
+			final List<? extends RElement> elements= envir.getModelChildren(null);
+			for (final RElement element : elements) {
 				final RElementName elementName= element.getElementName();
-				final int c1type= (element.getElementType() & IModelElement.MASK_C1);
-				final boolean isRich= (c1type == IModelElement.C1_METHOD);
-				if ((isRich || c1type == IModelElement.C1_VARIABLE)
+				final int c1type= (element.getElementType() & LtkModelElement.MASK_C1);
+				final boolean isRich= (c1type == LtkModelElement.C1_METHOD);
+				if ((isRich || c1type == LtkModelElement.C1_VARIABLE)
 						&& isCompletable(elementName)
 						&& parameters.matchesNamePattern(elementName.getSegmentName()) ) {
 					if ((parameters.baseRelevance < 0) && !isRich
@@ -437,12 +437,12 @@
 		
 		mainNames.addAll(methodNames);
 		for (final RFrameIterator iter= this.searchPath.iterator(); iter.hasNext();) {
-			final IRFrame envir= iter.next();
+			final RFrame envir= iter.next();
 			parameters.baseRelevance= 0;
 			
-			if (envir instanceof IRFrameInSource) {
-				final IRFrameInSource sframe= (IRFrameInSource) envir;
-				final Set<String> elementNames= sframe.getAllAccessNames();
+			if (envir instanceof RSourceFrame) {
+				final RSourceFrame sframe= (RSourceFrame)envir;
+				final Set<@Nullable String> elementNames= sframe.getAllAccessNames();
 				for (final String candidate : elementNames) {
 					if (candidate != null
 							&& !(candidate.equals(prefixSegmentName)
@@ -519,22 +519,22 @@
 		final List<String> methodNames= new ArrayList<>();
 		
 		for (final RFrameIterator iter= this.searchPath.iterator(); iter.hasNext();) {
-			final IRFrame envir= iter.next();
+			final RFrame envir= iter.next();
 			parameters.baseRelevance= iter.getRelevance();
 			
-			final List<? extends IRLangElement> elements= envir.getModelChildren(null);
-			ITER_ELEMENTS: for (final IRLangElement rootElement : elements) {
+			final List<? extends RLangElement> elements= envir.getModelChildren(null);
+			ITER_ELEMENTS: for (final RLangElement rootElement : elements) {
 				final RElementName elementName= rootElement.getElementName();
-				final int c1type= (rootElement.getElementType() & IModelElement.MASK_C1);
-				final boolean isRich= (c1type == IModelElement.C1_METHOD);
-				if (isRich || c1type == IModelElement.C1_VARIABLE) {
-					IRLangElement element= rootElement;
+				final int c1type= (rootElement.getElementType() & LtkModelElement.MASK_C1);
+				final boolean isRich= (c1type == LtkModelElement.C1_METHOD);
+				if (isRich || c1type == LtkModelElement.C1_VARIABLE) {
+					RLangElement element= rootElement;
 					RElementName prefixSegment= prefixName;
 					RElementName elementSegment= elementName;
 					ITER_SEGMENTS: for (int i= 0; i < count-1; i++) {
 						if (elementSegment == null) {
-							final List<? extends IRLangElement> children= getChildren(context, element);
-							for (final IRLangElement child : children) {
+							final List<? extends RLangElement> children= getChildren(context, element);
+							for (final RLangElement child : children) {
 								elementSegment= child.getElementName();
 								if (isCompletable(elementSegment)
 										&& elementSegment.getSegmentName().equals(prefixSegment.getSegmentName())) {
@@ -558,7 +558,7 @@
 					}
 					
 					final boolean childMode;
-					final List<? extends IRLangElement> children;
+					final List<? extends RLangElement> children;
 					if (elementSegment == null) {
 						childMode= true;
 						children= getChildren(context, element);
@@ -567,7 +567,7 @@
 						childMode= false;
 						children= Collections.singletonList(element);
 					}
-					for (final IRLangElement child : children) {
+					for (final RLangElement child : children) {
 						if (childMode) {
 							elementSegment= child.getElementName();
 						}
@@ -599,11 +599,11 @@
 		
 		mainNames.addAll(methodNames);
 		for (final RFrameIterator iter= this.searchPath.iterator(); iter.hasNext();) {
-			final IRFrame envir= iter.next();
+			final RFrame envir= iter.next();
 			parameters.baseRelevance= 0;
 			
-			if (envir instanceof IRFrameInSource) {
-				final IRFrameInSource sframe= (IRFrameInSource) envir;
+			if (envir instanceof RSourceFrame) {
+				final RSourceFrame sframe= (RSourceFrame)envir;
 				final List<? extends RElementAccess> allAccess= sframe.getAllAccessOf(
 						prefixName.getSegmentName(), true );
 				if (allAccess != null) {
@@ -654,7 +654,7 @@
 			
 			final FCallNamePattern pattern= new FCallNamePattern(fCallInfo.getAccess()) {
 				@Override
-				protected void handleMatch(final IRMethod element, final IRFrame frame,
+				protected void handleMatch(final RLangMethod element, final RFrame frame,
 						final RFrameIterator iterator) {
 					parameters.baseRelevance= iterator.getRelevance();
 					parameters.replacementName= element.getElementName();
@@ -762,13 +762,13 @@
 					final ArgsDefinition coreDef= this.coreFunction.getArgs(
 							getElementName().getSegmentName() );
 					if (coreDef != null) {
-						checkArgsDef(RAst.matchArgs(callArgs, coreDef), false, 0);
+						checkArgsDef(RAsts.matchArgs(callArgs, coreDef), false, 0);
 					}
 				}
 			}
 			
 			@Override
-			protected void handleMatch(final IRMethod element, final IRFrame frame,
+			protected void handleMatch(final RLangMethod element, final RFrame frame,
 					final RFrameIterator iter) {
 				final ArgsDefinition argsDef= element.getArgsDefinition();
 				if (argsDef == null) {
@@ -796,14 +796,14 @@
 				}
 				if (argValue) {
 					final FCall.Args callArgs= fCallInfo.getNode().getArgsChild();
-					if (!checkArgsDef(RAst.matchArgs(callArgs, argsDef), true, contextRelevance)
-							&& frame.getFrameType() == IRFrame.PACKAGE
+					if (!checkArgsDef(RAsts.matchArgs(callArgs, argsDef), true, contextRelevance)
+							&& frame.getFrameType() == RFrame.PACKAGE
 							&& this.coreFunction != null
 							&& this.coreFunction.getPackageNames().contains(frame.getElementName().getSegmentName()) ) {
 						final ArgsDefinition coreDef= this.coreFunction.getArgs(
 								getElementName().getSegmentName() );
 						if (coreDef != null) {
-							checkArgsDef(RAst.matchArgs(callArgs, coreDef), false, contextRelevance);
+							checkArgsDef(RAsts.matchArgs(callArgs, coreDef), false, contextRelevance);
 						}
 					}
 				}
@@ -897,7 +897,7 @@
 		if (help != null) {
 			try {
 				final ProposalParameters<RAssistInvocationContext> parameters= new ProposalParameters<>(
-						context, (context.getInvocationContentType() != IRDocumentConstants.R_DEFAULT_CONTENT_TYPE) ?
+						context, (context.getInvocationContentType() != RDocumentConstants.R_DEFAULT_CONTENT_TYPE) ?
 								context.getIdentifierLastSegmentOffset() + 1 :
 								context.getIdentifierLastSegmentOffset(),
 						new RSearchPattern(getSearchMatchRules(), prefixSegmentName),
@@ -905,8 +905,8 @@
 				final Map<String, RHelpTopicCompletionProposal> map= new HashMap<>();
 				this.searchPath.init(context, node, getSearchMode(context), prefixName.getScope());
 				final Set<String> pkgNames= new HashSet<>();
-				for (final IRFrame frame : this.searchPath) {
-					if (frame.getFrameType() == IRFrame.PACKAGE) {
+				for (final RFrame frame : this.searchPath) {
+					if (frame.getFrameType() == RFrame.PACKAGE) {
 						final String pkgName= frame.getElementName().getSegmentName();
 						if (pkgName != null && pkgNames.add(pkgName)) {
 							final RPkgHelp pkgHelp= help.getPkgHelp(pkgName);
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RFrameSearchPath.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RFrameSearchPath.java
index 21a9bad..dfc0f27 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RFrameSearchPath.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RFrameSearchPath.java
@@ -32,25 +32,25 @@
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
 import org.eclipse.statet.r.console.core.RProcess;
 import org.eclipse.statet.r.console.core.RProcessREnvironment;
 import org.eclipse.statet.r.console.core.RWorkspace;
 import org.eclipse.statet.r.core.RProject;
 import org.eclipse.statet.r.core.RProjects;
 import org.eclipse.statet.r.core.data.CombinedRElement;
-import org.eclipse.statet.r.core.model.IRFrame;
-import org.eclipse.statet.r.core.model.IRFrameInSource;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RFrame;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RSourceFrame;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.ui.RUI;
 
 
-public final class RFrameSearchPath implements Iterable<IRFrame> {
+public final class RFrameSearchPath implements Iterable<RFrame> {
 	
 	
 	public static final int WORKSPACE_MODE= 1;
@@ -63,11 +63,11 @@
 	private static final int RUNTIME_ID= 2;
 	
 	
-	public class RFrameIterator implements Iterator<IRFrame> {
+	public class RFrameIterator implements Iterator<RFrame> {
 		
 		private int listIter0;
 		private int listIter1= -1;
-		private IRFrame next;
+		private RFrame next;
 		
 		@Override
 		public boolean hasNext() {
@@ -89,9 +89,9 @@
 		}
 		
 		@Override
-		public IRFrame next() {
+		public RFrame next() {
 			if (hasNext()) {
-				final IRFrame frame= this.next;
+				final RFrame frame= this.next;
 				this.next= null;
 				return frame;
 			}
@@ -121,7 +121,7 @@
 	}
 	
 	
-	private final List<IRFrame>[] frames= new List[3];
+	private final List<RFrame>[] frames= new List[3];
 	
 	private RElementName expliciteScope;
 	private boolean packageMode;
@@ -142,7 +142,7 @@
 		this.expliciteScope= (expliciteScope != null && RElementName.isPackageFacetScopeType(expliciteScope.getType())) ?
 				expliciteScope : null;
 		
-		final IRFrameInSource envir= RModel.searchFrame(node);
+		final RSourceFrame envir= RModel.searchFrame(node);
 		if (envir != null && mode <= CONSOLE_MODE) {
 			this.frames[LOCAL_ID]= RModel.createDirectFrameList(envir, this.expliciteScope);
 		}
@@ -151,17 +151,17 @@
 		}
 		
 		if (mode == WORKSPACE_MODE) {
-			final IRSourceUnit su= context.getSourceUnit();
+			final RSourceUnit su= context.getSourceUnit();
 			if (su != null) {
-				if (this.expliciteScope == null && su instanceof IRWorkspaceSourceUnit) {
-					final RProject rProject= RProjects.getRProject(((IRWorkspaceSourceUnit) su)
+				if (this.expliciteScope == null && su instanceof RWorkspaceSourceUnit) {
+					final RProject rProject= RProjects.getRProject(((RWorkspaceSourceUnit)su)
 							.getResource().getProject() );
 					this.packageMode= (rProject != null && rProject.getPkgName() != null);
 				}
 				
 				this.importedPackages= (this.expliciteScope != null) ?
 						ImCollections.newSet(this.expliciteScope.getSegmentName()) :
-						RModel.createImportedPackageList((IRModelInfo) context.getModelInfo());
+						RModel.createImportedPackageList((RSourceUnitModelInfo)context.getModelInfo());
 				
 				try {
 					this.frames[WORKSPACE_ID]= RModel.createProjectFrameList(null,
@@ -196,7 +196,7 @@
 		if (this.runtimeWorkspace != null && this.runtimeWorkspace.hasRObjectDB()) {
 			if (complete) {
 				if (this.expliciteScope != null) {
-					final IRFrame frame= resolve(this.expliciteScope, context);
+					final RFrame frame= resolve(this.expliciteScope, context);
 					this.frames[WORKSPACE_ID].add(frame);
 					return;
 				}
@@ -207,8 +207,8 @@
 						.getRSearchEnvironments();
 				if (searchEnvs != null && !searchEnvs.isEmpty()) {
 					for (final RProcessREnvironment env : searchEnvs) {
-						final IRFrame frame= (IRFrame) env;
-						if (frame.getFrameType() == IRFrame.PROJECT) {
+						final RFrame frame= (RFrame)env;
+						if (frame.getFrameType() == RFrame.PROJECT) {
 							this.frames[LOCAL_ID].add(frame);
 						}
 						else {
@@ -221,7 +221,7 @@
 				if (this.expliciteScope != null
 						&& !this.workspacePackages.contains(
 								this.expliciteScope.getSegmentName() )) {
-					final IRFrame frame= resolve(this.expliciteScope, context);
+					final RFrame frame= resolve(this.expliciteScope, context);
 					if (frame != null) {
 						this.frames[RUNTIME_ID].add(frame);
 					}
@@ -232,7 +232,7 @@
 					
 					for (final String pkgName : this.importedPackages) {
 						if (!this.workspacePackages.contains(pkgName)) {
-							IRFrame frame;
+							RFrame frame;
 							frame= resolve(RElementName.create(RElementName.SCOPE_NS, pkgName),
 									context );
 							if (frame == null) { // timeout
@@ -249,7 +249,7 @@
 							this.runtimeWorkspace.getRSearchEnvironments();
 					for (final String pkgName : this.importedPackages) {
 						if (!this.workspacePackages.contains(pkgName)) {
-							IRFrame frame;
+							RFrame frame;
 							frame= searchPackage(searchEnvs, pkgName);
 							if (frame == null) {
 								frame= resolve(RElementName.create(RElementName.SCOPE_NS, pkgName),
@@ -266,12 +266,12 @@
 	}
 	
 	
-	private IRFrame searchPackage(final List<? extends RProcessREnvironment> searchEnvs,
+	private RFrame searchPackage(final List<? extends RProcessREnvironment> searchEnvs,
 			final String pkgName) {
 		if (searchEnvs != null) {
 			for (final RProcessREnvironment env : searchEnvs) {
-				final IRFrame frame= (IRFrame) env;
-				if (frame.getFrameType() == IRFrame.PACKAGE
+				final RFrame frame= (RFrame)env;
+				if (frame.getFrameType() == RFrame.PACKAGE
 						&& frame.getElementName().getSegmentName().equals(pkgName) ) {
 					return frame;
 				}
@@ -280,20 +280,20 @@
 		return null;
 	}
 	
-	private IRFrame resolve(final RElementName name,
+	private RFrame resolve(final RElementName name,
 			final RAssistInvocationContext context) {
 		CombinedRElement element= this.runtimeWorkspace.resolve(name,
 				RWorkspace.RESOLVE_INDICATE_NA );
 		if (element != null) {
 			return (!this.runtimeWorkspace.isNA(element)
-							&& element instanceof IRFrame) ?
-					(IRFrame) element : null;
+							&& element instanceof RFrame) ?
+					(RFrame)element : null;
 		}
 		
 		element= context.getToolReferencesUtil().resolve(name, 0);
 		
-		return (element instanceof IRFrame) ?
-				(IRFrame) element : null;
+		return (element instanceof RFrame) ?
+				(RFrame)element : null;
 	}
 	
 	private void addDebugFrame(final RAssistInvocationContext context) {
@@ -306,10 +306,10 @@
 			if (threads.length > 0) {
 				final IStackFrame top= threads[0].getTopStackFrame();
 				if (top != null) {
-					final CombinedRElement envir= (CombinedRElement) top.getAdapter(IModelElement.class);
-					if (envir instanceof IRFrame) {
-						final IRFrame frame= (IRFrame) envir;
-						if (frame.getFrameType() != IRFrame.PACKAGE) {
+					final CombinedRElement envir= (CombinedRElement) top.getAdapter(LtkModelElement.class);
+					if (envir instanceof RFrame) {
+						final RFrame frame= (RFrame)envir;
+						if (frame.getFrameType() != RFrame.PACKAGE) {
 							this.frames[LOCAL_ID].add(frame);
 						}
 					}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/ROpenDeclaration.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/ROpenDeclaration.java
index 79ebe3c..363fa17 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/ROpenDeclaration.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/ROpenDeclaration.java
@@ -18,10 +18,10 @@
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.StyledString;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.SourceElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.actions.OpenDeclaration;
 import org.eclipse.statet.r.ui.RLabelProvider;
 
@@ -37,13 +37,13 @@
 	public ILabelProvider createLabelProvider() {
 		return new RLabelProvider() {
 			@Override
-			public StyledString getStyledText(final IModelElement element) {
-				final StyledString styledText = super.getStyledText(element);
-				if (element instanceof ISourceElement) {
-					final ISourceUnit su = ((ISourceElement) element).getSourceUnit();
-					if (su instanceof IWorkspaceSourceUnit) {
+			public StyledString getStyledText(final LtkModelElement element) {
+				final StyledString styledText= super.getStyledText(element);
+				if (element instanceof SourceElement) {
+					final SourceUnit su= ((SourceElement)element).getSourceUnit();
+					if (su instanceof WorkspaceSourceUnit) {
 						styledText.append("  ∙  "); //$NON-NLS-1$
-						styledText.append(((IResource) su.getResource()).getFullPath().toString(),
+						styledText.append(((IResource)su.getResource()).getFullPath().toString(),
 								StyledString.QUALIFIER_STYLER );
 					}
 				}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/ROpenDeclarationHandler.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/ROpenDeclarationHandler.java
index 56d7069..cb3a029 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/ROpenDeclarationHandler.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/ROpenDeclarationHandler.java
@@ -25,29 +25,31 @@
 import org.eclipse.jface.text.TextUtilities;
 import org.eclipse.ui.PartInitException;
 
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.ltk.ast.core.AstNode;
 import org.eclipse.statet.ltk.ast.core.util.AstSelection;
-import org.eclipse.statet.ltk.model.core.elements.ISourceElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.sourceediting.actions.AbstractOpenDeclarationHandler;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRModelManager;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RElementAccess;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RModelManager;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
 import org.eclipse.statet.r.core.rlang.RTokens;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 
 
 public class ROpenDeclarationHandler extends AbstractOpenDeclarationHandler {
 	
 	
-	public static RElementAccess searchAccess(final ISourceEditor editor, final IRegion region) {
+	public static @Nullable RElementAccess searchAccess(final ISourceEditor editor, final IRegion region) {
 		// not for sub elements
 		try {
 			final IDocument document= editor.getViewer().getDocument();
@@ -58,16 +60,16 @@
 			}
 			final ITypedRegion partition= TextUtilities.getPartition(document,
 					scanner.getDocumentPartitioning(), region.getOffset(), false );
-			final ISourceUnit su= editor.getSourceUnit();
-			if (su instanceof IRSourceUnit
+			final SourceUnit su= editor.getSourceUnit();
+			if (su instanceof RSourceUnit
 					&& region.getOffset() < document.getLength()
-					&& ( (IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(partition.getType())
+					&& ( (RDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT.matches(partition.getType())
 							&& !RTokens.isRobustSeparator(document.getChar(region.getOffset()), false) )
-						|| partition.getType() == IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE
-						|| partition.getType() == IRDocumentConstants.R_STRING_CONTENT_TYPE )) {
+						|| partition.getType() == RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE
+						|| partition.getType() == RDocumentConstants.R_STRING_CONTENT_TYPE )) {
 				
-				final IRModelInfo modelInfo= (IRModelInfo) su.getModelInfo(RModel.R_TYPE_ID,
-						IRModelManager.MODEL_FILE, new NullProgressMonitor() );
+				final RSourceUnitModelInfo modelInfo= (RSourceUnitModelInfo)su.getModelInfo(RModel.R_TYPE_ID,
+						RModelManager.MODEL_FILE, new NullProgressMonitor() );
 				if (modelInfo != null) {
 					final AstInfo astInfo= modelInfo.getAst();
 					final AstSelection astSelection= AstSelection.search(astInfo.getRoot(),
@@ -110,9 +112,9 @@
 		final RElementAccess access= searchAccess(editor, selection);
 		if (access != null) {
 			try {
-				final List<ISourceElement> list= RModel.searchDeclaration(access, (IRSourceUnit) editor.getSourceUnit());
+				final List<SourceElement> list= RModel.searchDeclaration(access, (RSourceUnit)editor.getSourceUnit());
 				final ROpenDeclaration open= new ROpenDeclaration();
-				final ISourceElement element= open.selectElement(list, editor.getWorkbenchPart());
+				final SourceElement element= open.selectElement(list, editor.getWorkbenchPart());
 				if (element != null) {
 					open.open(element, true);
 					return true;
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RPathCompletionComputer.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RPathCompletionComputer.java
index 2f38382..e4aba01 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RPathCompletionComputer.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RPathCompletionComputer.java
@@ -39,8 +39,8 @@
 import org.eclipse.statet.ecommons.net.resourcemapping.core.ResourceMappingOrder;
 import org.eclipse.statet.ecommons.net.resourcemapping.core.ResourceMappingUtils;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.AssistInvocationContext;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.AssistProposalCollector;
@@ -83,10 +83,10 @@
 			}
 		}
 		else {
-			final ISourceUnit su= editor.getSourceUnit();
-			if (su instanceof IWorkspaceSourceUnit) {
+			final SourceUnit su= editor.getSourceUnit();
+			if (su instanceof WorkspaceSourceUnit) {
 				this.baseResource= null;
-				final IResource resource= ((IWorkspaceSourceUnit) su).getResource();
+				final IResource resource= ((WorkspaceSourceUnit)su).getResource();
 //				final IRProject rProject= RProjects.getRProject(resource.getProject());
 //				if (rProject != null) {
 //					this.baseResource= rProject.getRawBuildpath();
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RSourceViewerConfiguration.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RSourceViewerConfiguration.java
index b1ac035..57cc340 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RSourceViewerConfiguration.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RSourceViewerConfiguration.java
@@ -62,9 +62,9 @@
 import org.eclipse.statet.ltk.ui.sourceediting.assist.InfoHoverRegistry;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.QuickAssistProcessor;
 import org.eclipse.statet.nico.ui.console.ConsolePageEditor;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.RCoreAccess;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RDocumentContentInfo;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 import org.eclipse.statet.r.ui.editors.IRSourceEditor;
@@ -83,14 +83,14 @@
 public class RSourceViewerConfiguration extends SourceEditorViewerConfiguration {
 	
 	
-	private static final String[] CONTENT_TYPES= IRDocumentConstants.R_CONTENT_TYPES.toArray(
-			new String[IRDocumentConstants.R_CONTENT_TYPES.size()] );
+	private static final String[] CONTENT_TYPES= RDocumentConstants.R_CONTENT_TYPES.toArray(
+			new String[RDocumentConstants.R_CONTENT_TYPES.size()] );
 	
 	
 	private RDoubleClickStrategy fDoubleClickStrategy;
 	private RAutoEditStrategy fAutoEditStrategy;
 	
-	private IRCoreAccess fRCoreAccess;
+	private RCoreAccess fRCoreAccess;
 	
 	
 	public RSourceViewerConfiguration(final int flags,
@@ -100,7 +100,7 @@
 	
 	public RSourceViewerConfiguration(final DocContentSections documentContentInfo, final int flags,
 			final IRSourceEditor sourceEditor,
-			final IRCoreAccess access,
+			final RCoreAccess access,
 			final IPreferenceStore preferenceStore, final TextStyleManager textStyles) {
 		super(documentContentInfo, flags, sourceEditor);
 		setCoreAccess(access);
@@ -110,7 +110,7 @@
 		setTextStyles(textStyles);
 	}
 	
-	protected void setCoreAccess(final IRCoreAccess access) {
+	protected void setCoreAccess(final RCoreAccess access) {
 		this.fRCoreAccess = (access != null) ? access : RCore.getWorkbenchAccess();
 	}
 	
@@ -130,29 +130,29 @@
 	protected void initScanners() {
 		final TextStyleManager textStyles= getTextStyles();
 		
-		addScanner(IRDocumentConstants.R_DEFAULT_CONTENT_TYPE,
+		addScanner(RDocumentConstants.R_DEFAULT_CONTENT_TYPE,
 				new RDefaultTextStyleScanner(textStyles) );
-		addScanner(IRDocumentConstants.R_INFIX_OPERATOR_CONTENT_TYPE,
+		addScanner(RDocumentConstants.R_INFIX_OPERATOR_CONTENT_TYPE,
 				new RInfixOperatorScanner(textStyles) );
-		addScanner(IRDocumentConstants.R_STRING_CONTENT_TYPE,
+		addScanner(RDocumentConstants.R_STRING_CONTENT_TYPE,
 				new SingleTokenScanner(textStyles, IRTextTokens.STRING_KEY) );
-		addScanner(IRDocumentConstants.R_COMMENT_CONTENT_TYPE,
+		addScanner(RDocumentConstants.R_COMMENT_CONTENT_TYPE,
 				new CommentScanner(textStyles, IRTextTokens.COMMENT_KEY, IRTextTokens.TASK_TAG_KEY,
 						this.fRCoreAccess.getPrefs()) );
-		addScanner(IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE,
+		addScanner(RDocumentConstants.R_ROXYGEN_CONTENT_TYPE,
 				new RoxygenScanner(textStyles, this.fRCoreAccess.getPrefs()) );
 	}
 	
 	@Override
 	protected ITokenScanner getScanner(String contentType) {
-		if (contentType == IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE) {
-			contentType= IRDocumentConstants.R_STRING_CONTENT_TYPE;
+		if (contentType == RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE) {
+			contentType= RDocumentConstants.R_STRING_CONTENT_TYPE;
 		}
 		return super.getScanner(contentType);
 	}
 	
 	
-	public IRCoreAccess getRCoreAccess() {
+	public RCoreAccess getRCoreAccess() {
 		return this.fRCoreAccess;
 	}
 	
@@ -271,27 +271,27 @@
 		final IRSourceEditor editor= getSourceEditor();
 		
 		final ContentAssistProcessor codeProcessor = new RContentAssistProcessor(assistant,
-				IRDocumentConstants.R_DEFAULT_CONTENT_TYPE, registry, editor);
+				RDocumentConstants.R_DEFAULT_CONTENT_TYPE, registry, editor);
 		codeProcessor.setCompletionProposalAutoActivationCharacters(new char[] { '$', '@' });
 		codeProcessor.setContextInformationAutoActivationCharacters(new char[] { ',' });
-		assistant.setContentAssistProcessor(codeProcessor, IRDocumentConstants.R_DEFAULT_CONTENT_TYPE);
+		assistant.setContentAssistProcessor(codeProcessor, RDocumentConstants.R_DEFAULT_CONTENT_TYPE);
 		
 		final ContentAssistProcessor symbolProcessor = new RContentAssistProcessor(assistant,
-				IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE, registry, editor);
-		assistant.setContentAssistProcessor(symbolProcessor, IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE);
+				RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE, registry, editor);
+		assistant.setContentAssistProcessor(symbolProcessor, RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE);
 		
 		final ContentAssistProcessor stringProcessor = new RContentAssistProcessor(assistant,
-				IRDocumentConstants.R_STRING_CONTENT_TYPE, registry, editor);
-		assistant.setContentAssistProcessor(stringProcessor, IRDocumentConstants.R_STRING_CONTENT_TYPE);
+				RDocumentConstants.R_STRING_CONTENT_TYPE, registry, editor);
+		assistant.setContentAssistProcessor(stringProcessor, RDocumentConstants.R_STRING_CONTENT_TYPE);
 		
 		final ContentAssistProcessor commentProcessor = new RContentAssistProcessor(assistant,
-				IRDocumentConstants.R_COMMENT_CONTENT_TYPE, registry, editor);
-		assistant.setContentAssistProcessor(commentProcessor, IRDocumentConstants.R_COMMENT_CONTENT_TYPE);
+				RDocumentConstants.R_COMMENT_CONTENT_TYPE, registry, editor);
+		assistant.setContentAssistProcessor(commentProcessor, RDocumentConstants.R_COMMENT_CONTENT_TYPE);
 		
 		final ContentAssistProcessor roxygenProcessor = new RContentAssistProcessor(assistant,
-				IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE, registry, editor);
+				RDocumentConstants.R_ROXYGEN_CONTENT_TYPE, registry, editor);
 		roxygenProcessor.setCompletionProposalAutoActivationCharacters(new char[] { '@', '\\' });
-		assistant.setContentAssistProcessor(roxygenProcessor, IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE);
+		assistant.setContentAssistProcessor(roxygenProcessor, RDocumentConstants.R_ROXYGEN_CONTENT_TYPE);
 	}
 	
 	@Override
@@ -305,7 +305,7 @@
 	
 	@Override
 	protected boolean isInfoHoverDefaultContentType(final String contentType) {
-		return IRDocumentConstants.R_CODE_CONTENT_CONSTRAINT.matches(contentType);
+		return RDocumentConstants.R_CODE_CONTENT_CONSTRAINT.matches(contentType);
 	}
 	
 	@Override
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RSourceViewerConfigurator.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RSourceViewerConfigurator.java
index f2f71ed..7d144fe 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RSourceViewerConfigurator.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RSourceViewerConfigurator.java
@@ -25,8 +25,8 @@
 import org.eclipse.statet.base.core.preferences.TaskTagsPreferences;
 import org.eclipse.statet.internal.r.ui.RUIPreferenceInitializer;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCodeStyleSettings;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.source.RDocumentSetupParticipant;
 import org.eclipse.statet.r.core.util.RCoreAccessWrapper;
 import org.eclipse.statet.r.ui.editors.REditorOptions;
@@ -46,7 +46,7 @@
 	private RCoreAccessWrapper rCoreAccess;
 	
 	
-	public RSourceViewerConfigurator(final IRCoreAccess coreAccess,
+	public RSourceViewerConfigurator(final RCoreAccess coreAccess,
 			final RSourceViewerConfiguration config) {
 		super(config);
 		this.rCoreAccess= new RCoreAccessWrapper(coreAccess) {
@@ -64,7 +64,7 @@
 	}
 	
 	
-	public final IRCoreAccess getRCoreAccess() {
+	public final RCoreAccess getRCoreAccess() {
 		return this.rCoreAccess;
 	}
 	
@@ -80,7 +80,7 @@
 	}
 	
 	
-	public void setSource(final IRCoreAccess rCoreAccess) {
+	public void setSource(final RCoreAccess rCoreAccess) {
 		if (rCoreAccess != null) {
 			this.rCoreAccess.setParent(rCoreAccess);
 			handleSettingsChanged(null, null);
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RTemplateSourceViewerConfigurator.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RTemplateSourceViewerConfigurator.java
index 402300a..518f21c 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RTemplateSourceViewerConfigurator.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RTemplateSourceViewerConfigurator.java
@@ -18,14 +18,14 @@
 import org.eclipse.statet.ecommons.ui.SharedUIResources;
 
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfiguration;
-import org.eclipse.statet.r.core.IRCoreAccess;
+import org.eclipse.statet.r.core.RCoreAccess;
 
 
 public class RTemplateSourceViewerConfigurator extends RSourceViewerConfigurator {
 	
 	
 	public RTemplateSourceViewerConfigurator(
-			final IRCoreAccess rCoreAccess,
+			final RCoreAccess rCoreAccess,
 			final TemplateVariableProcessor processor) {
 		super(rCoreAccess, new RSourceViewerConfiguration(SourceEditorViewerConfiguration.TEMPLATE_MODE,
 				null, SharedUIResources.getColors() ) {
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/r/RBracketPairMatcher.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/r/RBracketPairMatcher.java
index c520f09..b2a35be 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/r/RBracketPairMatcher.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/r/RBracketPairMatcher.java
@@ -16,7 +16,7 @@
 
 import org.eclipse.statet.ecommons.text.PairMatcher;
 
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 
 
@@ -26,7 +26,7 @@
 	public static final char[][] BRACKETS = { {'{', '}'}, {'(', ')'}, {'[', ']'} };
 	
 	private static final String[] CONTENT_TYPES= new String[] {
-		IRDocumentConstants.R_DEFAULT_CONTENT_TYPE
+		RDocumentConstants.R_DEFAULT_CONTENT_TYPE
 	};
 	
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/r/RDoubleClickStrategy.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/r/RDoubleClickStrategy.java
index cd98267..c68b621 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/r/RDoubleClickStrategy.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/r/RDoubleClickStrategy.java
@@ -25,7 +25,7 @@
 
 import org.eclipse.statet.ecommons.text.ICharPairMatcher;
 
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 
 
@@ -71,7 +71,7 @@
 			String type = partition.getType();
 			
 			// Bracket-Pair-Matching in Code-Partitions
-			if (type == IRDocumentConstants.R_DEFAULT_CONTENT_TYPE) {
+			if (type == RDocumentConstants.R_DEFAULT_CONTENT_TYPE) {
 				final IRegion region = fPairMatcher.match(document, offset);
 				if (region != null && region.getLength() >= 2) {
 					textViewer.setSelectedRange(region.getOffset() + 1, region.getLength() - 2);
@@ -83,7 +83,7 @@
 			partition = TextUtilities.getPartition(document, fPartitioning, offset, false);
 			type = partition.getType();
 			// Start or End in String-Partitions
-			if (type == IRDocumentConstants.R_STRING_CONTENT_TYPE || type == IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE) {
+			if (type == RDocumentConstants.R_STRING_CONTENT_TYPE || type == RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE) {
 				final int partitionOffset = partition.getOffset();
 				final int partitionEnd = partitionOffset + partition.getLength();
 				if (offset == partitionOffset || offset == partitionOffset+1
@@ -102,21 +102,21 @@
 				return;
 			}
 			// Start in Comment-Partitions
-			if (type == IRDocumentConstants.R_COMMENT_CONTENT_TYPE || type == IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
+			if (type == RDocumentConstants.R_COMMENT_CONTENT_TYPE || type == RDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
 				final int partitionOffset = partition.getOffset();
 				if (offset == partitionOffset || offset == partitionOffset+1) {
 					textViewer.setSelectedRange(partitionOffset, partition.getLength());
 					return;
 				}
 			}
-			if (type == IRDocumentConstants.R_INFIX_OPERATOR_CONTENT_TYPE) {
+			else if (type == RDocumentConstants.R_INFIX_OPERATOR_CONTENT_TYPE) {
 				textViewer.setSelectedRange(partition.getOffset(), partition.getLength());
 				return;
 			}
 			// Spezialfall: End String-Partition
 			if ((partition.getOffset() == offset) && (offset > 0)
 					&& ( (partition = TextUtilities.getPartition(document, fPartitioning, offset-1, true))
-							.getType() == IRDocumentConstants.R_STRING_CONTENT_TYPE)
+							.getType() == RDocumentConstants.R_STRING_CONTENT_TYPE)
 					) {
 				selectRegion(textViewer, getStringContent(document, partition));
 				return;
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/r/RFastPartitionScanner.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/r/RFastPartitionScanner.java
index 788a807..7d50f28 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/r/RFastPartitionScanner.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/r/RFastPartitionScanner.java
@@ -30,7 +30,7 @@
 import org.eclipse.statet.ecommons.text.core.rules.BufferedDocumentScanner;
 
 import org.eclipse.statet.internal.r.ui.RUIPlugin;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 
 
 /**
@@ -53,11 +53,11 @@
 	protected static final int S_ROXYGEN = 5;
 	
 	protected final static IToken T_DEFAULT = new Token(null);
-	protected final static IToken T_QUOTED_SYMBOL = new Token(IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE);
-	protected final static IToken T_INFIX = new Token(IRDocumentConstants.R_INFIX_OPERATOR_CONTENT_TYPE);
-	protected final static IToken T_STRING = new Token(IRDocumentConstants.R_STRING_CONTENT_TYPE);
-	protected final static IToken T_COMMENT = new Token(IRDocumentConstants.R_COMMENT_CONTENT_TYPE);
-	protected final static IToken T_ROXYGEN = new Token(IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE);
+	protected final static IToken T_QUOTED_SYMBOL = new Token(RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE);
+	protected final static IToken T_INFIX = new Token(RDocumentConstants.R_INFIX_OPERATOR_CONTENT_TYPE);
+	protected final static IToken T_STRING = new Token(RDocumentConstants.R_STRING_CONTENT_TYPE);
+	protected final static IToken T_COMMENT = new Token(RDocumentConstants.R_COMMENT_CONTENT_TYPE);
+	protected final static IToken T_ROXYGEN = new Token(RDocumentConstants.R_ROXYGEN_CONTENT_TYPE);
 	
 	
 	/** Enum of last significant characters read. */
@@ -332,22 +332,22 @@
 		if (contentType == null) {
 			return S_DEFAULT;
 		}
-		if (contentType == IRDocumentConstants.R_DEFAULT_CONTENT_TYPE) {
+		if (contentType == RDocumentConstants.R_DEFAULT_CONTENT_TYPE) {
 			return S_DEFAULT;
 		}
-		if (contentType == IRDocumentConstants.R_STRING_CONTENT_TYPE) {
+		if (contentType == RDocumentConstants.R_STRING_CONTENT_TYPE) {
 			return S_STRING;
 		}
-		if (contentType == IRDocumentConstants.R_COMMENT_CONTENT_TYPE) {
+		if (contentType == RDocumentConstants.R_COMMENT_CONTENT_TYPE) {
 			return S_COMMENT;
 		}
-		if (contentType == IRDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
+		if (contentType == RDocumentConstants.R_ROXYGEN_CONTENT_TYPE) {
 			return S_ROXYGEN;
 		}
-		if (contentType == IRDocumentConstants.R_INFIX_OPERATOR_CONTENT_TYPE) {
+		if (contentType == RDocumentConstants.R_INFIX_OPERATOR_CONTENT_TYPE) {
 			return S_INFIX_OPERATOR;
 		}
-		if (contentType == IRDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE) {
+		if (contentType == RDocumentConstants.R_QUOTED_SYMBOL_CONTENT_TYPE) {
 			return S_QUOTED_SYMBOL;
 		}
 		return getExtState(contentType);
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/rd/RdDoubleClickStrategy.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/rd/RdDoubleClickStrategy.java
index 695eff7..b7044c0 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/rd/RdDoubleClickStrategy.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/rd/RdDoubleClickStrategy.java
@@ -25,7 +25,7 @@
 
 import org.eclipse.statet.ecommons.text.PairMatcher;
 
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RdDocumentContentInfo;
 
 
@@ -44,7 +44,7 @@
 	public RdDoubleClickStrategy() {
 		super();
 		fPairMatcher= new PairMatcher(BRACKETS, RdDocumentContentInfo.INSTANCE,
-				new String[] { IRDocumentConstants.RDOC_DEFAULT_CONTENT_TYPE }, '\\');
+				new String[] { RDocumentConstants.RDOC_DEFAULT_CONTENT_TYPE }, '\\');
 	}
 	
 	/**
@@ -60,11 +60,11 @@
 		
 		final IDocument document = textViewer.getDocument();
 		try {
-			ITypedRegion partition = TextUtilities.getPartition(document, IRDocumentConstants.RDOC_PARTITIONING, offset, true);
+			ITypedRegion partition = TextUtilities.getPartition(document, RDocumentConstants.RDOC_PARTITIONING, offset, true);
 			String type = partition.getType();
 			
 			// Bracket-Pair-Matching in Code-Partitions
-			if (IRDocumentConstants.RDOC_DEFAULT_CONTENT_TYPE.equals(type)) {
+			if (RDocumentConstants.RDOC_DEFAULT_CONTENT_TYPE.equals(type)) {
 				final IRegion region = fPairMatcher.match(document, offset);
 				if (region != null && region.getLength() >= 2) {
 					textViewer.setSelectedRange(region.getOffset() + 1, region.getLength() - 2);
@@ -73,10 +73,10 @@
 			}
 			
 			// For other partitions, use prefere new partitions (instead opend)
-			partition = TextUtilities.getPartition(document, IRDocumentConstants.RDOC_PARTITIONING, offset, false);
+			partition = TextUtilities.getPartition(document, RDocumentConstants.RDOC_PARTITIONING, offset, false);
 			type = partition.getType();
 			// Start in Comment-Partitions
-			if (IRDocumentConstants.RDOC_COMMENT_CONTENT_TYPE.equals(type) || IRDocumentConstants.RDOC_PLATFORM_SPECIF.equals(type)) {
+			if (RDocumentConstants.RDOC_COMMENT_CONTENT_TYPE.equals(type) || RDocumentConstants.RDOC_PLATFORM_SPECIF.equals(type)) {
 				final int partitionOffset = partition.getOffset();
 				if (offset == partitionOffset || offset == partitionOffset+1) {
 					textViewer.setSelectedRange(partitionOffset, partition.getLength());
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/rd/RdFastPartitionScanner.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/rd/RdFastPartitionScanner.java
index 8d85b54..d8ea47b 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/rd/RdFastPartitionScanner.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/text/rd/RdFastPartitionScanner.java
@@ -25,7 +25,7 @@
 
 import org.eclipse.statet.ecommons.text.core.rules.BufferedDocumentScanner;
 
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 
 
 /**
@@ -62,8 +62,8 @@
 	
 	{	
 		fTokens.put(State.DEFAULT, new Token(null));
-		fTokens.put(State.COMMENT, new Token(IRDocumentConstants.RDOC_COMMENT_CONTENT_TYPE));
-		fTokens.put(State.PLATFORM, new Token(IRDocumentConstants.RDOC_PLATFORM_SPECIF));
+		fTokens.put(State.COMMENT, new Token(RDocumentConstants.RDOC_COMMENT_CONTENT_TYPE));
+		fTokens.put(State.PLATFORM, new Token(RDocumentConstants.RDOC_PLATFORM_SPECIF));
 	}
 	
 	public RdFastPartitionScanner() {
@@ -219,10 +219,10 @@
 		if (contentType == null) {
 			return State.DEFAULT;
 		}
-		else if (contentType.equals(IRDocumentConstants.RDOC_COMMENT_CONTENT_TYPE)) {
+		else if (contentType.equals(RDocumentConstants.RDOC_COMMENT_CONTENT_TYPE)) {
 			return State.COMMENT;
 		}
-		else if (contentType.equals(IRDocumentConstants.RDOC_PLATFORM_SPECIF)) {
+		else if (contentType.equals(RDocumentConstants.RDOC_PLATFORM_SPECIF)) {
 			return State.PLATFORM;
 		}
 		
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/util/RElementInput.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/util/RElementInput.java
index c649726..21ff6a0 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/util/RElementInput.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/util/RElementInput.java
@@ -23,9 +23,9 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement.Filter;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.data.CombinedRElement;
+import org.eclipse.statet.r.core.model.RLangElement;
 
 
 @NonNullByDefault
@@ -34,8 +34,8 @@
 	
 	private final TSource source;
 	
-	private final @Nullable Filter envFilter;
-	private final @Nullable Filter otherFilter;
+	private final @Nullable LtkModelElementFilter<? super RLangElement> envFilter;
+	private final @Nullable LtkModelElementFilter<? super RLangElement> otherFilter;
 	
 	private final @Nullable Map<CombinedRElement, CombinedRElement[]> envFilteredChildren;
 	
@@ -44,8 +44,8 @@
 	
 	
 	public RElementInput(final TSource source,
-			final IModelElement. @Nullable Filter envFilter,
-			final IModelElement. @Nullable Filter otherFilter) {
+			final @Nullable LtkModelElementFilter<? super RLangElement> envFilter,
+			final @Nullable LtkModelElementFilter<? super RLangElement> otherFilter) {
 		this.source= source;
 		
 		this.envFilter= envFilter;
@@ -64,7 +64,7 @@
 		return (this.envFilter != null);
 	}
 	
-	public IModelElement. @Nullable Filter getEnvFilter() {
+	public @Nullable LtkModelElementFilter<? super RLangElement<?>> getEnvFilter() {
 		return this.envFilter;
 	}
 	
@@ -93,7 +93,7 @@
 		return (this.otherFilter != null);
 	}
 	
-	public IModelElement. @Nullable Filter getOtherFilter() {
+	public @Nullable LtkModelElementFilter<? super RLangElement> getOtherFilter() {
 		return this.otherFilter;
 	}
 	
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/util/RElementInputContentProvider.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/util/RElementInputContentProvider.java
index 3c21cec..009ca36 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/util/RElementInputContentProvider.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/util/RElementInputContentProvider.java
@@ -30,7 +30,7 @@
 import org.eclipse.statet.ecommons.models.core.util.ElementPartition;
 import org.eclipse.statet.ecommons.models.core.util.ElementPartitionFactory;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
 import org.eclipse.statet.r.console.core.RProcessREnvironment;
 import org.eclipse.statet.r.core.data.CombinedRElement;
 import org.eclipse.statet.r.core.data.CombinedRList;
@@ -47,7 +47,7 @@
 			return (CombinedRElement) object;
 		}
 		if (object instanceof IAdaptable) {
-			final IModelElement modelElement= ((IAdaptable) object).getAdapter(IModelElement.class);
+			final LtkModelElement modelElement= ((IAdaptable) object).getAdapter(LtkModelElement.class);
 			if (modelElement instanceof CombinedRElement) {
 				return (CombinedRElement) modelElement;
 			}
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/RSourceCodeAdapter.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/RSourceCodeAdapter.java
index 3d14d10..62caf86 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/RSourceCodeAdapter.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/RSourceCodeAdapter.java
@@ -24,10 +24,10 @@
 
 import org.eclipse.statet.ecommons.text.BasicHeuristicTokenScanner;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
-import org.eclipse.statet.r.core.model.IRLangElement;
+import org.eclipse.statet.ltk.model.core.element.SourceElement;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.r.core.model.RChunkElement;
+import org.eclipse.statet.r.core.model.RLangElement;
 import org.eclipse.statet.r.core.refactoring.RRefactoringAdapter;
 import org.eclipse.statet.r.core.rsource.ast.SourceComponent;
 
@@ -40,12 +40,12 @@
 	
 	
 	@Override
-	protected void getSourceCode(final ISourceElement element, final AbstractDocument doc,
+	protected void getSourceCode(final SourceElement element, final AbstractDocument doc,
 			final BasicHeuristicTokenScanner scanner, final List<String> codeFragments)
 			throws BadLocationException, BadPartitioningException {
-		if (element instanceof IRLangElement) {
+		if (element instanceof RLangElement) {
 			if (element instanceof RChunkElement) {
-				final List<SourceComponent> components = (List<SourceComponent>) element.getAdapter(SourceComponent.class);
+				final List<SourceComponent> components = (List<SourceComponent>)element.getAdapter(SourceComponent.class);
 				for (final SourceComponent component : components) {
 					final TextRegion range = expandSourceRange(
 							component.getStartOffset(), component.getEndOffset(), doc, scanner );
@@ -58,9 +58,9 @@
 			super.getSourceCode(element, doc, scanner, codeFragments);
 			return;
 		}
-		if (element instanceof ISourceStructElement) {
-			final List<? extends ISourceStructElement> children = ((ISourceStructElement) element).getSourceChildren(null);
-			for (final ISourceStructElement child : children) {
+		if (element instanceof SourceStructElement) {
+			final List<? extends SourceStructElement> children = ((SourceStructElement) element).getSourceChildren(null);
+			for (final SourceStructElement child : children) {
 				getSourceCode(child, doc, scanner, codeFragments);
 			}
 		}
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitEntireCommandHandler.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitEntireCommandHandler.java
index 7f33fa1..8bd5374 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitEntireCommandHandler.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitEntireCommandHandler.java
@@ -41,14 +41,14 @@
 
 import org.eclipse.statet.internal.r.debug.ui.RLaunchingMessages;
 import org.eclipse.statet.ltk.ast.core.AstInfo;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.util.LTKWorkbenchUIUtil;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRModelManager;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.model.RModelManager;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.launching.RCodeLaunching;
 import org.eclipse.statet.r.launching.RCodeLaunching.SourceRegion;
@@ -69,10 +69,10 @@
 		ISourceEditor editor;
 		ITextSelection selection;
 		AbstractDocument document;
-		IRModelInfo model;
+		RSourceUnitModelInfo model;
 		AstInfo ast;
 		RAstNode[] nodes;
-		IRSourceUnit su;
+		RSourceUnit su;
 		
 		List<SourceRegion> regions;
 		
@@ -143,9 +143,9 @@
 	
 	protected IStatus doLaunch(final Data data, final IProgressMonitor monitor)
 			throws CoreException {
-		{	final ISourceUnit su = data.editor.getSourceUnit();
-			if (su instanceof IRSourceUnit) {
-				data.su = (IRSourceUnit) su;
+		{	final SourceUnit su = data.editor.getSourceUnit();
+			if (su instanceof RSourceUnit) {
+				data.su = (RSourceUnit)su;
 			}
 			else {
 				return LaunchShortcutUtil.createUnsupported();
@@ -157,8 +157,8 @@
 		monitor.subTask(RLaunchingMessages.RCodeLaunch_UpdateStructure_task);
 		synchronized ((data.document instanceof ISynchronizable) ?
 				((ISynchronizable) data.document).getLockObject() : data.document) {
-			data.model = (IRModelInfo) data.su.getModelInfo(RModel.R_TYPE_ID,
-					IRModelManager.MODEL_FILE, monitor );
+			data.model = (RSourceUnitModelInfo)data.su.getModelInfo(RModel.R_TYPE_ID,
+					RModelManager.MODEL_FILE, monitor );
 			if (monitor.isCanceled()) {
 				return Status.CANCEL_STATUS;
 			}
@@ -189,10 +189,10 @@
 	
 	protected IStatus getRegions(final Data data)
 			throws CoreException {
-		final RAstNode[] nodes = RAst.findDeepestCommands(data.ast.getRoot(),
+		final RAstNode[] nodes = RAsts.findDeepestCommands(data.ast.getRoot(),
 				data.selection.getOffset(), data.selection.getOffset()+data.selection.getLength() );
 		if (nodes == null || nodes.length == 0) {
-			final RAstNode next = RAst.findNextCommands(data.ast.getRoot(),
+			final RAstNode next = RAsts.findNextCommands(data.ast.getRoot(),
 					data.selection.getOffset()+data.selection.getLength() );
 			if (next != null) {
 				UIAccess.getDisplay().asyncExec(new Runnable() {
@@ -208,7 +208,7 @@
 			data.nodes = nodes;
 			final List<SourceRegion> list= new ArrayList<>(nodes.length);
 			for (int i = 0; i < nodes.length; i++) {
-				if (RAst.hasErrors(nodes[i])) {
+				if (RAsts.hasErrors(nodes[i])) {
 					return new Status(IStatus.ERROR, RUI.BUNDLE_ID,
 							RLaunchingMessages.SubmitCode_info_SyntaxError_message );
 				}
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitFileViaCommandHandler.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitFileViaCommandHandler.java
index aa1f48b..7847118 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitFileViaCommandHandler.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitFileViaCommandHandler.java
@@ -39,9 +39,10 @@
 import org.eclipse.statet.ecommons.ui.workbench.WorkbenchUIUtils;
 
 import org.eclipse.statet.internal.r.debug.ui.RLaunchingMessages;
-import org.eclipse.statet.ltk.core.LTK;
-import org.eclipse.statet.ltk.model.core.elements.ISourceElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.model.core.LtkModels;
+import org.eclipse.statet.ltk.model.core.element.SourceElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.util.LTKWorkbenchUIUtil;
 import org.eclipse.statet.r.launching.RCodeLaunching;
@@ -83,7 +84,7 @@
 		
 		try {
 			IAdaptable encodingAdaptable = null;
-			ISourceUnit su = null;
+			SourceUnit su = null;
 			IFile file = null;
 			URI uri = null;
 			if (activePart instanceof IEditorPart) {
@@ -96,7 +97,7 @@
 					}
 				}
 				if (su == null) {
-					su = activePart.getAdapter(ISourceUnit.class);
+					su = activePart.getAdapter(SourceUnit.class);
 				}
 				if (su == null) {
 					final IEditorPart editor = (IEditorPart) activePart;
@@ -113,14 +114,14 @@
 					final IStructuredSelection sel = (IStructuredSelection) selection;
 					if (sel.size() == 1) {
 						final Object object = sel.getFirstElement();
-						if (object instanceof ISourceUnit) {
-							su = (ISourceUnit) object;
+						if (object instanceof SourceUnit) {
+							su = (SourceUnit) object;
 						}
-						else if (object instanceof ISourceElement) {
-							su = ((ISourceElement) object).getSourceUnit();
+						else if (object instanceof SourceElement) {
+							su = ((SourceElement) object).getSourceUnit();
 						}
 						else if (object instanceof IAdaptable) {
-							su = ((IAdaptable) object).getAdapter(ISourceUnit.class);
+							su = ((IAdaptable) object).getAdapter(SourceUnit.class);
 						}
 						if (su == null) {
 							if (object instanceof IFile) {
@@ -146,8 +147,8 @@
 				}
 			}
 			else if (su == null && file != null) {
-				su = LTK.getSourceUnitManager().getSourceUnit(
-						LTK.PERSISTENCE_CONTEXT, file, null, true, null );
+				su = LtkModels.getSourceUnitManager().getSourceUnit(
+						Ltk.PERSISTENCE_CONTEXT, file, null, true, null );
 			}
 			if (file != null && uri == null) {
 				uri = file.getLocationURI();
@@ -155,7 +156,7 @@
 			
 			if (uri != null) {
 				if (su != null) {
-					while (su != null && su.getWorkingContext() != LTK.PERSISTENCE_CONTEXT) {
+					while (su != null && su.getWorkingContext() != Ltk.PERSISTENCE_CONTEXT) {
 						su = su.getUnderlyingUnit();
 					}
 				}
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitFunctionDefHandler.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitFunctionDefHandler.java
index dce598a..8baa467 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitFunctionDefHandler.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitFunctionDefHandler.java
@@ -23,7 +23,7 @@
 import org.eclipse.jface.text.BadLocationException;
 
 import org.eclipse.statet.internal.r.debug.ui.RLaunchingMessages;
-import org.eclipse.statet.r.core.rsource.ast.RAst;
+import org.eclipse.statet.r.core.rsource.ast.RAsts;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.launching.RCodeLaunching.SourceRegion;
 import org.eclipse.statet.r.ui.RUI;
@@ -64,13 +64,13 @@
 	
 	@Override
 	protected IStatus getRegions(final Data data) throws CoreException {
-		final RAstNode node= RAst.findLowestFDefAssignment(data.ast.getRoot(),
+		final RAstNode node= RAsts.findLowestFDefAssignment(data.ast.getRoot(),
 				data.selection.getOffset() );
 		if (node == null) {
 			return LaunchShortcutUtil.createUnsupported();
 		}
 		try {
-			if (RAst.hasErrors(node)) {
+			if (RAsts.hasErrors(node)) {
 				return new Status(IStatus.ERROR, RUI.BUNDLE_ID,
 						RLaunchingMessages.SubmitCode_info_SyntaxError_message );
 			}
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitSelectionAndPasteOutputHandler.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitSelectionAndPasteOutputHandler.java
index 6362e76..34d3e5e 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitSelectionAndPasteOutputHandler.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitSelectionAndPasteOutputHandler.java
@@ -61,8 +61,8 @@
 import org.eclipse.statet.r.console.core.IRBasicAdapter;
 import org.eclipse.statet.r.console.core.RConsoleTool;
 import org.eclipse.statet.r.console.core.RWorkspace;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCore;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.RUtil;
 import org.eclipse.statet.r.ui.RUI;
 import org.eclipse.statet.r.ui.editors.IRSourceEditor;
@@ -216,7 +216,7 @@
 			}
 		}
 		
-		protected IRCoreAccess getRCoreAccess() {
+		protected RCoreAccess getRCoreAccess() {
 			final ISourceEditor editor= fEditor;
 			return (editor instanceof IRSourceEditor) ?
 					((IRSourceEditor) editor).getRCoreAccess() :
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitSelectionHandler.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitSelectionHandler.java
index e7155f7..20ba158 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitSelectionHandler.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitSelectionHandler.java
@@ -29,7 +29,7 @@
 import org.eclipse.statet.ecommons.ui.workbench.WorkbenchUIUtils;
 
 import org.eclipse.statet.internal.r.debug.ui.RLaunchingMessages;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.ltk.ui.util.LTKSelectionUtils;
 import org.eclipse.statet.r.core.refactoring.RRefactoringAdapter;
 import org.eclipse.statet.r.launching.RCodeLaunching;
@@ -85,7 +85,7 @@
 			else
 			// selection of model elements
 			if (selection instanceof IStructuredSelection) {
-				final ISourceStructElement[] elements = LTKSelectionUtils.getSelectedSourceStructElements(selection);
+				final SourceStructElement[] elements = LTKSelectionUtils.getSelectedSourceStructElements(selection);
 				if (elements != null) {
 					if (fModelUtil == null) {
 						fModelUtil = new RSourceCodeAdapter();
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitUptoSelectionHandler.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitUptoSelectionHandler.java
index fa744a1..7695096 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitUptoSelectionHandler.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/launcher/SubmitUptoSelectionHandler.java
@@ -38,8 +38,8 @@
 import org.eclipse.statet.ecommons.ui.workbench.WorkbenchUIUtils;
 
 import org.eclipse.statet.internal.r.debug.ui.RLaunchingMessages;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.util.LTKSelectionUtils;
 import org.eclipse.statet.ltk.ui.util.LTKWorkbenchUIUtil;
 import org.eclipse.statet.r.core.refactoring.RRefactoringAdapter;
@@ -113,7 +113,7 @@
 			else
 			// selection of model elements
 			if (selection instanceof IStructuredSelection) {
-				final ISourceStructElement[] elements = LTKSelectionUtils.getSelectedSourceStructElements(selection);
+				final SourceStructElement[] elements = LTKSelectionUtils.getSelectedSourceStructElements(selection);
 				if (elements != null && elements.length == 1) {
 					final List<String> lines = getCodeLinesUpto(elements[0], contentTypeId, progress);
 					
@@ -132,10 +132,10 @@
 		return null;
 	}
 	
-	protected List<String> getCodeLinesUpto(final ISourceStructElement element,
+	protected List<String> getCodeLinesUpto(final SourceStructElement element,
 			final String contentTypeId, final IProgressMonitor monitor)
 			throws BadLocationException, BadPartitioningException, CoreException {
-		final ISourceUnit su = element.getSourceUnit();
+		final SourceUnit su = element.getSourceUnit();
 		if (su == null) {
 			return null;
 		}
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/objectbrowser/ContentInput.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/objectbrowser/ContentInput.java
index ebf5d30..2b2adb4 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/objectbrowser/ContentInput.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/objectbrowser/ContentInput.java
@@ -19,9 +19,10 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.console.core.RProcess;
 import org.eclipse.statet.r.console.core.RProcessREnvironment;
+import org.eclipse.statet.r.core.model.RLangElement;
 import org.eclipse.statet.r.ui.util.RElementInput;
 
 
@@ -36,8 +37,8 @@
 	
 	public ContentInput(final RProcess source,
 			final boolean filterUserspace,
-			final IModelElement. @Nullable Filter envFilter,
-			final IModelElement. @Nullable Filter otherFilter) {
+			final @Nullable LtkModelElementFilter<? super RLangElement> envFilter,
+			final @Nullable LtkModelElementFilter<? super RLangElement> otherFilter) {
 		super(source, envFilter, otherFilter);
 		
 		this.filterUserspace= filterUserspace;
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/objectbrowser/ContentJob.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/objectbrowser/ContentJob.java
index f210477..2937972 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/objectbrowser/ContentJob.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/objectbrowser/ContentJob.java
@@ -36,12 +36,13 @@
 
 import org.eclipse.statet.ecommons.ui.util.UIAccess;
 
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.nico.core.runtime.ToolWorkspace;
 import org.eclipse.statet.r.console.core.RProcess;
 import org.eclipse.statet.r.console.core.RProcessREnvironment;
 import org.eclipse.statet.r.console.core.RWorkspace;
 import org.eclipse.statet.r.core.data.CombinedRElement;
+import org.eclipse.statet.r.core.model.RLangElement;
 import org.eclipse.statet.r.ui.util.RNameSearchPattern;
 import org.eclipse.statet.rj.data.REnvironment;
 
@@ -50,7 +51,7 @@
 class ContentJob extends Job implements ToolWorkspace.Listener {
 	
 	
-	static class ContentFilter implements IModelElement.Filter {
+	static class ContentFilter implements LtkModelElementFilter<RLangElement> {
 		
 		private final boolean filterInternal;
 		private final @Nullable SearchPattern searchPattern;
@@ -63,7 +64,7 @@
 		
 		
 		@Override
-		public boolean include(final IModelElement element) {
+		public boolean include(final RLangElement element) {
 			final String name= element.getElementName().getSegmentName();
 			if (name != null) {
 				if (this.filterInternal && name.length() > 0 && name.charAt(0) == '.') {
@@ -268,8 +269,8 @@
 	private ContentInput createInput(final RProcess source) {
 		final boolean filterInternal= !this.view.getFilterIncludeInternal();
 		final String filterText= this.view.getFilterSearchText();
-		IModelElement.Filter envFilter;
-		IModelElement.Filter otherFilter;
+		LtkModelElementFilter<? super RLangElement> envFilter;
+		LtkModelElementFilter<? super RLangElement> otherFilter;
 		if (filterText != null && filterText.length() > 0) {
 			final SearchPattern filterPattern= new RNameSearchPattern();
 			filterPattern.setPattern(filterText);
@@ -347,7 +348,7 @@
 			}
 			final List<CombinedRElement> elements= new ArrayList<>(length);
 			for (final RProcessREnvironment entry : userEntries) {
-				elements.addAll(entry.getModelChildren((IModelElement.Filter) null));
+				elements.addAll(entry.getModelChildren((LtkModelElementFilter)null));
 			}
 			
 			final CombinedRElement[] array= elements.toArray(new @NonNull CombinedRElement[elements.size()]);
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/launching/RCodeLaunching.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/launching/RCodeLaunching.java
index 3df7bbd..6f3082c 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/launching/RCodeLaunching.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/launching/RCodeLaunching.java
@@ -59,15 +59,15 @@
 import org.eclipse.statet.internal.r.debug.ui.RLaunchingMessages;
 import org.eclipse.statet.internal.r.debug.ui.launcher.RCodeLaunchRegistry;
 import org.eclipse.statet.internal.r.debug.ui.launcher.RCodeLaunchRegistry.ContentHandler.FileCommand;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 import org.eclipse.statet.nico.core.runtime.ToolController;
 import org.eclipse.statet.nico.core.runtime.ToolWorkspace;
 import org.eclipse.statet.r.console.core.AbstractRController;
 import org.eclipse.statet.r.core.RUtil;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 import org.eclipse.statet.r.core.rsource.ast.GenericVisitor;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
 import org.eclipse.statet.r.nico.IRModelSrcref;
@@ -115,18 +115,18 @@
 		private static class ElementSearcher extends GenericVisitor {
 			
 			
-			private List<IRLangSourceElement> fList;
+			private List<RLangSourceElement> fList;
 			
 			
 			@Override
 			public void visitNode(final RAstNode node) throws InvocationTargetException {
 				final List<Object> attachments= node.getAttachments();
 				for (final Object attachment : attachments) {
-					if (attachment instanceof IRLangSourceElement) {
+					if (attachment instanceof RLangSourceElement) {
 						if (fList == null) {
 							fList= new ArrayList<>();
 						}
-						fList.add((IRLangSourceElement) attachment);
+						fList.add((RLangSourceElement) attachment);
 					}
 				}
 				if (fList == null) {
@@ -137,9 +137,9 @@
 		}
 		
 		
-		private final IRSourceUnit fSourceUnit;
+		private final RSourceUnit fSourceUnit;
 		private RAstNode fNode;
-		private List<IRLangSourceElement> fElements;
+		private List<RLangSourceElement> fElements;
 		
 		private final AbstractDocument fDocument;
 		
@@ -155,14 +155,14 @@
 		private IMarker fMarker;
 		
 		
-		public SourceRegion(final IRSourceUnit file, final AbstractDocument document) {
+		public SourceRegion(final RSourceUnit file, final AbstractDocument document) {
 			fSourceUnit = file;
 			fDocument = document;
 		}
 		
 		
 		@Override
-		public IRSourceUnit getFile() {
+		public RSourceUnit getFile() {
 			return fSourceUnit;
 		}
 		
@@ -171,7 +171,7 @@
 		}
 		
 		@Override
-		public List<IRLangSourceElement> getElements() {
+		public List<RLangSourceElement> getElements() {
 			if (fElements == null) {
 				if (fNode != null) {
 					final ElementSearcher searcher = new ElementSearcher();
@@ -247,8 +247,8 @@
 		
 		
 		void installMarker() {
-			if (fSourceUnit instanceof IRWorkspaceSourceUnit) {
-				final IResource resource = ((IRWorkspaceSourceUnit) fSourceUnit).getResource();
+			if (fSourceUnit instanceof RWorkspaceSourceUnit) {
+				final IResource resource = ((RWorkspaceSourceUnit) fSourceUnit).getResource();
 				try {
 					fMarker = resource.createMarker(MARKER_TYPE);
 					fMarker.setAttribute(IMarker.CHAR_START, fBeginOffset);
@@ -322,9 +322,9 @@
 	 * @throws CoreException if running failed.
 	 */
 	public static void runFileUsingCommand(final String command, final URI fileURI,
-			final ISourceUnit su, final String encoding, final boolean gotoConsole) throws CoreException {
-		if (su instanceof IWorkspaceSourceUnit && su.getResource() instanceof IFile) {
-			final IFile file = (IFile) ((IWorkspaceSourceUnit) su).getResource();
+			final SourceUnit su, final String encoding, final boolean gotoConsole) throws CoreException {
+		if (su instanceof WorkspaceSourceUnit && su.getResource() instanceof IFile) {
+			final IFile file = (IFile) ((WorkspaceSourceUnit) su).getResource();
 			
 			// save files
 			final IProject project = file.getProject();
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/launching/SubmitFileViaCommandRunnable.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/launching/SubmitFileViaCommandRunnable.java
index c560046..e7d7aeb 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/launching/SubmitFileViaCommandRunnable.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/launching/SubmitFileViaCommandRunnable.java
@@ -23,7 +23,7 @@
 
 import org.eclipse.statet.ecommons.ts.ui.ToolRunnableDecorator;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.nico.core.runtime.ConsoleRunnable;
 import org.eclipse.statet.nico.core.runtime.SubmitType;
 import org.eclipse.statet.r.console.core.AbstractRController;
@@ -35,14 +35,14 @@
 	
 	
 	private final String fCommand;
-	private final ISourceUnit fSourceUnit;
+	private final SourceUnit fSourceUnit;
 	
 	private final Image fImage;
 	private final String fLabel;
 	
 	
 	public SubmitFileViaCommandRunnable(final Image image, final String label,
-			final String command, final ISourceUnit su) {
+			final String command, final SourceUnit su) {
 		fImage = image;
 		fLabel = label;
 		fCommand = command;
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/ui/rtool/RElementNameVariableResolver.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/ui/rtool/RElementNameVariableResolver.java
index 3450bd7..326f14c 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/ui/rtool/RElementNameVariableResolver.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/r/ui/rtool/RElementNameVariableResolver.java
@@ -36,11 +36,11 @@
 
 import org.eclipse.statet.internal.r.ui.rtools.Messages;
 import org.eclipse.statet.ltk.core.ElementName;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
 import org.eclipse.statet.ltk.ui.ElementNameProvider;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
 import org.eclipse.statet.ltk.ui.util.LTKSelectionUtils;
-import org.eclipse.statet.r.core.model.IRElement;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.r.ui.RUI;
@@ -77,7 +77,7 @@
 					}
 					if (structuredSelection.size() == 1) {
 						final Object element = structuredSelection.getFirstElement();
-						if (element instanceof IRElement) { 
+						if (element instanceof RElement) { 
 							final ElementName elementName;
 							if (selection instanceof ElementNameProvider) {
 								elementName = ((ElementNameProvider) selection).getElementName(
@@ -86,12 +86,12 @@
 												element );
 							}
 							else {
-								elementName = ((IRElement) element).getElementName();
+								elementName = ((RElement)element).getElementName();
 							}
 							return checkName(elementName);
 						}
 					}
-					final IModelElement[] elements = LTKSelectionUtils.getSelectedElements(
+					final LtkModelElement[] elements = LTKSelectionUtils.getSelectedElements(
 							(IStructuredSelection) selection );
 					if (elements != null && elements.length == 1
 							&& elements[0].getModelTypeId() == RModel.R_TYPE_ID) {
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/model/RChunkNode.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/model/RChunkNode.java
index 07e3c41..5c1b0a0 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/model/RChunkNode.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/model/RChunkNode.java
@@ -18,6 +18,8 @@
 
 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.jcommons.lang.Nullable;
 
 import org.eclipse.statet.ltk.ast.core.AstNode;
 import org.eclipse.statet.ltk.ast.core.AstVisitor;
@@ -28,6 +30,7 @@
 /**
  * R Chunk
  */
+@NonNullByDefault
 public class RChunkNode implements AstNode {
 	
 	
@@ -36,7 +39,7 @@
 	
 	private final AstNode parent;
 	// start/stop control chunk
-	Args weaveArgs;
+	@Nullable Args weaveArgs;
 	ImList<SourceComponent> rSources;
 	
 	int startOffset;
@@ -66,7 +69,7 @@
 		return true;
 	}
 	
-	public Args getWeaveArgsChild() {
+	public @Nullable Args getWeaveArgsChild() {
 		return this.weaveArgs;
 	}
 	
@@ -86,9 +89,10 @@
 	
 	@Override
 	public AstNode getChild(final int index) {
-		if (this.weaveArgs != null) {
+		final Args weaveArgs= this.weaveArgs;
+		if (weaveArgs != null) {
 			if (index == 0) {
-				return this.weaveArgs;
+				return weaveArgs;
 			}
 			return this.rSources.get(index - 1);
 		}
@@ -99,8 +103,9 @@
 	
 	@Override
 	public int getChildIndex(final AstNode element) {
-		if (this.weaveArgs != null) {
-			if (this.weaveArgs == element) {
+		final Args weaveArgs= this.weaveArgs;
+		if (weaveArgs != null) {
+			if (weaveArgs == element) {
 				return 0;
 			}
 			for (int i= 0; i < this.rSources.size(); i++) {
@@ -128,8 +133,9 @@
 	
 	@Override
 	public void acceptInChildren(final AstVisitor visitor) throws InvocationTargetException {
-		if (this.weaveArgs != null) {
-			visitor.visit(this.weaveArgs);
+		final Args weaveArgs= this.weaveArgs;
+		if (weaveArgs != null) {
+			visitor.visit(weaveArgs);
 		}
 		for (final SourceComponent node : this.rSources) {
 			visitor.visit(node);
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/model/RChunkReconciler.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/model/RChunkReconciler.java
index 2f4c0ff..3ffd043 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/model/RChunkReconciler.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/model/RChunkReconciler.java
@@ -25,6 +25,9 @@
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.string.InternStringCache;
 import org.eclipse.statet.jcommons.text.core.BasicTextRegion;
 import org.eclipse.statet.jcommons.text.core.TextLineInformation;
@@ -36,17 +39,17 @@
 import org.eclipse.statet.ltk.ast.core.EmbeddingAstNode;
 import org.eclipse.statet.ltk.core.SourceContent;
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
-import org.eclipse.statet.ltk.model.core.elements.IEmbeddingReconcileItem;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
-import org.eclipse.statet.ltk.model.core.impl.SourceUnitModelContainer;
-import org.eclipse.statet.r.core.model.IRCompositeSourceElement;
-import org.eclipse.statet.r.core.model.IRLangSourceElement;
-import org.eclipse.statet.r.core.model.IRModelInfo;
-import org.eclipse.statet.r.core.model.IRModelManager;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.ltk.model.core.build.EmbeddingForeignReconcileTask;
+import org.eclipse.statet.ltk.model.core.build.SourceUnitModelContainer;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
+import org.eclipse.statet.r.core.model.RCompositeSourceElement;
 import org.eclipse.statet.r.core.model.RElementName;
+import org.eclipse.statet.r.core.model.RLangSourceElement;
 import org.eclipse.statet.r.core.model.RModel;
-import org.eclipse.statet.r.core.model.RProblemReporter;
+import org.eclipse.statet.r.core.model.RModelManager;
+import org.eclipse.statet.r.core.model.RSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnitModelInfo;
+import org.eclipse.statet.r.core.model.build.RProblemReporter;
 import org.eclipse.statet.r.core.rsource.ast.FCall.Arg;
 import org.eclipse.statet.r.core.rsource.ast.FCall.Args;
 import org.eclipse.statet.r.core.rsource.ast.NodeType;
@@ -55,16 +58,19 @@
 import org.eclipse.statet.r.core.rsource.ast.SourceComponent;
 
 
-public class RChunkReconciler<U extends IRSourceUnit, M extends ISourceUnitModelInfo,
-		C extends SourceUnitModelContainer<U, M>> {
+@NonNullByDefault
+public class RChunkReconciler<
+		TSourceUnit extends RSourceUnit,
+		TModelInfo extends SourceUnitModelInfo,
+		TModelContainer extends SourceUnitModelContainer<TSourceUnit, TModelInfo>> {
 	
 	
 	private final String name;
 	
-	private final IRModelManager rManager;
+	private final RModelManager rManager;
 	
 	private final Matcher raChunkStartLineMatcher;
-	private final Matcher raChunkRefLineMatcher;
+	private final @Nullable Matcher raChunkRefLineMatcher;
 	private final Matcher raChunkEndLineMatcher;
 	
 	private final RScanner raScanner= new RScanner(AstInfo.LEVEL_MODEL_DEFAULT, new InternStringCache(0x20));
@@ -90,11 +96,11 @@
 		return this.name;
 	}
 	
-	public IRModelManager getRModelManager() {
+	public RModelManager getRModelManager() {
 		return this.rManager;
 	}
 	
-	public void reconcileAst(final C adapter,
+	public void reconcileAst(final TModelContainer adapter,
 			final SourceContent content, final List<? extends EmbeddingAstNode> list,
 			final IProgressMonitor monitor) {
 		final String source= content.getText();
@@ -188,7 +194,7 @@
 						this.raInput.init(startRegion.getOffset(), startRegion.getOffset() + startRegion.getLength()),
 						true );
 			}
-			final SourceComponent[] rCodeNodes= new SourceComponent[rCode.size()];
+			final SourceComponent[] rCodeNodes= new @NonNull SourceComponent[rCode.size()];
 			for (int j= 0; j < rCodeNodes.length; j++) {
 				final IRegion region= rCode.get(j);
 				rCodeNodes[j]= this.raScanner.scanSourceRange(
@@ -199,9 +205,9 @@
 		}
 	}
 	
-	public IRModelInfo reconcileModel(final C adapter,
-			final SourceContent content, final M mainModel,
-			final List<? extends IEmbeddingReconcileItem<?, ?>> list,
+	public @Nullable RSourceUnitModelInfo reconcileModel(final TModelContainer adapter,
+			final SourceContent content, final TModelInfo mainModel,
+			final List<? extends EmbeddingForeignReconcileTask<?, ?>> list,
 			final int level, final IProgressMonitor monitor) {
 		if (list == null || list.isEmpty()) {
 			return null;
@@ -211,7 +217,7 @@
 		final List<RedocsRChunkElement> chunkElements= new ArrayList<>();
 		final List<SourceComponent> inlineNodes= new ArrayList<>();
 		
-		for (final IEmbeddingReconcileItem<?, ?> item : list) {
+		for (final EmbeddingForeignReconcileTask<?, ?> item : list) {
 			if (item.getForeignTypeId() != RModel.R_TYPE_ID) {
 				continue;
 			}
@@ -236,12 +242,11 @@
 				
 				RElementName name= null;
 				TextRegion nameRegion= null;
-				if (rChunk.getWeaveArgsChild() != null) {
-					final Arg arg= getLabelArg(rChunk.getWeaveArgsChild());
-					if (arg != null && arg.hasValue()) {
-						final RAstNode labelNode= arg.getValueChild();
+				{	final Arg labelArgNode= getLabelArgNode(rChunk.getWeaveArgsChild());
+					if (labelArgNode != null && labelArgNode.hasValue()) {
+						final RAstNode labelNode= labelArgNode.getValueChild();
 						final String label;
-						if (arg.getValueChild().getNodeType() == NodeType.SYMBOL) {
+						if (labelArgNode.getValueChild().getNodeType() == NodeType.SYMBOL) {
 							label= labelNode.getText();
 						}
 						else {
@@ -256,9 +261,9 @@
 					name= RElementName.create(RElementName.MAIN_OTHER, "#"+Integer.toString(chunkCount)); //$NON-NLS-1$
 					nameRegion= new BasicTextRegion(embeddingNode.getStartOffset() + 2);
 				}
-				final RedocsRChunkElement element= new RedocsRChunkElement(item.getModelRefElement(),
+				final RedocsRChunkElement element= new RedocsRChunkElement(item.getEmbeddingElement(),
 						rChunk, name, nameRegion );
-				item.setModelTypeElement(element);
+				item.setEmbeddedElement(element);
 				chunkElements.add(element);
 				break; }
 			}
@@ -268,14 +273,14 @@
 			return null;
 		}
 		
-		final IRModelInfo modelInfo= getRModelManager().reconcile(adapter.getSourceUnit(),
+		final RSourceUnitModelInfo modelInfo= getRModelManager().reconcile(adapter.getSourceUnit(),
 				mainModel, chunkElements, inlineNodes, level, monitor );
 		mainModel.addAttachment(modelInfo);
 		return modelInfo;
 	}
 	
-	private Arg getLabelArg(final Args weaveArgs) {
-		if (!weaveArgs.hasChildren()) {
+	private @Nullable Arg getLabelArgNode(final @Nullable Args weaveArgs) {
+		if (weaveArgs == null || !weaveArgs.hasChildren()) {
 			return null;
 		}
 		for (int i= 0; i < weaveArgs.getChildCount(); i++) {
@@ -290,22 +295,24 @@
 		return null;
 	}
 	
-	public void reportEmbeddedProblems(final C adapter,
-			final SourceContent content, final M mainModel,
+	public void reportEmbeddedProblems(final TModelContainer adapter,
+			final SourceContent content, final TModelInfo mainModel,
 			final ProblemRequestor problemRequestor, final int level,
 			final IProgressMonitor monitor) {
-		final IRModelInfo rModel= RModel.getRModelInfo(mainModel);
+		final RSourceUnitModelInfo rModel= RModel.getRModelInfo(mainModel);
 		if (rModel == null) {
 			return;
 		}
-		final IRSourceUnit su= adapter.getSourceUnit();
-		final IRLangSourceElement element= rModel.getSourceElement();
-		if (element instanceof IRCompositeSourceElement) {
-			final List<? extends IRLangSourceElement> elements= ((IRCompositeSourceElement) element)
+		final RSourceUnit su= adapter.getSourceUnit();
+		final RLangSourceElement element= rModel.getSourceElement();
+		if (element instanceof RCompositeSourceElement) {
+			final List<? extends RLangSourceElement> elements= ((RCompositeSourceElement) element)
 					.getCompositeElements();
-			for (final IRLangSourceElement rChunk : elements) {
+			for (final RLangSourceElement rChunk : elements) {
 				final AstNode rChunkNode= rChunk.getAdapter(AstNode.class);
-				this.rpReporter.run(su, content, rChunkNode, problemRequestor);
+				if (rChunkNode != null) {
+					this.rpReporter.run(su, content, rChunkNode, problemRequestor);
+				}
 			}
 		}
 	}
diff --git a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/model/RedocsRChunkElement.java b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/model/RedocsRChunkElement.java
index 2ef80fe..4546c12 100644
--- a/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/model/RedocsRChunkElement.java
+++ b/redocs/org.eclipse.statet.redocs.r/src/org/eclipse/statet/redocs/r/core/model/RedocsRChunkElement.java
@@ -15,26 +15,29 @@
 package org.eclipse.statet.redocs.r.core.model;
 
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.r.core.model.RChunkElement;
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.r.core.rsource.ast.SourceComponent;
 
 
+@NonNullByDefault
 public class RedocsRChunkElement extends RChunkElement {
 	
 	
-	public RedocsRChunkElement(final ISourceStructElement parent, final RChunkNode astNode,
-			final RElementName name, final TextRegion nameRegion) {
+	public RedocsRChunkElement(final SourceStructElement<?, ?> parent, final RChunkNode astNode,
+			final RElementName name, final @Nullable TextRegion nameRegion) {
 		super(parent, astNode, name, nameRegion);
 	}
 	
 	
 	@Override
 	protected RChunkNode getNode() {
-		return (RChunkNode) super.getNode();
+		return (RChunkNode)super.getNode();
 	}
 	
 	@Override
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 a1a1bd4..f19c7fe 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
@@ -29,7 +29,7 @@
 import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNode;
 import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionUtils;
 
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 
 
 @NonNullByDefault
@@ -138,7 +138,7 @@
 				if (child.getStartOffset() >= endOffset) {
 					break;
 				}
-				if (child.getType().getPartitionType() == IRDocumentConstants.R_DEFAULT_CONTENT_TYPE) {
+				if (child.getType().getPartitionType() == RDocumentConstants.R_DEFAULT_CONTENT_TYPE) {
 					nodes.add(child);
 				}
 			}
@@ -150,7 +150,7 @@
 	public @Nullable TreePartitionNode getRCodeRegion(final IDocument document, final int offset)
 			throws BadLocationException {
 		return TreePartitionUtils.searchNode(document, this.sections.getPartitioning(), offset, true,
-				IRDocumentConstants.R_DEFAULT_CONTENT_TYPE );
+				RDocumentConstants.R_DEFAULT_CONTENT_TYPE );
 	}
 	
 }
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 4a30cc4..0185088 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
@@ -26,9 +26,9 @@
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.ui.IWorkbenchPart;
 
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.debug.ui.actions.RToggleBreakpointAdapter;
 import org.eclipse.statet.redocs.tex.r.ui.editors.LtxRweaveEditor;
 
@@ -47,7 +47,7 @@
 	@Override
 	public boolean canToggleLineBreakpoints(final IWorkbenchPart part, final ISelection selection) {
 		final LtxRweaveEditor editor= getREditor(part, selection);
-		return (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
+		return (editor != null && editor.getSourceUnit() instanceof WorkspaceSourceUnit
 				&& selection instanceof ITextSelection );
 	}
 	
@@ -55,7 +55,7 @@
 	public void toggleLineBreakpoints(final IWorkbenchPart part, final ISelection selection)
 			throws CoreException {
 		final LtxRweaveEditor editor= getREditor(part, selection);
-		if (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
+		if (editor != null && editor.getSourceUnit() instanceof WorkspaceSourceUnit
 				&& selection instanceof ITextSelection) {
 			if (isRChunk(editor, (ITextSelection) selection) ) {
 				this.rAdapter.toggleLineBreakpoints(part, selection);
@@ -69,14 +69,14 @@
 	@Override
 	public boolean canToggleMethodBreakpoints(final IWorkbenchPart part, final ISelection selection) {
 		final LtxRweaveEditor editor= getREditor(part, selection);
-		return (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
+		return (editor != null && editor.getSourceUnit() instanceof WorkspaceSourceUnit
 				&& selection instanceof ITextSelection );
 	}
 	
 	@Override
 	public void toggleMethodBreakpoints(final IWorkbenchPart part, final ISelection selection) throws CoreException {
 		final LtxRweaveEditor editor= getREditor(part, selection);
-		if (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
+		if (editor != null && editor.getSourceUnit() instanceof WorkspaceSourceUnit
 				&& selection instanceof ITextSelection) {
 			if (isRChunk(editor, (ITextSelection) selection) ) {
 				this.rAdapter.toggleMethodBreakpoints(part, selection);
@@ -100,7 +100,7 @@
 	@Override
 	public boolean canToggleBreakpoints(final IWorkbenchPart part, final ISelection selection) {
 		final LtxRweaveEditor editor= getREditor(part, selection);
-		return (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
+		return (editor != null && editor.getSourceUnit() instanceof WorkspaceSourceUnit
 				&& selection instanceof ITextSelection );
 	}
 	
@@ -108,7 +108,7 @@
 	public void toggleBreakpoints(final IWorkbenchPart part, final ISelection selection)
 			throws CoreException {
 		final LtxRweaveEditor editor= getREditor(part, selection);
-		if (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
+		if (editor != null && editor.getSourceUnit() instanceof WorkspaceSourceUnit
 				&& selection instanceof ITextSelection) {
 			if (isRChunk(editor, (ITextSelection) selection) ) {
 				this.rAdapter.toggleBreakpoints(part, selection);
@@ -137,7 +137,7 @@
 				final ITypedRegion partition= ((IDocumentExtension3) viewer.getDocument()).getPartition(
 						editor.getDocumentContentInfo().getPartitioning(),
 						selection.getOffset(), false );
-				return IRDocumentConstants.R_ANY_CONTENT_CONSTRAINT.matches(partition.getType());
+				return RDocumentConstants.R_ANY_CONTENT_CONSTRAINT.matches(partition.getType());
 			}
 			catch (final BadLocationException e) {}
 			catch (final BadPartitioningException e) {}
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 3dc56ff..3a05203 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,11 +16,14 @@
 
 import org.eclipse.core.resources.IFile;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 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.element.SourceUnit;
 import org.eclipse.statet.ltk.model.core.impl.AbstractFilePersistenceSourceUnitFactory;
 
 
+@NonNullByDefault
 public class LtxRweavePersistenceUnitFactory extends AbstractFilePersistenceSourceUnitFactory {
 	
 	
@@ -29,7 +32,7 @@
 	
 	
 	@Override
-	protected ISourceUnit createSourceUnit(final String id, final IFile file) {
+	protected SourceUnit createSourceUnit(final String id, final IFile file) {
 		return new LtxRweaveResourceSourceUnit(id, file);
 	}
 	
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 14bfaba..3a97036 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
@@ -16,23 +16,29 @@
 
 import java.util.regex.Pattern;
 
-import org.eclipse.statet.docmlet.tex.core.model.ILtxModelInfo;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.docmlet.tex.core.model.LtxSourceUnitModelInfo;
 import org.eclipse.statet.redocs.r.core.model.RChunkReconciler;
 import org.eclipse.statet.redocs.tex.r.core.model.LtxRweaveSourceUnit;
 
 
-class LtxRChunkReconciler extends RChunkReconciler
-		<LtxRweaveSourceUnit, ILtxModelInfo, LtxRweaveSuModelContainer> {
+@NonNullByDefault
+class LtxRChunkReconciler extends RChunkReconciler<
+		LtxRweaveSourceUnit, LtxSourceUnitModelInfo, LtxRweaveSuModelContainer> {
 	
 	
-	private static LtxRChunkReconciler INSTANCE;
+	private static @Nullable LtxRChunkReconciler INSTANCE;
 	
 	static final LtxRChunkReconciler getInstance() {
 		synchronized(LtxRChunkReconciler.class) {
-			if (INSTANCE == null) {
-				INSTANCE= new LtxRChunkReconciler();
+			LtxRChunkReconciler reconciler= INSTANCE;
+			if (reconciler == null) {
+				reconciler= new LtxRChunkReconciler();
+				INSTANCE= reconciler;
 			}
-			return INSTANCE;
+			return reconciler;
 		}
 	}
 	
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 301892a..bf61d98 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,23 +16,27 @@
 
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 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.ModelManager;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 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.RCoreAccess;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 import org.eclipse.statet.redocs.tex.r.core.model.LtxRweaveSourceUnit;
 
 
+@NonNullByDefault
 public class LtxRweaveEditorWorkingCopy
 		extends GenericEditorWorkspaceSourceUnitWorkingCopy2<LtxRweaveSuModelContainer>
-		implements LtxRweaveSourceUnit, TexWorkspaceSourceUnit, IRWorkspaceSourceUnit {
+		implements LtxRweaveSourceUnit, TexWorkspaceSourceUnit, RWorkspaceSourceUnit {
 	
 	
-	public LtxRweaveEditorWorkingCopy(final IRWorkspaceSourceUnit from) {
+	public LtxRweaveEditorWorkingCopy(final RWorkspaceSourceUnit from) {
 		super(from);
 	}
 	
@@ -44,19 +48,19 @@
 	
 	@Override
 	public TexCoreAccess getTexCoreAccess() {
-		return ((LtxRweaveSourceUnit) getUnderlyingUnit()).getTexCoreAccess();
+		return ((LtxRweaveSourceUnit)getUnderlyingUnit()).getTexCoreAccess();
 	}
 	
 	@Override
-	public IRCoreAccess getRCoreAccess() {
-		return ((LtxRweaveSourceUnit) getUnderlyingUnit()).getRCoreAccess();
+	public RCoreAccess getRCoreAccess() {
+		return ((LtxRweaveSourceUnit)getUnderlyingUnit()).getRCoreAccess();
 	}
 	
 	
 	@Override
 	protected void register() {
 		super.register();
-		final IModelManager rManager= RModel.getRModelManager();
+		final ModelManager rManager= RModel.getRModelManager();
 		if (rManager != null) {
 			rManager.deregisterDependentUnit(this);
 		}
@@ -64,7 +68,7 @@
 	
 	@Override
 	protected void unregister() {
-		final IModelManager rManager= RModel.getRModelManager();
+		final ModelManager rManager= RModel.getRModelManager();
 		if (rManager != null) {
 			rManager.deregisterDependentUnit(this);
 		}
@@ -73,7 +77,8 @@
 	
 	
 	@Override
-	public ISourceUnitModelInfo getModelInfo(final String type, final int flags, final IProgressMonitor monitor) {
+	public @Nullable SourceUnitModelInfo getModelInfo(final @Nullable String type, final int flags,
+			final IProgressMonitor monitor) {
 		if (type == RModel.R_TYPE_ID) {
 			return RModel.getRModelInfo(getModelContainer().getModelInfo(flags, monitor));
 		}
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveResourceSourceUnit.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveResourceSourceUnit.java
index f1a13ce..37def4b 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveResourceSourceUnit.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/model/LtxRweaveResourceSourceUnit.java
@@ -17,27 +17,32 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 
 import org.eclipse.statet.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.ModelManager;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.ltk.model.core.impl.GenericResourceSourceUnit2;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCore;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.RProject;
 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.r.core.model.RWorkspaceSourceUnit;
 import org.eclipse.statet.redocs.tex.r.core.TexRweaveCore;
 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 LtxRweaveResourceSourceUnit extends GenericResourceSourceUnit2<LtxRweaveSuModelContainer> 
-		implements LtxRweaveSourceUnit, TexWorkspaceSourceUnit, IRWorkspaceSourceUnit {
+@NonNullByDefault
+public class LtxRweaveResourceSourceUnit
+		extends GenericResourceSourceUnit2<LtxRweaveSuModelContainer> 
+		implements LtxRweaveSourceUnit, TexWorkspaceSourceUnit, RWorkspaceSourceUnit {
 	
 	
 	public LtxRweaveResourceSourceUnit(final String id, final IFile file) {
@@ -66,7 +71,7 @@
 	}
 	
 	@Override
-	public IRCoreAccess getRCoreAccess() {
+	public RCoreAccess getRCoreAccess() {
 		final RProject rProject= RProjects.getRProject(getResource().getProject());
 		return (rProject != null) ? rProject : RCore.WORKBENCH_ACCESS;
 	}
@@ -76,7 +81,7 @@
 	protected void register() {
 		super.register();
 		
-		final IModelManager rManager= RModel.getRModelManager();
+		final ModelManager rManager= RModel.getRModelManager();
 		if (rManager != null) {
 			rManager.deregisterDependentUnit(this);
 		}
@@ -84,7 +89,7 @@
 	
 	@Override
 	protected void unregister() {
-		final IModelManager rManager= RModel.getRModelManager();
+		final ModelManager rManager= RModel.getRModelManager();
 		if (rManager != null) {
 			rManager.deregisterDependentUnit(this);
 		}
@@ -94,7 +99,8 @@
 	
 	
 	@Override
-	public ISourceUnitModelInfo getModelInfo(final String type, final int flags, final IProgressMonitor monitor) {
+	public @Nullable SourceUnitModelInfo getModelInfo(final @Nullable String type, final int flags,
+			final IProgressMonitor monitor) {
 		if (type == RModel.R_TYPE_ID) {
 			return RModel.getRModelInfo(getModelContainer().getModelInfo(flags, monitor));
 		}
@@ -104,11 +110,11 @@
 	
 	@Override
 	@SuppressWarnings("unchecked")
-	public <T> T getAdapter(final Class<T> adapterType) {
+	public <T> @Nullable T getAdapter(final Class<T> adapterType) {
 		if (adapterType == TexCoreAccess.class) {
 			return (T) getTexCoreAccess();
 		}
-		if (adapterType == IRCoreAccess.class) {
+		if (adapterType == RCoreAccess.class) {
 			return (T) getRCoreAccess();
 		}
 		return super.getAdapter(adapterType);
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 4e9e7ee..5384fc1 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
@@ -18,14 +18,17 @@
 
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.docmlet.tex.core.ast.Embedded;
-import org.eclipse.statet.docmlet.tex.core.model.EmbeddingReconcileItem;
-import org.eclipse.statet.docmlet.tex.core.model.ILtxModelInfo;
-import org.eclipse.statet.docmlet.tex.core.model.ILtxSuModelContainerEmbeddedExtension;
-import org.eclipse.statet.docmlet.tex.core.model.LtxSuModelContainer;
+import org.eclipse.statet.docmlet.tex.core.model.LtxSourceUnitModelInfo;
 import org.eclipse.statet.docmlet.tex.core.model.TexModel;
+import org.eclipse.statet.docmlet.tex.core.model.build.EmbeddingReconcileItem;
+import org.eclipse.statet.docmlet.tex.core.model.build.LtxSourceUnitModelContainer;
+import org.eclipse.statet.docmlet.tex.core.model.build.LtxSourceUnitModelContainerEmbeddedExtension;
 import org.eclipse.statet.internal.redocs.tex.r.RedocsTexRPlugin;
-import org.eclipse.statet.ltk.core.LTK;
+import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.core.SourceContent;
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
 import org.eclipse.statet.r.core.model.RModel;
@@ -33,8 +36,10 @@
 import org.eclipse.statet.redocs.tex.r.core.model.TexRweaveModel;
 
 
-public class LtxRweaveSuModelContainer extends LtxSuModelContainer<LtxRweaveSourceUnit>
-		implements ILtxSuModelContainerEmbeddedExtension {
+@NonNullByDefault
+public class LtxRweaveSuModelContainer
+		extends LtxSourceUnitModelContainer<LtxRweaveSourceUnit>
+		implements LtxSourceUnitModelContainerEmbeddedExtension {
 	
 	
 	public LtxRweaveSuModelContainer(final LtxRweaveSourceUnit su) {
@@ -61,7 +66,7 @@
 	}
 	
 	@Override
-	public void reconcileEmbeddedModel(final SourceContent content, final ILtxModelInfo texModel,
+	public void reconcileEmbeddedModel(final SourceContent content, final LtxSourceUnitModelInfo texModel,
 			final List<EmbeddingReconcileItem> list,
 			final int level, final IProgressMonitor monitor) {
 		LtxRChunkReconciler.getInstance()
@@ -69,7 +74,7 @@
 	}
 	
 	@Override
-	public void reportEmbeddedProblems(final SourceContent content, final ILtxModelInfo texModel,
+	public void reportEmbeddedProblems(final SourceContent content, final LtxSourceUnitModelInfo texModel,
 			final ProblemRequestor problemRequestor,
 			final int level, final IProgressMonitor monitor) {
 		LtxRChunkReconciler.getInstance()
@@ -77,10 +82,10 @@
 	}
 	
 	@Override
-	public ProblemRequestor createProblemRequestor() {
-		if (getMode() == LTK.EDITOR_CONTEXT) {
-			return RedocsTexRPlugin.getInstance().getDocRDocumentProvider().createProblemRequestor(
-					getSourceUnit() );
+	public @Nullable ProblemRequestor createProblemRequestor() {
+		if (getMode() == Ltk.EDITOR_CONTEXT) {
+			return RedocsTexRPlugin.getInstance().getDocRDocumentProvider()
+					.createProblemRequestor(getSourceUnit());
 		}
 		return null;
 	}
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 2246980..3d746e6 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
@@ -22,18 +22,20 @@
 
 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.tex.core.TexBuildParticipant;
-import org.eclipse.statet.docmlet.tex.core.model.LtxSuModelContainer;
 import org.eclipse.statet.docmlet.tex.core.model.TexWorkspaceSourceUnit;
+import org.eclipse.statet.docmlet.tex.core.model.build.LtxSourceUnitModelContainer;
 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.r.core.model.build.RModelIndexUpdate;
 import org.eclipse.statet.redocs.tex.r.core.model.LtxRweaveSourceUnit;
 import org.eclipse.statet.redocs.tex.r.core.model.TexRweaveModel;
 
 
+@NonNullByDefault
 public class LtxRweaveTexBuildParticipant extends TexBuildParticipant {
 	
 	
@@ -71,7 +73,7 @@
 			final IProgressMonitor monitor) throws CoreException {
 		if (sourceUnit instanceof LtxRweaveSourceUnit) {
 			final LtxRweaveSourceUnit unit= (LtxRweaveSourceUnit) sourceUnit;
-			final LtxRweaveSuModelContainer modelContainer= (LtxRweaveSuModelContainer) unit.getAdapter(LtxSuModelContainer.class);
+			final LtxRweaveSuModelContainer modelContainer= (LtxRweaveSuModelContainer)unit.getAdapter(LtxSourceUnitModelContainer.class);
 			if (modelContainer != null) {
 				this.rIndexUpdate.update(unit,
 						RModel.getRModelInfo(modelContainer.getCurrentModel()) );
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/LtxRweaveEditorUnitFactory.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/LtxRweaveEditorUnitFactory.java
index 6731c81..8b387d1 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/LtxRweaveEditorUnitFactory.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/LtxRweaveEditorUnitFactory.java
@@ -16,13 +16,17 @@
 
 import org.eclipse.core.filesystem.IFileStore;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.internal.redocs.tex.r.model.LtxRweaveEditorWorkingCopy;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 import org.eclipse.statet.ltk.model.core.impl.AbstractEditorSourceUnitFactory;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 
 
+@NonNullByDefault
 public final class LtxRweaveEditorUnitFactory extends AbstractEditorSourceUnitFactory {
 	
 	
@@ -31,12 +35,12 @@
 	
 	
 	@Override
-	protected ISourceUnit createSourceUnit(final String id, final IWorkspaceSourceUnit su) {
-		return new LtxRweaveEditorWorkingCopy((IRWorkspaceSourceUnit) su);
+	protected SourceUnit createSourceUnit(final String id, final WorkspaceSourceUnit su) {
+		return new LtxRweaveEditorWorkingCopy((RWorkspaceSourceUnit)su);
 	}
 	
 	@Override
-	protected ISourceUnit createSourceUnit(final String id, final IFileStore file) {
+	protected @Nullable SourceUnit createSourceUnit(final String id, final IFileStore file) {
 		return null;
 	}
 	
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/NewLtxRweaveDocCreationWizard.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/NewLtxRweaveDocCreationWizard.java
index fe8f9ce..b0bf661 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/NewLtxRweaveDocCreationWizard.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/NewLtxRweaveDocCreationWizard.java
@@ -32,8 +32,9 @@
 import org.eclipse.statet.ecommons.ui.dialogs.DialogUtils;
 
 import org.eclipse.statet.internal.redocs.tex.r.RedocsTexRPlugin;
-import org.eclipse.statet.ltk.core.LTK;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.model.core.LtkModels;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.templates.NewDocTemplateGenerateWizardPage;
 import org.eclipse.statet.ltk.ui.templates.TemplateUtils.EvaluatedTemplate;
 import org.eclipse.statet.ltk.ui.wizards.NewElementWizard;
@@ -58,8 +59,8 @@
 		@Override
 		protected String getInitialFileContent(final IFile newFileHandle, final SubMonitor m) {
 			final String lineDelimiter= TextUtil.getLineDelimiter(newFileHandle.getProject());
-			final ISourceUnit su= LTK.getSourceUnitManager().getSourceUnit(
-					LTK.PERSISTENCE_CONTEXT, newFileHandle, getContentType(newFileHandle),
+			final SourceUnit su= LtkModels.getSourceUnitManager().getSourceUnit(
+					Ltk.PERSISTENCE_CONTEXT, newFileHandle, getContentType(newFileHandle),
 					true, m );
 			try {
 				final EvaluatedTemplate data= CodeGeneration.getNewDocContent(su, lineDelimiter,
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveDocEditor.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveDocEditor.java
index eaa9d94..b04b838 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveDocEditor.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveDocEditor.java
@@ -53,7 +53,7 @@
 import org.eclipse.statet.docmlet.tex.ui.sourceediting.TexEditingSettings;
 import org.eclipse.statet.internal.redocs.tex.r.RedocsTexRPlugin;
 import org.eclipse.statet.ltk.ast.core.util.AstSelection;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.ltk.ui.LTKUI;
 import org.eclipse.statet.ltk.ui.sourceediting.AbstractMarkOccurrencesProvider;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditorAddon;
@@ -61,11 +61,11 @@
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor1OutlinePage;
 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.RCoreAccess;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.launching.RCodeLaunching;
 import org.eclipse.statet.r.ui.RUI;
 import org.eclipse.statet.r.ui.editors.IRSourceEditor;
@@ -109,11 +109,11 @@
 		
 		
 		public ThisMarkOccurrencesProvider(final SourceEditor1 editor) {
-			super(editor, IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT);
+			super(editor, RDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT);
 		}
 		
 		@Override
-		protected void doUpdate(final RunData run, final ISourceUnitModelInfo info,
+		protected void doUpdate(final RunData run, final SourceUnitModelInfo info,
 				final AstSelection astSelection, final ITextSelection orgSelection)
 				throws BadLocationException, BadPartitioningException, UnsupportedOperationException {
 			if (astSelection.getCovering() instanceof TexAstNode) {
@@ -189,7 +189,7 @@
 	
 	
 	@Override
-	public IRCoreAccess getRCoreAccess() {
+	public RCoreAccess getRCoreAccess() {
 		return this.combinedConfig.getRCoreAccess();
 	}
 	
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 ac3cd97..3907fde 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
@@ -22,6 +22,8 @@
 import org.eclipse.jface.text.source.IAnnotationModel;
 
 import org.eclipse.statet.jcommons.lang.Disposable;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.ecommons.preferences.PreferencesUtil;
 import org.eclipse.statet.ecommons.preferences.SettingsChangeNotifier;
@@ -30,10 +32,11 @@
 
 import org.eclipse.statet.docmlet.tex.core.model.TexModel;
 import org.eclipse.statet.docmlet.tex.ui.editors.TexEditorBuild;
-import org.eclipse.statet.ltk.core.LTK;
+import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.issues.core.Problem;
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.LtkModels;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceAnnotationModel;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceDocumentProvider;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceProblemAnnotation;
@@ -44,6 +47,7 @@
 import org.eclipse.statet.redocs.tex.r.core.source.LtxRweaveDocumentSetupParticipant;
 
 
+@NonNullByDefault
 public class LtxRweaveDocumentProvider extends SourceDocumentProvider<LtxRweaveSourceUnit>
 		implements Disposable {
 	
@@ -112,7 +116,7 @@
 		}
 		
 		@Override
-		protected SourceProblemAnnotation createAnnotation(final Problem problem) {
+		protected @Nullable SourceProblemAnnotation createAnnotation(final Problem problem) {
 			if (problem.getCategoryId() == RModel.R_TYPE_ID) {
 				switch (problem.getSeverity()) {
 				case Problem.SEVERITY_ERROR:
@@ -145,7 +149,7 @@
 	}
 	
 	
-	private SettingsChangeNotifier.ChangeListener editorPrefListener;
+	private SettingsChangeNotifier. @Nullable ChangeListener editorPrefListener;
 	
 	private boolean handleTemporaryDocProblems;
 	private boolean handleTemporaryRProblems;
@@ -188,7 +192,7 @@
 			this.handleTemporaryDocProblems= newHandleTemporaryRProblems;
 			this.handleTemporaryRProblems= newHandleTemporaryRProblems;
 			if (enabled) {
-				TexModel.getLtxModelManager().refresh(LTK.EDITOR_CONTEXT);
+				TexModel.getLtxModelManager().refresh(Ltk.EDITOR_CONTEXT);
 			}
 			else {
 				final String mode;
@@ -203,9 +207,9 @@
 				else {
 					mode= RModel.R_TYPE_ID;
 				}
-				final List<? extends ISourceUnit> sus= LTK.getSourceUnitManager().getOpenSourceUnits(
-						RModel.R_TYPE_ID, LTK.EDITOR_CONTEXT );
-				for (final ISourceUnit su : sus) {
+				final List<? extends SourceUnit> sus= LtkModels.getSourceUnitManager().getOpenSourceUnits(
+						RModel.R_TYPE_ID, Ltk.EDITOR_CONTEXT );
+				for (final SourceUnit su : sus) {
 					final IAnnotationModel model= getAnnotationModel(su);
 					if (model instanceof ThisAnnotationModel) {
 						((ThisAnnotationModel) model).clearProblems(mode);
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 7136362..8eeb0e4 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
@@ -32,7 +32,7 @@
 import org.eclipse.statet.ltk.ui.sourceediting.assist.TemplateCompletionComputer;
 import org.eclipse.statet.ltk.ui.templates.config.AbstractEditorTemplatesPage;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 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.TexRweaveDocumentConstants;
@@ -69,7 +69,7 @@
 	protected String[] getContextTypeIds(final IDocument document, final int offset) {
 		try {
 			final String contentType= TextUtilities.getContentType(document, TexRweaveDocumentConstants.LTX_R_PARTITIONING, offset, true);
-			if (IRDocumentConstants.R_ANY_CONTENT_CONSTRAINT.matches(contentType)) {
+			if (RDocumentConstants.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/editors/LtxRweaveOutlinePage.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveOutlinePage.java
index 5b48540..b7597b7 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveOutlinePage.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveOutlinePage.java
@@ -48,17 +48,17 @@
 
 import org.eclipse.statet.base.ui.IStatetUIMenuIds;
 import org.eclipse.statet.docmlet.tex.core.commands.TexCommand;
-import org.eclipse.statet.docmlet.tex.core.model.ILtxModelInfo;
-import org.eclipse.statet.docmlet.tex.core.model.ITexSourceElement;
+import org.eclipse.statet.docmlet.tex.core.model.LtxSourceUnitModelInfo;
 import org.eclipse.statet.docmlet.tex.core.model.TexModel;
+import org.eclipse.statet.docmlet.tex.core.model.TexSourceElement;
 import org.eclipse.statet.docmlet.tex.ui.TexUIResources;
 import org.eclipse.statet.internal.redocs.tex.r.RedocsTexRPlugin;
 import org.eclipse.statet.internal.redocs.tex.r.ui.sourceediting.DocROutlineContentProvider;
-import org.eclipse.statet.ltk.model.core.elements.IEmbeddedForeignElement;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement.Filter;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
+import org.eclipse.statet.ltk.model.core.element.EmbeddingForeignElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.ltk.ui.sourceediting.OutlineContentProvider;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor1;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor2OutlinePage;
@@ -76,9 +76,9 @@
 	private static final String EXPAND_ELEMENTS_COMMAND_ID= "org.eclipse.statet.workbench.commands.ExpandElements"; //$NON-NLS-1$
 	
 	
-	private static boolean isRChunk(final IModelElement element) {
-		if (element instanceof IEmbeddedForeignElement) {
-			final ISourceStructElement foreignElement= ((IEmbeddedForeignElement) element).getForeignElement();
+	private static boolean isRChunk(final LtkModelElement element) {
+		if (element instanceof EmbeddingForeignElement) {
+			final SourceStructElement foreignElement= ((EmbeddingForeignElement)element).getForeignElement();
 			if (foreignElement != null && foreignElement.getModelTypeId() == RModel.R_TYPE_ID) {
 				return true;
 			}
@@ -136,7 +136,7 @@
 						return;
 					}
 					
-					final ILtxModelInfo modelInfo= getCurrentInputModel();
+					final LtxSourceUnitModelInfo modelInfo= getCurrentInputModel();
 					final TexUIResources texResources= TexUIResources.INSTANCE;
 					final RedocsRUIResources sweaveResources= RedocsRUIResources.INSTANCE;
 					if (modelInfo.getMinSectionLevel() > 0) {
@@ -202,23 +202,23 @@
 			final TreeViewer viewer= getViewer();
 			final String type= event.getParameter("type");
 			if (UIAccess.isOkToUse(viewer) && type != null) {
-				final ISourceUnitModelInfo modelInfo= getModelInfo(viewer.getInput());
+				final SourceUnitModelInfo modelInfo= getModelInfo(viewer.getInput());
 				if (modelInfo == null) {
 					return null;
 				}
-				final Filter contentFilter= getContentFilter();
-				final Filter expandFilter;
+				final LtkModelElementFilter contentFilter= getContentFilter();
+				final LtkModelElementFilter expandFilter;
 				if (type.equals("rchunks")) { //$NON-NLS-1$
-					expandFilter= new Filter() {
+					expandFilter= new LtkModelElementFilter() {
 						@Override
-						public boolean include(final IModelElement element) {
+						public boolean include(final LtkModelElement element) {
 							if (contentFilter.include(element)) {
-								if ((element.getElementType() & IModelElement.MASK_C1) == ITexSourceElement.C1_EMBEDDED
+								if ((element.getElementType() & LtkModelElement.MASK_C1) == TexSourceElement.C1_EMBEDDED
 										&& isRChunk(element)) {
 									ViewerUtils.expandToLevel(viewer, element, 0);
 									return false;
 								}
-								((ISourceStructElement) element).hasSourceChildren(this);
+								((SourceStructElement) element).hasSourceChildren(this);
 								return false;
 							}
 							return false;
@@ -245,19 +245,19 @@
 					if (sectionLevel < 1 || sectionLevel > 5) {
 						return null;
 					}
-					expandFilter= new Filter() {
+					expandFilter= new LtkModelElementFilter() {
 						private boolean childExpand;
 						@Override
-						public boolean include(final IModelElement element) {
+						public boolean include(final LtkModelElement element) {
 							if (contentFilter.include(element)
-									&& (element.getElementType() & IModelElement.MASK_C2) == ITexSourceElement.C2_SECTIONING) {
+									&& (element.getElementType() & LtkModelElement.MASK_C2) == TexSourceElement.C2_SECTIONING) {
 								final int currentLevel= (element.getElementType() & 0xf);
 								if (currentLevel < 1 || currentLevel > sectionLevel) {
 									return false; // nothing to do
 								}
 								if (currentLevel < sectionLevel) {
 									this.childExpand= false;
-									((ISourceStructElement) element).hasSourceChildren(this);
+									((SourceStructElement) element).hasSourceChildren(this);
 									if (this.childExpand) {
 										return false; // done
 									}
@@ -278,14 +278,14 @@
 	}
 	
 	
-	private class ContentFilter implements IModelElement.Filter {
+	private class ContentFilter implements LtkModelElementFilter {
 		
 		private boolean hideRChunks;
 		
 		@Override
-		public boolean include(final IModelElement element) {
-			switch ((element.getElementType() & IModelElement.MASK_C1)) {
-			case ITexSourceElement.C1_EMBEDDED:
+		public boolean include(final LtkModelElement element) {
+			switch ((element.getElementType() & LtkModelElement.MASK_C1)) {
+			case TexSourceElement.C1_EMBEDDED:
 				if (isRChunk(element)) {
 					return !this.hideRChunks;
 				}
@@ -316,7 +316,7 @@
 	}
 	
 	@Override
-	protected IModelElement.Filter getContentFilter() {
+	protected LtkModelElementFilter getContentFilter() {
 		return this.fFilter;
 	}
 	
@@ -398,12 +398,12 @@
 		m.add(new Separator(IStatetUIMenuIds.GROUP_ADD_MORE_ID));
 	}
 	
-	protected ILtxModelInfo getCurrentInputModel() {
+	protected LtxSourceUnitModelInfo getCurrentInputModel() {
 		final TreeViewer viewer= getViewer();
 		if (viewer == null) {
 			return null;
 		}
-		return (ILtxModelInfo) getModelInfo(viewer.getInput());
+		return (LtxSourceUnitModelInfo)getModelInfo(viewer.getInput());
 	}
 	
 }
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/sourceediting/DocROutlineContentProvider.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/sourceediting/DocROutlineContentProvider.java
index 9febb34..a20fa13 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/sourceediting/DocROutlineContentProvider.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/sourceediting/DocROutlineContentProvider.java
@@ -14,10 +14,10 @@
 
 package org.eclipse.statet.internal.redocs.tex.r.ui.sourceediting;
 
-import org.eclipse.statet.docmlet.tex.core.model.ITexSourceElement;
 import org.eclipse.statet.docmlet.tex.core.model.TexModel;
-import org.eclipse.statet.ltk.model.core.elements.IEmbeddedForeignElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
+import org.eclipse.statet.docmlet.tex.core.model.TexSourceElement;
+import org.eclipse.statet.ltk.model.core.element.EmbeddingForeignElement;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.ltk.ui.sourceediting.OutlineContentProvider;
 import org.eclipse.statet.redocs.r.core.model.RedocsRChunkElement;
 
@@ -34,17 +34,17 @@
 	public Object getParent(final Object element) {
 		final Object parent= super.getParent(element);
 		if (parent instanceof RedocsRChunkElement) {
-			return ((ISourceStructElement) element).getSourceParent();
+			return ((SourceStructElement) element).getSourceParent();
 		}
 		return parent;
 	}
 	
 	@Override
 	public boolean hasChildren(final Object element) {
-		final ISourceStructElement e= (ISourceStructElement) element;
+		final SourceStructElement e= (SourceStructElement) element;
 		if (e.getModelTypeId() == TexModel.LTX_TYPE_ID
-				&& e.getElementType() == ITexSourceElement.C1_EMBEDDED) {
-			final ISourceStructElement foreignElement= ((IEmbeddedForeignElement) e).getForeignElement();
+				&& e.getElementType() == TexSourceElement.C1_EMBEDDED) {
+			final SourceStructElement foreignElement= ((EmbeddingForeignElement)e).getForeignElement();
 			return (foreignElement != null
 					&& foreignElement.hasSourceChildren(getContent().getContentFilter()) );
 		}
@@ -53,11 +53,11 @@
 	
 	@Override
 	public Object[] getChildren(final Object parentElement) {
-		if (parentElement instanceof ISourceStructElement) {
-			final ISourceStructElement e= (ISourceStructElement) parentElement;
+		if (parentElement instanceof SourceStructElement) {
+			final SourceStructElement e= (SourceStructElement) parentElement;
 			if (e.getModelTypeId() == TexModel.LTX_TYPE_ID
-					&& e.getElementType() == ITexSourceElement.C1_EMBEDDED) {
-				final ISourceStructElement foreignElement= ((IEmbeddedForeignElement) e).getForeignElement();
+					&& e.getElementType() == TexSourceElement.C1_EMBEDDED) {
+				final SourceStructElement foreignElement= ((EmbeddingForeignElement)e).getForeignElement();
 				return foreignElement.getSourceChildren(getContent().getContentFilter()).toArray();
 			}
 		}
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/sourceediting/DocRQuickOutlineInformationControl.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/sourceediting/DocRQuickOutlineInformationControl.java
index 722031c..1ef9d6b 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/sourceediting/DocRQuickOutlineInformationControl.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/sourceediting/DocRQuickOutlineInformationControl.java
@@ -20,13 +20,13 @@
 import org.eclipse.statet.ecommons.ui.content.ITextElementFilter;
 
 import org.eclipse.statet.internal.redocs.tex.r.ui.util.TexRNameElementFilter;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement.Filter;
-import org.eclipse.statet.ltk.model.core.elements.ISourceElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceElement;
 import org.eclipse.statet.ltk.ui.sourceediting.OutlineContentProvider;
 import org.eclipse.statet.ltk.ui.sourceediting.QuickOutlineInformationControl;
 import org.eclipse.statet.ltk.ui.sourceediting.actions.OpenDeclaration;
-import org.eclipse.statet.r.core.model.IRElement;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.redocs.tex.r.core.model.TexRweaveModel;
 import org.eclipse.statet.redocs.tex.r.ui.TexRweaveLabelProvider;
@@ -35,13 +35,13 @@
 class DocRQuickOutlineInformationControl extends QuickOutlineInformationControl {
 	
 	
-	private class ContentFilter implements IModelElement.Filter {
+	private class ContentFilter implements LtkModelElementFilter {
 		
 		@Override
-		public boolean include(final IModelElement element) {
+		public boolean include(final LtkModelElement element) {
 			if (element.getModelTypeId() == RModel.R_TYPE_ID) {
 				switch (element.getElementType()) {
-				case IRElement.R_ARGUMENT:
+				case RElement.R_ARGUMENT:
 					return false;
 				default:
 					return true;
@@ -71,7 +71,7 @@
 	}
 	
 	@Override
-	protected int getInitialIterationPage(final ISourceElement element) {
+	protected int getInitialIterationPage(final SourceElement element) {
 //		if (element.getModelTypeId() == RModel.R_TYPE_ID) {
 //			return 1;
 //		}
@@ -92,7 +92,7 @@
 	}
 	
 	@Override
-	protected Filter getContentFilter() {
+	protected LtkModelElementFilter getContentFilter() {
 		return this.contentFilter;
 	}
 	
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 67c4df4..6bfee42 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
@@ -20,7 +20,7 @@
 
 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.r.core.RCoreAccess;
 import org.eclipse.statet.redocs.tex.r.core.source.LtxRweaveDocumentSetupParticipant;
 import org.eclipse.statet.redocs.tex.r.ui.sourceediting.LtxRweaveSourceViewerConfiguration;
 import org.eclipse.statet.redocs.tex.r.ui.sourceediting.LtxRweaveSourceViewerConfigurator;
@@ -29,7 +29,7 @@
 public class LtxRweaveTemplateViewerConfigurator extends LtxRweaveSourceViewerConfigurator {
 	
 	
-	public LtxRweaveTemplateViewerConfigurator(final TexCoreAccess texCore, final IRCoreAccess rCore,
+	public LtxRweaveTemplateViewerConfigurator(final TexCoreAccess texCore, final RCoreAccess 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/internal/redocs/tex/r/ui/util/TexRNameElementFilter.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/util/TexRNameElementFilter.java
index f69aa14..1c88b40 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/util/TexRNameElementFilter.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/util/TexRNameElementFilter.java
@@ -22,7 +22,7 @@
 import org.eclipse.statet.ecommons.ui.content.TextElementFilter;
 
 import org.eclipse.statet.docmlet.tex.ui.util.TexNameSearchPattern;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.r.ui.util.RNameSearchPattern;
 
@@ -52,8 +52,8 @@
 	protected int getIdx(Object element) {
 		if (element instanceof ElementProxy) {
 			element= ((ElementProxy) element).getElement();
-			if (element instanceof IModelElement) {
-				if (((IModelElement) element).getModelTypeId() == RModel.R_TYPE_ID) {
+			if (element instanceof LtkModelElement) {
+				if (((LtkModelElement) element).getModelTypeId() == RModel.R_TYPE_ID) {
 					return 1;
 				}
 			}
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/model/LtxRweaveSourceUnit.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/model/LtxRweaveSourceUnit.java
index db0398a..cd2558b 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/model/LtxRweaveSourceUnit.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/model/LtxRweaveSourceUnit.java
@@ -17,11 +17,11 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
 import org.eclipse.statet.docmlet.tex.core.model.TexSourceUnit;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 
 
 @NonNullByDefault
-public interface LtxRweaveSourceUnit extends IRSourceUnit, TexSourceUnit {
+public interface LtxRweaveSourceUnit extends RSourceUnit, 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 2b05dab..2232e22 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
@@ -19,7 +19,7 @@
 
 import org.eclipse.statet.docmlet.tex.core.source.LtxBracketPairMatcher;
 import org.eclipse.statet.docmlet.tex.core.source.LtxHeuristicTokenScanner;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 import org.eclipse.statet.r.ui.text.r.RBracketPairMatcher;
 
@@ -30,7 +30,7 @@
 	public static RBracketPairMatcher createRChunkPairMatcher(final RHeuristicTokenScanner scanner) {
 		return new RBracketPairMatcher(scanner,
 				new String[] {
-					IRDocumentConstants.R_DEFAULT_CONTENT_TYPE,
+					RDocumentConstants.R_DEFAULT_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 4a89365..8a9e1c5 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
@@ -28,7 +28,7 @@
 import org.eclipse.statet.ecommons.text.core.treepartitioner.TreePartitionNode;
 
 import org.eclipse.statet.docmlet.tex.core.source.TexDocumentConstants;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.redocs.r.core.source.DocContentSectionsRweaveExtension;
 import org.eclipse.statet.redocs.r.core.source.RweaveDocSectionTreePartImpl;
 
@@ -40,7 +40,7 @@
 	
 	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 String R=                           RDocumentConstants.R_PARTITIONING;
 	
 	
 	public static final DocContentSectionsRweaveExtension INSTANCE= new LtxRweaveDocumentContentInfo();
@@ -59,7 +59,7 @@
 	
 	@Override
 	public final String getTypeByPartition(final String contentType) {
-		if (IRDocumentConstants.R_ANY_CONTENT_CONSTRAINT.matches(contentType)) {
+		if (RDocumentConstants.R_ANY_CONTENT_CONSTRAINT.matches(contentType)) {
 			return R;
 		}
 		if (TexRweaveDocumentConstants.RCHUNK_PARTITION_CONSTRAINT.matches(contentType)) {
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/TexRweaveDocumentConstants.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/TexRweaveDocumentConstants.java
index be33315..668ff95 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/TexRweaveDocumentConstants.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/core/source/TexRweaveDocumentConstants.java
@@ -16,12 +16,14 @@
 
 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.tex.core.source.TexDocumentConstants;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.redocs.r.core.source.RweaveDocumentConstants;
 
 
+@NonNullByDefault
 public interface TexRweaveDocumentConstants extends RweaveDocumentConstants {
 	
 	
@@ -37,6 +39,6 @@
 	ImList<String> LTX_R_CONTENT_TYPES= ImCollections.concatList(
 			TexDocumentConstants.LTX_CONTENT_TYPES,
 			RCHUNK_CONTENT_TYPES,
-			IRDocumentConstants.R_CONTENT_TYPES );
+			RDocumentConstants.R_CONTENT_TYPES );
 	
 }
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/TexRweaveLabelProvider.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/TexRweaveLabelProvider.java
index 7f6a8a9..7e51843 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/TexRweaveLabelProvider.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/TexRweaveLabelProvider.java
@@ -17,11 +17,11 @@
 import org.eclipse.jface.viewers.StyledString;
 import org.eclipse.swt.graphics.Image;
 
-import org.eclipse.statet.docmlet.tex.core.model.ITexSourceElement;
+import org.eclipse.statet.docmlet.tex.core.model.TexSourceElement;
 import org.eclipse.statet.docmlet.tex.ui.TexLabelProvider;
-import org.eclipse.statet.ltk.model.core.elements.IEmbeddedForeignElement;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
+import org.eclipse.statet.ltk.model.core.element.EmbeddingForeignElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.r.ui.RLabelProvider;
 import org.eclipse.statet.redocs.r.ui.RedocsRUIResources;
@@ -39,23 +39,23 @@
 	
 	
 	@Override
-	public Image getImage(final IModelElement element) {
+	public Image getImage(final LtkModelElement element) {
 		if (element.getModelTypeId() == RModel.R_TYPE_ID) {
 			return this.fRProvider.getImage(element);
 		}
-		if (element.getElementType() == ITexSourceElement.C1_EMBEDDED) {
+		if (element.getElementType() == TexSourceElement.C1_EMBEDDED) {
 			return RedocsRUIResources.INSTANCE.getImage(RedocsRUIResources.OBJ_RCHUNK_IMAGE_ID);
 		}
 		return super.getImage(element);
 	}
 	
 	@Override
-	public String getText(final IModelElement element) {
+	public String getText(final LtkModelElement element) {
 		if (element.getModelTypeId() == RModel.R_TYPE_ID) {
 			return this.fRProvider.getText(element);
 		}
-		if (element.getElementType() == ITexSourceElement.C1_EMBEDDED) {
-			final ISourceStructElement rElement= ((IEmbeddedForeignElement) element).getForeignElement();
+		if (element.getElementType() == TexSourceElement.C1_EMBEDDED) {
+			final SourceStructElement rElement= ((EmbeddingForeignElement)element).getForeignElement();
 			if (rElement != null) {
 				return this.fRProvider.getText(rElement);
 			}
@@ -64,12 +64,12 @@
 	}
 	
 	@Override
-	public StyledString getStyledText(final IModelElement element) {
+	public StyledString getStyledText(final LtkModelElement element) {
 		if (element.getModelTypeId() == RModel.R_TYPE_ID) {
 			return this.fRProvider.getStyledText(element);
 		}
-		if (element.getElementType() == ITexSourceElement.C1_EMBEDDED) {
-			final ISourceStructElement rElement= ((IEmbeddedForeignElement) element).getForeignElement();
+		if (element.getElementType() == TexSourceElement.C1_EMBEDDED) {
+			final SourceStructElement rElement= ((EmbeddingForeignElement)element).getForeignElement();
 			if (rElement != null) {
 				return this.fRProvider.getStyledText(rElement);
 			}
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/codegen/CodeGeneration.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/codegen/CodeGeneration.java
index 0cb2e4f..d75e9c9 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/codegen/CodeGeneration.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/redocs/tex/r/ui/codegen/CodeGeneration.java
@@ -26,7 +26,7 @@
 import org.eclipse.statet.ecommons.templates.TemplateMessages;
 
 import org.eclipse.statet.internal.redocs.tex.r.RedocsTexRPlugin;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.templates.CodeGenerationTemplateContext;
 import org.eclipse.statet.ltk.ui.templates.TemplateUtils.EvaluatedTemplate;
 import org.eclipse.statet.redocs.tex.r.ui.TexRweaveUI;
@@ -55,7 +55,7 @@
 	 * @return the new content or <code>null</code> if the template is undefined or empty.
 	 * @throws CoreException thrown when the evaluation of the code template fails.
 	 */
-	public static EvaluatedTemplate getNewDocContent(final ISourceUnit sourceUnit,
+	public static EvaluatedTemplate getNewDocContent(final SourceUnit sourceUnit,
 			final String lineDelimiter, final Template template) throws CoreException {
 		if (template == null) {
 			return null;
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 d158797..fe09fa2 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
@@ -53,8 +53,8 @@
 import org.eclipse.statet.ltk.ui.sourceediting.assist.ContentAssistCategory;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.ContentAssistComputer;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.ContentAssistProcessor;
-import org.eclipse.statet.r.core.IRCoreAccess;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.RCoreAccess;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 import org.eclipse.statet.r.core.source.RPartitionNodeType;
 import org.eclipse.statet.r.ui.editors.IRSourceEditor;
@@ -97,7 +97,7 @@
 	
 	private static class RChunkAutoEditStrategy extends RAutoEditStrategy {
 		
-		public RChunkAutoEditStrategy(final IRCoreAccess coreAccess, final ISourceEditor sourceEditor) {
+		public RChunkAutoEditStrategy(final RCoreAccess coreAccess, final ISourceEditor sourceEditor) {
 			super(coreAccess, sourceEditor);
 		}
 		
@@ -130,13 +130,13 @@
 		
 		public RChunkConfiguration(final DocContentSections documentContentInfo, final int flags,
 				final IRSourceEditor sourceEditor,
-				final IRCoreAccess coreAccess,
+				final RCoreAccess coreAccess,
 				final IPreferenceStore preferenceStore) {
 			super(documentContentInfo, flags, sourceEditor, coreAccess, preferenceStore, null);
 		}
 		
 		@Override
-		protected void setCoreAccess(final IRCoreAccess access) {
+		protected void setCoreAccess(final RCoreAccess access) {
 			super.setCoreAccess(access);
 		}
 		
@@ -169,7 +169,7 @@
 	}
 	
 	public LtxRweaveSourceViewerConfiguration(final int flags, final LtxRweaveEditor sourceEditor,
-			final TexCoreAccess texCoreAccess, final IRCoreAccess rCoreAccess,
+			final TexCoreAccess texCoreAccess, final RCoreAccess rCoreAccess,
 			final IPreferenceStore preferenceStore) {
 		super(LtxRweaveDocumentContentInfo.INSTANCE, flags, sourceEditor);
 		
@@ -200,15 +200,15 @@
 	@Override
 	protected ITokenScanner getScanner(final String contentType) {
 		if (contentType == TexRweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE) {
-			return this.rConfig.getScanner(IRDocumentConstants.R_DEFAULT_CONTENT_TYPE);
+			return this.rConfig.getScanner(RDocumentConstants.R_DEFAULT_CONTENT_TYPE);
 		}
 		if (contentType == TexRweaveDocumentConstants.RCHUNK_COMMENT_CONTENT_TYPE) {
-			return this.rConfig.getScanner(IRDocumentConstants.R_COMMENT_CONTENT_TYPE);
+			return this.rConfig.getScanner(RDocumentConstants.R_COMMENT_CONTENT_TYPE);
 		}
 		return super.getScanner(contentType);
 	}
 	
-	protected void setCoreAccess(final TexCoreAccess texCoreAccess, final IRCoreAccess rCoreAccess) {
+	protected void setCoreAccess(final TexCoreAccess texCoreAccess, final RCoreAccess rCoreAccess) {
 		this.docConfig.setCoreAccess(texCoreAccess);
 		this.rConfig.setCoreAccess(rCoreAccess);
 	}
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 3cacb44..ecafcfa 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
@@ -27,8 +27,8 @@
 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;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCodeStyleSettings;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.util.RCoreAccessWrapper;
 import org.eclipse.statet.redocs.tex.r.core.source.LtxRweaveDocumentSetupParticipant;
 
@@ -51,7 +51,7 @@
 	
 	
 	public LtxRweaveSourceViewerConfigurator(
-			final TexCoreAccess texCoreAccess, final IRCoreAccess rCoreAccess,
+			final TexCoreAccess texCoreAccess, final RCoreAccess rCoreAccess,
 			final LtxRweaveSourceViewerConfiguration config) {
 		super(config);
 		
@@ -87,7 +87,7 @@
 		return this.docCoreAccess;
 	}
 	
-	public final IRCoreAccess getRCoreAccess() {
+	public final RCoreAccess getRCoreAccess() {
 		return this.rCoreAccess;
 	}
 	
@@ -102,7 +102,7 @@
 	}
 	
 	
-	public void setSource(final TexCoreAccess texCoreAccess, final IRCoreAccess rCoreAccess) {
+	public void setSource(final TexCoreAccess texCoreAccess, final RCoreAccess rCoreAccess) {
 		boolean changed= false;
 		if (texCoreAccess != null) {
 			changed|= this.docCoreAccess.setParent(texCoreAccess);
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/META-INF/MANIFEST.MF b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/META-INF/MANIFEST.MF
index 779925e..7cbe19f 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/META-INF/MANIFEST.MF
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r.commonmark/META-INF/MANIFEST.MF
@@ -18,4 +18,5 @@
  org.eclipse.compare;resolution:=optional
 Import-Package: org.eclipse.statet.ecommons.preferences,
  org.eclipse.statet.jcommons.collections;version="4.2.0",
- org.eclipse.statet.jcommons.lang;version="4.2.0"
+ org.eclipse.statet.jcommons.lang;version="4.2.0",
+ org.eclipse.statet.jcommons.text.core;version="4.2.0"
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 daad899..6c283cd 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
@@ -26,9 +26,9 @@
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.ui.IWorkbenchPart;
 
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.debug.ui.actions.RToggleBreakpointAdapter;
 import org.eclipse.statet.redocs.wikitext.r.ui.editors.WikidocRweaveEditor;
 
@@ -47,7 +47,7 @@
 	@Override
 	public boolean canToggleLineBreakpoints(final IWorkbenchPart part, final ISelection selection) {
 		final WikidocRweaveEditor editor= getREditor(part, selection);
-		return (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
+		return (editor != null && editor.getSourceUnit() instanceof WorkspaceSourceUnit
 				&& selection instanceof ITextSelection );
 	}
 	
@@ -55,7 +55,7 @@
 	public void toggleLineBreakpoints(final IWorkbenchPart part, final ISelection selection)
 			throws CoreException {
 		final WikidocRweaveEditor editor= getREditor(part, selection);
-		if (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
+		if (editor != null && editor.getSourceUnit() instanceof WorkspaceSourceUnit
 				&& selection instanceof ITextSelection) {
 			if (isRChunk(editor, (ITextSelection) selection) ) {
 				this.rAdapter.toggleLineBreakpoints(part, selection);
@@ -69,14 +69,14 @@
 	@Override
 	public boolean canToggleMethodBreakpoints(final IWorkbenchPart part, final ISelection selection) {
 		final WikidocRweaveEditor editor= getREditor(part, selection);
-		return (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
+		return (editor != null && editor.getSourceUnit() instanceof WorkspaceSourceUnit
 				&& selection instanceof ITextSelection );
 	}
 	
 	@Override
 	public void toggleMethodBreakpoints(final IWorkbenchPart part, final ISelection selection) throws CoreException {
 		final WikidocRweaveEditor editor= getREditor(part, selection);
-		if (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
+		if (editor != null && editor.getSourceUnit() instanceof WorkspaceSourceUnit
 				&& selection instanceof ITextSelection) {
 			if (isRChunk(editor, (ITextSelection) selection) ) {
 				this.rAdapter.toggleMethodBreakpoints(part, selection);
@@ -100,7 +100,7 @@
 	@Override
 	public boolean canToggleBreakpoints(final IWorkbenchPart part, final ISelection selection) {
 		final WikidocRweaveEditor editor= getREditor(part, selection);
-		return (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
+		return (editor != null && editor.getSourceUnit() instanceof WorkspaceSourceUnit
 				&& selection instanceof ITextSelection );
 	}
 	
@@ -108,7 +108,7 @@
 	public void toggleBreakpoints(final IWorkbenchPart part, final ISelection selection)
 			throws CoreException {
 		final WikidocRweaveEditor editor= getREditor(part, selection);
-		if (editor != null && editor.getSourceUnit() instanceof IWorkspaceSourceUnit
+		if (editor != null && editor.getSourceUnit() instanceof WorkspaceSourceUnit
 				&& selection instanceof ITextSelection) {
 			if (isRChunk(editor, (ITextSelection) selection) ) {
 				this.rAdapter.toggleBreakpoints(part, selection);
@@ -137,7 +137,7 @@
 				final ITypedRegion partition= ((IDocumentExtension3) viewer.getDocument()).getPartition(
 						editor.getDocumentContentInfo().getPartitioning(),
 						selection.getOffset(), false );
-				return IRDocumentConstants.R_ANY_CONTENT_CONSTRAINT.matches(partition.getType());
+				return RDocumentConstants.R_ANY_CONTENT_CONSTRAINT.matches(partition.getType());
 			}
 			catch (final BadLocationException e) {}
 			catch (final BadPartitioningException e) {}
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 6b65c6d..3e0a445 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
@@ -20,10 +20,11 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.osgi.util.NLS;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.text.core.TextLineInformation;
 
 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.WikidocSourceUnitModelInfo;
 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;
@@ -33,6 +34,7 @@
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
 
 
+@NonNullByDefault
 public class TextileValidator extends WikitextProblemReporter {
 	
 	
@@ -45,7 +47,7 @@
 	
 	@Override
 	public void run(final WikitextSourceUnit su, final SourceContent content,
-			final IWikidocModelInfo model,
+			final WikidocSourceUnitModelInfo model,
 			final ProblemRequestor requestor, final int level, final IProgressMonitor monitor) {
 		
 		final Matcher matcher= BLOCK_START_PATTERN.matcher(content.getText());
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/plugin.xml b/redocs/org.eclipse.statet.redocs.wikitext.r/plugin.xml
index b0dd76a..ea9d1bc 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/plugin.xml
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/plugin.xml
@@ -107,7 +107,7 @@
                            ifEmpty="false"
                            operator="and">
                         <instanceof
-                              value="org.eclipse.statet.docmlet.wikitext.core.model.IWikitextSourceElement">
+                              value="org.eclipse.statet.docmlet.wikitext.core.model.WikitextSourceElement">
                         </instanceof>
                      </iterate>
                   </with>
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 4ec2abb..c0f96e4 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,11 +16,14 @@
 
 import org.eclipse.core.resources.IFile;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 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.element.SourceUnit;
 import org.eclipse.statet.ltk.model.core.impl.AbstractFilePersistenceSourceUnitFactory;
 
 
+@NonNullByDefault
 public class WikidocRweavePersistenceUnitFactory extends AbstractFilePersistenceSourceUnitFactory {
 	
 	
@@ -29,7 +32,7 @@
 	
 	
 	@Override
-	protected ISourceUnit createSourceUnit(final String id, final IFile file) {
+	protected SourceUnit createSourceUnit(final String id, final IFile 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 00bb2c4..85ea4ca 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
@@ -18,14 +18,17 @@
 import java.util.Map;
 import java.util.regex.Pattern;
 
-import org.eclipse.statet.docmlet.wikitext.core.model.IWikidocModelInfo;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.docmlet.wikitext.core.model.WikidocSourceUnitModelInfo;
 import org.eclipse.statet.redocs.r.core.model.RChunkReconciler;
 import org.eclipse.statet.redocs.wikitext.r.core.model.WikidocRweaveSourceUnit;
 import org.eclipse.statet.redocs.wikitext.r.core.source.RweaveMarkupLanguage;
 
 
-class WikidocRChunkReconciler extends RChunkReconciler
-		<WikidocRweaveSourceUnit, IWikidocModelInfo, WikidocRweaveSuModelContainer> {
+@NonNullByDefault
+class WikidocRChunkReconciler extends RChunkReconciler<
+		WikidocRweaveSourceUnit, WikidocSourceUnitModelInfo, WikidocRweaveSuModelContainer> {
 	
 	
 	private static final Map<String, WikidocRChunkReconciler> INSTANCES= new HashMap<>();
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 d8c71d9..f5acbc8 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,24 +16,28 @@
 
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 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.model.core.ModelManager;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 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.RCoreAccess;
 import org.eclipse.statet.r.core.model.RModel;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 import org.eclipse.statet.redocs.wikitext.r.core.model.WikidocRweaveSourceUnit;
 
 
+@NonNullByDefault
 public class WikidocRweaveEditorWorkingCopy
 		extends GenericEditorWorkspaceSourceUnitWorkingCopy2<WikidocRweaveSuModelContainer>
-		implements WikidocRweaveSourceUnit, WikidocWorkspaceSourceUnit, IRWorkspaceSourceUnit {
+		implements WikidocRweaveSourceUnit, WikidocWorkspaceSourceUnit, RWorkspaceSourceUnit {
 	
 	
-	public WikidocRweaveEditorWorkingCopy(final IRWorkspaceSourceUnit from) {
+	public WikidocRweaveEditorWorkingCopy(final RWorkspaceSourceUnit from) {
 		super(from);
 	}
 	
@@ -49,7 +53,7 @@
 	}
 	
 	@Override
-	public IRCoreAccess getRCoreAccess() {
+	public RCoreAccess getRCoreAccess() {
 		return ((WikidocRweaveSourceUnit) getUnderlyingUnit()).getRCoreAccess();
 	}
 	
@@ -57,7 +61,7 @@
 	@Override
 	protected void register() {
 		super.register();
-		final IModelManager rManager= RModel.getRModelManager();
+		final ModelManager rManager= RModel.getRModelManager();
 		if (rManager != null) {
 			rManager.deregisterDependentUnit(this);
 		}
@@ -65,7 +69,7 @@
 	
 	@Override
 	protected void unregister() {
-		final IModelManager rManager= RModel.getRModelManager();
+		final ModelManager rManager= RModel.getRModelManager();
 		if (rManager != null) {
 			rManager.deregisterDependentUnit(this);
 		}
@@ -74,7 +78,8 @@
 	
 	
 	@Override
-	public ISourceUnitModelInfo getModelInfo(final String type, final int flags, final IProgressMonitor monitor) {
+	public @Nullable SourceUnitModelInfo getModelInfo(final @Nullable String type, final int flags,
+			final IProgressMonitor monitor) {
 		if (type == RModel.R_TYPE_ID) {
 			return RModel.getRModelInfo(getModelContainer().getModelInfo(flags, monitor));
 		}
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveResourceSourceUnit.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveResourceSourceUnit.java
index 571bbae..063241a 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveResourceSourceUnit.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikidocRweaveResourceSourceUnit.java
@@ -17,27 +17,32 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.text.core.sections.DocContentSections;
 
 import org.eclipse.statet.docmlet.wikitext.core.WikitextCore;
 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.ModelManager;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.ltk.model.core.impl.GenericResourceSourceUnit2;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCore;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.RProject;
 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.r.core.model.RWorkspaceSourceUnit;
 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 WikidocRweaveResourceSourceUnit extends GenericResourceSourceUnit2<WikidocRweaveSuModelContainer> 
-		implements WikidocRweaveSourceUnit, WikidocWorkspaceSourceUnit, IRWorkspaceSourceUnit {
+@NonNullByDefault
+public class WikidocRweaveResourceSourceUnit
+		extends GenericResourceSourceUnit2<WikidocRweaveSuModelContainer> 
+		implements WikidocRweaveSourceUnit, WikidocWorkspaceSourceUnit, RWorkspaceSourceUnit {
 	
 	
 	public WikidocRweaveResourceSourceUnit(final String id, final IFile file) {
@@ -66,7 +71,7 @@
 	}
 	
 	@Override
-	public IRCoreAccess getRCoreAccess() {
+	public RCoreAccess getRCoreAccess() {
 		final RProject rProject= RProjects.getRProject(getResource().getProject());
 		return (rProject != null) ? rProject : RCore.WORKBENCH_ACCESS;
 	}
@@ -76,7 +81,7 @@
 	protected void register() {
 		super.register();
 		
-		final IModelManager rManager= RModel.getRModelManager();
+		final ModelManager rManager= RModel.getRModelManager();
 		if (rManager != null) {
 			rManager.deregisterDependentUnit(this);
 		}
@@ -84,7 +89,7 @@
 	
 	@Override
 	protected void unregister() {
-		final IModelManager rManager= RModel.getRModelManager();
+		final ModelManager rManager= RModel.getRModelManager();
 		if (rManager != null) {
 			rManager.deregisterDependentUnit(this);
 		}
@@ -94,7 +99,8 @@
 	
 	
 	@Override
-	public ISourceUnitModelInfo getModelInfo(final String type, final int flags, final IProgressMonitor monitor) {
+	public @Nullable SourceUnitModelInfo getModelInfo(final @Nullable String type, final int flags,
+			final IProgressMonitor monitor) {
 		if (type == RModel.R_TYPE_ID) {
 			return RModel.getRModelInfo(getModelContainer().getModelInfo(flags, monitor));
 		}
@@ -104,8 +110,8 @@
 	
 	@Override
 	@SuppressWarnings("unchecked")
-	public <T> T getAdapter(final Class<T> adapterType) {
-		if (adapterType.equals(IRCoreAccess.class)) {
+	public <T> @Nullable T getAdapter(final Class<T> adapterType) {
+		if (adapterType.equals(RCoreAccess.class)) {
 			return (T) getWikitextCoreAccess();
 		}
 		return super.getAdapter(adapterType);
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 f9aef29..864883d 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
@@ -18,16 +18,19 @@
 
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 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.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;
-import org.eclipse.statet.docmlet.wikitext.core.model.WikidocSuModelContainer;
+import org.eclipse.statet.docmlet.wikitext.core.model.WikidocSourceUnitModelInfo;
 import org.eclipse.statet.docmlet.wikitext.core.model.WikitextModel;
+import org.eclipse.statet.docmlet.wikitext.core.model.build.EmbeddingReconcileTask;
+import org.eclipse.statet.docmlet.wikitext.core.model.build.WikidocSourceUnitModelContainer;
+import org.eclipse.statet.docmlet.wikitext.core.model.build.WikidocSourceUnitModelContainerEmbeddedExtension;
 import org.eclipse.statet.internal.redocs.wikitext.r.RedocsWikitextRPlugin;
-import org.eclipse.statet.ltk.core.LTK;
+import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.core.SourceContent;
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
 import org.eclipse.statet.r.core.model.RModel;
@@ -36,8 +39,10 @@
 import org.eclipse.statet.redocs.wikitext.r.core.source.RweaveMarkupLanguage;
 
 
-public class WikidocRweaveSuModelContainer extends WikidocSuModelContainer<WikidocRweaveSourceUnit>
-		implements IWikidocSuModelContainerEmbeddedExtension {
+@NonNullByDefault
+public class WikidocRweaveSuModelContainer
+		extends WikidocSourceUnitModelContainer<WikidocRweaveSourceUnit>
+		implements WikidocSourceUnitModelContainerEmbeddedExtension {
 	
 	
 	public WikidocRweaveSuModelContainer(final WikidocRweaveSourceUnit su) {
@@ -66,8 +71,8 @@
 	}
 	
 	@Override
-	public void reconcileEmbeddedModel(final SourceContent content, final IWikidocModelInfo wikitextModel,
-			final List<EmbeddingReconcileItem> list,
+	public void reconcileEmbeddedModel(final SourceContent content, final WikidocSourceUnitModelInfo wikitextModel,
+			final List<EmbeddingReconcileTask> list,
 			final int level, final IProgressMonitor monitor) {
 		final WikitextAstInfo astInfo= wikitextModel.getAst();
 		final WikitextMarkupLanguage markupLanguage= astInfo.getMarkupLanguage();
@@ -78,7 +83,7 @@
 	}
 	
 	@Override
-	public void reportEmbeddedProblems(final SourceContent content, final IWikidocModelInfo wikitextModel,
+	public void reportEmbeddedProblems(final SourceContent content, final WikidocSourceUnitModelInfo wikitextModel,
 			final ProblemRequestor problemRequestor, final int level,
 			final IProgressMonitor monitor) {
 		final WikitextAstInfo astInfo= wikitextModel.getAst();
@@ -90,10 +95,10 @@
 	}
 	
 	@Override
-	public ProblemRequestor createProblemRequestor() {
-		if (getMode() == LTK.EDITOR_CONTEXT) {
-			return RedocsWikitextRPlugin.getInstance().getDocRDocumentProvider().createProblemRequestor(
-					getSourceUnit() );
+	public @Nullable ProblemRequestor createProblemRequestor() {
+		if (getMode() == Ltk.EDITOR_CONTEXT) {
+			return RedocsWikitextRPlugin.getInstance().getDocRDocumentProvider()
+					.createProblemRequestor(getSourceUnit());
 		}
 		return null;
 	}
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikitextRChunkElement.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikitextRChunkElement.java
deleted file mode 100644
index b7c2caf..0000000
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/core/model/WikitextRChunkElement.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2011, 2020 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.core.model;
-
-import org.eclipse.statet.jcommons.collections.ImList;
-import org.eclipse.statet.jcommons.text.core.TextRegion;
-
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
-import org.eclipse.statet.r.core.model.RChunkElement;
-import org.eclipse.statet.r.core.model.RElementName;
-import org.eclipse.statet.r.core.rsource.ast.SourceComponent;
-import org.eclipse.statet.redocs.r.core.model.RChunkNode;
-
-
-public class WikitextRChunkElement extends RChunkElement {
-	
-	
-	public WikitextRChunkElement(final ISourceStructElement parent, final RChunkNode astNode,
-			final RElementName name, final TextRegion nameRegion) {
-		super(parent, astNode, name, nameRegion);
-	}
-	
-	
-	@Override
-	protected RChunkNode getNode() {
-		return (RChunkNode) super.getNode();
-	}
-	
-	@Override
-	protected ImList<SourceComponent> getSourceComponents() {
-		return getNode().getRCodeChildren();
-	}
-	
-}
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 1ae7f36..03890fd 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
@@ -22,18 +22,20 @@
 
 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.WikitextBuildParticipant;
-import org.eclipse.statet.docmlet.wikitext.core.model.WikidocSuModelContainer;
 import org.eclipse.statet.docmlet.wikitext.core.model.WikidocWorkspaceSourceUnit;
+import org.eclipse.statet.docmlet.wikitext.core.model.build.WikidocSourceUnitModelContainer;
 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.r.core.model.build.RModelIndexUpdate;
 import org.eclipse.statet.redocs.wikitext.r.core.model.WikidocRweaveSourceUnit;
 import org.eclipse.statet.redocs.wikitext.r.core.model.WikitextRweaveModel;
 
 
+@NonNullByDefault
 public class WikitextRweaveTexBuildParticipant extends WikitextBuildParticipant {
 	
 	
@@ -71,7 +73,7 @@
 			final IProgressMonitor monitor) throws CoreException {
 		if (sourceUnit instanceof WikidocRweaveSourceUnit) {
 			final WikidocRweaveSourceUnit unit= (WikidocRweaveSourceUnit) sourceUnit;
-			final WikidocRweaveSuModelContainer modelContainer= (WikidocRweaveSuModelContainer) unit.getAdapter(WikidocSuModelContainer.class);
+			final WikidocRweaveSuModelContainer modelContainer= (WikidocRweaveSuModelContainer)unit.getAdapter(WikidocSourceUnitModelContainer.class);
 			if (modelContainer != null) {
 				this.rIndexUpdate.update(unit,
 						RModel.getRModelInfo(modelContainer.getCurrentModel()) );
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/WikidocRweaveEditorUnitFactory.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/WikidocRweaveEditorUnitFactory.java
index 7a73a1c..254baf8 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/WikidocRweaveEditorUnitFactory.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/WikidocRweaveEditorUnitFactory.java
@@ -16,13 +16,17 @@
 
 import org.eclipse.core.filesystem.IFileStore;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.internal.redocs.wikitext.r.core.model.WikidocRweaveEditorWorkingCopy;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
-import org.eclipse.statet.ltk.model.core.elements.IWorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 import org.eclipse.statet.ltk.model.core.impl.AbstractEditorSourceUnitFactory;
-import org.eclipse.statet.r.core.model.IRWorkspaceSourceUnit;
+import org.eclipse.statet.r.core.model.RWorkspaceSourceUnit;
 
 
+@NonNullByDefault
 public final class WikidocRweaveEditorUnitFactory extends AbstractEditorSourceUnitFactory {
 	
 	
@@ -31,12 +35,12 @@
 	
 	
 	@Override
-	protected ISourceUnit createSourceUnit(final String id, final IWorkspaceSourceUnit su) {
-		return new WikidocRweaveEditorWorkingCopy((IRWorkspaceSourceUnit) su);
+	protected SourceUnit createSourceUnit(final String id, final WorkspaceSourceUnit su) {
+		return new WikidocRweaveEditorWorkingCopy((RWorkspaceSourceUnit)su);
 	}
 	
 	@Override
-	protected ISourceUnit createSourceUnit(final String id, final IFileStore file) {
+	protected @Nullable SourceUnit createSourceUnit(final String id, final IFileStore file) {
 		return null;
 	}
 	
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 6dd18ac..d385e78 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
@@ -22,6 +22,8 @@
 import org.eclipse.jface.text.source.IAnnotationModel;
 
 import org.eclipse.statet.jcommons.lang.Disposable;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.ecommons.preferences.PreferencesUtil;
 import org.eclipse.statet.ecommons.preferences.SettingsChangeNotifier;
@@ -30,10 +32,11 @@
 
 import org.eclipse.statet.docmlet.wikitext.core.model.WikitextModel;
 import org.eclipse.statet.docmlet.wikitext.ui.editors.WikitextEditorBuild;
-import org.eclipse.statet.ltk.core.LTK;
+import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.issues.core.Problem;
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.LtkModels;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceAnnotationModel;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceDocumentProvider;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceProblemAnnotation;
@@ -45,6 +48,7 @@
 import org.eclipse.statet.yaml.ui.editors.YamlEditorBuild;
 
 
+@NonNullByDefault
 public class WikidocRweaveDocumentProvider extends SourceDocumentProvider<WikidocRweaveSourceUnit>
 		implements Disposable {
 	
@@ -113,7 +117,7 @@
 		}
 		
 		@Override
-		protected SourceProblemAnnotation createAnnotation(final Problem problem) {
+		protected @Nullable SourceProblemAnnotation createAnnotation(final Problem problem) {
 			if (problem.getCategoryId() == RModel.R_TYPE_ID) {
 				switch (problem.getSeverity()) {
 				case Problem.SEVERITY_ERROR:
@@ -159,7 +163,7 @@
 	}
 	
 	
-	private SettingsChangeNotifier.ChangeListener editorPrefListener;
+	private SettingsChangeNotifier. @Nullable ChangeListener editorPrefListener;
 	
 	private boolean handleTemporaryDocProblems;
 	private boolean handleTemporaryRProblems;
@@ -202,7 +206,7 @@
 			this.handleTemporaryDocProblems= newHandleTemporaryRProblems;
 			this.handleTemporaryRProblems= newHandleTemporaryRProblems;
 			if (enabled) {
-				WikitextModel.getWikidocModelManager().refresh(LTK.EDITOR_CONTEXT);
+				WikitextModel.getWikidocModelManager().refresh(Ltk.EDITOR_CONTEXT);
 			}
 			else {
 				final String mode;
@@ -217,9 +221,9 @@
 				else {
 					mode= RModel.R_TYPE_ID;
 				}
-				final List<? extends ISourceUnit> sus= LTK.getSourceUnitManager().getOpenSourceUnits(
-						RModel.R_TYPE_ID, LTK.EDITOR_CONTEXT );
-				for (final ISourceUnit su : sus) {
+				final List<? extends SourceUnit> sus= LtkModels.getSourceUnitManager().getOpenSourceUnits(
+						RModel.R_TYPE_ID, Ltk.EDITOR_CONTEXT );
+				for (final SourceUnit su : sus) {
 					final IAnnotationModel model= getAnnotationModel(su);
 					if (model instanceof ThisAnnotationModel) {
 						((ThisAnnotationModel) model).clearProblems(mode);
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 ad502cb..1ae7c00 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
@@ -32,7 +32,7 @@
 import org.eclipse.statet.ltk.ui.sourceediting.assist.TemplateCompletionComputer;
 import org.eclipse.statet.ltk.ui.templates.config.AbstractEditorTemplatesPage;
 import org.eclipse.statet.r.core.RCore;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 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.WikitextRweaveDocumentConstants;
@@ -70,7 +70,7 @@
 	protected String[] getContextTypeIds(final IDocument document, final int offset) {
 		try {
 			final String contentType= TextUtilities.getContentType(document, WikitextRweaveDocumentConstants.WIKIDOC_R_PARTITIONING, offset, true);
-			if (IRDocumentConstants.R_ANY_CONTENT_CONSTRAINT.matches(contentType)) {
+			if (RDocumentConstants.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 d7f6eef..e7567e9 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
@@ -48,16 +48,16 @@
 
 import org.eclipse.statet.base.ui.IStatetUIMenuIds;
 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.WikidocSourceUnitModelInfo;
 import org.eclipse.statet.docmlet.wikitext.core.model.WikitextModel;
+import org.eclipse.statet.docmlet.wikitext.core.model.WikitextSourceElement;
 import org.eclipse.statet.internal.redocs.wikitext.r.RedocsWikitextRPlugin;
 import org.eclipse.statet.internal.redocs.wikitext.r.ui.sourceediting.DocROutlineContentProvider;
-import org.eclipse.statet.ltk.model.core.elements.IEmbeddedForeignElement;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement.Filter;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
+import org.eclipse.statet.ltk.model.core.element.EmbeddingForeignElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
+import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.ltk.ui.sourceediting.OutlineContentProvider;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor1;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor2OutlinePage;
@@ -75,9 +75,9 @@
 	private static final String EXPAND_ELEMENTS_COMMAND_ID= "org.eclipse.statet.workbench.commands.ExpandElements"; //$NON-NLS-1$
 	
 	
-	private static boolean isRChunk(final IModelElement element) {
-		if (element instanceof IEmbeddedForeignElement) {
-			final ISourceStructElement foreignElement= ((IEmbeddedForeignElement) element).getForeignElement();
+	private static boolean isRChunk(final LtkModelElement element) {
+		if (element instanceof EmbeddingForeignElement) {
+			final SourceStructElement foreignElement= ((EmbeddingForeignElement)element).getForeignElement();
 			if (foreignElement != null && foreignElement.getModelTypeId() == RModel.R_TYPE_ID) {
 				return true;
 			}
@@ -135,7 +135,7 @@
 						return;
 					}
 					
-					final IWikidocModelInfo modelInfo= getCurrentInputModel();
+					final WikidocSourceUnitModelInfo modelInfo= getCurrentInputModel();
 					final DocmlBaseUIResources baseResources= DocmlBaseUIResources.INSTANCE;
 					final RedocsRUIResources redocsResources= RedocsRUIResources.INSTANCE;
 					if (modelInfo.getMinSectionLevel() > 0) {
@@ -201,23 +201,23 @@
 			final TreeViewer viewer= getViewer();
 			final String type= event.getParameter("type");
 			if (UIAccess.isOkToUse(viewer) && type != null) {
-				final ISourceUnitModelInfo modelInfo= getModelInfo(viewer.getInput());
+				final SourceUnitModelInfo modelInfo= getModelInfo(viewer.getInput());
 				if (modelInfo == null) {
 					return null;
 				}
-				final Filter contentFilter= getContentFilter();
-				final Filter expandFilter;
+				final LtkModelElementFilter contentFilter= getContentFilter();
+				final LtkModelElementFilter expandFilter;
 				if (type.equals("rchunks")) {
-					expandFilter= new Filter() {
+					expandFilter= new LtkModelElementFilter() {
 						@Override
-						public boolean include(final IModelElement element) {
+						public boolean include(final LtkModelElement element) {
 							if (contentFilter.include(element)) {
-								if ((element.getElementType() & IModelElement.MASK_C1) == IWikitextSourceElement.C1_EMBEDDED
+								if ((element.getElementType() & LtkModelElement.MASK_C1) == WikitextSourceElement.C1_EMBEDDED
 										&& isRChunk(element)) {
 									ViewerUtils.expandToLevel(viewer, element, 0);
 									return false;
 								}
-								((ISourceStructElement) element).hasSourceChildren(this);
+								((SourceStructElement) element).hasSourceChildren(this);
 								return false;
 							}
 							return false;
@@ -247,19 +247,19 @@
 					if (sectionLevel < 1 || sectionLevel > 6) {
 						return null;
 					}
-					expandFilter= new Filter() {
+					expandFilter= new LtkModelElementFilter() {
 						private boolean childExpand;
 						@Override
-						public boolean include(final IModelElement element) {
+						public boolean include(final LtkModelElement element) {
 							if (contentFilter.include(element)
-									&& (element.getElementType() & IModelElement.MASK_C2) == IWikitextSourceElement.C2_SECTIONING) {
+									&& (element.getElementType() & LtkModelElement.MASK_C2) == WikitextSourceElement.C2_SECTIONING) {
 								final int currentLevel= (element.getElementType() & 0xf);
 								if (currentLevel < 1 || currentLevel > sectionLevel) {
 									return false; // nothing to do
 								}
 								if (currentLevel < sectionLevel) {
 									this.childExpand= false;
-									((ISourceStructElement) element).hasSourceChildren(this);
+									((SourceStructElement) element).hasSourceChildren(this);
 									if (this.childExpand) {
 										return false; // done
 									}
@@ -280,14 +280,14 @@
 	}
 	
 	
-	private class ContentFilter implements IModelElement.Filter {
+	private class ContentFilter implements LtkModelElementFilter {
 		
 		private boolean hideRChunks;
 		
 		@Override
-		public boolean include(final IModelElement element) {
-			switch ((element.getElementType() & IModelElement.MASK_C1)) {
-			case IWikitextSourceElement.C1_EMBEDDED:
+		public boolean include(final LtkModelElement element) {
+			switch ((element.getElementType() & LtkModelElement.MASK_C1)) {
+			case WikitextSourceElement.C1_EMBEDDED:
 				if (isRChunk(element)) {
 					return !this.hideRChunks;
 				}
@@ -318,7 +318,7 @@
 	}
 	
 	@Override
-	protected IModelElement.Filter getContentFilter() {
+	protected LtkModelElementFilter getContentFilter() {
 		return this.filter;
 	}
 	
@@ -400,12 +400,12 @@
 		m.add(new Separator(IStatetUIMenuIds.GROUP_ADD_MORE_ID));
 	}
 	
-	protected IWikidocModelInfo getCurrentInputModel() {
+	protected WikidocSourceUnitModelInfo getCurrentInputModel() {
 		final TreeViewer viewer= getViewer();
 		if (viewer == null) {
 			return null;
 		}
-		return (IWikidocModelInfo) getModelInfo(viewer.getInput());
+		return (WikidocSourceUnitModelInfo)getModelInfo(viewer.getInput());
 	}
 	
 }
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 53d1cbb..74e2954 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
@@ -32,14 +32,15 @@
 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;
+import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.core.SourceContent;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.LtkModels;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.redocs.wikitext.r.core.WikitextRweaveCore;
 import org.eclipse.statet.yaml.core.ast.Collection;
+import org.eclipse.statet.yaml.core.ast.NodeType;
 import org.eclipse.statet.yaml.core.ast.SourceComponent;
 import org.eclipse.statet.yaml.core.ast.Tuple;
-import org.eclipse.statet.yaml.core.ast.YamlAst.NodeType;
 import org.eclipse.statet.yaml.core.ast.YamlAstNode;
 import org.eclipse.statet.yaml.core.ast.YamlAstVisitor;
 import org.eclipse.statet.yaml.core.ast.YamlParser;
@@ -65,8 +66,8 @@
 		m.beginTask(NLS.bind("Detecting output format of ''{0}''...", file.getName()),
 				10 );
 		
-		final ISourceUnit unit= LTK.getSourceUnitManager().getSourceUnit(this.modelTypeId,
-				LTK.PERSISTENCE_CONTEXT, file, true, m.newChild(1));
+		final SourceUnit unit= LtkModels.getSourceUnitManager().getSourceUnit(this.modelTypeId,
+				Ltk.PERSISTENCE_CONTEXT, file, true, m.newChild(1));
 		try {
 			final SourceContent content= unit.getContent(m.newChild(1));
 			m.worked(0);
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/sourceediting/DocROutlineContentProvider.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/sourceediting/DocROutlineContentProvider.java
index 0cd59f9..a98179e 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/sourceediting/DocROutlineContentProvider.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/sourceediting/DocROutlineContentProvider.java
@@ -14,12 +14,12 @@
 
 package org.eclipse.statet.internal.redocs.wikitext.r.ui.sourceediting;
 
-import org.eclipse.statet.docmlet.wikitext.core.model.IWikitextSourceElement;
 import org.eclipse.statet.docmlet.wikitext.core.model.WikitextModel;
-import org.eclipse.statet.internal.redocs.wikitext.r.core.model.WikitextRChunkElement;
-import org.eclipse.statet.ltk.model.core.elements.IEmbeddedForeignElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
+import org.eclipse.statet.docmlet.wikitext.core.model.WikitextSourceElement;
+import org.eclipse.statet.ltk.model.core.element.EmbeddingForeignElement;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.ltk.ui.sourceediting.OutlineContentProvider;
+import org.eclipse.statet.redocs.r.core.model.RedocsRChunkElement;
 
 
 public class DocROutlineContentProvider extends OutlineContentProvider {
@@ -33,18 +33,18 @@
 	@Override
 	public Object getParent(final Object element) {
 		final Object parent= super.getParent(element);
-		if (parent instanceof WikitextRChunkElement) {
-			return ((ISourceStructElement) element).getSourceParent();
+		if (parent instanceof RedocsRChunkElement) {
+			return ((SourceStructElement) element).getSourceParent();
 		}
 		return parent;
 	}
 	
 	@Override
 	public boolean hasChildren(final Object element) {
-		final ISourceStructElement e= (ISourceStructElement) element;
+		final SourceStructElement e= (SourceStructElement) element;
 		if (e.getModelTypeId() == WikitextModel.WIKIDOC_TYPE_ID
-				&& e.getElementType() == IWikitextSourceElement.C1_EMBEDDED) {
-			final ISourceStructElement foreignElement= ((IEmbeddedForeignElement) e).getForeignElement();
+				&& e.getElementType() == WikitextSourceElement.C1_EMBEDDED) {
+			final SourceStructElement foreignElement= ((EmbeddingForeignElement)e).getForeignElement();
 			return (foreignElement != null
 					&& foreignElement.hasSourceChildren(getContent().getContentFilter()) );
 		}
@@ -53,11 +53,11 @@
 	
 	@Override
 	public Object[] getChildren(final Object parentElement) {
-		if (parentElement instanceof ISourceStructElement) {
-			final ISourceStructElement e= (ISourceStructElement) parentElement;
+		if (parentElement instanceof SourceStructElement) {
+			final SourceStructElement e= (SourceStructElement) parentElement;
 			if (e.getModelTypeId() == WikitextModel.WIKIDOC_TYPE_ID
-					&& e.getElementType() == IWikitextSourceElement.C1_EMBEDDED) {
-				final ISourceStructElement foreignElement= ((IEmbeddedForeignElement) e).getForeignElement();
+					&& e.getElementType() == WikitextSourceElement.C1_EMBEDDED) {
+				final SourceStructElement foreignElement= ((EmbeddingForeignElement)e).getForeignElement();
 				return foreignElement.getSourceChildren(getContent().getContentFilter()).toArray();
 			}
 		}
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/sourceediting/DocRQuickOutlineInformationControl.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/sourceediting/DocRQuickOutlineInformationControl.java
index 1845892..07c6594 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/sourceediting/DocRQuickOutlineInformationControl.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/sourceediting/DocRQuickOutlineInformationControl.java
@@ -20,13 +20,13 @@
 import org.eclipse.statet.ecommons.ui.content.ITextElementFilter;
 
 import org.eclipse.statet.internal.redocs.wikitext.r.ui.util.WikitextRNameElementFilter;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement.Filter;
-import org.eclipse.statet.ltk.model.core.elements.ISourceElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceElement;
 import org.eclipse.statet.ltk.ui.sourceediting.OutlineContentProvider;
 import org.eclipse.statet.ltk.ui.sourceediting.QuickOutlineInformationControl;
 import org.eclipse.statet.ltk.ui.sourceediting.actions.OpenDeclaration;
-import org.eclipse.statet.r.core.model.IRElement;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.redocs.wikitext.r.core.model.WikitextRweaveModel;
 import org.eclipse.statet.redocs.wikitext.r.ui.WikitextRweaveLabelProvider;
@@ -35,13 +35,13 @@
 class DocRQuickOutlineInformationControl extends QuickOutlineInformationControl {
 	
 	
-	private class ContentFilter implements IModelElement.Filter {
+	private class ContentFilter implements LtkModelElementFilter {
 		
 		@Override
-		public boolean include(final IModelElement element) {
+		public boolean include(final LtkModelElement element) {
 			if (element.getModelTypeId() == RModel.R_TYPE_ID) {
 				switch (element.getElementType()) {
-				case IRElement.R_ARGUMENT:
+				case RElement.R_ARGUMENT:
 					return false;
 				default:
 					return true;
@@ -71,7 +71,7 @@
 	}
 	
 	@Override
-	protected int getInitialIterationPage(final ISourceElement element) {
+	protected int getInitialIterationPage(final SourceElement element) {
 //		if (element.getModelTypeId() == RModel.R_TYPE_ID) {
 //			return 1;
 //		}
@@ -92,7 +92,7 @@
 	}
 	
 	@Override
-	protected Filter getContentFilter() {
+	protected LtkModelElementFilter getContentFilter() {
 		return this.contentFilter;
 	}
 	
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/util/WikitextRNameElementFilter.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/util/WikitextRNameElementFilter.java
index 1a002a7..5320629 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/util/WikitextRNameElementFilter.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/util/WikitextRNameElementFilter.java
@@ -22,7 +22,7 @@
 import org.eclipse.statet.ecommons.ui.content.TextElementFilter;
 
 import org.eclipse.statet.docmlet.wikitext.ui.util.WikitextNameSearchPattern;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.r.ui.util.RNameSearchPattern;
 
@@ -52,8 +52,8 @@
 	protected int getIdx(Object element) {
 		if (element instanceof ElementProxy) {
 			element= ((ElementProxy) element).getElement();
-			if (element instanceof IModelElement) {
-				if (((IModelElement) element).getModelTypeId() == RModel.R_TYPE_ID) {
+			if (element instanceof LtkModelElement) {
+				if (((LtkModelElement) element).getModelTypeId() == RModel.R_TYPE_ID) {
 					return 1;
 				}
 			}
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/model/WikidocRweaveSourceUnit.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/model/WikidocRweaveSourceUnit.java
index a9fa6b5..64ee2cf 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/model/WikidocRweaveSourceUnit.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/model/WikidocRweaveSourceUnit.java
@@ -17,11 +17,11 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
 import org.eclipse.statet.docmlet.wikitext.core.model.WikitextSourceUnit;
-import org.eclipse.statet.r.core.model.IRSourceUnit;
+import org.eclipse.statet.r.core.model.RSourceUnit;
 
 
 @NonNullByDefault
-public interface WikidocRweaveSourceUnit extends IRSourceUnit, WikitextSourceUnit {
+public interface WikidocRweaveSourceUnit extends RSourceUnit, WikitextSourceUnit {
 	
 	
 }
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 2d01287..b2fb127 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
@@ -19,7 +19,7 @@
 
 import org.eclipse.statet.docmlet.wikitext.core.source.MarkupBracketPairMatcher;
 import org.eclipse.statet.docmlet.wikitext.core.source.WikitextHeuristicTokenScanner;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 import org.eclipse.statet.r.ui.text.r.RBracketPairMatcher;
 
@@ -30,7 +30,7 @@
 	public static RBracketPairMatcher createRChunkPairMatcher(final RHeuristicTokenScanner scanner) {
 		return new RBracketPairMatcher(scanner,
 				new String[] {
-					IRDocumentConstants.R_DEFAULT_CONTENT_TYPE,
+					RDocumentConstants.R_DEFAULT_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 ff8ffb3..fc69591 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
@@ -29,7 +29,7 @@
 
 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.r.core.source.RDocumentConstants;
 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.YamlDocumentConstants;
@@ -44,7 +44,7 @@
 	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 String R=                           RDocumentConstants.R_PARTITIONING;
 	
 	
 	public static final DocContentSectionsRweaveExtension INSTANCE= new WikidocRweaveDocumentContentInfo();
@@ -63,7 +63,7 @@
 	
 	@Override
 	public final String getTypeByPartition(final String contentType) {
-		if (IRDocumentConstants.R_ANY_CONTENT_CONSTRAINT.matches(contentType)) {
+		if (RDocumentConstants.R_ANY_CONTENT_CONSTRAINT.matches(contentType)) {
 			return R;
 		}
 		if (WikitextRweaveDocumentConstants.RCHUNK_PARTITION_CONSTRAINT.matches(contentType)) {
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikitextRweaveDocumentConstants.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikitextRweaveDocumentConstants.java
index d64ead5..4b8f210 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikitextRweaveDocumentConstants.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/core/source/WikitextRweaveDocumentConstants.java
@@ -19,7 +19,7 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
 import org.eclipse.statet.docmlet.wikitext.core.source.WikitextDocumentConstants;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.redocs.r.core.source.RweaveDocumentConstants;
 
 
@@ -39,6 +39,6 @@
 	ImList<String> WIKIDOC_R_CONTENT_TYPES= ImCollections.concatList(
 			WikitextDocumentConstants.WIKIDOC_EXT_CONTENT_TYPES,
 			RCHUNK_CONTENT_TYPES,
-			IRDocumentConstants.R_CONTENT_TYPES );
+			RDocumentConstants.R_CONTENT_TYPES );
 	
 }
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/WikitextRweaveLabelProvider.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/WikitextRweaveLabelProvider.java
index 16544dc..48cee91 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/WikitextRweaveLabelProvider.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/WikitextRweaveLabelProvider.java
@@ -17,11 +17,11 @@
 import org.eclipse.jface.viewers.StyledString;
 import org.eclipse.swt.graphics.Image;
 
-import org.eclipse.statet.docmlet.wikitext.core.model.IWikitextSourceElement;
+import org.eclipse.statet.docmlet.wikitext.core.model.WikitextSourceElement;
 import org.eclipse.statet.docmlet.wikitext.ui.WikitextLabelProvider;
-import org.eclipse.statet.ltk.model.core.elements.IEmbeddedForeignElement;
-import org.eclipse.statet.ltk.model.core.elements.IModelElement;
-import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
+import org.eclipse.statet.ltk.model.core.element.EmbeddingForeignElement;
+import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
+import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.r.core.model.RModel;
 import org.eclipse.statet.r.ui.RLabelProvider;
 import org.eclipse.statet.redocs.r.ui.RedocsRUIResources;
@@ -39,7 +39,7 @@
 	
 	
 	@Override
-	public Image getImage(final IModelElement element) {
+	public Image getImage(final LtkModelElement element) {
 		if (element.getModelTypeId() == RModel.R_TYPE_ID) {
 			return this.fRProvider.getImage(element);
 		}
@@ -47,7 +47,7 @@
 	}
 	
 	@Override
-	protected Image getEmbeddedForeignImage(final IModelElement element) {
+	protected Image getEmbeddedForeignImage(final LtkModelElement element) {
 		if (element.getModelTypeId() == RModel.R_TYPE_ID) {
 			return RedocsRUIResources.INSTANCE.getImage(RedocsRUIResources.OBJ_RCHUNK_IMAGE_ID);
 		}
@@ -55,12 +55,12 @@
 	}
 	
 	@Override
-	public String getText(final IModelElement element) {
+	public String getText(final LtkModelElement element) {
 		if (element.getModelTypeId() == RModel.R_TYPE_ID) {
 			return this.fRProvider.getText(element);
 		}
-		if (element.getElementType() == IWikitextSourceElement.C1_EMBEDDED) {
-			final ISourceStructElement rElement= ((IEmbeddedForeignElement) element).getForeignElement();
+		if (element.getElementType() == WikitextSourceElement.C1_EMBEDDED) {
+			final SourceStructElement rElement= ((EmbeddingForeignElement)element).getForeignElement();
 			if (rElement != null) {
 				return this.fRProvider.getText(rElement);
 			}
@@ -69,12 +69,12 @@
 	}
 	
 	@Override
-	public StyledString getStyledText(final IModelElement element) {
+	public StyledString getStyledText(final LtkModelElement element) {
 		if (element.getModelTypeId() == RModel.R_TYPE_ID) {
 			return this.fRProvider.getStyledText(element);
 		}
-		if (element.getElementType() == IWikitextSourceElement.C1_EMBEDDED) {
-			final ISourceStructElement rElement= ((IEmbeddedForeignElement) element).getForeignElement();
+		if (element.getElementType() == WikitextSourceElement.C1_EMBEDDED) {
+			final SourceStructElement rElement= ((EmbeddingForeignElement)element).getForeignElement();
 			if (rElement != null) {
 				return this.fRProvider.getStyledText(rElement);
 			}
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/codegen/CodeGeneration.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/codegen/CodeGeneration.java
index d3d7982..237efd0 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/codegen/CodeGeneration.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/codegen/CodeGeneration.java
@@ -26,7 +26,7 @@
 import org.eclipse.statet.ecommons.templates.TemplateMessages;
 
 import org.eclipse.statet.internal.redocs.wikitext.r.RedocsWikitextRPlugin;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.templates.CodeGenerationTemplateContext;
 import org.eclipse.statet.ltk.ui.templates.TemplateUtils.EvaluatedTemplate;
 import org.eclipse.statet.redocs.wikitext.r.ui.WikitextRweaveUI;
@@ -55,7 +55,7 @@
 	 * @return the new content or <code>null</code> if the template is undefined or empty.
 	 * @throws CoreException thrown when the evaluation of the code template fails.
 	 */
-	public static EvaluatedTemplate getNewDocContent(final ISourceUnit sourceUnit,
+	public static EvaluatedTemplate getNewDocContent(final SourceUnit sourceUnit,
 			final String lineDelimiter,
 			final Template template) throws CoreException {
 		if (template == null) {
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/codegen/NewWikidocRweaveDocCreationWizard.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/codegen/NewWikidocRweaveDocCreationWizard.java
index abbc87f..92fb8b5 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/codegen/NewWikidocRweaveDocCreationWizard.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/redocs/wikitext/r/ui/codegen/NewWikidocRweaveDocCreationWizard.java
@@ -35,8 +35,9 @@
 
 import org.eclipse.statet.internal.redocs.wikitext.r.RedocsWikitextRPlugin;
 import org.eclipse.statet.internal.redocs.wikitext.r.ui.Messages;
-import org.eclipse.statet.ltk.core.LTK;
-import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
+import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.model.core.LtkModels;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.ui.templates.NewDocTemplateGenerateWizardPage;
 import org.eclipse.statet.ltk.ui.templates.TemplateUtils.EvaluatedTemplate;
 import org.eclipse.statet.ltk.ui.wizards.NewElementWizard;
@@ -59,8 +60,8 @@
 		@Override
 		protected String getInitialFileContent(final IFile newFileHandle, final SubMonitor m) {
 			final String lineDelimiter= TextUtil.getLineDelimiter(newFileHandle.getProject());
-			final ISourceUnit su= LTK.getSourceUnitManager().getSourceUnit(
-					LTK.PERSISTENCE_CONTEXT, newFileHandle, getContentType(newFileHandle),
+			final SourceUnit su= LtkModels.getSourceUnitManager().getSourceUnit(
+					Ltk.PERSISTENCE_CONTEXT, newFileHandle, getContentType(newFileHandle),
 					true, m );
 			try {
 				final EvaluatedTemplate data= CodeGeneration.getNewDocContent(su, lineDelimiter,
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
index a10bfc6..c54fea4 100644
--- 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
@@ -61,7 +61,7 @@
 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.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.ltk.ui.LTKUI;
 import org.eclipse.statet.ltk.ui.sourceediting.AbstractMarkOccurrencesProvider;
 import org.eclipse.statet.ltk.ui.sourceediting.ForwardSourceDocumentProvider;
@@ -71,10 +71,10 @@
 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.RCoreAccess;
 import org.eclipse.statet.r.core.rsource.ast.RAstNode;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.launching.RCodeLaunching;
 import org.eclipse.statet.r.ui.RUI;
 import org.eclipse.statet.r.ui.editors.IRSourceEditor;
@@ -119,11 +119,11 @@
 		
 		
 		public ThisMarkOccurrencesProvider(final SourceEditor1 editor) {
-			super(editor, IRDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT);
+			super(editor, RDocumentConstants.R_DEFAULT_CONTENT_CONSTRAINT);
 		}
 		
 		@Override
-		protected void doUpdate(final RunData run, final ISourceUnitModelInfo info,
+		protected void doUpdate(final RunData run, final SourceUnitModelInfo info,
 				final AstSelection astSelection, final ITextSelection orgSelection)
 				throws BadLocationException, BadPartitioningException, UnsupportedOperationException {
 			if (astSelection.getCovering() instanceof WikitextAstNode) {
@@ -225,7 +225,7 @@
 	
 	
 	@Override
-	public IRCoreAccess getRCoreAccess() {
+	public RCoreAccess getRCoreAccess() {
 		return this.combinedConfig.getRCoreAccess();
 	}
 	
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 dd4ae2d..ac4e895 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
@@ -55,8 +55,8 @@
 import org.eclipse.statet.ltk.ui.sourceediting.assist.ContentAssistCategory;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.ContentAssistComputer;
 import org.eclipse.statet.ltk.ui.sourceediting.assist.ContentAssistProcessor;
-import org.eclipse.statet.r.core.IRCoreAccess;
-import org.eclipse.statet.r.core.source.IRDocumentConstants;
+import org.eclipse.statet.r.core.RCoreAccess;
+import org.eclipse.statet.r.core.source.RDocumentConstants;
 import org.eclipse.statet.r.core.source.RHeuristicTokenScanner;
 import org.eclipse.statet.r.core.source.RPartitionNodeType;
 import org.eclipse.statet.r.ui.editors.IRSourceEditor;
@@ -105,7 +105,7 @@
 	
 	private static class RChunkAutoEditStrategy extends RAutoEditStrategy {
 		
-		public RChunkAutoEditStrategy(final IRCoreAccess coreAccess, final ISourceEditor sourceEditor) {
+		public RChunkAutoEditStrategy(final RCoreAccess coreAccess, final ISourceEditor sourceEditor) {
 			super(coreAccess, sourceEditor);
 		}
 		
@@ -138,12 +138,12 @@
 		
 		public RChunkConfiguration(final DocContentSections documentContentInfo, final int flags,
 				final IRSourceEditor sourceEditor,
-				final IRCoreAccess coreAccess, final IPreferenceStore preferenceStore) {
+				final RCoreAccess coreAccess, final IPreferenceStore preferenceStore) {
 			super(documentContentInfo, flags, sourceEditor, coreAccess, preferenceStore, null);
 		}
 		
 		@Override
-		protected void setCoreAccess(final IRCoreAccess access) {
+		protected void setCoreAccess(final RCoreAccess access) {
 			super.setCoreAccess(access);
 		}
 		
@@ -179,7 +179,7 @@
 	
 	public WikidocRweaveSourceViewerConfiguration(final int flags,
 			final WikidocRweaveEditor sourceEditor,
-			final WikitextCoreAccess wikitextCoreAccess, final IRCoreAccess rCoreAccess,
+			final WikitextCoreAccess wikitextCoreAccess, final RCoreAccess rCoreAccess,
 			final IPreferenceStore preferenceStore) {
 		super(WikidocRweaveDocumentContentInfo.INSTANCE, flags, sourceEditor);
 		
@@ -216,15 +216,15 @@
 	@Override
 	protected ITokenScanner getScanner(final String contentType) {
 		if (contentType == WikitextRweaveDocumentConstants.RCHUNK_CONTROL_CONTENT_TYPE) {
-			return this.rConfig.getScanner(IRDocumentConstants.R_DEFAULT_CONTENT_TYPE);
+			return this.rConfig.getScanner(RDocumentConstants.R_DEFAULT_CONTENT_TYPE);
 		}
 		if (contentType == WikitextRweaveDocumentConstants.RCHUNK_COMMENT_CONTENT_TYPE) {
-			return this.rConfig.getScanner(IRDocumentConstants.R_COMMENT_CONTENT_TYPE);
+			return this.rConfig.getScanner(RDocumentConstants.R_COMMENT_CONTENT_TYPE);
 		}
 		return super.getScanner(contentType);
 	}
 	
-	protected void setCoreAccess(final WikitextCoreAccess wikitextCoreAccess, final IRCoreAccess rCoreAccess) {
+	protected void setCoreAccess(final WikitextCoreAccess wikitextCoreAccess, final RCoreAccess rCoreAccess) {
 		this.docConfig.setCoreAccess(wikitextCoreAccess);
 		this.rConfig.setCoreAccess(rCoreAccess);
 	}
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 ac243ad..218218a 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
@@ -27,8 +27,8 @@
 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;
-import org.eclipse.statet.r.core.IRCoreAccess;
 import org.eclipse.statet.r.core.RCodeStyleSettings;
+import org.eclipse.statet.r.core.RCoreAccess;
 import org.eclipse.statet.r.core.util.RCoreAccessWrapper;
 import org.eclipse.statet.redocs.wikitext.r.core.source.WikidocRweaveDocumentSetupParticipant;
 
@@ -53,7 +53,7 @@
 	
 	
 	public WikidocRweaveSourceViewerConfigurator(final WikidocRweaveDocumentSetupParticipant documentSetup,
-			final WikitextCoreAccess wikitextCoreAccess, final IRCoreAccess rCoreAccess,
+			final WikitextCoreAccess wikitextCoreAccess, final RCoreAccess rCoreAccess,
 			final WikidocRweaveSourceViewerConfiguration config) {
 		super(config);
 		this.documentSetup= documentSetup;
@@ -95,7 +95,7 @@
 		return this.docCoreAccess;
 	}
 	
-	public final IRCoreAccess getRCoreAccess() {
+	public final RCoreAccess getRCoreAccess() {
 		return this.rCoreAccess;
 	}
 	
@@ -106,7 +106,7 @@
 	}
 	
 	
-	public void setSource(final WikitextCoreAccess wikitextCoreAccess, final IRCoreAccess rCoreAccess) {
+	public void setSource(final WikitextCoreAccess wikitextCoreAccess, final RCoreAccess 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 82a27b0..aa1eeaa 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
@@ -18,7 +18,7 @@
 
 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.r.core.RCoreAccess;
 import org.eclipse.statet.redocs.wikitext.r.core.source.WikidocRweaveDocumentSetupParticipant;
 
 
@@ -27,7 +27,7 @@
 	
 	public WikidocRweaveTemplateViewerConfigurator(
 			final WikidocRweaveDocumentSetupParticipant documentSetup,
-			final WikitextCoreAccess wikitextCoreAccess, final IRCoreAccess rCoreAccess,
+			final WikitextCoreAccess wikitextCoreAccess, final RCoreAccess rCoreAccess,
 			final TemplateVariableProcessor processor) {
 		super(documentSetup, wikitextCoreAccess, rCoreAccess,
 				new WikidocRweaveSourceViewerConfiguration(SourceEditorViewerConfiguration.TEMPLATE_MODE, null, null, null, null) {
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/DefaultRExprTypeUIAdapters.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/DefaultRExprTypeUIAdapters.java
index b0dc283..7d7c58f 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/DefaultRExprTypeUIAdapters.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/DefaultRExprTypeUIAdapters.java
@@ -35,7 +35,7 @@
 
 import org.eclipse.statet.ltk.core.ElementName;
 import org.eclipse.statet.ltk.ui.ElementNameProvider;
-import org.eclipse.statet.r.core.model.IRElement;
+import org.eclipse.statet.r.core.model.RElement;
 import org.eclipse.statet.r.core.model.RElementName;
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rtm.base.ui.RtModelUIPlugin;
@@ -53,8 +53,8 @@
 		@Override
 		public @Nullable ElementName getElementName(final Object selectionElement) {
 			ElementName elementName;
-			if (selectionElement instanceof IRElement) {
-				elementName= ((IRElement) selectionElement).getElementName();
+			if (selectionElement instanceof RElement) {
+				elementName= ((RElement)selectionElement).getElementName();
 			}
 			else if (selectionElement instanceof RElementName) {
 				elementName= (ElementName) selectionElement;
@@ -72,8 +72,8 @@
 		@Override
 		public @Nullable ElementName getElementName(final Object selectionElement) {
 			ElementName elementName;
-			if (selectionElement instanceof IRElement) {
-				elementName= ((IRElement) selectionElement).getElementName();
+			if (selectionElement instanceof RElement) {
+				elementName= ((RElement)selectionElement).getElementName();
 			}
 			else if (selectionElement instanceof RElementName) {
 				elementName= (ElementName) selectionElement;
@@ -104,8 +104,8 @@
 		
 		@Override
 		public int isValidElement(final Object element) {
-			if (element instanceof IRElement) {
-				final IRElement rElement= (IRElement) element;
+			if (element instanceof RElement) {
+				final RElement rElement= (RElement)element;
 				if (rElement.getElementName() == null) {
 					return PRIORITY_INVALID;
 				}
@@ -130,7 +130,7 @@
 		}
 		
 		
-		protected boolean isValidRObject(final RObject rObject, final IRElement parent) {
+		protected boolean isValidRObject(final RObject rObject, final RElement parent) {
 			return ((rObject.getRObjectType() == RObject.TYPE_VECTOR)
 					&& (parent instanceof RObject)
 					&& (((RObject) parent).getRObjectType() == RObject.TYPE_DATAFRAME) );
@@ -139,17 +139,17 @@
 		@Override
 		protected int isValidElements(final List<?> elements) {
 			final Object first= elements.get(0);
-			if (first instanceof IRElement) {
-				final IRElement parent= ((IRElement) first).getModelParent();
+			if (first instanceof RElement) {
+				final RElement parent= ((RElement)first).getModelParent();
 				if (parent instanceof RObject) {
 					if (((RObject) parent).getRObjectType() != RObject.TYPE_DATAFRAME) {
 						return PRIORITY_INVALID;
 					}
 					for (final Object element : elements) {
-						if ((!(element instanceof IRElement))) {
+						if ((!(element instanceof RElement))) {
 							return PRIORITY_INVALID;
 						}
-						final IRElement rElement= (IRElement) element;
+						final RElement rElement= (RElement)element;
 						if (rElement.getElementName() == null
 								|| rElement.getModelParent() != parent) {
 							return PRIORITY_INVALID;
@@ -163,10 +163,10 @@
 				}
 				else if (parent != null) {
 					for (final Object element : elements) {
-						if ((!(element instanceof IRElement))) {
+						if ((!(element instanceof RElement))) {
 							return PRIORITY_INVALID;
 						}
-						final IRElement rElement= (IRElement) element;
+						final RElement rElement= (RElement)element;
 						if (rElement.getElementName() == null
 								|| rElement.getModelParent() != parent) {
 							return PRIORITY_INVALID;
@@ -183,10 +183,10 @@
 				}
 				else {
 					for (final Object element : elements) {
-						if ((!(element instanceof IRElement))) {
+						if ((!(element instanceof RElement))) {
 							return PRIORITY_INVALID;
 						}
-						final IRElement rElement= (IRElement) element;
+						final RElement rElement= (RElement)element;
 						RElementName elementName= rElement.getElementName();
 						if (elementName == null) {
 							return PRIORITY_INVALID;
@@ -229,9 +229,9 @@
 			
 			final Object first= elements.get(0);
 			ElementNameProvider nameProvider;
-			if (first instanceof IRElement) {
+			if (first instanceof RElement) {
 				nameProvider= DIRECT_NAME;
-				final IRElement parent= ((IRElement) first).getModelParent();
+				final RElement parent= ((RElement)first).getModelParent();
 				if (parent instanceof RObject) {
 					if (checkParent(parent, input, context) == false) {
 						return null;
@@ -245,7 +245,7 @@
 			return collectElementName(elements, nameProvider);
 		}
 		
-		protected boolean checkParent(final IRElement parent, final Object input, final IContext context) {
+		protected boolean checkParent(final RElement parent, final Object input, final IContext context) {
 			final ElementName parentName= (input instanceof ElementNameProvider) ?
 					((ElementNameProvider) input).getElementName(parent) : parent.getElementName();
 			if (!(parentName instanceof RElementName)) {