diff --git a/org.fortiss.tooling.ext.quality/META-INF/MANIFEST.MF b/org.fortiss.tooling.ext.quality/META-INF/MANIFEST.MF
index c1706adafa3bd743a4f8f2520be101d8bc6342f6..3584c3ee8f8aa0b1aaef89459fa56faa88c338ed 100644
--- a/org.fortiss.tooling.ext.quality/META-INF/MANIFEST.MF
+++ b/org.fortiss.tooling.ext.quality/META-INF/MANIFEST.MF
@@ -5,3 +5,13 @@ Bundle-SymbolicName: org.fortiss.tooling.ext.quality
 Bundle-Version: 1.0.0.qualifier
 Automatic-Module-Name: org.fortiss.tooling.ext.quality
 Bundle-RequiredExecutionEnvironment: JavaSE-11
+Import-Package: org.eclipse.core.runtime;version="3.5.0",
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.ecore.xml.type,
+ org.fortiss.tooling.kernel.extension.data,
+ org.fortiss.tooling.kernel.introspection,
+ org.fortiss.tooling.kernel.service,
+ org.fortiss.tooling.kernel.service.base,
+ org.fortiss.tooling.kernel.utils,
+ org.osgi.framework
+Export-Package: org.fortiss.tooling.ext.quality.service
diff --git a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/AF3QualityActivator.java b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/AF3QualityActivator.java
new file mode 100644
index 0000000000000000000000000000000000000000..97f276ca6b5153edbc9a053b458b6c3a6129d3a5
--- /dev/null
+++ b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/AF3QualityActivator.java
@@ -0,0 +1,54 @@
+package org.fortiss.tooling.ext.quality;
+
+/*-------------------------------------------------------------------------+
+| Copyright 2023 fortiss GmbH                                              |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+
+/**
+ * The activator class controls the plug-in life cycle.
+ * 
+ * @author blaschke
+ */
+public class AF3QualityActivator extends Plugin {
+	/** The plug-in ID. */
+	public static final String PLUGIN_ID = AF3QualityActivator.class.getPackage().getName(); // $NON-NLS-1$
+
+	/** The shared instance. */
+	private static AF3QualityActivator plugin;
+
+	/** {@inheritDoc} */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+		System.out.println("[Plugin] " + PLUGIN_ID + " started.");
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/** Returns the shared instance. */
+	public static AF3QualityActivator getDefault() {
+		return plugin;
+	}
+}
diff --git a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/IMetricProvider.java b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/IMetricProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..830382c9e886ad0b5bc04943e7dff55a4fa7cdef
--- /dev/null
+++ b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/IMetricProvider.java
@@ -0,0 +1,55 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2011 fortiss GmbH                                              |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.tooling.ext.quality.service;
+
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.xml.type.AnyType;
+import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
+import org.fortiss.tooling.kernel.service.base.IObjectAware;
+
+/**
+ * Interface for the migration provider implementations.
+ * <P>
+ * migration provider extensions are handled by {@link IMetricService}.
+ * 
+ * @author blaschke
+ */
+public interface IMetricProvider extends IObjectAware<ITopLevelElement> {
+
+	/**
+	 * Determines whether migration provider is needed for the given
+	 * model element.
+	 * 
+	 * The parameter "unknownFeatures" returns a map indicating the features that are not recognized
+	 * in the model. This can be useful to detect features coming from old models and can be then
+	 * translated to the new model by a migrator.
+	 */
+	boolean needMigration(ITopLevelElement modelElement, Map<EObject, AnyType> unknownFeatures);
+
+	/**
+	 * Applies the provider to the given element.
+	 * 
+	 * The parameter "unknownFeatures" indicates the features that are not recognized
+	 * in the model. This can be useful to detect features coming from old models and can be then
+	 * translated to the new model by a migrator.
+	 * 
+	 * @return all unknown features that have successfully been migrated.
+	 */
+	Map<EObject, AnyType> migrate(ITopLevelElement modelElement,
+			Map<EObject, AnyType> unknownFeatures);
+}
\ No newline at end of file
diff --git a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/IMetricService.java b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/IMetricService.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5cc5feeb1c760e0280c2030243649e1c99d12aa
--- /dev/null
+++ b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/IMetricService.java
@@ -0,0 +1,32 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2011 fortiss GmbH                                              |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.tooling.ext.quality.service;
+
+
+/**
+ * The migration service checks and upgrades the old models from the last release.
+ * 
+ * @author mou
+ */
+public interface IMetricService {
+	/** Returns the service instance. */
+	public static IMetricService getInstance() {
+		return MetricService.getInstance();
+	}
+
+	/** Registers the metric provider with the service. */
+	void registerMetricProvider(IMetricProvider provider, Class<?> modelElementClass);
+}
diff --git a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/MetricService.java b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/MetricService.java
new file mode 100644
index 0000000000000000000000000000000000000000..d7f16e36292c35d1217d079cf1c44bdb7bc543a7
--- /dev/null
+++ b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/MetricService.java
@@ -0,0 +1,138 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2013 fortiss GmbH                                              |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.tooling.ext.quality.service;
+
+import static java.util.Collections.emptyList;
+import static org.fortiss.tooling.kernel.utils.EcoreUtils.getFirstChildWithType;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map.Entry;
+import org.eclipse.emf.ecore.EObject;
+import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
+import org.fortiss.tooling.kernel.introspection.IIntrospectionDetailsItem;
+import org.fortiss.tooling.kernel.introspection.IIntrospectionItem;
+import org.fortiss.tooling.kernel.introspection.IIntrospectiveKernelService;
+import org.fortiss.tooling.kernel.service.IKernelIntrospectionSystemService;
+import org.fortiss.tooling.kernel.service.IMigrationService;
+import org.fortiss.tooling.kernel.service.base.ObjectAwareServiceBase;
+
+/**
+ * This class implements the {@link IMigrationService} interface.
+ * 
+ * @author blaschke
+ */
+public class MetricService extends ObjectAwareServiceBase<IMetricProvider> implements IIntrospectiveKernelService, IMetricService{
+	/** The singleton instance. */
+	private static final MetricService INSTANCE = new MetricService();
+
+	/** Returns singleton instance of the service. */
+	public static MetricService getInstance() {
+		return INSTANCE;
+	}
+
+	/** The connector extension point ID. */
+	private static final String EXTENSION_POINT_NAME =
+			"org.fortiss.tooling.ext.quality.metricService";
+
+	/** The connector configuration element name. */
+	private static final String CONFIGURATION_ELEMENT_NAME = "metricService";
+
+	/** The connector attribute name. */
+	private static final String ATTRIBUTE_NAME = "metricService";
+
+	/** */
+	@Override
+	public void startService() {
+		IKernelIntrospectionSystemService.getInstance().registerService(this);
+	}
+
+	/** Registers the migration provider with the service. */
+	@Override
+	public void registerMetricProvider(IMetricProvider provider, Class<?> modelElementClass) {
+		addHandler(modelElementClass, provider);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public String getIntrospectionDescription() {
+		return getIntrospectionLabel() +
+				"\n\nThis service allows the tracking of metrical development in modeling." +
+				"\n the service outputs the current metric analysis of the model and stores" +
+				"\n the data within logs for later history analysis." +
+				"\n\nThe service extension point is '" + EXTENSION_POINT_NAME + "'.";
+	}
+
+
+	/** Get all suitable {@link IMetricProvider} for the given input. */
+	@SuppressWarnings("unused")
+	private List<IMetricProvider> getProviders(ITopLevelElement input) {
+		List<IMetricProvider> providers = new ArrayList<>();
+		EObject migElement = input.getRootModelElement();
+
+		for(Entry<Class<?>, List<IMetricProvider>> migEntry : handlerMap.entrySet()) {
+			if(getFirstChildWithType(migElement, migEntry.getKey()) != null) {
+				providers.addAll(migEntry.getValue());
+			}
+		}
+
+		return providers;
+	}
+
+
+	/** */
+	@Override
+	protected String getExtensionPointName() {
+		return EXTENSION_POINT_NAME;
+	}
+
+
+	/** */
+	@Override
+	protected String getConfigurationElementName() {
+		return CONFIGURATION_ELEMENT_NAME;
+	}
+
+
+	/** */
+	@Override
+	protected String getHandlerClassAttribute() {
+		return ATTRIBUTE_NAME;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public String getIntrospectionLabel() {
+		return "Metric Service";
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public List<IIntrospectionItem> getIntrospectionItems() {
+		return emptyList();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public boolean showInIntrospectionNavigation() {
+		return true;
+	}
+
+	@SuppressWarnings("javadoc")
+	@Override
+	public IIntrospectionDetailsItem getDetailsItem() {
+		return null;
+	}
+}
diff --git a/org.fortiss.tooling.kernel/META-INF/MANIFEST.MF b/org.fortiss.tooling.kernel/META-INF/MANIFEST.MF
index cd96ea055bb80734ad84c2409acc85a00cc67506..2f54d7bd5bc12b159cbf3f4ad3a168205b4d9bc3 100644
--- a/org.fortiss.tooling.kernel/META-INF/MANIFEST.MF
+++ b/org.fortiss.tooling.kernel/META-INF/MANIFEST.MF
@@ -41,4 +41,5 @@ Export-Package: org.fortiss.tooling.kernel; uses:="org.eclipse.core.runtime,
  org.fortiss.tooling.kernel.utils; uses:="org.eclipse.emf.ecore,
    org.eclipse.core.resources"
 Automatic-Module-Name: org.fortiss.tooling.kernel
-Import-Package: com.google.common.collect
+Import-Package: com.google.common.collect,
+ org.fortiss.tooling.ext.quality.service
diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/ToolingKernelInternal.java b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/ToolingKernelInternal.java
index afbd2ccb5277ffdaa5e8d6b901dc10b61ef4a36d..6033329e6751338e3237fda6676ef93ad18bea5a 100644
--- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/ToolingKernelInternal.java
+++ b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/ToolingKernelInternal.java
@@ -17,6 +17,7 @@ package org.fortiss.tooling.kernel.internal;
 
 import static org.fortiss.tooling.kernel.ToolingKernel.printPhase;
 
+import org.fortiss.tooling.ext.quality.service.MetricService;
 import org.fortiss.tooling.kernel.internal.storage.eclipse.EclipseResourceStorageService;
 
 /**
@@ -42,6 +43,7 @@ public final class ToolingKernelInternal {
 		PrototypeService.getInstance().initializeService();
 		TransformationService.getInstance().initializeService();
 		TutorialService.getInstance().initializeService();
+		MetricService.getInstance().initializeService();
 		printPhase("Tooling Kernel initialized.");
 	}
 
@@ -60,6 +62,7 @@ public final class ToolingKernelInternal {
 		PersistencyService.getInstance().startService();
 		PrototypeService.getInstance().startService();
 		TransformationService.getInstance().startService();
+		MetricService.getInstance().startService();
 		printPhase("Tooling Kernel started.");
 	}
 }