diff --git a/org.fortiss.tooling.base.ui/META-INF/MANIFEST.MF b/org.fortiss.tooling.base.ui/META-INF/MANIFEST.MF
index 1e4971a47f04654885710d833069031d3d752804..a1387ca8e25f61ee8cd2ea5e5a933ee6f71ba5db 100644
--- a/org.fortiss.tooling.base.ui/META-INF/MANIFEST.MF
+++ b/org.fortiss.tooling.base.ui/META-INF/MANIFEST.MF
@@ -7,7 +7,8 @@ Bundle-Activator: org.fortiss.tooling.base.ui.ToolingBaseUIActivator
 Require-Bundle: org.fortiss.tooling.base;bundle-version="2.23.0";visibility:=reexport,
  org.fortiss.tooling.kernel.ui;bundle-version="2.23.0";visibility:=reexport,
  org.eclipse.swt,
- org.fortiss.tooling.common.ui
+ org.fortiss.tooling.common.ui,
+ org.fortiss.tooling.ext.reuse
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-Vendor: fortiss GmbH
diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/.ratings b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/.ratings
index 3f867cc1ad2785fb30df12d20c67c992a0f6bde7..f882273227172e8008c36abd1885ab2c1e9fcbdc 100644
--- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/.ratings
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/.ratings
@@ -1,6 +1,6 @@
 AbstractNameEditingSupport.java c57336a0e0da18711a1610ca667dfea76728807f GREEN
 ActionUtils.java 322f43d4f92f992daef8ac88eb0f9197c840c89b GREEN
-ContextMenuUtils.java a55ceed42f2eb88ba263a6fbcb394ddb80b1eda0 GREEN
+ContextMenuUtils.java 75af4d1e995f4baba451e608d1a4716f13388dbd GREEN
 EllipseLayoutUIUtils.java 0af2cfc038661828b1bb8c51c0a3816d453e8313 GREEN
 FXDNDUtils.java 6ce94e239e68f9e2b3cc0524b072606f4a120076 GREEN
 FontUtils.java a167a05bdaa8da9853705cc5134f30f6d81bc9f2 GREEN
diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/ContextMenuUtils.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/ContextMenuUtils.java
index a55ceed42f2eb88ba263a6fbcb394ddb80b1eda0..75af4d1e995f4baba451e608d1a4716f13388dbd 100644
--- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/ContextMenuUtils.java
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/ContextMenuUtils.java
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------+
-| Copyright 2019 fortiss GmbH                                              |
+| 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.         |
@@ -15,9 +15,13 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.tooling.base.ui.utils;
 
+import static java.util.Collections.reverse;
 import static org.fortiss.tooling.base.utils.LayoutModelElementFactory.createPoint;
+import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.getNameOfFirstRelatedLibrary;
+import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.isCorrectReuseElement;
 
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 
 import org.eclipse.emf.ecore.EObject;
