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)) {
