diff --git a/plugins/codegen/org.eclipse.papyrus.robotics.codegen.common/src/org/eclipse/papyrus/robotics/codegen/common/utils/Helpers.java b/plugins/codegen/org.eclipse.papyrus.robotics.codegen.common/src/org/eclipse/papyrus/robotics/codegen/common/utils/Helpers.java
index b8ffd44..e2c1493 100644
--- a/plugins/codegen/org.eclipse.papyrus.robotics.codegen.common/src/org/eclipse/papyrus/robotics/codegen/common/utils/Helpers.java
+++ b/plugins/codegen/org.eclipse.papyrus.robotics.codegen.common/src/org/eclipse/papyrus/robotics/codegen/common/utils/Helpers.java
@@ -20,7 +20,6 @@
 import org.eclipse.papyrus.designer.languages.cpp.profile.C_Cpp.External;
 import org.eclipse.papyrus.designer.languages.cpp.profile.C_Cpp.Ptr;
 import org.eclipse.papyrus.designer.transformation.core.transformations.TransformationContext;
-import org.eclipse.papyrus.uml.tools.utils.PackageUtil;
 import org.eclipse.papyrus.uml.tools.utils.StereotypeUtil;
 import org.eclipse.uml2.uml.Element;
 import org.eclipse.uml2.uml.NamedElement;
