diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/CompositeSourceElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/CompositeSourceElement.java
index d15b2fb..5f767e9 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/CompositeSourceElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/CompositeSourceElement.java
@@ -24,6 +24,7 @@
 import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
+import org.eclipse.statet.ltk.core.source.SourceModelStamp;
 import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.rmodel.RCompositeSourceElement;
 import org.eclipse.statet.r.core.rmodel.RLangSourceElement;
@@ -42,9 +43,11 @@
 	private volatile @Nullable List<RLangSourceElement> allSourceChildren;
 	
 	
-	public CompositeSourceElement(final RSourceUnit su, final BuildSourceFrame envir,
+	public CompositeSourceElement(final RSourceUnit sourceUnit,
+			final SourceModelStamp stamp,
+			final BuildSourceFrame envir,
 			final List<? extends EmbeddedRBuildElement> elements, final TextRegion sourceRange) {
-		super(su, envir);
+		super(sourceUnit, stamp, envir);
 		
 		this.compositeElements= ImCollections.toList(elements);
 		this.sourceRange= sourceRange;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceFileElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceFileElement.java
index 10c465d..1960886 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceFileElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceFileElement.java
@@ -22,8 +22,10 @@
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
 import org.eclipse.statet.ltk.core.ElementName;
+import org.eclipse.statet.ltk.core.source.SourceModelStamp;
 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.SourceContainerElement;
 import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
 import org.eclipse.statet.r.core.rmodel.RElement;
@@ -35,16 +37,22 @@
 
 
 @NonNullByDefault
-abstract class RSourceFileElement implements RLangSourceElement {
+abstract class RSourceFileElement implements RLangSourceElement,
+		SourceContainerElement<RLangSourceElement> {
 	
 	
 	private final RSourceUnit sourceUnit;
 	
+	private final SourceModelStamp stamp;
+	
 	protected final BuildSourceFrame envir;
 	
 	
-	public RSourceFileElement(final RSourceUnit su, final BuildSourceFrame envir) {
-		this.sourceUnit= su;
+	public RSourceFileElement(final RSourceUnit sourceUnit,
+			final SourceModelStamp stamp,
+			final BuildSourceFrame envir) {
+		this.sourceUnit= sourceUnit;
+		this.stamp= stamp;
 		this.envir= envir;
 	}
 	
@@ -110,6 +118,11 @@
 		return this.sourceUnit;
 	}
 	
+	@Override
+	public SourceModelStamp getStamp() {
+		return this.stamp;
+	}
+	
 	
 	@Override
 	public @Nullable TextRegion getNameSourceRange() {
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceUnitElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceUnitElement.java
index c2401e6..c33fa85 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceUnitElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceUnitElement.java
@@ -21,6 +21,7 @@
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
 import org.eclipse.statet.ltk.ast.core.AstNode;
+import org.eclipse.statet.ltk.core.source.SourceModelStamp;
 import org.eclipse.statet.ltk.model.core.LtkModelUtils;
 import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.r.core.rmodel.RElementName;
@@ -30,15 +31,18 @@
 
 
 @NonNullByDefault
-final class RSourceUnitElement extends RSourceFileElement implements BuildSourceFrameElement {
+final class RSourceUnitElement extends RSourceFileElement
+		implements BuildSourceFrameElement {
 	
 	
 	private final RAstNode sourceNode;
 	private List<? extends RLangSourceElement> sourceChildrenProtected= RSourceModel.NO_R_SOURCE_CHILDREN;
 	
 	
-	public RSourceUnitElement(final RSourceUnit su, final BuildSourceFrame envir, final RAstNode node) {
-		super(su, envir);
+	public RSourceUnitElement(final RSourceUnit sourceUnit,
+			final SourceModelStamp stamp,
+			final BuildSourceFrame envir, final RAstNode node) {
+		super(sourceUnit, stamp, envir);
 		this.sourceNode= node;
 	}
 	
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/SourceAnalyzer.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/SourceAnalyzer.java
index c11b267..af2385f 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/SourceAnalyzer.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/SourceAnalyzer.java
@@ -529,24 +529,26 @@
 	}
 	
 	
-	public @Nullable RSourceUnitModelInfo createModel(final RSourceUnit u, final AstInfo sourceComponent) {
-		if (!(sourceComponent.getRoot() instanceof SourceComponent)) {
+	public @Nullable RSourceUnitModelInfo createModel(final RSourceUnit u, final AstInfo ast) {
+		if (!(ast.getRoot() instanceof SourceComponent)) {
 			throw new IllegalArgumentException("ast"); //$NON-NLS-1$
 		}
-		final SourceComponent root= (SourceComponent)sourceComponent.getRoot();
+		final SourceComponent root= (SourceComponent)ast.getRoot();
 		this.anonymCount= 0;
 		this.sourceUnit= u;
 		
 		try {
 			init();
 			
-			final RSourceUnitElement fileElement= new RSourceUnitElement(this.sourceUnit, this.topLevelEnvir, root);
+			final RSourceUnitElement fileElement= new RSourceUnitElement(
+					this.sourceUnit, ast.getStamp(),
+					this.topLevelEnvir, root );
 			enterElement(fileElement, this.topLevelEnvir, root);
 			root.acceptInRChildren(this);
 			leaveElement();
 			
 			finish();
-			this.ast= new AstInfo(AstInfo.LEVEL_MODEL_DEFAULT, sourceComponent);
+			this.ast= new AstInfo(AstInfo.LEVEL_MODEL_DEFAULT, ast);
 			final RSourceUnitModelInfoImpl modelInfo= new RSourceUnitModelInfoImpl(this.ast, this.frames, this.topLevelEnvir,
 					this.packageRefs, this.dependencyEnvironments, fileElement );
 			
@@ -649,7 +651,8 @@
 		try {
 			finish();
 			
-			final var compositeElement= new CompositeSourceElement(this.sourceUnit,
+			final var compositeElement= new CompositeSourceElement(
+					this.sourceUnit, this.ast.getStamp(),
 					this.topLevelEnvir, chunkElements, this.ast.getRoot() );
 			return new RSourceUnitModelInfoImpl(this.ast, this.frames,
 					this.topLevelEnvir, this.packageRefs, this.dependencyEnvironments,