@@ -62,7 +66,6 @@ public final class ContextMenuUtils {
 			IElementCompositionContext context, boolean onlyForEditedObject) {
 		IPrototypeService pers = IPrototypeService.getInstance();
 		IElementCompositorService ecs = IElementCompositorService.getInstance();
-		ICommandStackService css = ICommandStackService.getInstance();
 		IModelEditor<EObject> activeEditor =
 				IModelEditorBindingService.getInstance().getActiveEditor();
 		boolean isMenuForEditedObject =
@@ -70,31 +73,94 @@ public final class ContextMenuUtils {
 
 		List<MenuItem> result = new ArrayList<>();
 		Menu newMenu = new Menu("New ...");
-		List<Prototype> protos = pers.getComposablePrototypes(target.getClass());
-		for(Prototype p : protos) {
-			EObject prototypeCopy = p.getPrototypeCopy();
+		Menu reuseMenu = new Menu("Reuse ...");
+
+		List<Prototype> prototypes = pers.getComposablePrototypes(target.getClass());
+		List<Prototype> prototypesForNewMenu = new ArrayList<>();
+		for(Prototype prototype : prototypes) {
+			EObject prototypeCopy = prototype.getPrototypeCopy();
 			// If the context menu is created for the currently edited object, offer all composable
 			// elements. Otherwise (i.e., if context menu is created for a structural element within
 			// the currently edited object), offer only (composable) connectors.
 			if((!onlyForEditedObject || isMenuForEditedObject ||
 					prototypeCopy instanceof IConnector) &&
 					ecs.canCompose(target, prototypeCopy, context)) {
-				MenuItem mi = new MenuItem(p.getName());
-				mi.setOnAction(evt -> {
-					css.runAsCommand(target, () -> {
-						ecs.compose(target, prototypeCopy, context);
-					});
-				});
-				newMenu.getItems().add(mi);
+				if(isCorrectReuseElement(prototypeCopy)) {
+					MenuItem menuItem = createMenuItemForComposableElement(prototypeCopy, target,
+							context, prototype.getName());
+					String libraryName = getNameOfFirstRelatedLibrary(prototypeCopy);
+					menuItem.setText("[" + libraryName + "] " + prototype.getName());
+					// To prevent that underscores are swallowed up:
+					menuItem.setMnemonicParsing(false);
+					reuseMenu.getItems().add(menuItem);
+				} else {
+					prototypesForNewMenu.add(prototype);
+				}
 			}
 		}
+
+		// Sort first by priority and then by name (lexicographical).
+		prototypesForNewMenu.sort(new Comparator<Prototype>() {
+			@Override
+			public int compare(Prototype prototype1, Prototype prototype2) {
+				int result = prototype1.getPriority() - prototype2.getPriority();
+				if(result == 0) {
+					// Negate integer to have the case that the order <A, B> corresponds to "A is
+					// greater than B" (= positive)
+					result = -prototype1.getName().compareTo(prototype2.getName());
+				}
+				return result;
+			}
+		});
+		// Reverse to get a descending order (highest prio at first / on top).
+		reverse(prototypesForNewMenu);
+
+		for(Prototype prototype : prototypesForNewMenu) {
+			EObject prototypeCopy = prototype.getPrototypeCopy();
+			MenuItem menuItem = createMenuItemForComposableElement(prototypeCopy, target, context,
+					prototype.getName());
+			// To prevent that underscores are swallowed up:
+			menuItem.setMnemonicParsing(false);
+			newMenu.getItems().add(menuItem);
+		}
+
 		if(!newMenu.getItems().isEmpty()) {
 			result.add(newMenu);
 		}
+		if(!reuseMenu.getItems().isEmpty()) {
+			result.add(reuseMenu);
+		}
 
 		return result;
 	}
 
+	/**
+	 * Returns a menu item for the given element with which the element can be composed with the
+	 * given target (in the given context).
+	 * 
+	 * @param composableElement
+	 *            The element that should be composed.
+	 * @param target
+	 *            The target with which the element should be composed.
+	 * @param context
+	 *            The context of the composition.
+	 * @param itemName
+	 *            The name of the new menu item.
+	 * @return The newly created menu item.
+	 */
+	private static MenuItem createMenuItemForComposableElement(EObject composableElement,
+			EObject target, IElementCompositionContext context, String itemName) {
+		ICommandStackService css = ICommandStackService.getInstance();
+		IElementCompositorService ecs = IElementCompositorService.getInstance();
+		MenuItem menuItem = new MenuItem(itemName);
+		menuItem.setOnAction(evt -> {
+			css.runAsCommand(target, () -> {
+				ecs.compose(target, composableElement, context);
+			});
+		});
+		return menuItem;
+	}
+
 	/**
 	 * Creates the menu populated with composable prototypes.
 	 * 
diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/.ratings b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/.ratings
index 93b60bd5433e7f102927f85f591ca3d5aff1d74b..07fbfbf0cef067efae30e0271183f7b36e65b3fa 100644
--- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/.ratings
+++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/.ratings
@@ -1,6 +1,6 @@
 DiagramCoordinate.java 6b00aec99054d4cd19003a72bd4e5e774ac6a641 GREEN
 DiagramLayers.java aa1f95dbae290c8b00202abe4385b01b8f36e5ab GREEN
-DiagramViewer.java 73c3c0af460ef0631f4fc8a9d674eb6ebc804ca8 YELLOW
+DiagramViewer.java 537358db18da8b5ba2bf56082bfd87dec3ca88d8 GREEN
 DiagramViewerDefaultTags.java 6230763252409c60009ab8887b4ef582cf883229 GREEN
 DiagramViewerFeatures.java 3dd78d9c117fc156924a151c6f8d770c53c103bc GREEN
 DiagramViewerSelection.java e833f592543bc97077907d980a39b123fc4044e6 GREEN
diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/DiagramViewer.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/DiagramViewer.java
index 73c3c0af460ef0631f4fc8a9d674eb6ebc804ca8..537358db18da8b5ba2bf56082bfd87dec3ca88d8 100644
--- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/DiagramViewer.java
+++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/DiagramViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2019, 2020 fortiss GmbH. 
+ * Copyright (c) 2023 fortiss GmbH. 
  * 
  * This program and the accompanying materials are made available under the
  * terms of the Apache License, Version 2.0 which is available at
@@ -49,6 +49,7 @@ import org.fortiss.tooling.common.ui.javafx.lwfxef.mvc.IMVCBundle;
 import org.fortiss.tooling.common.ui.javafx.lwfxef.mvc.MVCBundleTag;
 import org.fortiss.tooling.common.ui.javafx.lwfxef.visual.IVisualFactory;
 
+import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
 import javafx.geometry.BoundingBox;
 import javafx.geometry.Bounds;
@@ -248,7 +249,7 @@ public class DiagramViewer {
 		return viewerManager.diagramBundle;
 	}
 
-	/** Shows the context menu when the mouse is pressed. */
+	/** Hides the context menu if it is active. */
 	/* package */ void hideContextMenu() {
 		if(contextMenu != null && contextMenu.isShowing()) {
 			contextMenu.hide();
@@ -256,12 +257,26 @@ public class DiagramViewer {
 		}
 	}
 
-	/** Shows the context menu when the mouse is released. */
+	/** Shows the context menu. */
 	public void showContextMenu(Node node, DiagramCoordinate diagramLocation, IMVCBundle mvcb) {
 		List<MenuItem> items = mvcb.getController().contextMenuContributions(node, diagramLocation);
 		if(items == null || items.isEmpty()) {
 			return;
 		}
+
+		// Extend each menu item so that when it gets clicked on, it will first hide its own context
+		// menu before it continues with its normal procedure (to prevent old context menus being
+		// still open/active behind or even in front of new windows).
+		for(MenuItem item : items) {
+			EventHandler<ActionEvent> baseEventHandler = item.getOnAction();
+			item.setOnAction(event -> {
+				hideContextMenu();
+				if(baseEventHandler != null) {
+					baseEventHandler.handle(event);
+				}
+			});
+		}
+
 		contextMenu = new ContextMenu();
 		contextMenu.getItems().addAll(items);
 		contextMenu.setAutoHide(true);
diff --git a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/.ratings b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/.ratings
index ac0692f78816a9d391d2f95d4479d24689437d37..5810db3a73012d9e04307e3bd350894daa7df99b 100644
--- a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/.ratings
+++ b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/.ratings
@@ -1,4 +1,4 @@
-AddElementContextMenu.java ab4536e73323802e46d50d0bb9f62d6becc9db39 GREEN
-GetUpdatedOriginsContextMenu.java cfb16bb084be5a76a7ec70c2882242543535bc87 GREEN
-UpdateFromLibContextMenu.java 58f56f4c2da66655a5c1bf93c370bd4f2dba5dd4 GREEN
-UpdateInLibContextMenu.java cb5aeb92f8e511339bec675a3764284d977dd45d GREEN
+AddElementContextMenu.java 592522843ed720c4e244793710accb0bd82bdd9d GREEN
+GetUpdatedOriginsContextMenu.java a356ea9869f8279f2700222b1fd8382a29b06399 GREEN
+UpdateFromLibContextMenu.java 2e1e16dff85601412f0d47d6446a10fa5d3a1119 GREEN
+UpdateInLibContextMenu.java 69448087f3904dff7e3d7a34f508c772090cd17d GREEN
diff --git a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/AddElementContextMenu.java b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/AddElementContextMenu.java
index ab4536e73323802e46d50d0bb9f62d6becc9db39..592522843ed720c4e244793710accb0bd82bdd9d 100644
--- a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/AddElementContextMenu.java
+++ b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/AddElementContextMenu.java
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------+
-| Copyright 2021 fortiss GmbH                                              |
+| 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.         |
@@ -22,7 +22,9 @@ import static org.eclipse.jface.window.Window.OK;
 import static org.eclipse.ui.PlatformUI.getWorkbench;
 import static org.fortiss.tooling.ext.reuse.ui.prototypes.PrototypeProvider.DEFAULT_ROOT_REUSE_ELEMENT_NAME;
 import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryUIUtils.manageExternalReferencesOfReuseElement;
+import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryUIUtils.warnOfDeletedReuseElem;
 import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryViewUtils.raiseAndUpdateReuseLibraryView;
+import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.doesReuseElementExistWithContext;
 import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.getAllLocalReuseLibraries;
 import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.getReuseElementName;
 import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.hasReusePossibility;
@@ -59,12 +61,17 @@ import org.fortiss.tooling.kernel.ui.extension.data.ContextMenuContextProvider;
 public class AddElementContextMenu implements IContextMenuContributor {
 
 	/** The title of the dialog shell(s). */
-	private final String shellTitle = "Add Element to Reuse Library";
+	private static final String SHELL_TITLE = "Add Element to Reuse Library";
+
+	/** The description of the processed action. */
+	private static final String ACTION_DESCRIPTION =
+			"Adding a selected reuse element to a selected reuse library";
 
 	/** {@inheritDoc} */
 	@Override
-	public List<IContributionItem> getContributedItems(EObject selection, ContextMenuContextProvider contextProvider) {
-		if (selection != null && canBeAdded(selection)) {
+	public List<IContributionItem> getContributedItems(EObject selection,
+			ContextMenuContextProvider contextProvider) {
+		if(selection != null && canBeAdded(selection)) {
 			AddToLibAction action = new AddToLibAction(selection);
 			List<IContributionItem> contributionItems = new ArrayList<IContributionItem>();
 			contributionItems.add(new ActionContributionItem(action));
@@ -86,7 +93,7 @@ public class AddElementContextMenu implements IContextMenuContributor {
 
 	/** Add one given element to specified {@link ReuseLibrary}. */
 	protected void addElement(ReuseLibrary library, EObject elementToAdd, String saveName) {
-		if (library == null || elementToAdd == null || saveName == null) {
+		if(library == null || elementToAdd == null || saveName == null) {
 			return;
 		}
 
@@ -94,14 +101,15 @@ public class AddElementContextMenu implements IContextMenuContributor {
 
 		try {
 			addElementToLibrary(newElementForLibrary, library);
-		} catch (Exception e) {
-			openError(getActiveWorkbenchWindow().getShell(), "Error in '" + shellTitle + "'", e.getMessage());
+		} catch(Exception e) {
+			openError(getActiveWorkbenchWindow().getShell(), "Error in '" + SHELL_TITLE + "'",
+					e.getMessage());
 		}
 
 		PrototypeService.getInstance().updatePrototypes();
 
 		String currentActionType = "addToLibrary";
-		manageExternalReferencesOfReuseElement(elementToAdd, currentActionType, shellTitle);
+		manageExternalReferencesOfReuseElement(elementToAdd, currentActionType, SHELL_TITLE);
 	}
 
 	/** The action "add element to {@link ReuseLibrary}". */
@@ -121,7 +129,8 @@ public class AddElementContextMenu implements IContextMenuContributor {
 
 		/** Constructor. Takes the selected element as input. */
 		AddToLibAction(EObject element) {
-			super("Add to Reuse Library", ToolingReuseUIActivator.getImageDescriptor("icons/library_add.png"));
+			super("Add to Reuse Library",
+					ToolingReuseUIActivator.getImageDescriptor("icons/library_add.png"));
 			selectedElement = element;
 		}
 
@@ -134,65 +143,80 @@ public class AddElementContextMenu implements IContextMenuContributor {
 
 			Boolean createNewLibrary;
 			String creationText;
-			if (libraryList != null && !libraryList.isEmpty()) {
-				// update existing library names
-				for (ReuseLibrary tmpLibrary : libraryList) {
+			if(libraryList != null && !libraryList.isEmpty()) {
+				// Update existing library names.
+				for(ReuseLibrary tmpLibrary : libraryList) {
 					currentExistingLibraryNames.add(getReuseElementName(tmpLibrary));
 				}
 
-				// ask for library selection
+				// Ask for library selection.
 				final Shell shell = getWorkbench().getActiveWorkbenchWindow().getShell();
-				final AddElementToLibDialog librarySelectDialog = new AddElementToLibDialog(shell, shellTitle);
+				final AddElementToLibDialog librarySelectDialog =
+						new AddElementToLibDialog(shell, SHELL_TITLE);
 				librarySelectDialog.setLibraryList(libraryList);
 				librarySelectDialog.open();
 
-				if (!librarySelectDialog.goAhead()) {
+				if(!librarySelectDialog.goAhead()) {
 					return;
 				}
 				selectedLibrary = librarySelectDialog.getLibrary();
 				createNewLibrary = librarySelectDialog.createNew();
-				creationText = "A new library will be created in which the element can be added.\nEnter a name for the library:\n ";
+				creationText =
+						"A new library will be created in which the element can be added.\nEnter a name for the library:\n ";
 			} else {
 				createNewLibrary = true;
-				creationText = "No library exists yet to add the element. A new one will be created.\nEnter a name for the library:\n ";
+				creationText =
+						"No library exists yet to add the element. A new one will be created.\nEnter a name for the library:\n ";
 			}
 
-			if (createNewLibrary) {
-				final InputDialog creationDialog = new InputDialog(Display.getCurrent().getActiveShell(), shellTitle,
-						creationText, DEFAULT_ROOT_REUSE_ELEMENT_NAME, new NewLibNameValidator());
-				if (creationDialog.open() != OK) {
+			if(createNewLibrary) {
+				final InputDialog creationDialog = new InputDialog(
+						Display.getCurrent().getActiveShell(), SHELL_TITLE, creationText,
+						DEFAULT_ROOT_REUSE_ELEMENT_NAME, new NewLibNameValidator());
+				if(creationDialog.open() != OK) {
+					return;
+				}
+				if(doesReuseElementExistWithContext(selectedElement)) {
+					ICommandStackService.getInstance().runAsCommand(selectedElement, () -> {
+						selectedLibrary = createAndAddReuseLibrary(creationDialog.getValue());
+					});
+				} else {
+					warnOfDeletedReuseElem(ACTION_DESCRIPTION, SHELL_TITLE);
 					return;
 				}
-				ICommandStackService.getInstance().runAsCommand(selectedElement, () -> {
-					selectedLibrary = createAndAddReuseLibrary(creationDialog.getValue());
-				});
 			}
 
-			if (selectedLibrary == null) {
+			if(selectedLibrary == null) {
 				return;
 			}
 
-			// update existing element names
+			// Update existing element names.
 			currentExistingLibraryElementNames = new ArrayList<String>();
 			EList<EObject> elementList = selectedLibrary.getReuseElementList();
-			for (EObject libraryElement : elementList) {
+			for(EObject libraryElement : elementList) {
 				currentExistingLibraryElementNames.add(getReuseElementName(libraryElement));
 			}
 
-			// ask for new element name (when saving element to library)
-			final InputDialog addingDialog = new InputDialog(Display.getCurrent().getActiveShell(), shellTitle,
-					"Enter the name with which the element should be saved in the library '"
-							+ getReuseElementName(selectedLibrary) + "':\n ",
+			// Ask for new element name (when saving element to library).
+			final InputDialog addingDialog = new InputDialog(Display.getCurrent().getActiveShell(),
+					SHELL_TITLE,
+					"Enter the name with which the element should be saved in the library '" +
+							getReuseElementName(selectedLibrary) + "':\n ",
 					getReuseElementName(selectedElement), new AddedNameValidator());
-			if (addingDialog.open() != OK) {
+			if(addingDialog.open() != OK) {
 				return;
 			}
 			String newName = addingDialog.getValue();
 
-			// execute "adding" action
-			ICommandStackService.getInstance().runAsCommand(selectedElement, () -> {
-				addElement(selectedLibrary, selectedElement, newName);
-			});
+			// Execute "adding" action (if the element still exists).
+			if(doesReuseElementExistWithContext(selectedElement)) {
+				ICommandStackService.getInstance().runAsCommand(selectedElement, () -> {
+					addElement(selectedLibrary, selectedElement, newName);
+				});
+			} else {
+				warnOfDeletedReuseElem(ACTION_DESCRIPTION, SHELL_TITLE);
+				return;
+			}
 
 			raiseAndUpdateReuseLibraryView();
 		}
@@ -203,11 +227,11 @@ public class AddElementContextMenu implements IContextMenuContributor {
 			/** {@inheritDoc} */
 			@Override
 			public String isValid(String newText) {
-				if (newText.equals("")) {
+				if(newText.equals("")) {
 					return "A name needs to be specified.";
 				}
-				for (String name : currentExistingLibraryNames) {
-					if (newText.equals(name)) {
+				for(String name : currentExistingLibraryNames) {
+					if(newText.equals(name)) {
 						return "A library with this name already exists.";
 					}
 				}
@@ -221,11 +245,11 @@ public class AddElementContextMenu implements IContextMenuContributor {
 			/** {@inheritDoc} */
 			@Override
 			public String isValid(String newText) {
-				if (newText.equals("")) {
+				if(newText.equals("")) {
 					return "A name needs to be specified.";
 				}
-				for (String name : currentExistingLibraryElementNames) {
-					if (newText.equals(name)) {
+				for(String name : currentExistingLibraryElementNames) {
+					if(newText.equals(name)) {
 						return "This name already exists. Please use another.";
 					}
 				}
diff --git a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/GetUpdatedOriginsContextMenu.java b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/GetUpdatedOriginsContextMenu.java
index cfb16bb084be5a76a7ec70c2882242543535bc87..a356ea9869f8279f2700222b1fd8382a29b06399 100644
--- a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/GetUpdatedOriginsContextMenu.java
+++ b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/GetUpdatedOriginsContextMenu.java
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------+
-| Copyright 2022 fortiss GmbH                                              |
+| 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.         |
@@ -18,6 +18,8 @@ package org.fortiss.tooling.ext.reuse.ui.commands;
 import static java.util.Collections.emptyList;
 import static org.conqat.ide.commons.ui.dialog.MessageUtils.showInfo;
 import static org.fortiss.tooling.ext.reuse.ui.commands.UpdateFromLibContextMenu.UPDATE_FROM_CONTEXT_MENU_STRING;
+import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryUIUtils.warnOfDeletedReuseElem;
+import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.doesReuseElementExistWithContext;
 import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.getAllUpdatedOrigins;
 import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.getFirstSourceLibraryOfElement;
 import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.getLibraryIDName;
@@ -48,15 +50,20 @@ import org.fortiss.tooling.kernel.ui.extension.data.ContextMenuContextProvider;
 public class GetUpdatedOriginsContextMenu implements IContextMenuContributor {
 
 	/** The title of the dialog shell(s). */
-	private final String shellTitle = "Information about updated reuse origins";
+	private static final String SHELL_TITLE = "Information about updated reuse origins";
+
+	/** The description of the processed action. */
+	private static final String ACTION_DESCRIPTION =
+			"Informing the user about updated reuse origins";
 
 	/** The string of the context menu entry. */
 	public static final String updatedOrigincontextMenuString = "Get reuse update information";
 
 	/** {@inheritDoc} */
 	@Override
-	public List<IContributionItem> getContributedItems(EObject selection, ContextMenuContextProvider contextProvider) {
-		if (selection != null && canBeAdded(selection)) {
+	public List<IContributionItem> getContributedItems(EObject selection,
+			ContextMenuContextProvider contextProvider) {
+		if(selection != null && canBeAdded(selection)) {
 			GetUpdateInfoAction action = new GetUpdateInfoAction(selection);
 			List<IContributionItem> contributionItems = new ArrayList<IContributionItem>();
 			contributionItems.add(new ActionContributionItem(action));
@@ -84,7 +91,7 @@ public class GetUpdatedOriginsContextMenu implements IContextMenuContributor {
 	 * element.
 	 */
 	protected void displayOriginUpdateInfo(EObject reuseElement) {
-		if (reuseElement == null) {
+		if(reuseElement == null) {
 			return;
 		}
 
@@ -94,26 +101,29 @@ public class GetUpdatedOriginsContextMenu implements IContextMenuContributor {
 		// It could also be possible to provide directly update options within this
 		// info/dialog box.
 		String infoMessage;
-		if (updatedReuseOrigins.isEmpty()) {
-			infoMessage = "None of the found reuse origins was updated since the selected reuse element was reused or updated (based of these origins)."
-					+ "\n\nTherefore, it is not needed to get updates from any of them except you want to get the original version (e.g., if you have manipulated the selected reuse element in the meantime and wants to reset it)."
-					+ "\n\nKeep in mind: Updated reuse origins cannot be found if your local reuse libraries are not up to date as well!";
+		if(updatedReuseOrigins.isEmpty()) {
+			infoMessage =
+					"None of the found reuse origins was updated since the selected reuse element was reused or updated (based of these origins)." +
+							"\n\nTherefore, it is not needed to get updates from any of them except you want to get the original version (e.g., if you have manipulated the selected reuse element in the meantime and wants to reset it)." +
+							"\n\nKeep in mind: Updated reuse origins cannot be found if your local reuse libraries are not up to date as well!";
 		} else {
-			infoMessage = "The following reuse origins of the selected reuse element were updated since the selected reuse element was reused or updated (based of these origins):\n";
-			for (EObject updatedReuseOrigin : updatedReuseOrigins) {
+			infoMessage =
+					"The following reuse origins of the selected reuse element were updated since the selected reuse element was reused or updated (based of these origins):\n";
+			for(EObject updatedReuseOrigin : updatedReuseOrigins) {
 				String reuseElementName = getReuseElementName(updatedReuseOrigin);
 				ReuseLibrary library = getFirstSourceLibraryOfElement(updatedReuseOrigin);
 				String libraryName = getLibraryIDName(library);
 				boolean stringIsForDisplay = true;
-				String lastUpdate = getReuseElementLastUpdateString(updatedReuseOrigin, stringIsForDisplay);
+				String lastUpdate =
+						getReuseElementLastUpdateString(updatedReuseOrigin, stringIsForDisplay);
 				infoMessage += "\nName: '" + reuseElementName + "'\n";
 				infoMessage += "Within library: '" + libraryName + "'\n";
 				infoMessage += "Last updated: " + lastUpdate + "\n";
 			}
-			infoMessage += "\nIf you want to get one of these updates, please use the '"
-					+ UPDATE_FROM_CONTEXT_MENU_STRING + "' context menu entry.";
+			infoMessage += "\nIf you want to get one of these updates, please use the '" +
+					UPDATE_FROM_CONTEXT_MENU_STRING + "' context menu entry.";
 		}
-		showInfo(shellTitle, infoMessage);
+		showInfo(SHELL_TITLE, infoMessage);
 	}
 
 	/** The action "get info about reuse origin updates". */
@@ -132,9 +142,14 @@ public class GetUpdatedOriginsContextMenu implements IContextMenuContributor {
 		/** {@inheritDoc} */
 		@Override
 		public void run() {
-			ICommandStackService.getInstance().runAsCommand(selectedElement, () -> {
-				displayOriginUpdateInfo(selectedElement);
-			});
+			if(doesReuseElementExistWithContext(selectedElement)) {
+				ICommandStackService.getInstance().runAsCommand(selectedElement, () -> {
+					displayOriginUpdateInfo(selectedElement);
+				});
+			} else {
+				warnOfDeletedReuseElem(ACTION_DESCRIPTION, SHELL_TITLE);
+				return;
+			}
 		}
 	}
 }
diff --git a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/UpdateFromLibContextMenu.java b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/UpdateFromLibContextMenu.java
index 58f56f4c2da66655a5c1bf93c370bd4f2dba5dd4..2e1e16dff85601412f0d47d6446a10fa5d3a1119 100644
--- a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/UpdateFromLibContextMenu.java
+++ b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/UpdateFromLibContextMenu.java
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------+
-| Copyright 2021 fortiss GmbH                                              |
+| 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.         |
@@ -24,7 +24,9 @@ import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryUIUtils.checkFo
 import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryUIUtils.isKeepingAdditionalReferencesRequested;
 import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryUIUtils.manageExternalReferencesOfReuseElement;
 import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryUIUtils.selectCorrectReuseSpec;
+import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryUIUtils.warnOfDeletedReuseElem;
 import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryUIUtils.warnOfMissingLib;
+import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.doesReuseElementExistWithContext;
 import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.getLibraryIDName;
 import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.getLocalReuseLibraryByID;
 import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.getNumberOfContainedReuseSpecs;
@@ -65,13 +67,18 @@ public class UpdateFromLibContextMenu implements IContextMenuContributor {
 	/** The title of the dialog shell(s). */
 	private static final String SHELL_TITLE = "Update Element From Reuse Library";
 
+	/** The description of the processed action. */
+	private static final String ACTION_DESCRIPTION =
+			"Updating the selected reuse element from a selected reuse library";
+
 	/** The string of the context menu entry. */
 	public static final String UPDATE_FROM_CONTEXT_MENU_STRING = "Update from Reuse Library";
 
 	/** {@inheritDoc} */
 	@Override
-	public List<IContributionItem> getContributedItems(EObject selection, ContextMenuContextProvider contextProvider) {
-		if (selection != null && canBeUpdated(selection)) {
+	public List<IContributionItem> getContributedItems(EObject selection,
+			ContextMenuContextProvider contextProvider) {
+		if(selection != null && canBeUpdated(selection)) {
 			UpdateFromLibAction action = new UpdateFromLibAction(selection);
 			List<IContributionItem> contributionItems = new ArrayList<IContributionItem>();
 			contributionItems.add(new ActionContributionItem(action));
@@ -101,22 +108,24 @@ public class UpdateFromLibContextMenu implements IContextMenuContributor {
 	 */
 	protected void updateElementFromLibrary(EObject elementToBeUpdated, ReuseLibrary library,
 			ReuseElementSpec referencingSpec, String newName, boolean keepAdditionalReferences) {
-		if (library == null || elementToBeUpdated == null || referencingSpec == null || newName == null) {
+		if(library == null || elementToBeUpdated == null || referencingSpec == null ||
+				newName == null) {
 			return;
 		}
 
-		// find original element inside the library
-		EObject originalLibraryElement = checkForElementInLibrary(library, referencingSpec, SHELL_TITLE);
-		if (originalLibraryElement == null) {
+		// Find original element inside the library.
+		EObject originalLibraryElement =
+				checkForElementInLibrary(library, referencingSpec, SHELL_TITLE);
+		if(originalLibraryElement == null) {
 			return;
 		}
 
-		EObject updatedElement = replaceElementInProject(elementToBeUpdated, originalLibraryElement, newName,
-				keepAdditionalReferences);
-		if (updatedElement == null) {
+		EObject updatedElement = replaceElementInProject(elementToBeUpdated, originalLibraryElement,
+				newName, keepAdditionalReferences);
+		if(updatedElement == null) {
 			String infoTitle = SHELL_TITLE + " - Replacement Failed";
-			String infoMessage = "The replacement of '" + getReuseElementName(elementToBeUpdated) + "' with '"
-					+ getReuseElementName(originalLibraryElement) + "' has failed.";
+			String infoMessage = "The replacement of '" + getReuseElementName(elementToBeUpdated) +
+					"' with '" + getReuseElementName(originalLibraryElement) + "' has failed.";
 			showInfo(infoTitle, infoMessage);
 			return;
 		}
@@ -124,7 +133,8 @@ public class UpdateFromLibContextMenu implements IContextMenuContributor {
 		fixIDs(updatedElement);
 
 		String currentActionType = "updateFromLibrary";
-		manageExternalReferencesOfReuseElement(originalLibraryElement, currentActionType, SHELL_TITLE);
+		manageExternalReferencesOfReuseElement(originalLibraryElement, currentActionType,
+				SHELL_TITLE);
 	}
 
 	/** The action "update element from {@link ReuseLibrary}". */
@@ -143,40 +153,43 @@ public class UpdateFromLibContextMenu implements IContextMenuContributor {
 		/** {@inheritDoc} */
 		@Override
 		public void run() {
-			ReuseElementSpec correctLibrarySpec = selectCorrectReuseSpec(selectedElement, SHELL_TITLE);
-			if (correctLibrarySpec == null) {
+			ReuseElementSpec correctLibrarySpec =
+					selectCorrectReuseSpec(selectedElement, SHELL_TITLE);
+			if(correctLibrarySpec == null) {
 				return;
 			}
-			ReuseLibrary correctLibrary = getLocalReuseLibraryByID(correctLibrarySpec.getSourceLibUUID());
+			ReuseLibrary correctLibrary =
+					getLocalReuseLibraryByID(correctLibrarySpec.getSourceLibUUID());
 
-			if (correctLibrary == null) {
+			if(correctLibrary == null) {
 				warnOfMissingLib(correctLibrarySpec, SHELL_TITLE);
 				return;
 			}
 
 			String currentNameInProject = getReuseElementName(selectedElement);
 			String currentProjectName = "not found";
-			EList<INamedCommentedElement> parentList = getParentsWithType(selectedElement,
-					INamedCommentedElement.class);
-			if (parentList != null && !parentList.isEmpty()) {
-				// safe due to check above and last element is the highest parent aka root
+			EList<INamedCommentedElement> parentList =
+					getParentsWithType(selectedElement, INamedCommentedElement.class);
+			if(parentList != null && !parentList.isEmpty()) {
+				// Safe due to check above and last element is the highest parent aka root.
 				INamedCommentedElement root = parentList.get(parentList.size() - 1);
 				currentProjectName = root.getName();
 			}
 
-			// find original element inside the library
-			EObject originalLibraryElement = checkForElementInLibrary(correctLibrary, correctLibrarySpec, SHELL_TITLE);
-			if (originalLibraryElement == null) {
+			// Find original element inside the library.
+			EObject originalLibraryElement =
+					checkForElementInLibrary(correctLibrary, correctLibrarySpec, SHELL_TITLE);
+			if(originalLibraryElement == null) {
 				return;
 			}
 
-			// in case of multiple library references within the selected element, ask if
+			// In case of multiple library references within the selected element, ask if
 			// they should be kept or if all should be overridden/replaced by the library
-			// reference of the current update
-			boolean keepAdditionalReferences = isKeepingAdditionalReferencesRequested(selectedElement,
-					correctLibrarySpec, SHELL_TITLE);
+			// reference of the current update.
+			boolean keepAdditionalReferences = isKeepingAdditionalReferencesRequested(
+					selectedElement, correctLibrarySpec, SHELL_TITLE);
 
-			// confirm the update
+			// Confirm the update.
 			String currentNameInLibrary = getReuseElementName(originalLibraryElement);
 			List<String> textLines = new ArrayList<String>();
 			textLines.add("Confirm the following update (from source to target):");
@@ -186,8 +199,8 @@ public class UpdateFromLibContextMenu implements IContextMenuContributor {
 			textLines.add("\n- Update target: element in current project");
 			textLines.add("    > element name: " + currentNameInProject);
 			textLines.add("    > in project: " + currentProjectName);
-			if (getNumberOfContainedReuseSpecs(selectedElement) > 1) {
-				if (keepAdditionalReferences) {
+			if(getNumberOfContainedReuseSpecs(selectedElement) > 1) {
+				if(keepAdditionalReferences) {
 					textLines.add(
 							"\nBesides the current update reference, all (old) additional library references will be kept within the element.");
 				} else {
@@ -197,25 +210,31 @@ public class UpdateFromLibContextMenu implements IContextMenuContributor {
 			}
 			boolean confirmed = confirm(SHELL_TITLE, join("\n", textLines));
 
-			if (!confirmed) {
+			if(!confirmed) {
 				return;
 			}
 
-			// ask for element name (when updating element in project)
-			final InputDialog updateDialog = new InputDialog(Display.getCurrent().getActiveShell(), SHELL_TITLE,
-					"Enter the name with which the element should be updated in the project:\n(Current name in project: "
-							+ currentNameInProject + ")\n ",
+			// Ask for element name (when updating element in project).
+			final InputDialog updateDialog = new InputDialog(Display.getCurrent().getActiveShell(),
+					SHELL_TITLE,
+					"Enter the name with which the element should be updated in the project:\n(Current name in project: " +
+							currentNameInProject + ")\n ",
 					currentNameInProject, new UpdatedNameValidator());
-			if (updateDialog.open() != OK) {
+			if(updateDialog.open() != OK) {
 				return;
 			}
 			String updateName = updateDialog.getValue();
 
-			// execute "updating" action
-			ICommandStackService.getInstance().runAsCommand(selectedElement, () -> {
-				updateElementFromLibrary(selectedElement, correctLibrary, correctLibrarySpec, updateName,
-						keepAdditionalReferences);
-			});
+			// Execute "updating" action (if the selected element still exists).
+			if(doesReuseElementExistWithContext(selectedElement)) {
+				ICommandStackService.getInstance().runAsCommand(selectedElement, () -> {
+					updateElementFromLibrary(selectedElement, correctLibrary, correctLibrarySpec,
+							updateName, keepAdditionalReferences);
+				});
+			} else {
+				warnOfDeletedReuseElem(ACTION_DESCRIPTION, SHELL_TITLE);
+				return;
+			}
 		}
 
 		/** Validator for the name of the updated element. */
@@ -224,12 +243,11 @@ public class UpdateFromLibContextMenu implements IContextMenuContributor {
 			/** {@inheritDoc} */
 			@Override
 			public String isValid(String newText) {
-				if (newText.equals("")) {
+				if(newText.equals("")) {
 					return "A name needs to be specified.";
 				}
 				return null;
 			}
 		}
-
 	}
 }
diff --git a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/UpdateInLibContextMenu.java b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/UpdateInLibContextMenu.java
index cb5aeb92f8e511339bec675a3764284d977dd45d..69448087f3904dff7e3d7a34f508c772090cd17d 100644
--- a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/UpdateInLibContextMenu.java
+++ b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/commands/UpdateInLibContextMenu.java
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------+
-| Copyright 2021 fortiss GmbH                                              |
+| 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.         |
@@ -25,8 +25,10 @@ import static org.fortiss.tooling.ext.reuse.storage.ReuseLibraryStorageManager.s
 import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryUIUtils.checkForElementInLibrary;
 import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryUIUtils.manageExternalReferencesOfReuseElement;
 import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryUIUtils.selectCorrectReuseSpec;
+import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryUIUtils.warnOfDeletedReuseElem;
 import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryUIUtils.warnOfMissingLib;
 import static org.fortiss.tooling.ext.reuse.ui.utils.ReuseLibraryViewUtils.raiseAndUpdateReuseLibraryView;
+import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.doesReuseElementExistWithContext;
 import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.getLibraryIDName;
 import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.getLocalReuseLibraryByID;
 import static org.fortiss.tooling.ext.reuse.utils.ReuseLibraryUtilsBasics.getReuseElementName;
@@ -66,13 +68,18 @@ public class UpdateInLibContextMenu implements IContextMenuContributor {
 	/** The title of the dialog shell(s). */
 	private static final String SHELL_TITLE = "Update Element In Reuse Library";
 
+	/** The description of the processed action. */
+	private static final String ACTION_DESCRIPTION =
+			"Updating the selected reuse element inside the selected reuse library";
+
 	/** The string of the context menu entry. */
 	public static final String UPDATE_IN_CONTEXT_MENU_STRING = "Update in Reuse Library";
 
 	/** {@inheritDoc} */
 	@Override
-	public List<IContributionItem> getContributedItems(EObject selection, ContextMenuContextProvider contextProvider) {
-		if (selection != null && canBeUpdated(selection)) {
+	public List<IContributionItem> getContributedItems(EObject selection,
+			ContextMenuContextProvider contextProvider) {
+		if(selection != null && canBeUpdated(selection)) {
 			UpdateInLibAction action = new UpdateInLibAction(selection);
 			List<IContributionItem> contributionItems = new ArrayList<IContributionItem>();
 			contributionItems.add(new ActionContributionItem(action));
@@ -101,22 +108,24 @@ public class UpdateInLibContextMenu implements IContextMenuContributor {
 	 * {@link ReuseElementSpec} is the one that connects reuse element and
 	 * {@link ReuseLibrary}.
 	 */
-	protected void updateElemInLib(EObject newElement, ReuseLibrary library, ReuseElementSpec referencingSpec,
-			String newName) {
-		if (library == null || newElement == null || referencingSpec == null || newName == null) {
+	protected void updateElemInLib(EObject newElement, ReuseLibrary library,
+			ReuseElementSpec referencingSpec, String newName) {
+		if(library == null || newElement == null || referencingSpec == null || newName == null) {
 			return;
 		}
 
-		EObject originalLibraryElement = checkForElementInLibrary(library, referencingSpec, SHELL_TITLE);
-		if (originalLibraryElement == null) {
+		EObject originalLibraryElement =
+				checkForElementInLibrary(library, referencingSpec, SHELL_TITLE);
+		if(originalLibraryElement == null) {
 			return;
 		}
 		replaceElementInLibrary(originalLibraryElement, newElement, referencingSpec, newName);
 
 		try {
 			saveReuseLibrary(library);
-		} catch (Exception e) {
-			openError(getActiveWorkbenchWindow().getShell(), "Error in '" + SHELL_TITLE + "'", e.getMessage());
+		} catch(Exception e) {
+			openError(getActiveWorkbenchWindow().getShell(), "Error in '" + SHELL_TITLE + "'",
+					e.getMessage());
 		}
 
 		PrototypeService.getInstance().updatePrototypes();
@@ -144,33 +153,36 @@ public class UpdateInLibContextMenu implements IContextMenuContributor {
 		/** {@inheritDoc} */
 		@Override
 		public void run() {
-			ReuseElementSpec correctLibrarySpec = selectCorrectReuseSpec(selectedElement, SHELL_TITLE);
-			if (correctLibrarySpec == null) {
+			ReuseElementSpec correctLibrarySpec =
+					selectCorrectReuseSpec(selectedElement, SHELL_TITLE);
+			if(correctLibrarySpec == null) {
 				return;
 			}
-			ReuseLibrary correctLibrary = getLocalReuseLibraryByID(correctLibrarySpec.getSourceLibUUID());
+			ReuseLibrary correctLibrary =
+					getLocalReuseLibraryByID(correctLibrarySpec.getSourceLibUUID());
 
-			if (correctLibrary == null) {
+			if(correctLibrary == null) {
 				warnOfMissingLib(correctLibrarySpec, SHELL_TITLE);
 				return;
 			}
 
-			// find original element inside the library
-			EObject originalLibraryElement = checkForElementInLibrary(correctLibrary, correctLibrarySpec, SHELL_TITLE);
-			if (originalLibraryElement == null) {
+			// Find original element inside the library.
+			EObject originalLibraryElement =
+					checkForElementInLibrary(correctLibrary, correctLibrarySpec, SHELL_TITLE);
+			if(originalLibraryElement == null) {
 				return;
 			}
 			String currentNameInLibrary = getReuseElementName(originalLibraryElement);
 			String currentProjectName = "not found";
-			EList<INamedCommentedElement> parentList = getParentsWithType(selectedElement,
-					INamedCommentedElement.class);
-			if (parentList != null && !parentList.isEmpty()) {
-				// safe due to check above and last element is the highest parent aka root
+			EList<INamedCommentedElement> parentList =
+					getParentsWithType(selectedElement, INamedCommentedElement.class);
+			if(parentList != null && !parentList.isEmpty()) {
+				// Safe due to check above and last element is the highest parent aka root.
 				INamedCommentedElement root = parentList.get(parentList.size() - 1);
 				currentProjectName = root.getName();
 			}
 
-			// confirm the update
+			// Confirm the update.
 			List<String> textLines = new ArrayList<String>();
 			textLines.add("Confirm the following update (from source to target):");
 			textLines.add("\n- Update source: element in current project");
@@ -181,35 +193,42 @@ public class UpdateInLibContextMenu implements IContextMenuContributor {
 			textLines.add("    > in library: " + getLibraryIDName(correctLibrary));
 			boolean confirmed = confirm(SHELL_TITLE, join("\n", textLines));
 
-			if (!confirmed) {
+			if(!confirmed) {
 				return;
 			}
 
-			// update existing element names
+			// Update existing element names.
 			currentExistingLibraryElementNames = new ArrayList<String>();
 			EList<EObject> elementList = correctLibrary.getReuseElementList();
-			for (EObject libraryElement : elementList) {
+			for(EObject libraryElement : elementList) {
 				String name = getReuseElementName(libraryElement);
-				if (!name.equals(currentNameInLibrary)) {
+				if(!name.equals(currentNameInLibrary)) {
 					currentExistingLibraryElementNames.add(name);
 				}
 			}
 
-			// ask for element name (when updating element in library)
-			final InputDialog updateDialog = new InputDialog(Display.getCurrent().getActiveShell(), SHELL_TITLE,
-					"Enter the name with which the element should be updated in the library '"
-							+ getReuseElementName(correctLibrary) + "':\n(Current name in library: "
-							+ currentNameInLibrary + ")\n ",
+			// Ask for element name (when updating element in library).
+			final InputDialog updateDialog = new InputDialog(Display.getCurrent().getActiveShell(),
+					SHELL_TITLE,
+					"Enter the name with which the element should be updated in the library '" +
+							getReuseElementName(correctLibrary) + "':\n(Current name in library: " +
+							currentNameInLibrary + ")\n ",
 					currentNameInLibrary, new UpdatedNameValidator());
-			if (updateDialog.open() != OK) {
+			if(updateDialog.open() != OK) {
 				return;
 			}
 			String updateName = updateDialog.getValue();
 
-			// execute "updating" action
-			ICommandStackService.getInstance().runAsCommand(selectedElement, () -> {
-				updateElemInLib(selectedElement, correctLibrary, correctLibrarySpec, updateName);
-			});
+			// Execute "updating" action (if the selected element still exists).
+			if(doesReuseElementExistWithContext(selectedElement)) {
+				ICommandStackService.getInstance().runAsCommand(selectedElement, () -> {
+					updateElemInLib(selectedElement, correctLibrary, correctLibrarySpec,
+							updateName);
+				});
+			} else {
+				warnOfDeletedReuseElem(ACTION_DESCRIPTION, SHELL_TITLE);
+				return;
+			}
 
 			raiseAndUpdateReuseLibraryView();
 		}
@@ -220,17 +239,16 @@ public class UpdateInLibContextMenu implements IContextMenuContributor {
 			/** {@inheritDoc} */
 			@Override
 			public String isValid(String newText) {
-				if (newText.equals("")) {
+				if(newText.equals("")) {
 					return "A name needs to be specified.";
 				}
-				for (String name : currentExistingLibraryElementNames) {
-					if (newText.equals(name)) {
+				for(String name : currentExistingLibraryElementNames) {
+					if(newText.equals(name)) {
 						return "This name already exists. Please use another.";
 					}
 				}
 				return null;
 			}
 		}
-
 	}
 }
diff --git a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/dialog/.ratings b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/dialog/.ratings
index dbfd77231264fbfac3c33cbdb9ce554213cc39e5..fbfddddfbbbb809b8e65a570938896caaca65189 100644
--- a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/dialog/.ratings
+++ b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/dialog/.ratings
@@ -1,2 +1,2 @@
-AddElementToLibDialog.java 357ddbf24d5e1776ae248c611ab6b40861cc548b GREEN
-SelectLibDialog.java dce5cabd034a8a517d782fae05bda7b183b11bc6 GREEN
+AddElementToLibDialog.java ed34eb86c8f4d625e215f6d7f699d49278ea7bc8 GREEN
+SelectLibDialog.java c14b3c231a90ec576cdbf876caa1278323b0cc28 GREEN
diff --git a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/dialog/AddElementToLibDialog.java b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/dialog/AddElementToLibDialog.java
index 357ddbf24d5e1776ae248c611ab6b40861cc548b..ed34eb86c8f4d625e215f6d7f699d49278ea7bc8 100644
--- a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/dialog/AddElementToLibDialog.java
+++ b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/dialog/AddElementToLibDialog.java
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------+
-| Copyright 2021 fortiss GmbH                                              |
+| 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.         |
diff --git a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/dialog/SelectLibDialog.java b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/dialog/SelectLibDialog.java
index dce5cabd034a8a517d782fae05bda7b183b11bc6..c14b3c231a90ec576cdbf876caa1278323b0cc28 100644
--- a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/dialog/SelectLibDialog.java
+++ b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/dialog/SelectLibDialog.java
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------+
-| Copyright 2021 fortiss GmbH                                              |
+| 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.         |
diff --git a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/utils/.ratings b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/utils/.ratings
index e057b2fb5a0d78886b8f9ca83ae197146e330326..cfe8be01310ac068746eb2ce63831bb258942a08 100644
--- a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/utils/.ratings
+++ b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/utils/.ratings
@@ -1,2 +1,2 @@
-ReuseLibraryUIUtils.java fed62784975bf8e6fc1625505636e247dfb6c86e GREEN
+ReuseLibraryUIUtils.java 15322522b537abb35ea44ec8089b4bd2f397f3b3 GREEN
 ReuseLibraryViewUtils.java 34a852dc692ec56cb3e9fd8dcea99d64f31503b3 GREEN
diff --git a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/utils/ReuseLibraryUIUtils.java b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/utils/ReuseLibraryUIUtils.java
index fed62784975bf8e6fc1625505636e247dfb6c86e..15322522b537abb35ea44ec8089b4bd2f397f3b3 100644
--- a/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/utils/ReuseLibraryUIUtils.java
+++ b/org.fortiss.tooling.ext.reuse.ui/src/org/fortiss/tooling/ext/reuse/ui/utils/ReuseLibraryUIUtils.java
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------+
-| Copyright 2021 fortiss GmbH                                              |
+| 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.         |
@@ -65,31 +65,33 @@ public class ReuseLibraryUIUtils {
 	 * {@link ReuseElementSpec}s of the given element. Returns null if no
 	 * {@link ReuseElementSpec} could be selected.
 	 *
-	 * @param element     The target reuse element (source of the
-	 *                    {@link ReuseElementSpec})
-	 * @param dialogTitle The title for the dialog with the user
+	 * @param element
+	 *            The target reuse element (source of the
+	 *            {@link ReuseElementSpec})
+	 * @param dialogTitle
+	 *            The title for the dialog with the user
 	 * @return The {@link ReuseElementSpec} selected by the user
 	 */
 	public static ReuseElementSpec selectCorrectReuseSpec(EObject element, String dialogTitle) {
-		if (element instanceof IModelElement) {
-			List<ReuseElementSpec> specs = getAllReuseSpecs((IModelElement) element);
-			if (specs.size() == 1) {
-				// get(0) is safe due to size check
+		if(element instanceof IModelElement) {
+			List<ReuseElementSpec> specs = getAllReuseSpecs(element);
+			if(specs.size() == 1) {
+				// get(0) is safe due to size check.
 				return specs.get(0);
-			} else if (specs.size() > 1) {
-				// ask for selection
+			} else if(specs.size() > 1) {
+				// Ask for selection.
 				List<String> referencedLibrarySelection = new ArrayList<String>();
-				for (ReuseElementSpec spec : specs) {
-					referencedLibrarySelection
-							.add(getLibraryIDNameFormat(spec.getSourceLibUUID(), spec.getSourceLibName())
-									+ " with reference to element '" + spec.getElementName() + "'");
+				for(ReuseElementSpec spec : specs) {
+					referencedLibrarySelection.add(getLibraryIDNameFormat(spec.getSourceLibUUID(),
+							spec.getSourceLibName()) + " with reference to element '" +
+							spec.getElementName() + "'");
 				}
 				final Shell shell = getActiveWorkbenchWindow().getShell();
 				final SelectLibDialog selectLibraryDialog = new SelectLibDialog(shell, dialogTitle);
 				selectLibraryDialog.setLibraryNameList(referencedLibrarySelection);
 				selectLibraryDialog.open();
 
-				if (selectLibraryDialog.goAhead()) {
+				if(selectLibraryDialog.goAhead()) {
 					return specs.get(selectLibraryDialog.getSelectionIndex());
 				}
 			}
@@ -103,38 +105,45 @@ public class ReuseLibraryUIUtils {
 	 * given main {@link ReuseElementSpec} or wants to override/delete all of them.
 	 * If no additional {@link ReuseElementSpec} was found, it will return true.
 	 *
-	 * @param element       The target reuse element (containing the library
-	 *                      references)
-	 * @param mainReference The main library reference to which the others are
-	 *                      additional
-	 * @param dialogTitle   The title for the dialog with the user
+	 * @param element
+	 *            The target reuse element (containing the library
+	 *            references)
+	 * @param mainReference
+	 *            The main library reference to which the others are
+	 *            additional
+	 * @param dialogTitle
+	 *            The title for the dialog with the user
 	 * @return True if (possible) additional library references should be kept or
 	 *         false if they should be overridden
 	 */
-	public static boolean isKeepingAdditionalReferencesRequested(EObject element, ReuseElementSpec mainReference,
-			String dialogTitle) {
-		if (element instanceof IModelElement) {
-			List<ReuseElementSpec> specs = getAllReuseSpecs((IModelElement) element);
-			// only if we have any additional references/reuse specifications, we need to
+	public static boolean isKeepingAdditionalReferencesRequested(EObject element,
+			ReuseElementSpec mainReference, String dialogTitle) {
+		if(element instanceof IModelElement) {
+			List<ReuseElementSpec> specs = getAllReuseSpecs(element);
+			// Only if we have any additional references/reuse specifications, we need to
 			// ask (otherwise keeping is false, because "not existing refs/specs" do not be
-			// need to kept)
-			if (specs.size() > 1) {
+			// need to kept).
+			if(specs.size() > 1) {
 				List<String> additionalLibraryReferences = new ArrayList<String>();
-				for (ReuseElementSpec spec : specs) {
-					if (spec != mainReference) {
-						additionalLibraryReferences.add(
-								"- Library '" + getLibraryIDNameFormat(spec.getSourceLibUUID(), spec.getSourceLibName())
-										+ "' with '" + spec.getElementName() + "' as element name in the library");
+				for(ReuseElementSpec spec : specs) {
+					if(spec != mainReference) {
+						additionalLibraryReferences.add("- Library '" +
+								getLibraryIDNameFormat(spec.getSourceLibUUID(),
+										spec.getSourceLibName()) +
+								"' with '" + spec.getElementName() +
+								"' as element name in the library");
 					}
 				}
 
 				List<String> textLines = new ArrayList<String>();
-				textLines.add("The following additional library references were found in the selected element:");
+				textLines.add(
+						"The following additional library references were found in the selected element:");
 				textLines.addAll(additionalLibraryReferences);
 				textLines.add("\nDo you want to keep them after the update?");
 				textLines.add(
 						"- Yes: All additional (old) references will be kept together with the one of the current update.");
-				textLines.add("- No: Then, only the library reference of the current update will further exist.");
+				textLines.add(
+						"- No: Then, only the library reference of the current update will further exist.");
 				return askQuestion(dialogTitle, join("\n", textLines));
 			}
 		}
@@ -146,17 +155,20 @@ public class ReuseLibraryUIUtils {
 	 * by the given {@link ReuseElementSpec}. Also, displays warning (with
 	 * dialogTitle as header) if it could not be found, and then returns null.
 	 *
-	 * @param library         The target/source reuse library
-	 * @param referencingSpec The reuse specification that reference the requested
-	 *                        reuse element
-	 * @param dialogTitle     The title for the dialog
+	 * @param library
+	 *            The target/source reuse library
+	 * @param referencingSpec
+	 *            The reuse specification that reference the requested
+	 *            reuse element
+	 * @param dialogTitle
+	 *            The title for the dialog
 	 * @return The requested reuse element if it could be found, otherwise null
 	 */
-	public static EObject checkForElementInLibrary(ReuseLibrary library, ReuseElementSpec referencingSpec,
-			String dialogTitle) {
+	public static EObject checkForElementInLibrary(ReuseLibrary library,
+			ReuseElementSpec referencingSpec, String dialogTitle) {
 		String targetUuid = referencingSpec.getElementUUID();
 		EObject originalElementInLibrary = getElementInsideLibrary(library, targetUuid);
-		if (originalElementInLibrary == null) {
+		if(originalElementInLibrary == null) {
 			warnOfMissingReuseElem(referencingSpec, dialogTitle);
 		}
 		return originalElementInLibrary;
@@ -166,16 +178,19 @@ public class ReuseLibraryUIUtils {
 	 * Displays a warning message to the user about a missing reuse element (with
 	 * extracted properties from the given {@link ReuseElementSpec} and title).
 	 *
-	 * @param referencingSpec The reuse specification that has the information about
-	 *                        the missing reuse element
-	 * @param dialogTitle     The title for the dialog
+	 * @param referencingSpec
+	 *            The reuse specification that has the information about
+	 *            the missing reuse element
+	 * @param dialogTitle
+	 *            The title for the dialog
 	 */
-	public static void warnOfMissingReuseElem(ReuseElementSpec referencingSpec, String dialogTitle) {
+	public static void warnOfMissingReuseElem(ReuseElementSpec referencingSpec,
+			String dialogTitle) {
 		List<String> textLines = new ArrayList<String>();
 		textLines.add("The referenced element does not exist in the referenced library.");
 		textLines.add("\nSearched for element UUID: " + referencingSpec.getElementUUID());
-		textLines.add("in library: "
-				+ getLibraryIDNameFormat(referencingSpec.getSourceLibUUID(), referencingSpec.getSourceLibName()));
+		textLines.add("in library: " + getLibraryIDNameFormat(referencingSpec.getSourceLibUUID(),
+				referencingSpec.getSourceLibName()));
 		showWarning(dialogTitle + " - Missing Element", join("\n", textLines));
 	}
 
@@ -184,78 +199,102 @@ public class ReuseLibraryUIUtils {
 	 * (with extracted properties from the given {@link ReuseElementSpec} and
 	 * title).
 	 *
-	 * @param referencingSpec The reuse specification that has the information about
-	 *                        the missing reuse library
-	 * @param dialogTitle     The title for the dialog
+	 * @param referencingSpec
+	 *            The reuse specification that has the information about
+	 *            the missing reuse library
+	 * @param dialogTitle
+	 *            The title for the dialog
 	 */
 	public static void warnOfMissingLib(ReuseElementSpec referencingSpec, String dialogTitle) {
 		List<String> textLines = new ArrayList<String>();
 		textLines.add("The selected library does not exist in the library directory.");
 		textLines.add("\nPlease add it there and repeat.");
-		textLines.add("\nMissing library (UUID and name): "
-				+ getLibraryIDNameFormat(referencingSpec.getSourceLibUUID(), referencingSpec.getSourceLibName()));
+		textLines.add("\nMissing library (UUID and name): " + getLibraryIDNameFormat(
+				referencingSpec.getSourceLibUUID(), referencingSpec.getSourceLibName()));
 		textLines.add("\nLibrary directory location: " + REUSE_PROJECT_DIR.getAbsolutePath());
 		showWarning(dialogTitle + " - Missing Library", join("\n", textLines));
 	}
 
+	/**
+	 * Displays a warning message to the user about a failed action due to a missing reuse element
+	 * for it.
+	 *
+	 * @param currentAction
+	 *            The action description that has failed
+	 * @param dialogTitle
+	 *            The title for the dialog
+	 */
+	public static void warnOfDeletedReuseElem(String currentAction, String dialogTitle) {
+		List<String> textLines = new ArrayList<String>();
+		textLines.add(
+				"The following action could not successfully be performed since the initially selected reuse element for this action does not exist anymore.");
+		textLines.add("\nFailed action: '" + currentAction + "'.");
+		textLines.add(
+				"\nPlease, do not delete a reuse element as long as your chosen action for it has not fully terminated.");
+		showWarning(dialogTitle + " - Missing Element", join("\n", textLines));
+	}
+
 	/**
 	 * Manages the external references (like user-defined functions specified
 	 * externally in a data dictionary) of the given reuse element. Currently, this
 	 * means to inform the user about existing ones.
 	 *
-	 * @param reuseElement The reuse element in which external references should be
-	 *                     managed/searched
-	 * @param actionType   The identifier of the current action. Currently
-	 *                     available: "addToLibrary", "updateInLibrary",
-	 *                     "updateFromLibrary"
-	 * @param shellTitle   The title for the current shell that will be used as
-	 *                     dialog title
+	 * @param reuseElement
+	 *            The reuse element in which external references should be
+	 *            managed/searched
+	 * @param actionType
+	 *            The identifier of the current action. Currently
+	 *            available: "addToLibrary", "updateInLibrary",
+	 *            "updateFromLibrary"
+	 * @param shellTitle
+	 *            The title for the current shell that will be used as
+	 *            dialog title
 	 */
-	public static void manageExternalReferencesOfReuseElement(EObject reuseElement, String actionType,
-			String shellTitle) {
-		// currently, it is just checking for external references and informing the user
+	public static void manageExternalReferencesOfReuseElement(EObject reuseElement,
+			String actionType, String shellTitle) {
+		// Currently, it is just checking for external references and informing the user.
 		// TODO #4150 : store them automatically together with the reuse element
-		// inside the library and use them also when the reuse element is used again
+		// inside the library and use them also when the reuse element is used again.
 
-		// some text depends on the action during which the external references are
+		// Some text depends on the action during which the external references are
 		// searched:
 		String infoTitle = shellTitle + " - External References";
 		String actionText = "";
 		String currentReuseTest = "";
 		String sourceText = "";
-		switch (actionType) {
-		case "addToLibrary":
-			actionText = "added to the library";
-			sourceText = "the added element";
-			break;
-		case "updateInLibrary":
-			actionText = "updated in the library";
-			sourceText = "the source element from the project";
-			break;
-		case "updateFromLibrary":
-			actionText = "updated from the library";
-			currentReuseTest = " (like now)";
-			sourceText = "the source element from the library";
-			break;
-		default:
-			showInfo(infoTitle,
-					"Cannot manage external references of the reuse element, "
-							+ "because the given action type is not known: '" + actionType
-							+ "'\n\nPlease inform a developer to correct this in the source code.");
-			return;
+		switch(actionType) {
+			case "addToLibrary":
+				actionText = "added to the library";
+				sourceText = "the added element";
+				break;
+			case "updateInLibrary":
+				actionText = "updated in the library";
+				sourceText = "the source element from the project";
+				break;
+			case "updateFromLibrary":
+				actionText = "updated from the library";
+				currentReuseTest = " (like now)";
+				sourceText = "the source element from the library";
+				break;
+			default:
+				showInfo(infoTitle, "Cannot manage external references of the reuse element, " +
+						"because the given action type is not known: '" + actionType +
+						"'\n\nPlease inform a developer to correct this in the source code.");
+				return;
 		}
 
 		List<EObject> externalRefs = getExternalReferencesOfElement(reuseElement);
-		if (!externalRefs.isEmpty()) {
-			String headerText = "The following elements were found as references inside the reuse element you "
-					+ actionText + ".\n\nIn case of reusing this element" + currentReuseTest
-					+ ", these referenced elements will be needed in the new environment, too. "
-					+ "Therefore, you might want to add/update these reference elements as well (if not already done).\n";
+		if(!externalRefs.isEmpty()) {
+			String headerText =
+					"The following elements were found as references inside the reuse element you " +
+							actionText + ".\n\nIn case of reusing this element" + currentReuseTest +
+							", these referenced elements will be needed in the new environment, too. " +
+							"Therefore, you might want to add/update these reference elements as well (if not already done).\n";
 			String bodyText = "";
-			for (EObject externalRef : externalRefs) {
-				bodyText += "\n- " + getReuseElementName(externalRef) + " (" + externalRef.getClass().getSimpleName()
-						+ ")";
-				if (getReuseElementName(externalRef).equals(getReuseElementName(reuseElement))) {
+			for(EObject externalRef : externalRefs) {
+				bodyText += "\n- " + getReuseElementName(externalRef) + " (" +
+						externalRef.getClass().getSimpleName() + ")";
+				if(getReuseElementName(externalRef).equals(getReuseElementName(reuseElement))) {
 					bodyText += " [ignore this if it is actually " + sourceText + "]";
 				}
 			}
@@ -268,14 +307,18 @@ public class ReuseLibraryUIUtils {
 	 * Creates and displays a information box with only an OK button. Everything is
 	 * already set except the text for the title, the header and the body.
 	 *
-	 * @param windowTitle The title of the dialog window
-	 * @param headerText  The text of the header between title and body
-	 * @param bodyText    The actual text body
+	 * @param windowTitle
+	 *            The title of the dialog window
+	 * @param headerText
+	 *            The text of the header between title and body
+	 * @param bodyText
+	 *            The actual text body
 	 */
-	public static void showBasicScrollableInformation(String windowTitle, String headerText, String bodyText) {
+	public static void showBasicScrollableInformation(String windowTitle, String headerText,
+			String bodyText) {
 		boolean showSymbol = true;
-		showCustomScrollableAlert(INFORMATION, windowTitle, headerText, bodyText, showSymbol, DIALOG_WINDOW_WIDTH_PREF,
-				DIALOG_WINDOW_HEIGHT_PREF);
+		showCustomScrollableAlert(INFORMATION, windowTitle, headerText, bodyText, showSymbol,
+				DIALOG_WINDOW_WIDTH_PREF, DIALOG_WINDOW_HEIGHT_PREF);
 	}
 
 	/**
@@ -284,21 +327,29 @@ public class ReuseLibraryUIUtils {
 	 * the symbol besides the header should be displayed, the actual text body and
 	 * the preferred size of the window (null if nothing is preferred).
 	 *
-	 * @param alertType        The alert type like Information, Error, etc.
-	 * @param windowTitle      The title of the dialog window
-	 * @param headerText       The text of the header between title and body
-	 * @param bodyText         The actual text body
-	 * @param showSymbol       Whether the symbol besides the header text should be
-	 *                         displayed
-	 * @param windowPrefWidth  Preferred width of the window
-	 * @param windowPrefHeight Preferred height of the window
+	 * @param alertType
+	 *            The alert type like Information, Error, etc.
+	 * @param windowTitle
+	 *            The title of the dialog window
+	 * @param headerText
+	 *            The text of the header between title and body
+	 * @param bodyText
+	 *            The actual text body
+	 * @param showSymbol
+	 *            Whether the symbol besides the header text should be
+	 *            displayed
+	 * @param windowPrefWidth
+	 *            Preferred width of the window
+	 * @param windowPrefHeight
+	 *            Preferred height of the window
 	 */
-	public static void showCustomScrollableAlert(AlertType alertType, String windowTitle, String headerText,
-			String bodyText, boolean showSymbol, Double windowPrefWidth, Double windowPrefHeight) {
+	public static void showCustomScrollableAlert(AlertType alertType, String windowTitle,
+			String headerText, String bodyText, boolean showSymbol, Double windowPrefWidth,
+			Double windowPrefHeight) {
 
 		Alert alert = new Alert(alertType);
 
-		if (!showSymbol) {
+		if(!showSymbol) {
 			alert.setGraphic(null);
 		}
 		alert.setTitle(windowTitle);
@@ -311,17 +362,17 @@ public class ReuseLibraryUIUtils {
 
 		DialogPane dialogPane = alert.getDialogPane();
 		Image taskbarIcon = getFXImage(ToolingReuseUIActivator.PLUGIN_ID, "icons/af3_icon64.png");
-		Stage stage = (Stage) dialogPane.getScene().getWindow();
+		Stage stage = (Stage)dialogPane.getScene().getWindow();
 		stage.getIcons().add(taskbarIcon);
 
-		// use setExpandableContent(area) if the scrollable text should be first hidden
+		// Use setExpandableContent(area) if the scrollable text should be first hidden
 		// under "Show details". Then, alert.setContentText() can be used to show a
-		// short message before
+		// short message before.
 		dialogPane.setContent(area);
-		if (windowPrefWidth != null && windowPrefWidth > 0.0) {
+		if(windowPrefWidth != null && windowPrefWidth > 0.0) {
 			dialogPane.setPrefWidth(windowPrefWidth);
 		}
-		if (windowPrefHeight != null && windowPrefHeight > 0.0) {
+		if(windowPrefHeight != null && windowPrefHeight > 0.0) {
 			dialogPane.setPrefHeight(windowPrefHeight);
 		}
 
diff --git a/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/.ratings b/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/.ratings
index 8fd98fd2d04b97fa3bb7a55145e9589c71db4fb1..da06f1f9f005d0cc2c68437bb55349018a7e3c0b 100644
--- a/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/.ratings
+++ b/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/.ratings
@@ -1 +1 @@
-ToolingReuseActivator.java 3a735e7e2c75e9b048f94bf1adeb172b83301639 GREEN
+ToolingReuseActivator.java 52b9208684334f60ee8c0bc074c86f06f6248227 GREEN
diff --git a/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/ToolingReuseActivator.java b/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/ToolingReuseActivator.java
index 3a735e7e2c75e9b048f94bf1adeb172b83301639..52b9208684334f60ee8c0bc074c86f06f6248227 100644
--- a/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/ToolingReuseActivator.java
+++ b/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/ToolingReuseActivator.java
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------+
-| Copyright 2021 fortiss GmbH                                              |
+| 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.         |
@@ -16,6 +16,8 @@
 package org.fortiss.tooling.ext.reuse;
 
 import org.eclipse.core.runtime.Plugin;
+import org.fortiss.tooling.ext.reuse.model.ReuseLibrary;
+import org.fortiss.tooling.kernel.service.IConstraintCheckerService;
 import org.osgi.framework.BundleContext;
 
 /**
@@ -36,6 +38,12 @@ public class ToolingReuseActivator extends Plugin {
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		plugin = this;
+
+		// Objects within a ReuseLibrary do not need to comply with the constraint checks with which
+		// they should comply when they are outside of it (in a normal project). This is why the
+		// ReuseLibrary needs to be registered as an exclusion for all the usual constraint checks.
+		IConstraintCheckerService ccs = IConstraintCheckerService.getInstance();
+		ccs.registerTypeAsExcludedParentForConstraintChecks(ReuseLibrary.class);
 	}
 
 	/** {@inheritDoc} */
diff --git a/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/utils/.ratings b/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/utils/.ratings
index 0037e17bc479904365d87a17f6aebae128fcc1e4..a833b1ee79e3a02b318cf0995364da436d7cb010 100644
--- a/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/utils/.ratings
+++ b/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/utils/.ratings
@@ -1,3 +1,3 @@
 ReuseLibraryModelElementFactory.java 4ee3eb7449e212643992a3dec6cfb8f4278efb70 GREEN
-ReuseLibraryUtilsBasics.java b651b31f6d94ff98a8f965440d662bfc4655c31b GREEN
+ReuseLibraryUtilsBasics.java 1d60936f98bd09e1ba1715192f5263f89b4942fe GREEN
 ReuseLibraryUtilsManipulation.java 77a646db5a63ba7c61664dbcaf34a9036003fde5 GREEN
diff --git a/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/utils/ReuseLibraryUtilsBasics.java b/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/utils/ReuseLibraryUtilsBasics.java
index b651b31f6d94ff98a8f965440d662bfc4655c31b..1d60936f98bd09e1ba1715192f5263f89b4942fe 100644
--- a/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/utils/ReuseLibraryUtilsBasics.java
+++ b/org.fortiss.tooling.ext.reuse/src/org/fortiss/tooling/ext/reuse/utils/ReuseLibraryUtilsBasics.java
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------+
-| Copyright 2022 fortiss GmbH                                              |
+| 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.         |
@@ -33,8 +33,10 @@ import org.fortiss.tooling.base.model.element.IModelElementSpecification;
 import org.fortiss.tooling.ext.reuse.model.ReuseElementSpec;
 import org.fortiss.tooling.ext.reuse.model.ReuseLibrary;
 import org.fortiss.tooling.ext.reuse.service.IReuseProviderService;
+import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
 import org.fortiss.tooling.kernel.model.INamedCommentedElement;
 import org.fortiss.tooling.kernel.model.INamedElement;
+import org.fortiss.tooling.kernel.service.IPersistencyService;
 
 /**
  * Utility methods for {@link ReuseLibrary}s and related reuse elements and
@@ -53,13 +55,14 @@ public class ReuseLibraryUtilsBasics {
 	/**
 	 * Returns whether the given element can be used as reuse element.
 	 *
-	 * @param element The element that should be checked
+	 * @param element
+	 *            The element that should be checked
 	 * @return True if the given element can be used as reuse element otherwise
 	 *         false
 	 */
 	public static boolean hasReusePossibility(EObject element) {
-		for (Class<? extends EObject> cls : getReuseElementClasses()) {
-			if (cls.isInstance(element)) {
+		for(Class<? extends EObject> cls : getReuseElementClasses()) {
+			if(cls.isInstance(element)) {
 				return true;
 			}
 		}
@@ -70,19 +73,21 @@ public class ReuseLibraryUtilsBasics {
 	 * Returns whether the given element is a reuse element and has at least one
 	 * valid link to a {@link ReuseLibrary}.
 	 *
-	 * @param element The element that should be checked
+	 * @param element
+	 *            The element that should be checked
 	 * @return True if the given element is a reuse element, otherwise false
 	 */
 	public static boolean isCorrectReuseElement(EObject element) {
-		// first, check if it is a (possible) reuse element in general
-		if (hasReusePossibility(element)) {
-			// second, check if it has a library reference
-			// (only then it is an actual (active) reuse element)
-			if (element instanceof IModelElement) {
-				for (IModelElementSpecification spec : ((IModelElement) element).getSpecifications()) {
-					if (spec instanceof ReuseElementSpec) {
-						String libID = ((ReuseElementSpec) spec).getSourceLibUUID();
-						if (libID != null && !libID.isEmpty()) {
+		// First, check if it is a (possible) reuse element in general.
+		if(hasReusePossibility(element)) {
+			// Second, check if it has a library reference (only then it is an actual (active) reuse
+			// element).
+			if(element instanceof IModelElement) {
+				for(IModelElementSpecification spec : ((IModelElement)element)
+						.getSpecifications()) {
+					if(spec instanceof ReuseElementSpec) {
+						String libID = ((ReuseElementSpec)spec).getSourceLibUUID();
+						if(libID != null && !libID.isEmpty()) {
 							return true;
 						}
 					}
@@ -96,7 +101,8 @@ public class ReuseLibraryUtilsBasics {
 	 * Returns whether the given element is a reuse element and has at least one
 	 * valid link to a {@link ReuseLibrary} OR is a {@link ReuseLibrary} itself.
 	 *
-	 * @param element The element that should be checked
+	 * @param element
+	 *            The element that should be checked
 	 * @return True if the given element is a reuse element OR a reuse library,
 	 *         otherwise false
 	 */
@@ -104,10 +110,29 @@ public class ReuseLibraryUtilsBasics {
 		return (element instanceof ReuseLibrary) || isCorrectReuseElement(element);
 	}
 
+	/**
+	 * Returns display name of the first {@link ReuseLibrary} that is related to the given reuse
+	 * element. If this is not the case, an empty {@link String} will be returned. This method is
+	 * perfect for reuse elements within reuse libraries, because they have definitely only one
+	 * connected/related library.
+	 *
+	 * @param element
+	 *            The reuse element whose library's name is searched
+	 * @return Display name as string or empty string
+	 */
+	public static String getNameOfFirstRelatedLibrary(EObject element) {
+		ReuseElementSpec spec = getFirstReuseSpec(element);
+		if(spec != null) {
+			return spec.getSourceLibName();
+		}
+		return "";
+	}
+
 	/**
 	 * Returns display name of given {@link ReuseLibrary} (name and UUID).
 	 *
-	 * @param library The target reuse library
+	 * @param library
+	 *            The target reuse library
 	 * @return Display name as string
 	 */
 	public static String getLibraryIDName(ReuseLibrary library) {
@@ -118,8 +143,10 @@ public class ReuseLibraryUtilsBasics {
 	 * Returns the current format for displaying name and UUID of
 	 * {@link ReuseLibrary}s.
 	 *
-	 * @param libraryUUID The UUID of the target library
-	 * @param libraryName The name of the target library
+	 * @param libraryUUID
+	 *            The UUID of the target library
+	 * @param libraryName
+	 *            The name of the target library
 	 * @return Formatted string
 	 */
 	public static String getLibraryIDNameFormat(String libraryUUID, String libraryName) {
@@ -131,17 +158,18 @@ public class ReuseLibraryUtilsBasics {
 	 * {@link ReuseLibrary}), independent of the type as long as its class was
 	 * registered for reuse.
 	 *
-	 * @param element The target reuse element
+	 * @param element
+	 *            The target reuse element
 	 * @return Name as string
 	 */
 	public static String getReuseElementName(EObject element) {
-		if (element instanceof ReuseLibrary) {
-			return ((ReuseLibrary) element).getName();
+		if(element instanceof ReuseLibrary) {
+			return ((ReuseLibrary)element).getName();
 		}
 		String name = IReuseProviderService.getInstance().getReuseElementName(element);
-		if (name == null) {
-			if (element instanceof INamedElement) {
-				name = ((INamedElement) element).getName();
+		if(name == null) {
+			if(element instanceof INamedElement) {
+				name = ((INamedElement)element).getName();
 			} else {
 				name = element.toString();
 			}
@@ -153,13 +181,15 @@ public class ReuseLibraryUtilsBasics {
 	 * Sets the name of the given reuse element (or {@link ReuseLibrary}),
 	 * independent of the type as long as its class was registered for reuse.
 	 *
-	 * @param element The target reuse element
-	 * @param name    The new name
+	 * @param element
+	 *            The target reuse element
+	 * @param name
+	 *            The new name
 	 * @return True if action was successful, otherwise false
 	 */
 	public static boolean setReuseElementName(EObject element, String name) {
-		if (element instanceof ReuseLibrary) {
-			((ReuseLibrary) element).setName(name);
+		if(element instanceof ReuseLibrary) {
+			((ReuseLibrary)element).setName(name);
 			return true;
 		}
 		return IReuseProviderService.getInstance().setReuseElementName(element, name);
@@ -169,18 +199,19 @@ public class ReuseLibraryUtilsBasics {
 	 * Returns the comment of the given reuse element (or {@link ReuseLibrary}),
 	 * independent of the type as long as its class was registered for reuse.
 	 *
-	 * @param element The target reuse element
+	 * @param element
+	 *            The target reuse element
 	 * @return The requested comment as string
 	 */
 	public static String getReuseElementComment(EObject element) {
 		String comment = null;
-		if (element instanceof ReuseLibrary) {
-			comment = ((ReuseLibrary) element).getComment();
+		if(element instanceof ReuseLibrary) {
+			comment = ((ReuseLibrary)element).getComment();
 		} else {
 			comment = IReuseProviderService.getInstance().getReuseElementComment(element);
-			if (comment == null) {
-				if (element instanceof INamedCommentedElement) {
-					comment = ((INamedCommentedElement) element).getComment();
+			if(comment == null) {
+				if(element instanceof INamedCommentedElement) {
+					comment = ((INamedCommentedElement)element).getComment();
 				}
 			}
 		}
@@ -191,13 +222,15 @@ public class ReuseLibraryUtilsBasics {
 	 * Sets the comment of the given reuse element (or {@link ReuseLibrary}),
 	 * independent of the type as long as its class was registered for reuse.
 	 *
-	 * @param element The target reuse element
-	 * @param comment The new comment
+	 * @param element
+	 *            The target reuse element
+	 * @param comment
+	 *            The new comment
 	 * @return True if action was successful, otherwise false
 	 */
 	public static boolean setReuseElementComment(EObject element, String comment) {
-		if (element instanceof ReuseLibrary) {
-			((ReuseLibrary) element).setComment(comment);
+		if(element instanceof ReuseLibrary) {
+			((ReuseLibrary)element).setComment(comment);
 			return true;
 		}
 		return IReuseProviderService.getInstance().setReuseElementComment(element, comment);
@@ -213,13 +246,14 @@ public class ReuseLibraryUtilsBasics {
 	 * {@link ReuseElementSpec}s and thus multiple UUIDs, because they could have
 	 * been added to several {@link ReuseLibrary}s.
 	 *
-	 * @param element The target reuse element
+	 * @param element
+	 *            The target reuse element
 	 * @return The requested UUID as string (or empty string)
 	 */
 	public static String getFirstReuseElementUUID(EObject element) {
 		List<String> allUUIDs = getAllReuseElementUUID(element);
-		if (allUUIDs != null && !allUUIDs.isEmpty()) {
-			// get(0) is safe due to check above
+		if(allUUIDs != null && !allUUIDs.isEmpty()) {
+			// get(0) is safe due to check above.
 			return allUUIDs.get(0);
 		}
 		return "";
@@ -233,19 +267,18 @@ public class ReuseLibraryUtilsBasics {
 	 * {@link ReuseElementSpec}s and thus multiple UUIDs, because they could have
 	 * been added to several {@link ReuseLibrary}s.
 	 *
-	 * @param element The target reuse element
+	 * @param element
+	 *            The target reuse element
 	 * @return The requested UUID as string (or empty string)
 	 */
 	public static List<String> getAllReuseElementUUID(EObject element) {
 		List<String> allUUIDs = new ArrayList<>();
-		if (element instanceof ReuseLibrary) {
-			allUUIDs.add(((ReuseLibrary) element).getLibraryUUID());
+		if(element instanceof ReuseLibrary) {
+			allUUIDs.add(((ReuseLibrary)element).getLibraryUUID());
 		} else {
-			if (element instanceof IModelElement) {
-				List<ReuseElementSpec> specs = getAllReuseSpecs((IModelElement) element);
-				for (ReuseElementSpec spec : specs) {
-					allUUIDs.add(spec.getElementUUID());
-				}
+			List<ReuseElementSpec> specs = getAllReuseSpecs(element);
+			for(ReuseElementSpec spec : specs) {
+				allUUIDs.add(spec.getElementUUID());
 			}
 		}
 		return allUUIDs;
@@ -257,18 +290,18 @@ public class ReuseLibraryUtilsBasics {
 	 * {@link ReuseLibrary}. If such a {@link ReuseElementSpec} does not exist, an
 	 * empty {@link String} will be returned.
 	 *
-	 * @param element The target reuse element
-	 * @param library The reuse library to which the reuse UUID of the element
-	 *                should belong
+	 * @param element
+	 *            The target reuse element
+	 * @param library
+	 *            The reuse library to which the reuse UUID of the element
+	 *            should belong
 	 * @return The requested UUID as string (or empty string)
 	 */
 	public static String getReuseElementUUIDForLibrary(EObject element, ReuseLibrary library) {
-		if (element instanceof IModelElement) {
-			List<ReuseElementSpec> specs = getAllReuseSpecs((IModelElement) element);
-			for (ReuseElementSpec spec : specs) {
-				if (spec.getSourceLibUUID().equals(library.getLibraryUUID())) {
-					return spec.getElementUUID();
-				}
+		List<ReuseElementSpec> specs = getAllReuseSpecs(element);
+		for(ReuseElementSpec spec : specs) {
+			if(spec.getSourceLibUUID().equals(library.getLibraryUUID())) {
+				return spec.getElementUUID();
 			}
 		}
 		return "";
@@ -279,19 +312,20 @@ public class ReuseLibraryUtilsBasics {
 	 * a specific (given) {@link ReuseLibrary}. If it cannot be found, an empty
 	 * {@link String} will be returned.
 	 *
-	 * @param element       The target reuse element
-	 * @param sourceLibrary The library of the original reuse element for the hash
+	 * @param element
+	 *            The target reuse element
+	 * @param sourceLibrary
+	 *            The library of the original reuse element for the hash
 	 * @return The requested hash code as string (or empty string)
 	 */
-	public static String getReuseElementHashForLibrary(EObject element, ReuseLibrary sourceLibrary) {
+	public static String getReuseElementHashForLibrary(EObject element,
+			ReuseLibrary sourceLibrary) {
 		String libraryUuid = sourceLibrary.getLibraryUUID();
-		if (element instanceof IModelElement) {
-			List<ReuseElementSpec> specs = getAllReuseSpecs((IModelElement) element);
-			for (ReuseElementSpec spec : specs) {
-				String referenceLibraryUuid = spec.getSourceLibUUID();
-				if (referenceLibraryUuid.equals(libraryUuid)) {
-					return spec.getElementHash();
-				}
+		List<ReuseElementSpec> specs = getAllReuseSpecs(element);
+		for(ReuseElementSpec spec : specs) {
+			String referenceLibraryUuid = spec.getSourceLibUUID();
+			if(referenceLibraryUuid.equals(libraryUuid)) {
+				return spec.getElementHash();
 			}
 		}
 		return "";
@@ -302,16 +336,15 @@ public class ReuseLibraryUtilsBasics {
 	 * {@link ZonedDateTime} as long as it has (already) a {@link ReuseElementSpec}.
 	 * If this is not the case, null will be returned.
 	 *
-	 * @param element The target reuse element
+	 * @param element
+	 *            The target reuse element
 	 * @return The requested (update) date (or null)
 	 */
 	public static ZonedDateTime getReuseElementLastUpdate(EObject element) {
-		if (element instanceof IModelElement) {
-			List<ReuseElementSpec> specs = getAllReuseSpecs((IModelElement) element);
-			if (specs != null && !specs.isEmpty()) {
-				// get(0) is safe due to check above
-				return specs.get(0).getLastUpdate();
-			}
+		List<ReuseElementSpec> specs = getAllReuseSpecs(element);
+		if(specs != null && !specs.isEmpty()) {
+			// get(0) is safe due to check above.
+			return specs.get(0).getLastUpdate();
 		}
 		return null;
 	}
@@ -321,9 +354,11 @@ public class ReuseLibraryUtilsBasics {
 	 * {@link String} as long as it has (already) a {@link ReuseElementSpec}. If
 	 * this is not the case, an empty {@link String} will be returned.
 	 *
-	 * @param element    The target reuse element
-	 * @param forDisplay If it should be the format for user display or the one that
-	 *                   is internally used
+	 * @param element
+	 *            The target reuse element
+	 * @param forDisplay
+	 *            If it should be the format for user display or the one that
+	 *            is internally used
 	 * @return The requested (update) date as string (or empty string)
 	 */
 	public static String getReuseElementLastUpdateString(EObject element, boolean forDisplay) {
@@ -335,18 +370,19 @@ public class ReuseLibraryUtilsBasics {
 	 * Returns the given {@link ZonedDateTime} as formatted {@link String} as long
 	 * as it is valid, otherwise an empty {@link String} will be returned.
 	 *
-	 * @param date       The date
-	 * @param forDisplay If it should be the format for user display or the one that
-	 *                   is internally used
+	 * @param date
+	 *            The date
+	 * @param forDisplay
+	 *            If it should be the format for user display or the one that
+	 *            is internally used
 	 * @return The requested date as string (or empty string)
 	 */
 	public static String getDateAsString(ZonedDateTime date, boolean forDisplay) {
-		if (date != null) {
-			if (forDisplay) {
+		if(date != null) {
+			if(forDisplay) {
 				return DISPLAY_REUSE_DATE_FORMATTER.format(date);
-			} else {
-				return INTERNAL_REUSE_DATE_FORMATTER.format(date);
 			}
+			return INTERNAL_REUSE_DATE_FORMATTER.format(date);
 		}
 		return "";
 	}
@@ -355,14 +391,14 @@ public class ReuseLibraryUtilsBasics {
 	 * Sets the Last Update Date of the given reuse element with the given {link
 	 * Date} as long as it has (already) a {@link ReuseElementSpec}.
 	 *
-	 * @param element The target reuse element
-	 * @param newDate The new (update) date
+	 * @param element
+	 *            The target reuse element
+	 * @param newDate
+	 *            The new (update) date
 	 */
 	public static void setReuseElementLastUpdate(EObject element, ZonedDateTime newDate) {
-		if (element instanceof IModelElement) {
-			for (ReuseElementSpec spec : getAllReuseSpecs((IModelElement) element)) {
-				spec.setLastUpdate(newDate);
-			}
+		for(ReuseElementSpec spec : getAllReuseSpecs(element)) {
+			spec.setLastUpdate(newDate);
 		}
 	}
 
@@ -370,7 +406,8 @@ public class ReuseLibraryUtilsBasics {
 	 * Sets the Last Update Date of the given reuse element with the current {link
 	 * ZonedDateTime} as long as it has (already) a {@link ReuseElementSpec}.
 	 *
-	 * @param element The target reuse element
+	 * @param element
+	 *            The target reuse element
 	 */
 	public static void setReuseElementLastUpdateNow(EObject element) {
 		setReuseElementLastUpdate(element, ZonedDateTime.now());
@@ -380,32 +417,49 @@ public class ReuseLibraryUtilsBasics {
 	 * Returns all {@link ReuseElementSpec}s of the given element to a
 	 * {@link ReuseLibrary}. If none exist, an empty list will be returned.
 	 *
-	 * @param element The target reuse element
+	 * @param element
+	 *            The target reuse element
 	 * @return A list of all found reuse specifications (or empty list)
 	 */
-	public static List<ReuseElementSpec> getAllReuseSpecs(IModelElement element) {
+	public static List<ReuseElementSpec> getAllReuseSpecs(EObject element) {
 		List<ReuseElementSpec> specs = new ArrayList<>();
-		for (IModelElementSpecification spec : element.getSpecifications()) {
-			if (spec instanceof ReuseElementSpec) {
-				// (cast is safe due to instance check)
-				specs.add((ReuseElementSpec) spec);
+		if(element instanceof IModelElement) {
+			for(IModelElementSpecification spec : ((IModelElement)element).getSpecifications()) {
+				if(spec instanceof ReuseElementSpec) {
+					// Cast is safe due to instance check.
+					specs.add((ReuseElementSpec)spec);
+				}
 			}
 		}
 		return specs;
 	}
 
+	/**
+	 * Returns the first {@link ReuseElementSpec} of the given element to a
+	 * {@link ReuseLibrary}. If none exist, null will be returned.
+	 *
+	 * @param element
+	 *            The target reuse element
+	 * @return The first reuse element specification (or null)
+	 */
+	public static ReuseElementSpec getFirstReuseSpec(EObject element) {
+		List<ReuseElementSpec> specs = getAllReuseSpecs(element);
+		if(!specs.isEmpty()) {
+			// get(0) safe due to empty check above.
+			return specs.get(0);
+		}
+		return null;
+	}
+
 	/**
 	 * Returns the number of all {@link ReuseElementSpec}s of the given element.
 	 *
-	 * @param element The target reuse element
+	 * @param element
+	 *            The target reuse element
 	 * @return Number of all found reuse specifications
 	 */
 	public static int getNumberOfContainedReuseSpecs(EObject element) {
-		if (element instanceof IModelElement) {
-			return getAllReuseSpecs((IModelElement) element).size();
-		} else {
-			return 0;
-		}
+		return getAllReuseSpecs(element).size();
 	}
 
 	/**
@@ -413,24 +467,26 @@ public class ReuseLibraryUtilsBasics {
 	 * that is linked with the given reuse element inside a library. If none could
 	 * be found, null will be returned.
 	 *
-	 * @param projectElement The reuse element inside a project from which the reuse
-	 *                       specification should be selected
-	 * @param libraryElement The reuse element inside a library
+	 * @param projectElement
+	 *            The reuse element inside a project from which the reuse
+	 *            specification should be selected
+	 * @param libraryElement
+	 *            The reuse element inside a library
 	 * @return The found/matched reuse specification (or null)
 	 */
-	public static ReuseElementSpec getReuseSpecLinkedToThisLibraryElement(IModelElement projectElement,
-			IModelElement libraryElement) {
+	public static ReuseElementSpec getReuseSpecLinkedToThisLibraryElement(
+			IModelElement projectElement, IModelElement libraryElement) {
 		List<ReuseElementSpec> projectSpecs = getAllReuseSpecs(projectElement);
 		List<ReuseElementSpec> librarySpecs = getAllReuseSpecs(libraryElement);
-		// elements in library must have only a single specification
-		if (librarySpecs.size() == 1) {
-			// get(0) is safe due to size check above
+		// Elements in library must have only a single specification.
+		if(librarySpecs.size() == 1) {
+			// get(0) is safe due to size check above.
 			ReuseElementSpec librarySpec = librarySpecs.get(0);
 
-			for (ReuseElementSpec specToBeChecked : projectSpecs) {
-				// both UUIDs (of element and library) must be identical
-				if (specToBeChecked.getSourceLibUUID().equals(librarySpec.getSourceLibUUID())
-						&& specToBeChecked.getElementUUID().equals(librarySpec.getElementUUID())) {
+			for(ReuseElementSpec specToBeChecked : projectSpecs) {
+				// Both UUIDs (of element and library) must be identical.
+				if(specToBeChecked.getSourceLibUUID().equals(librarySpec.getSourceLibUUID()) &&
+						specToBeChecked.getElementUUID().equals(librarySpec.getElementUUID())) {
 					return specToBeChecked;
 				}
 			}
@@ -445,8 +501,8 @@ public class ReuseLibraryUtilsBasics {
 	 * @return A list of all local reuse libraries (or empty list)
 	 */
 	public static List<ReuseLibrary> getAllLocalReuseLibraries() {
-		// currently, this is just all existing local libraries which are stored
-		// separately in the library directory
+		// Currently, this is just all existing local libraries which are stored
+		// separately in the library directory.
 		return getAllSeparatelyStoredReuseLibraries();
 	}
 
@@ -457,12 +513,13 @@ public class ReuseLibraryUtilsBasics {
 	 * or file name is not correct (as long as it is in the reuse directory and has
 	 * the right UUID)!
 	 *
-	 * @param libraryUUID The UUID of the requested reuse library
+	 * @param libraryUUID
+	 *            The UUID of the requested reuse library
 	 * @return The requested reuse library (or null)
 	 */
 	public static ReuseLibrary getLocalReuseLibraryByID(String libraryUUID) {
-		for (ReuseLibrary library : getAllLocalReuseLibraries()) {
-			if (libraryUUID.equals(library.getLibraryUUID())) {
+		for(ReuseLibrary library : getAllLocalReuseLibraries()) {
+			if(libraryUUID.equals(library.getLibraryUUID())) {
 				return library;
 			}
 		}
@@ -477,17 +534,15 @@ public class ReuseLibraryUtilsBasics {
 	 * because it does not fetch all libraries - only the one of the first {link
 	 * ReuseElementSpec}.
 	 *
-	 * @param element The target reuse element
+	 * @param element
+	 *            The target reuse element
 	 * @return The requested reuse library (or null)
 	 */
 	public static ReuseLibrary getFirstSourceLibraryOfElement(EObject element) {
-		if (element instanceof IModelElement) {
-			List<ReuseElementSpec> specList = getAllReuseSpecs((IModelElement) element);
-			if (specList != null && !specList.isEmpty()) {
-				// get(0) is safe due to check above
-				String libraryUUID = specList.get(0).getSourceLibUUID();
-				return getLocalReuseLibraryByID(libraryUUID);
-			}
+		ReuseElementSpec spec = getFirstReuseSpec(element);
+		if(spec != null) {
+			String libraryUUID = spec.getSourceLibUUID();
+			return getLocalReuseLibraryByID(libraryUUID);
 		}
 		return null;
 	}
@@ -497,19 +552,18 @@ public class ReuseLibraryUtilsBasics {
 	 * library in the {link ReuseElementSpec}s of the given reuse element. If no
 	 * {link ReuseElementSpec} exists, the return will be an empty list.
 	 *
-	 * @param element The target reuse element
+	 * @param element
+	 *            The target reuse element
 	 * @return All found reuse libraries for the given element (or empty list)
 	 */
 	public static List<ReuseLibrary> getAllSourceLibrariesOfElement(EObject element) {
 		List<ReuseLibrary> foundLibraries = new ArrayList<>();
-		if (element instanceof IModelElement) {
-			List<ReuseElementSpec> reuseSpecs = getAllReuseSpecs((IModelElement) element);
-			for (ReuseElementSpec reuseSpec : reuseSpecs) {
-				String libraryUUID = reuseSpec.getSourceLibUUID();
-				ReuseLibrary sourceLibrary = getLocalReuseLibraryByID(libraryUUID);
-				if (sourceLibrary != null) {
-					foundLibraries.add(sourceLibrary);
-				}
+		List<ReuseElementSpec> reuseSpecs = getAllReuseSpecs(element);
+		for(ReuseElementSpec reuseSpec : reuseSpecs) {
+			String libraryUUID = reuseSpec.getSourceLibUUID();
+			ReuseLibrary sourceLibrary = getLocalReuseLibraryByID(libraryUUID);
+			if(sourceLibrary != null) {
+				foundLibraries.add(sourceLibrary);
 			}
 		}
 		return foundLibraries;
@@ -520,16 +574,19 @@ public class ReuseLibraryUtilsBasics {
 	 * referenced by the given {@link ReuseElementSpec}. Returns null if it could
 	 * not be found.
 	 *
-	 * @param library     The target reuse library
-	 * @param elementUUID The UUID string of the requested element
+	 * @param library
+	 *            The target reuse library
+	 * @param elementUUID
+	 *            The UUID string of the requested element
 	 * @return The requested reuse element (or null)
 	 */
 	public static EObject getElementInsideLibrary(ReuseLibrary library, String elementUUID) {
-		// find original element inside the library by identical UUID
-		for (EObject libraryElement : library.getReuseElementList()) {
-			for (IModelElementSpecification spec : ((IModelElement) libraryElement).getSpecifications()) {
-				if (spec instanceof ReuseElementSpec) {
-					if (((ReuseElementSpec) spec).getElementUUID().equals(elementUUID)) {
+		// Find original element inside the library by identical UUID.
+		for(EObject libraryElement : library.getReuseElementList()) {
+			for(IModelElementSpecification spec : ((IModelElement)libraryElement)
+					.getSpecifications()) {
+				if(spec instanceof ReuseElementSpec) {
+					if(((ReuseElementSpec)spec).getElementUUID().equals(elementUUID)) {
 						return libraryElement;
 					}
 				}
@@ -543,14 +600,15 @@ public class ReuseLibraryUtilsBasics {
 	 * (e.g. an external stored function inside a code specification of a
 	 * component). If nothing was found, an empty list is returned.
 	 *
-	 * @param element The target reuse element
+	 * @param element
+	 *            The target reuse element
 	 * @return A list of external elements referencing the target reuse element (or
 	 *         empty list)
 	 */
 	public static List<EObject> getExternalReferencesOfElement(EObject element) {
 		List<EObject> references = new ArrayList<>();
-		for (Class<? extends EObject> referenceClass : getPossibleExternalReferenceClasses()) {
-			for (EObject reference : getChildrenWithType(element, referenceClass)) {
+		for(Class<? extends EObject> referenceClass : getPossibleExternalReferenceClasses()) {
+			for(EObject reference : getChildrenWithType(element, referenceClass)) {
 				references.add(reference);
 			}
 		}
@@ -565,8 +623,9 @@ public class ReuseLibraryUtilsBasics {
 	 * {@link EObject} was reused based on the origin (i.e., the hash codes are
 	 * identical), an empty list will be returned.
 	 *
-	 * @param element The element whose reuse origin(s) should be checked for
-	 *                updates
+	 * @param element
+	 *            The element whose reuse origin(s) should be checked for
+	 *            updates
 	 * @return List of elements that are reuse origins and were updated in the
 	 *         meantime
 	 */
@@ -575,18 +634,35 @@ public class ReuseLibraryUtilsBasics {
 
 		List<ReuseLibrary> foundLibraries = getAllSourceLibrariesOfElement(element);
 
-		for (ReuseLibrary sourceLibrary : foundLibraries) {
+		for(ReuseLibrary sourceLibrary : foundLibraries) {
 			String uuid = getReuseElementUUIDForLibrary(element, sourceLibrary);
 			EObject originElementInLib = getElementInsideLibrary(sourceLibrary, uuid);
 			String storedHashForThisLibrary = getReuseElementHashForLibrary(element, sourceLibrary);
-			String currentHashForThisLibrary = getReuseElementHashForLibrary(originElementInLib, sourceLibrary);
-			// if hashes are valid but different, the origin was updated
-			if (!storedHashForThisLibrary.isEmpty() && !currentHashForThisLibrary.isEmpty()) {
-				if (!storedHashForThisLibrary.equals(currentHashForThisLibrary)) {
+			String currentHashForThisLibrary =
+					getReuseElementHashForLibrary(originElementInLib, sourceLibrary);
+			// If hashes are valid but different, the origin was updated.
+			if(!storedHashForThisLibrary.isEmpty() && !currentHashForThisLibrary.isEmpty()) {
+				if(!storedHashForThisLibrary.equals(currentHashForThisLibrary)) {
 					updatedOrigins.add(originElementInLib);
 				}
 			}
 		}
 		return updatedOrigins;
 	}
+
+	/**
+	 * Returns whether the given {@link EObject} exists and has also a valid context (top level
+	 * element).
+	 * 
+	 * @param element
+	 *            The targeted element.
+	 * @return True if the element exists within a context, otherwise False.
+	 */
+	public static boolean doesReuseElementExistWithContext(EObject element) {
+		IPersistencyService ps = IPersistencyService.getInstance();
+		ITopLevelElement context = ps.getTopLevelElementFor(element);
+		// Context is either null because element is null or because the context is actually
+		// missing. Therefore, checking for element == null is already included in context == null.
+		return context != null;
+	}
 }
diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/base/.ratings b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/base/.ratings
index b3f3a1694d6e5ae7cb895ac9185a532103244b4f..4c516a457060838c77cac4fd4603810155745ba2 100644
--- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/base/.ratings
+++ b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/base/.ratings
@@ -3,6 +3,6 @@ ConstraintViolationBase.java ec66973ab2183623f0cd4a85c59c886dddad6cf6 GREEN
 DialogMessage.java 8420640e999e4fb15fa644333e5d71e1d16c2559 GREEN
 ElementCompositorBase.java 7a445e5adde11878fe0515baca8b915287149b28 GREEN
 MultiViolationConstraintCheckerBase.java 30886a94c99cf8948f64401b1db821abe06e1e6c GREEN
-PrototypeProviderBase.java 4625d5ed40d3bcadfc6dda3ed4cc1f3873a23307 GREEN
+PrototypeProviderBase.java 7418c494275bf75318504de65e82035535b9e9d8 GREEN
 TransformationContextChainBase.java 1ef37880ab275778c563928e80ba378fec964cb6 GREEN
 TransformationProviderBase.java 9e91100cc1f2c8fbd8d41af55aedfea34e02ff71 GREEN
diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/base/PrototypeProviderBase.java b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/base/PrototypeProviderBase.java
index 4625d5ed40d3bcadfc6dda3ed4cc1f3873a23307..7418c494275bf75318504de65e82035535b9e9d8 100644
--- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/base/PrototypeProviderBase.java
+++ b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/base/PrototypeProviderBase.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.OptionalInt;
 
 import org.eclipse.emf.ecore.EObject;
 import org.fortiss.tooling.kernel.extension.IPrototypeProvider;
@@ -65,9 +66,13 @@ public abstract class PrototypeProviderBase implements IPrototypeProvider {
 
 	/** Registers the given {@link EObject} with the given name and category. */
 	protected final void registerPrototype(String name, EObject prototype, String categoryName) {
-		Prototype prototypeObject = new Prototype(name, prototype, false);
-		prototypes.add(prototypeObject);
-		registerElementInCategory(prototypeObject, categoryName);
+		registerPrototype(name, prototype, categoryName, false, OptionalInt.empty());
+	}
+
+	/** Registers the given {@link EObject} with the given name, category, and priority. */
+	protected final void registerPrototype(String name, EObject prototype, String categoryName,
+			int priority) {
+		registerPrototype(name, prototype, categoryName, false, OptionalInt.of(priority));
 	}
 
 	/**
@@ -76,7 +81,27 @@ public abstract class PrototypeProviderBase implements IPrototypeProvider {
 	 */
 	protected final void registerPrimaryPrototype(String name, EObject prototype,
 			String categoryName) {
-		Prototype prototypeObject = new Prototype(name, prototype, true);
+		registerPrototype(name, prototype, categoryName, true, OptionalInt.empty());
+	}
+
+	/**
+	 * Registers the given {@link EObject} with the given name and priority as primary prototype
+	 * with the given category.
+	 */
+	protected final void registerPrimaryPrototype(String name, EObject prototype,
+			String categoryName, int priority) {
+		registerPrototype(name, prototype, categoryName, true, OptionalInt.of(priority));
+	}
+
+	/** Base method that actually performs the registration of prototypes. */
+	private final void registerPrototype(String name, EObject prototype, String categoryName,
+			boolean primary, OptionalInt priority) {
+		Prototype prototypeObject;
+		if(priority.isPresent()) {
+			prototypeObject = new Prototype(name, prototype, primary, priority.getAsInt());
+		} else {
+			prototypeObject = new Prototype(name, prototype, primary);
+		}
 		prototypes.add(prototypeObject);
 		registerElementInCategory(prototypeObject, categoryName);
 	}
diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/data/.ratings b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/data/.ratings
index 767ea0d3844cf1d402af91edace47cdb84a79b5d..d4ee8f44ffc955a01def9b5a7917ee4502ad6103 100644
--- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/data/.ratings
+++ b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/data/.ratings
@@ -7,7 +7,7 @@ ITransformationContext.java f00a0ab19a410c3ae2fc6256483aeb4207a86395 GREEN
 LogMessage.java 14204ed9d51b356f50be52362247cfbbe0cbd5c7 GREEN
 ModelElementTransformationContext.java 5a41bd3a75ce434c3174d50d2fdfab28b66f09f2 GREEN
 ModelStorageError.java 2aef480044047e960e64811111a7f27310011cc2 GREEN
-Prototype.java 5b91ecc45950569a19371470d0e3ae44cca86cf3 GREEN
+Prototype.java f4b13f86b7511edacc138053ffb80cecbac70868 GREEN
 PrototypeCategory.java ca500b4816ed42b9536488669aeab89561d2f08c GREEN
 TransformationProviderChain.java 67ec6d0b4c23d295323572649606d79f3b897437 GREEN
 TutorialAtomicStep.java 09c0d6597d542b431b5bbdc790ee9e533d9f77fb GREEN
diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/data/Prototype.java b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/data/Prototype.java
index 5b91ecc45950569a19371470d0e3ae44cca86cf3..f4b13f86b7511edacc138053ffb80cecbac70868 100644
--- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/data/Prototype.java
+++ b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/extension/data/Prototype.java
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------+
-| Copyright 2011 fortiss GmbH                                              |
+| 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.         |
@@ -35,36 +35,53 @@ public class Prototype {
 	/** Flag for primary class prototypes. */
 	private final boolean isPrimary;
 
+	/** Stores the priority of the category. Is important for sorting: lower value = lower prio. */
+	private final int prototypePriority;
+
 	/** Constructor. */
 	public Prototype(String name, EObject prototype, boolean isPrimary) {
 		this.name = name;
 		this.prototype = prototype;
 		this.isPrimary = isPrimary;
+		this.prototypePriority = 0;
+	}
+
+	/** Constructor with priority. */
+	public Prototype(String name, EObject prototype, boolean isPrimary, int priority) {
+		this.name = name;
+		this.prototype = prototype;
+		this.isPrimary = isPrimary;
+		this.prototypePriority = priority;
 	}
 
 	/** Returns the {@link Prototype}'s name. */
 	public String getName() {
-		return name;
+		return this.name;
 	}
 
 	/** Returns the {@link Prototype} instance (NOT a copy!). */
 	public EObject getPrototype() {
-		return prototype;
+		return this.prototype;
 	}
 
 	/** Returns a copy of the {@link Prototype}. This method is potentially expensive. */
 	public EObject getPrototypeCopy() {
-		return copy(prototype);
+		return copy(this.prototype);
+	}
+
+	/** Returns the priority of the prototype. */
+	public int getPriority() {
+		return this.prototypePriority;
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public String toString() {
-		return "Prototype for: " + name;
+		return "Prototype for: " + this.name;
 	}
 
 	/** Returns whether this {@link Prototype} is a primary one or not. */
 	public boolean isPrimary() {
-		return isPrimary;
+		return this.isPrimary;
 	}
 }
diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/.ratings b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/.ratings
index 1909826b62851eefe523cae3710501c02a39b8fa..f96feef16f57e0193a0c6c6a76223b4e1a5c5126 100644
--- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/.ratings
+++ b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/.ratings
@@ -1,7 +1,7 @@
 CommandLineInterfaceService.java 6b5c94c52702f773c60b181eff52204ab379b248 GREEN
 CommandStackService.java 957bda69b5feb91f002aed4d25ed334e92801e7e GREEN
 ConnectionCompositorService.java 5a52f8a3e88c167ae6909c3d9eb3fb4706177e8b GREEN
-ConstraintCheckerService.java abd4667ceef11c47235e20a6566d8943f3417cf3 GREEN
+ConstraintCheckerService.java df7b4e8c99e8895e14ff45a96cc85ef8403a8658 GREEN
 DummyTopLevelElement.java 21807bbdafec2e0ef28f0ee9090218f90bd73aee GREEN
 ElementCompositorService.java b1924b5b349118a70149cfac5b48544897d26e9e GREEN
 LoggingService.java da784259f7b456b54bf75c41ec268f64919ce78d GREEN
diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/ConstraintCheckerService.java b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/ConstraintCheckerService.java
index abd4667ceef11c47235e20a6566d8943f3417cf3..df7b4e8c99e8895e14ff45a96cc85ef8403a8658 100644
--- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/ConstraintCheckerService.java
+++ b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/ConstraintCheckerService.java
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------+
-| Copyright 2011 fortiss GmbH                                              |
+| 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.         |
@@ -17,6 +17,7 @@ package org.fortiss.tooling.kernel.internal;
 
 import static java.util.Collections.emptyList;
 import static java.util.Collections.unmodifiableMap;
+import static org.fortiss.tooling.kernel.utils.EcoreUtils.getFirstParentWithType;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -60,6 +61,13 @@ public class ConstraintCheckerService extends EObjectAwareServiceBase<IConstrain
 	/** The constraint checker handler attribute name. */
 	private static final String HANDLER_CLASS_ATTRIBUTE_NAME = "checker";
 
+	/**
+	 * A list of all the classes whose elements are excluded from constraint checks. This exclusion
+	 * also applies to all of their children, i.e., if an element has a parent whose class is stored
+	 * in this list, it will also be excluded from all constraint checks.
+	 */
+	private static List<Class<? extends EObject>> constraintCheckExclusionTypes = new ArrayList<>();
+
 	/** {@inheritDoc} */
 	@Override
 	public void startService() {
@@ -73,6 +81,12 @@ public class ConstraintCheckerService extends EObjectAwareServiceBase<IConstrain
 		addHandler(modelElementClass, checker);
 	}
 
+	/** {@inheritDoc} */
+	@Override
+	public void registerTypeAsExcludedParentForConstraintChecks(Class<? extends EObject> clazz) {
+		constraintCheckExclusionTypes.add(clazz);
+	}
+
 	/** {@inheritDoc} */
 	@Override
 	public String getIntrospectionDescription() {
@@ -109,12 +123,23 @@ public class ConstraintCheckerService extends EObjectAwareServiceBase<IConstrain
 	}
 
 	/**
-	 * Performs all constraint checks on the given model element. Violations are
-	 * added to the given list. Constraint checks on content elements are not
-	 * considered.
+	 * Performs all constraint checks on the given model element if itself or its parents are not
+	 * excluded from such checks. Violations are added to the given list. Constraint checks on
+	 * content elements are not considered.
 	 */
 	private void performConstraintCheck(EObject modelElement,
 			List<IConstraintViolation<? extends EObject>> violationList) {
+
+		// Skip constraint checks if the given element itself is excluded from checks or if it
+		// exists within an excluded element.
+		for(Class<? extends EObject> excludedClass : constraintCheckExclusionTypes) {
+			Object foundExcludedParent = getFirstParentWithType(modelElement, excludedClass);
+			Class<?> givenClass = modelElement.getClass();
+			if(givenClass.isAssignableFrom(excludedClass) || foundExcludedParent != null) {
+				return;
+			}
+		}
+
 		List<IConstraintChecker<EObject>> handlers = getRegisteredHandlers(modelElement.getClass());
 		if(handlers == null) {
 			return;
diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/service/.ratings b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/service/.ratings
index 7b59a6c1817ab30aaab2e5b51622a26e3736a3bd..3697f4effdd95c8570df4d662566f770759e3143 100644
--- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/service/.ratings
+++ b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/service/.ratings
@@ -1,7 +1,7 @@
 ICommandLineInterfaceService.java c3e3ba08b2a1b8125b43abd1c29b7dc0a0be2b80 GREEN
 ICommandStackService.java 678dcd1a6ab435ed0870fa2a9ec48ce47f25a187 GREEN
 IConnectionCompositorService.java 0cdf4568b2cd3e95ea195df90a84699eff36442b GREEN
-IConstraintCheckerService.java 291e53297aaea213e07e78f63350938ee2c7b155 GREEN
+IConstraintCheckerService.java dc04965ac0265f77cb846f472d76620fb05a491a GREEN
 IEclipseResourceStorageService.java b1155ca15cd9474d4d533d6cb2725e8a22040ec9 GREEN
 IElementCompositorService.java acd462ec15f3bcc247b544b46ceebee971fe1408 GREEN
 IKernelIntrospectionSystemService.java 7005c3acb4c6f978729d93279c595765e94e38eb GREEN
diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/service/IConstraintCheckerService.java b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/service/IConstraintCheckerService.java
index 291e53297aaea213e07e78f63350938ee2c7b155..dc04965ac0265f77cb846f472d76620fb05a491a 100644
--- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/service/IConstraintCheckerService.java
+++ b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/service/IConstraintCheckerService.java
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------+
-| Copyright 2011 fortiss GmbH                                              |
+| 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.         |
@@ -63,4 +63,11 @@ public interface IConstraintCheckerService {
 
 	/** Registers the given checker with the service. */
 	void registerConstraintChecker(IConstraintChecker<EObject> checker, Class<?> modelElementClass);
+
+	/**
+	 * Registers the given {@link Class} as an exclusion for all constraint checks, i.e., for all
+	 * elements of this {@link Class} and for all children of such elements the existing constraint
+	 * checks will be skipped.
+	 */
+	void registerTypeAsExcludedParentForConstraintChecks(Class<? extends EObject> clazz);
 }