diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/internal/ltk/core/SourceUnitManagerImpl.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/internal/ltk/core/SourceUnitManagerImpl.java
index 915c809..0f4ecea 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/internal/ltk/core/SourceUnitManagerImpl.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/internal/ltk/core/SourceUnitManagerImpl.java
@@ -46,6 +46,7 @@
 
 import org.eclipse.statet.ltk.core.IExtContentTypeManager;
 import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.core.LtkCore;
 import org.eclipse.statet.ltk.core.WorkingContext;
 import org.eclipse.statet.ltk.model.core.ModelTypeDescriptor;
 import org.eclipse.statet.ltk.model.core.SourceUnitFactory;
@@ -194,7 +195,7 @@
 						}
 					}
 					catch (final Exception e) {
-						LtkCorePlugin.log(new Status(IStatus.ERROR, Ltk.BUNDLE_ID, 0,
+						LtkCorePlugin.log(new Status(IStatus.ERROR, LtkCore.BUNDLE_ID, 0,
 								"Error loading working context contributions", e )); //$NON-NLS-1$
 					}
 				}
@@ -513,7 +514,7 @@
 			}
 		}
 		catch (final CoreException | IOException | UnsupportedOperationException e) {
-			LtkCorePlugin.log(new Status(IStatus.ERROR, Ltk.BUNDLE_ID, 0,
+			LtkCorePlugin.log(new Status(IStatus.ERROR, LtkCore.BUNDLE_ID, 0,
 					"An error occurred when trying to detect content type of " + from,
 					e ));
 			return null;
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/core/Ltk.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/core/Ltk.java
index 11faeeb..7be6e6d 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/core/Ltk.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/core/Ltk.java
@@ -23,9 +23,6 @@
 public class Ltk {
 	
 	
-	public static final String BUNDLE_ID= "org.eclipse.statet.ltk.core"; //$NON-NLS-1$
-	
-	
 	public static final WorkingContext PERSISTENCE_CONTEXT= new WorkingContext("persistence.default"); //$NON-NLS-1$
 	
 	public static final WorkingContext EDITOR_CONTEXT= new WorkingContext("editor.default"); //$NON-NLS-1$
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/core/LtkCore.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/core/LtkCore.java
new file mode 100644
index 0000000..014c722
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/core/LtkCore.java
@@ -0,0 +1,33 @@
+/*=============================================================================#
+ # Copyright (c) 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.ltk.core;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+
+@NonNullByDefault
+public class LtkCore {
+	
+	
+	public static final String BUNDLE_ID= "org.eclipse.statet.ltk.core"; //$NON-NLS-1$
+	
+	
+	public static final int NA_OFFSET= Integer.MIN_VALUE;
+	
+	
+	private LtkCore() {
+	}
+	
+}
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/build/SourceUnitIssueSupport.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/build/SourceUnitIssueSupport.java
new file mode 100644
index 0000000..753d330
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/build/SourceUnitIssueSupport.java
@@ -0,0 +1,37 @@
+/*=============================================================================#
+ # Copyright (c) 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.ltk.model.core.build;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ltk.issues.core.IssueRequestor;
+import org.eclipse.statet.ltk.issues.core.IssueTypeSet;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+
+
+@NonNullByDefault
+public interface SourceUnitIssueSupport {
+	
+	
+	IssueTypeSet getIssueTypeSet();
+	
+	void clearIssues(SourceUnit sourceUnit) throws CoreException;
+	
+	@Nullable IssueRequestor createIssueRequestor(SourceUnit sourceUnit);
+	
+}
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/build/SourceUnitModelContainer.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/build/SourceUnitModelContainer.java
index 7f00f13..bff9b7f 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/build/SourceUnitModelContainer.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/build/SourceUnitModelContainer.java
@@ -16,7 +16,6 @@
 
 import java.util.concurrent.CancellationException;
 
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
@@ -26,9 +25,6 @@
 import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.core.WorkingContext;
 import org.eclipse.statet.ltk.core.source.SourceContent;
-import org.eclipse.statet.ltk.issues.core.IssueRequestor;
-import org.eclipse.statet.ltk.issues.core.IssueTypeSet;
-import org.eclipse.statet.ltk.issues.core.impl.ResourceMarkerIssueRequestor;
 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;
@@ -39,18 +35,19 @@
 public abstract class SourceUnitModelContainer<TSourceUnit extends SourceUnit, TModelInfo extends SourceUnitModelInfo> {
 	
 	
-	private final @Nullable WorkingContext mode;
-	
 	private final TSourceUnit unit;
 	
 	private @Nullable AstInfo astInfo;
 	
 	private @Nullable TModelInfo modelInfo;
+
+	private final @Nullable SourceUnitIssueSupport issueSupport;
 	
 	
-	public SourceUnitModelContainer(final TSourceUnit unit) {
+	public SourceUnitModelContainer(final TSourceUnit unit,
+			final @Nullable SourceUnitIssueSupport issueSupport) {
 		this.unit= unit;
-		this.mode= getMode(unit);
+		this.issueSupport= issueSupport;
 	}
 	
 	
@@ -58,10 +55,6 @@
 	
 	public abstract boolean isContainerFor(String modelTypeId);
 	
-	public @Nullable IssueTypeSet getIssueTypeSet() {
-		return null;
-	}
-	
 	
 	protected @Nullable WorkingContext getMode(final TSourceUnit su) {
 		if (su instanceof WorkspaceSourceUnit) {
@@ -70,10 +63,6 @@
 		return null;
 	}
 	
-	protected final @Nullable WorkingContext getMode() {
-		return this.mode;
-	}
-	
 	
 	public TSourceUnit getSourceUnit() {
 		return this.unit;
@@ -121,7 +110,7 @@
 	}
 	
 	public @Nullable AstInfo getCurrentAst() {
-		if (this.mode == Ltk.PERSISTENCE_CONTEXT) {
+		if (this.unit.getWorkingContext() == Ltk.PERSISTENCE_CONTEXT) {
 			final @Nullable TModelInfo model= getCurrentModel();
 			if (model != null) {
 				return model.getAst();
@@ -132,7 +121,7 @@
 	}
 	
 	public void setAst(final AstInfo ast) {
-		if (this.mode == Ltk.PERSISTENCE_CONTEXT) {
+		if (this.unit.getWorkingContext() == Ltk.PERSISTENCE_CONTEXT) {
 			return;
 		}
 		this.astInfo= ast;
@@ -153,25 +142,8 @@
 	}
 	
 	
-	public void clearIssues() throws CoreException {
-		final var mode= getMode();
-		if (mode == Ltk.PERSISTENCE_CONTEXT) {
-			final IssueTypeSet issueTypeSet= getIssueTypeSet();
-			if (issueTypeSet != null) {
-				ResourceMarkerIssueRequestor.clear(getSourceUnit().getResource(), issueTypeSet);
-			}
-		}
-	}
-	
-	public @Nullable IssueRequestor createIssueRequestor() {
-		final var mode= getMode();
-		if (mode == Ltk.PERSISTENCE_CONTEXT) {
-			final IssueTypeSet issueTypeSet= getIssueTypeSet();
-			if (issueTypeSet != null) {
-				return ResourceMarkerIssueRequestor.create(getSourceUnit().getResource(), issueTypeSet);
-			}
-		}
-		return null;
+	public @Nullable SourceUnitIssueSupport getIssueSupport() {
+		return this.issueSupport;
 	}
 	
 }
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/AbstractModelEventJob.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/AbstractModelEventJob.java
index 8c6e31b..d41bd98 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/AbstractModelEventJob.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/AbstractModelEventJob.java
@@ -29,7 +29,7 @@
 import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.internal.ltk.core.LtkCorePlugin;
-import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.core.LtkCore;
 import org.eclipse.statet.ltk.core.WorkingContext;
 import org.eclipse.statet.ltk.model.core.ElementChangedEvent;
 import org.eclipse.statet.ltk.model.core.ElementChangedListener;
@@ -144,7 +144,7 @@
 					task.run();
 				}
 				catch (final Throwable e) {
-					LtkCorePlugin.log(new Status(IStatus.ERROR, Ltk.BUNDLE_ID,
+					LtkCorePlugin.log(new Status(IStatus.ERROR, LtkCore.BUNDLE_ID,
 							String.format("An error occurred when firing model event for %1$s.", //$NON-NLS-1$
 									this.modelManager.getModelTypeId() ),
 							e ));
@@ -177,7 +177,7 @@
 				listener.elementChanged(event);
 			}
 			catch (final Exception | LinkageError | AssertionError e) {
-				LtkCorePlugin.log(new Status(IStatus.ERROR, Ltk.BUNDLE_ID,
+				LtkCorePlugin.log(new Status(IStatus.ERROR, LtkCore.BUNDLE_ID,
 						String.format("An error occurred while handling a model element change for %1$s.", //$NON-NLS-1$
 								this.modelManager.getModelTypeId() ),
 						e ));
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/ResourceIssueSupport.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/ResourceIssueSupport.java
new file mode 100644
index 0000000..aa033bd
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/ResourceIssueSupport.java
@@ -0,0 +1,56 @@
+/*=============================================================================#
+ # Copyright (c) 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.ltk.model.core.impl;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ltk.issues.core.IssueRequestor;
+import org.eclipse.statet.ltk.issues.core.IssueTypeSet;
+import org.eclipse.statet.ltk.issues.core.impl.ResourceMarkerIssueRequestor;
+import org.eclipse.statet.ltk.model.core.build.SourceUnitIssueSupport;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+
+
+@NonNullByDefault
+public class ResourceIssueSupport implements SourceUnitIssueSupport {
+	
+	
+	private final IssueTypeSet issueTypeSet;
+	
+	
+	public ResourceIssueSupport(final IssueTypeSet issueTypeSet) {
+		this.issueTypeSet= issueTypeSet;
+	}
+	
+	
+	@Override
+	public IssueTypeSet getIssueTypeSet() {
+		return this.issueTypeSet;
+	}
+	
+	@Override
+	public void clearIssues(final SourceUnit sourceUnit) throws CoreException {
+		ResourceMarkerIssueRequestor.clear(sourceUnit.getResource(), getIssueTypeSet());
+	}
+	
+	@Override
+	public @Nullable IssueRequestor createIssueRequestor(final SourceUnit sourceUnit) {
+		return ResourceMarkerIssueRequestor.create(sourceUnit.getResource(), getIssueTypeSet());
+	}
+	
+}
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/project/core/builder/ProjectBuildTask.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/project/core/builder/ProjectBuildTask.java
index 90f3774..23c33b4 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/project/core/builder/ProjectBuildTask.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/project/core/builder/ProjectBuildTask.java
@@ -331,7 +331,10 @@
 	
 	protected void clearSourceUnit(final SourceUnitModelContainer<?, ?> adapter) {
 		try {
-			adapter.clearIssues();
+			final var issueSupport= adapter.getIssueSupport();
+			if (issueSupport != null) {
+				issueSupport.clearIssues(adapter.getSourceUnit());
+			}
 		}
 		catch (final CoreException e) {
 			this.status.add(new Status(IStatus.ERROR, getBuilderDefinition().getBundleId(),
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/refactoring/core/RefactoringAdapter.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/refactoring/core/RefactoringAdapter.java
index 42e1b61..0ddf73a 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/refactoring/core/RefactoringAdapter.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/refactoring/core/RefactoringAdapter.java
@@ -79,6 +79,7 @@
 
 import org.eclipse.statet.internal.ltk.refactoring.core.Messages;
 import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.core.LtkCore;
 import org.eclipse.statet.ltk.model.core.ElementSet;
 import org.eclipse.statet.ltk.model.core.LtkModelUtils;
 import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
@@ -973,11 +974,11 @@
 	
 	
 	protected IStatus failDocAnalyzation(final Throwable e) {
-		return new Status(IStatus.ERROR, Ltk.BUNDLE_ID, Messages.Common_error_AnalyzingSourceDocument_message, e);
+		return new Status(IStatus.ERROR, LtkCore.BUNDLE_ID, Messages.Common_error_AnalyzingSourceDocument_message, e);
 	}
 	
 	protected IStatus failCreation(final Throwable e) {
-		return new Status(IStatus.ERROR, Ltk.BUNDLE_ID, Messages.Common_error_CreatingElementChange_message, e);
+		return new Status(IStatus.ERROR, LtkCore.BUNDLE_ID, Messages.Common_error_CreatingElementChange_message, e);
 	}
 	
 }
diff --git a/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF b/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF
index 450d151..a94c2a6 100644
--- a/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF
+++ b/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF
@@ -53,6 +53,7 @@
  org.eclipse.statet.ecommons.workbench.search.ui,
  org.eclipse.statet.ecommons.workbench.ui,
  org.eclipse.statet.ecommons.workbench.ui.util,
+ org.eclipse.statet.ltk.model.ui.impl,
  org.eclipse.statet.ltk.ui,
  org.eclipse.statet.ltk.ui.compare,
  org.eclipse.statet.ltk.ui.input,
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/FileBufferWorkingBuffer.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/model/ui/impl/FileBufferWorkingBuffer.java
similarity index 98%
rename from ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/FileBufferWorkingBuffer.java
rename to ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/model/ui/impl/FileBufferWorkingBuffer.java
index 81a21f5..44ad2e7 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/FileBufferWorkingBuffer.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/model/ui/impl/FileBufferWorkingBuffer.java
@@ -12,7 +12,7 @@
  #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
  #=============================================================================*/
 
-package org.eclipse.statet.ltk.ui;
+package org.eclipse.statet.ltk.model.ui.impl;
 
 import static org.eclipse.statet.ltk.ui.LtkUI.BUNDLE_ID;
 
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/GenericEditorWorkspaceSourceUnitWorkingCopy2.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/model/ui/impl/GenericEditorWorkspaceSourceUnitWorkingCopy2.java
similarity index 98%
rename from ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/GenericEditorWorkspaceSourceUnitWorkingCopy2.java
rename to ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/model/ui/impl/GenericEditorWorkspaceSourceUnitWorkingCopy2.java
index c571d88..77eaef9 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/GenericEditorWorkspaceSourceUnitWorkingCopy2.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/model/ui/impl/GenericEditorWorkspaceSourceUnitWorkingCopy2.java
@@ -12,7 +12,7 @@
  #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
  #=============================================================================*/
 
-package org.eclipse.statet.ltk.ui;
+package org.eclipse.statet.ltk.model.ui.impl;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceDocumentProvider.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceDocumentProvider.java
index 609a06c..6e663c3 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceDocumentProvider.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceDocumentProvider.java
@@ -36,16 +36,18 @@
 
 import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.issues.core.IssueRequestor;
+import org.eclipse.statet.ltk.issues.core.IssueTypeSet;
 import org.eclipse.statet.ltk.model.core.DocumentModelProvider;
 import org.eclipse.statet.ltk.model.core.LtkModels;
 import org.eclipse.statet.ltk.model.core.SourceUnitManager;
+import org.eclipse.statet.ltk.model.core.build.SourceUnitIssueSupport;
 import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 
 
 @NonNullByDefault
 public class SourceDocumentProvider<T extends SourceUnit> extends TextFileDocumentProvider
-		implements DocumentModelProvider {
+		implements DocumentModelProvider, SourceUnitIssueSupport {
 	
 	
 	public static class SourceFileInfo extends FileInfo {
@@ -58,14 +60,18 @@
 	private final String modelTypeId;
 	private final @Nullable PartitionerDocumentSetupParticipant documentSetupParticipant;
 	
+	private final IssueTypeSet issueTypeSet;
+	
 	
 	public SourceDocumentProvider(final String modelTypeId,
-			final @Nullable PartitionerDocumentSetupParticipant documentSetupParticipant) {
+			final @Nullable PartitionerDocumentSetupParticipant documentSetupParticipant,
+			final IssueTypeSet issueTypeSet) {
 		this.modelTypeId= nonNullAssert(modelTypeId);
 		this.documentSetupParticipant= documentSetupParticipant;
 //		final IDocumentProvider provider= new ForwardingDocumentProvider(documentSetupParticipant.getPartitioningId(),
 //				this.documentSetupParticipant, new TextFileDocumentProvider());
 //		setParentDocumentProvider(provider);
+		this.issueTypeSet= issueTypeSet;
 	}
 	
 	
@@ -165,8 +171,19 @@
 		return super.getAnnotationModel(element);
 	}
 	
-	public @Nullable IssueRequestor createIssueRequestor(final SourceUnit element) {
-		final IAnnotationModel annotationModel= getAnnotationModel(element);
+	
+	@Override
+	public IssueTypeSet getIssueTypeSet() {
+		return this.issueTypeSet;
+	}
+	
+	@Override
+	public void clearIssues(final SourceUnit sourceUnit) throws CoreException {
+	}
+	
+	@Override
+	public @Nullable IssueRequestor createIssueRequestor(final SourceUnit sourceUnit) {
+		final IAnnotationModel annotationModel= getAnnotationModel(sourceUnit);
 		if (annotationModel instanceof SourceAnnotationModel) {
 			return ((SourceAnnotationModel)annotationModel).createIssueRequestor();
 		}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistProcessor.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistProcessor.java
index 1acad62..00e9fcc 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistProcessor.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistProcessor.java
@@ -50,7 +50,7 @@
 import org.eclipse.statet.ecommons.ui.util.UIAccess;
 
 import org.eclipse.statet.internal.ltk.ui.EditingMessages;
-import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.core.LtkCore;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor;
 
 
@@ -367,7 +367,7 @@
 					computer.computeCompletionProposals(context, mode, proposals, m1);
 				}
 				catch (final Exception e) {
-					StatusManager.getManager().handle(new Status(IStatus.ERROR, Ltk.BUNDLE_ID,
+					StatusManager.getManager().handle(new Status(IStatus.ERROR, LtkCore.BUNDLE_ID,
 							"An error occurred when computing content assistant completion proposals.",
 							e ));
 				}
@@ -492,7 +492,7 @@
 					computer.computeInformationProposals(context, proposals, m1);
 				}
 				catch (final Exception e) {
-					StatusManager.getManager().handle(new Status(IStatus.ERROR, Ltk.BUNDLE_ID,
+					StatusManager.getManager().handle(new Status(IStatus.ERROR, LtkCore.BUNDLE_ID,
 							"An error occurred when computing content assistant context information.",
 							e ));
 				}
@@ -751,7 +751,7 @@
 					computer.onSessionEnded();
 				}
 				catch (final Exception e) {
-					StatusManager.getManager().handle(new Status(IStatus.ERROR, Ltk.BUNDLE_ID, 0,
+					StatusManager.getManager().handle(new Status(IStatus.ERROR, LtkCore.BUNDLE_ID, 0,
 							"Error by contributed content assist computer.", e ));
 				}
 			}