@@ -55,11 +54,7 @@
 	 * @return the element, if found, null otherwise
 	 */
 	public static Type getTypeFromRS(Element element, URI resourceURI, String qualifiedName, boolean needCopy) {
-		NamedElement ne = ElementUtils.getQualifiedElementFromRS(element, qualifiedName);
-		if (ne == null) {
-			PackageUtil.loadPackage(resourceURI, element.eResource().getResourceSet());
-			ne = ElementUtils.getQualifiedElementFromRS(element, qualifiedName);
-		}
+		NamedElement ne = ElementUtils.getQualifiedElementFromRS(element, resourceURI, qualifiedName);
 		if (needCopy) {
 			// return a copy using the current copier (avoid referencing copy and original URI)
 			ne = TransformationContext.current.copier.getCopy(ne);
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/provider/RoboticsContentProvider.java b/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/provider/RoboticsContentProvider.java
index 3b3de82..8d340e7 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/provider/RoboticsContentProvider.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/provider/RoboticsContentProvider.java
@@ -207,8 +207,10 @@
 			if (uri.segmentCount() > 0 && uri.segment(0).length() > 0) {
 				// URI of model
 				Resource r = tempRS.getResource(uri, true);
-				Package subRoot = (Package) r.getContents().get(0);
-				return getChildren(subRoot);
+				if (r != null && r.getContents().size() > 0) {
+					Package subRoot = (Package) r.getContents().get(0);
+					return getChildren(subRoot);
+				}
 			} else {
 				// URI of plugin or pathmap
 				return ScanUtils.modelsFromPath(uri, extension).toArray();
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.library/src/org/eclipse/papyrus/robotics/library/advice/AdviceUtil.java b/plugins/customization/org.eclipse.papyrus.robotics.library/src/org/eclipse/papyrus/robotics/library/advice/AdviceUtil.java
index f10c22a..1badeb5 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.library/src/org/eclipse/papyrus/robotics/library/advice/AdviceUtil.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.library/src/org/eclipse/papyrus/robotics/library/advice/AdviceUtil.java
@@ -19,7 +19,6 @@
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.papyrus.designer.languages.common.base.ElementUtils;
 import org.eclipse.papyrus.robotics.library.util.RoboticsLibResource;
-import org.eclipse.papyrus.uml.tools.utils.PackageUtil;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.uml2.uml.Classifier;
 import org.eclipse.uml2.uml.Element;
@@ -38,19 +37,14 @@
 	public static Classifier getPattern(Element anElement, String patternQN) {
 		Classifier pattern = getPatternWoMessage(anElement, patternQN);
 		if (pattern == null) {
-			PackageUtil.loadPackage(RoboticsLibResource.ROBOTICS_LIB_URI, anElement.eResource().getResourceSet());
-			pattern = getPatternWoMessage(anElement, patternQN);
-			if (pattern == null) {
-				Display.getDefault().syncExec(new Runnable() {
-
-					@Override
-					public void run() {
-						MessageDialog.openWarning(Display.getCurrent().getActiveShell(),
-								"Can not find communication pattern",
-								String.format("Cannot find communication pattern %s.", patternQN));
-					}
-				});
-			}
+			Display.getDefault().syncExec(new Runnable() {
+				@Override
+				public void run() {
+					MessageDialog.openWarning(Display.getCurrent().getActiveShell(),
+							"Can not find communication pattern",
+							String.format("Cannot find communication pattern %s.", patternQN));
+				}
+			});
 		}
 		return pattern;
 	}
@@ -65,7 +59,7 @@
 	 * @return the communication, if found, null otherwise
 	 */
 	public static Classifier getPatternWoMessage(Element anElement, String patternQN) {
-		NamedElement pattern = ElementUtils.getQualifiedElementFromRS(anElement, patternQN);
+		NamedElement pattern = ElementUtils.getQualifiedElementFromRS(anElement, RoboticsLibResource.ROBOTICS_LIB_URI, patternQN);
 		if (pattern instanceof Classifier) {
 			return (Classifier) pattern;
 		}
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.cdteditor/META-INF/MANIFEST.MF b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.cdteditor/META-INF/MANIFEST.MF
index 854900a..98b79ab 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.cdteditor/META-INF/MANIFEST.MF
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.cdteditor/META-INF/MANIFEST.MF
@@ -9,7 +9,6 @@
  org.eclipse.papyrus.infra.core.log;bundle-version="[1.2.0,3.0.0)",
  org.eclipse.papyrus.designer.languages.cpp.profile;bundle-version="1.1.0",
  org.eclipse.papyrus.uml.tools;bundle-version="[4.3.0,6.0.0)",
- org.eclipse.papyrus.designer.languages.common.texteditor.model;bundle-version="1.1.0",
  org.eclipse.papyrus.uml.tools.utils;bundle-version="[3.4.0,5.0.0)",
  org.eclipse.papyrus.uml.diagram.common;bundle-version="[3.4.0,5.0.0)",
  org.eclipse.papyrus.designer.languages.common.extensionpoints;bundle-version="1.1.0",
@@ -28,7 +27,6 @@
  org.eclipse.papyrus.robotics.ros2.reverse;bundle-version="0.7.0",
  org.eclipse.papyrus.robotics.core;bundle-version="0.7.0",
  org.eclipse.papyrus.robotics.codegen.common;bundle-version="0.8.0",
- org.eclipse.emf.transaction;bundle-version="1.9.0",
  org.eclipse.emf.workspace;bundle-version="1.5.0",
  org.eclipse.papyrus.infra.core;bundle-version="[3.1.0,5.0.0)",
  org.eclipse.papyrus.infra.emf.gmf;bundle-version="[1.3.0,3.0.0)",
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/utils/TransformationUtils.java b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/utils/TransformationUtils.java
index 26f210f..0e8c2bc 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/utils/TransformationUtils.java
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/utils/TransformationUtils.java
@@ -16,12 +16,9 @@
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.emf.transaction.TransactionalEditingDomain;
-import org.eclipse.emf.transaction.util.TransactionUtil;
 import org.eclipse.papyrus.designer.languages.common.base.ElementUtils;
 import org.eclipse.papyrus.designer.transformation.core.transformations.ExecuteTransformationChain;
 import org.eclipse.papyrus.designer.transformation.profile.Transformation.M2MTrafoChain;
-import org.eclipse.papyrus.uml.tools.utils.PackageUtil;
 import org.eclipse.uml2.uml.Element;
 import org.eclipse.uml2.uml.NamedElement;
 import org.eclipse.uml2.uml.Package;
@@ -55,13 +52,7 @@
 	 * @return the ROS2 transformation chain
 	 */
 	public static M2MTrafoChain getChain(Element element) {
-		TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(element);
-
-		NamedElement rosChainCl = ElementUtils.getQualifiedElementFromRS(element, ROS2_TRANSFORMATION_CHAIN);
-		if (rosChainCl == null) {
-			PackageUtil.loadPackage(RosHelpers.ROS_LIBRARY_URI, domain.getResourceSet());
-			rosChainCl = ElementUtils.getQualifiedElementFromRS(element, ROS2_TRANSFORMATION_CHAIN);
-		}
+		NamedElement rosChainCl = ElementUtils.getQualifiedElementFromRS(element, RosHelpers.ROS_LIBRARY_URI, ROS2_TRANSFORMATION_CHAIN);
 		if (rosChainCl != null) {
 			return UMLUtil.getStereotypeApplication(rosChainCl, M2MTrafoChain.class);
 		}
