diff --git a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/docmlet/tex/core/model/build/LtxSourceUnitModelContainerEmbeddedExtension.java b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/docmlet/tex/core/model/build/LtxSourceUnitModelContainerEmbeddedExtension.java
index eddfadb..42dd3ac 100644
--- a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/docmlet/tex/core/model/build/LtxSourceUnitModelContainerEmbeddedExtension.java
+++ b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/docmlet/tex/core/model/build/LtxSourceUnitModelContainerEmbeddedExtension.java
@@ -32,7 +32,10 @@
 	
 	String getNowebType();
 	
+	Object getSourceConfig();
+	
 	void reconcileEmbeddedAst(final SourceContent content, final List<Embedded> list,
+			final Object sourceConfig,
 			final int level, final IProgressMonitor monitor);
 	
 	void reconcileEmbeddedModel(final SourceContent content, final LtxSourceUnitModelInfo texModel,
diff --git a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/LtxReconciler.java b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/LtxReconciler.java
index b0308fa..6c96a3d 100644
--- a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/LtxReconciler.java
+++ b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/LtxReconciler.java
@@ -21,6 +21,7 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Platform;
 
+import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.string.CacheStringFactory;
 import org.eclipse.statet.jcommons.text.core.input.StringParserInput;
 
@@ -38,6 +39,7 @@
 import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.ltk.ast.core.util.AstPrinter;
 import org.eclipse.statet.ltk.core.SourceContent;
+import org.eclipse.statet.ltk.core.SourceModelStamp;
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
 import org.eclipse.statet.ltk.model.core.ModelManager;
 import org.eclipse.statet.ltk.model.core.impl.BasicSourceModelStamp;
@@ -160,7 +162,17 @@
 	
 	protected final void updateAst(final Data data, final int flags,
 			final IProgressMonitor monitor) {
-		final BasicSourceModelStamp stamp= new BasicSourceModelStamp(data.content.getStamp());
+		final Object embeddedSourceConfig;
+		final SourceModelStamp stamp;
+		if (data.embedded != null) {
+			embeddedSourceConfig= data.embedded.getSourceConfig();
+			stamp= new BasicSourceModelStamp(data.content.getStamp(),
+					ImCollections.newList(embeddedSourceConfig) );
+		}
+		else {
+			embeddedSourceConfig= null;
+			stamp= new BasicSourceModelStamp(data.content.getStamp());
+		}
 		
 		data.ast= data.adapter.getCurrentAst();
 		if (data.ast != null && !stamp.equals(data.ast.getStamp())) {
@@ -181,7 +193,8 @@
 				
 				final List<Embedded> embeddedNodes= this.raParser.getEmbeddedNodes();
 				
-				data.embedded.reconcileEmbeddedAst(data.content, embeddedNodes, flags, monitor);
+				data.embedded.reconcileEmbeddedAst(data.content, embeddedNodes,
+						embeddedSourceConfig, flags, monitor );
 			}
 			else {
 				this.raLexer.setNowebType(null);
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/MarkupSourceModelStamp.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/MarkupSourceModelStamp.java
deleted file mode 100644
index d1f7de5..0000000
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/MarkupSourceModelStamp.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2015, 2021 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.docmlet.wikitext.core;
-
-import org.eclipse.statet.jcommons.lang.NonNullByDefault;
-import org.eclipse.statet.jcommons.lang.Nullable;
-
-import org.eclipse.statet.docmlet.wikitext.core.markup.WikitextMarkupLanguage;
-import org.eclipse.statet.ltk.model.core.impl.BasicSourceModelStamp;
-
-
-@NonNullByDefault
-public class MarkupSourceModelStamp extends BasicSourceModelStamp {
-	
-	
-	private final WikitextMarkupLanguage markupLanguage;
-	
-	
-	public MarkupSourceModelStamp(final long sourceStamp, final WikitextMarkupLanguage markupLanguage) {
-		super(sourceStamp);
-		
-		this.markupLanguage= markupLanguage;
-	}
-	
-	
-//	public final WikitextMarkupLanguage getLanguage() {
-//		return this.language;
-//	}
-	
-	
-	@Override
-	public int hashCode() {
-		return super.hashCode() ^ this.markupLanguage.hashCode();
-	}
-	
-	@Override
-	public boolean equals(final @Nullable Object other) {
-		return (super.equals(other)
-				&& this.markupLanguage == ((MarkupSourceModelStamp)other).markupLanguage );
-	}
-	
-}
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/ast/WikitextAstInfo.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/ast/WikitextAstInfo.java
index bff917c..aaf80af 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/ast/WikitextAstInfo.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/ast/WikitextAstInfo.java
@@ -18,10 +18,10 @@
 
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
-import org.eclipse.statet.docmlet.wikitext.core.MarkupSourceModelStamp;
 import org.eclipse.statet.docmlet.wikitext.core.markup.WikitextMarkupLanguage;
 import org.eclipse.statet.ltk.ast.core.AstInfo;
 import org.eclipse.statet.ltk.ast.core.AstNode;
+import org.eclipse.statet.ltk.core.SourceModelStamp;
 
 
 @NonNullByDefault
@@ -33,7 +33,7 @@
 	private final Set<String> embeddedTypes;
 	
 	
-	public WikitextAstInfo(final int level, final MarkupSourceModelStamp stamp, final AstNode root,
+	public WikitextAstInfo(final int level, final SourceModelStamp stamp, final AstNode root,
 			final WikitextMarkupLanguage markupLanguage, final Set<String> embeddedTypes) {
 		super(level, stamp, root);
 		
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/model/build/WikidocSourceUnitModelContainerEmbeddedExtension.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/model/build/WikidocSourceUnitModelContainerEmbeddedExtension.java
index 6a6e4fc..ba239fe 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/model/build/WikidocSourceUnitModelContainerEmbeddedExtension.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/model/build/WikidocSourceUnitModelContainerEmbeddedExtension.java
@@ -32,9 +32,11 @@
 	
 	
 //	String getNowebType();
-//	
+	
+	Object getSourceConfig();
+	
 	void reconcileEmbeddedAst(final SourceContent content, final List<Embedded> list,
-			final WikitextMarkupLanguage markupLanguage,
+			final WikitextMarkupLanguage markupLanguage, final Object sourceConfig,
 			final int level, final IProgressMonitor monitor);
 	
 	void reconcileEmbeddedModel(final SourceContent content, final WikidocSourceUnitModelInfo wikitextModel,
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/LtxReconcilerExtension.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/LtxReconcilerExtension.java
index 72b7869..a5efac5 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/LtxReconcilerExtension.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/LtxReconcilerExtension.java
@@ -51,8 +51,13 @@
 	
 	
 	@Override
+	public Object getSourceConfig() {
+		return "Ltk";
+	}
+	
+	@Override
 	public void reconcileEmbeddedAst(final SourceContent content, final List<Embedded> list,
-			final WikitextMarkupLanguage markupLanguage,
+			final WikitextMarkupLanguage markupLanguage, final Object sourceConfig,
 			final int level, final IProgressMonitor monitor) {
 		this.raInput.reset(content.getString());
 		final TexCommandSet commandSet= TexCore.getWorkbenchAccess().getTexCommandSet();
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/WikidocReconciler.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/WikidocReconciler.java
index 96e2a79..0bbb1cb 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/WikidocReconciler.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/WikidocReconciler.java
@@ -25,10 +25,10 @@
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jface.text.AbstractDocument;
 
+import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.string.CacheStringFactory;
 
 import org.eclipse.statet.docmlet.tex.core.model.TexModel;
-import org.eclipse.statet.docmlet.wikitext.core.MarkupSourceModelStamp;
 import org.eclipse.statet.docmlet.wikitext.core.WikitextCore;
 import org.eclipse.statet.docmlet.wikitext.core.WikitextCoreAccess;
 import org.eclipse.statet.docmlet.wikitext.core.ast.Embedded;
@@ -47,9 +47,11 @@
 import org.eclipse.statet.ltk.ast.core.util.AstPrinter;
 import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.core.SourceContent;
+import org.eclipse.statet.ltk.core.SourceModelStamp;
 import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
 import org.eclipse.statet.ltk.model.core.ModelManager;
 import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.impl.BasicSourceModelStamp;
 import org.eclipse.statet.yaml.core.model.YamlModel;
 
 
@@ -212,7 +214,19 @@
 		if (markupLanguage == null) {
 			throw new UnsupportedOperationException("Markup language is missing.");
 		}
-		final MarkupSourceModelStamp stamp= new MarkupSourceModelStamp(data.content.getStamp(), markupLanguage);
+		
+		final Object embeddedSourceConfig;
+		final SourceModelStamp stamp;
+		if (data.embedded != null) {
+			embeddedSourceConfig= data.embedded.getSourceConfig();
+			stamp= new BasicSourceModelStamp(data.content.getStamp(),
+					ImCollections.newList(markupLanguage, embeddedSourceConfig) );
+		}
+		else {
+			embeddedSourceConfig= null;
+			stamp= new BasicSourceModelStamp(data.content.getStamp(),
+					ImCollections.newList(markupLanguage) );
+		}
 		
 		data.ast= (WikitextAstInfo) data.adapter.getCurrentAst();
 		if (data.ast != null && !stamp.equals(data.ast.getStamp())) {
@@ -239,18 +253,18 @@
 					this.yamlExt= new YamlReconcilerExtension();
 				}
 				this.yamlExt.reconcileEmbeddedAst(data.content, embeddedNodes, markupLanguage,
-						flags, monitor );
+						null, flags, monitor );
 			}
 			if (embeddedTypes.containsKey(TexModel.LTX_TYPE_ID)) {
 				if (this.ltxExt == null) {
 					this.ltxExt= new LtxReconcilerExtension();
 				}
 				this.ltxExt.reconcileEmbeddedAst(data.content, embeddedNodes, markupLanguage,
-						flags, monitor );
+						null, flags, monitor );
 			}
 			if (data.embedded != null) {
 				data.embedded.reconcileEmbeddedAst(data.content, embeddedNodes, markupLanguage,
-						flags, monitor );
+						embeddedSourceConfig, flags, monitor );
 			}
 			
 			data.ast= new WikitextAstInfo(1, stamp, sourceNode, markupLanguage,
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/YamlReconcilerExtension.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/YamlReconcilerExtension.java
index dde49c4..b62a595 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/YamlReconcilerExtension.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/YamlReconcilerExtension.java
@@ -58,8 +58,14 @@
 	
 	
 	@Override
+	public Object getSourceConfig() {
+		return "Yaml";
+	}
+	
+	@Override
 	public void reconcileEmbeddedAst(final SourceContent content, final List<Embedded> list,
-			final WikitextMarkupLanguage markupLanguage, final int level, final IProgressMonitor monitor) {
+			final WikitextMarkupLanguage markupLanguage, final Object sourceConfig,
+			final int level, final IProgressMonitor monitor) {
 		for (final EmbeddingAstNode embeddingNode : list) {
 			if (embeddingNode.getForeignTypeId() != YamlModel.YAML_TYPE_ID) {
 				continue;
@@ -79,7 +85,8 @@
 	
 	@Override
 	public void reconcileEmbeddedModel(final SourceContent content, final WikidocSourceUnitModelInfo wikitextModel,
-			final List<EmbeddingReconcileTask> list, final int level, final IProgressMonitor monitor) {
+			final List<EmbeddingReconcileTask> list,
+			final int level, final IProgressMonitor monitor) {
 		final SourceStructElement sourceElement= wikitextModel.getSourceElement();
 		
 		int metadataCount= 0;
@@ -110,7 +117,8 @@
 	
 	@Override
 	public void reportEmbeddedProblems(final SourceContent content, final WikidocSourceUnitModelInfo wikitextModel,
-			final ProblemRequestor problemRequestor, final int level, final IProgressMonitor monitor) {
+			final ProblemRequestor problemRequestor,
+			final int level, final IProgressMonitor monitor) {
 		final YamlSourceUnitModelInfo yamlModel= YamlModel.getYamlModelInfo(wikitextModel);
 		if (yamlModel == null) {
 			return;
