diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/pom.xml b/components/basys.components/basyx.components.docker/basyx.components.AASServer/pom.xml
index d73f236..dd9650c 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/pom.xml
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/pom.xml
@@ -5,7 +5,7 @@
   <parent>
     <groupId>org.eclipse.basyx</groupId>
     <artifactId>basyx.components.docker</artifactId>
-    <version>1.0.0</version>
+    <version>1.0.1</version>
   </parent>
   
   <artifactId>basyx.components.AASServer</artifactId>
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/mongodb/MongoDBAASAggregator.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/mongodb/MongoDBAASAggregator.java
index 4d3ead9..e4205a0 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/mongodb/MongoDBAASAggregator.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/mongodb/MongoDBAASAggregator.java
@@ -218,7 +218,7 @@
 	}
 
 	private void addSubmodelProvidersById(String smId, MultiSubmodelProvider provider) {
-		ISubmodelAPI smApi = new MongoDBSubmodelAPI(smId);
+		ISubmodelAPI smApi = new MongoDBSubmodelAPI(config, smId);
 		SubmodelProvider smProvider = new SubmodelProvider(smApi);
 		provider.addSubmodel(smProvider);
 	}
@@ -264,7 +264,7 @@
 
 	@Override
 	public void deleteAAS(IIdentifier aasId) {
-		Query hasId = query(where(IDPATH).is(aasId));
+		Query hasId = query(where(IDPATH).is(aasId.getId()));
 		mongoOps.remove(hasId, aasCollection);
 		aasProviderMap.remove(aasId.getId());
 	}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBAggregator.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBAggregator.java
index 0295aa6..39d320d 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBAggregator.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBAggregator.java
@@ -9,10 +9,22 @@
  ******************************************************************************/
 package org.eclipse.basyx.regression.AASServer;
 
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
 import org.eclipse.basyx.aas.aggregator.api.IAASAggregator;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
 import org.eclipse.basyx.components.aas.mongodb.MongoDBAASAggregator;
 import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
+import org.eclipse.basyx.components.configuration.BaSyxMongoDBConfiguration;
 import org.eclipse.basyx.testsuite.regression.aas.aggregator.AASAggregatorSuite;
+import org.junit.Test;
+import org.springframework.data.mongodb.core.MongoTemplate;
+
+import com.mongodb.client.MongoClient;
+import com.mongodb.client.MongoClients;
+
 
 public class TestMongoDBAggregator extends AASAggregatorSuite {
 
@@ -23,4 +35,43 @@
 
 		return aggregator;
 	}
+
+	@Test
+	public void testDeleteReachesDatabase() {
+		final BaSyxMongoDBConfiguration config = new BaSyxMongoDBConfiguration();
+		config.loadFromResource(BaSyxMongoDBConfiguration.DEFAULT_CONFIG_PATH);
+		final MongoClient client = MongoClients.create(config.getConnectionUrl());
+		final MongoTemplate mongoOps = new MongoTemplate(client, config.getDatabase());
+		final String aasCollection = config.getAASCollection();
+		final IAASAggregator aggregator = getAggregator();
+
+		// initial state: no data in the database
+		{
+			final List<AssetAdministrationShell> data = mongoOps.findAll(AssetAdministrationShell.class, aasCollection);
+			assertEquals(0, data.size());
+		}
+
+		// if we add one AAS
+		{
+			aggregator.createAAS(aas1);
+		}
+
+		// there should be that single AAS in the database
+		{
+			final List<AssetAdministrationShell> data = mongoOps.findAll(AssetAdministrationShell.class, aasCollection);
+			assertEquals(1, data.size());
+			assertEquals(aas1.getIdentification(), data.get(0).getIdentification());
+		}
+
+		// if we delete that AAS
+		{
+			aggregator.deleteAAS(aas1.getIdentification());
+		}
+
+		// there should be no AAS in the database
+		{
+			final List<AssetAdministrationShell> data = mongoOps.findAll(AssetAdministrationShell.class, aasCollection);
+			assertEquals(0, data.size());
+		}
+	}
 }
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBServer.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBServer.java
index c014157..8e2afeb 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBServer.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBServer.java
@@ -12,9 +12,11 @@
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
+import java.util.Map;
 
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
 import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 import org.eclipse.basyx.components.aas.AASServerComponent;
 import org.eclipse.basyx.components.aas.configuration.AASServerBackend;
@@ -24,9 +26,11 @@
 import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
 import org.eclipse.basyx.components.configuration.BaSyxMongoDBConfiguration;
 import org.eclipse.basyx.submodel.metamodel.api.ISubmodel;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
 import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
 import org.eclipse.basyx.submodel.metamodel.map.Submodel;
 import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -40,8 +44,12 @@
  */
 public class TestMongoDBServer extends AASServerSuite {
 
+	private static final Identifier SM_IDENTIFICATION = new Identifier(IdentifierType.CUSTOM, "MongoDBId");
+	private static final String SM_IDSHORT = "MongoDB";
 	private static AASServerComponent component;
 	private static BaSyxMongoDBConfiguration mongoDBConfig;
+	private static BaSyxContextConfiguration contextConfig;
+	private static BaSyxAASServerConfiguration aasConfig;
 
 	@Override
 	protected String getURL() {
@@ -50,30 +58,66 @@
 
 	@BeforeClass
 	public static void setUpClass() throws ParserConfigurationException, SAXException, IOException {
-		// just reset the data with this default db configuration
-		new MongoDBAASAggregator(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH).reset();
-
-		// Setup component configuration
-		BaSyxContextConfiguration contextConfig = new BaSyxContextConfiguration();
-		contextConfig.loadFromResource(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH);
-		mongoDBConfig = new BaSyxMongoDBConfiguration();
-		BaSyxAASServerConfiguration aasConfig = new BaSyxAASServerConfiguration(AASServerBackend.MONGODB, "");
-
-		// Start component
+		initConfiguration();
+		resetMongoDBTestData();
 		component = new AASServerComponent(contextConfig, aasConfig, mongoDBConfig);
 		component.startComponent();
 	}
 
+	private static void resetMongoDBTestData() {
+		new MongoDBAASAggregator(mongoDBConfig).reset();
+	}
+
+	private static void initConfiguration() {
+		mongoDBConfig = new BaSyxMongoDBConfiguration();
+		mongoDBConfig.setAASCollection("basyxTestAAS");
+		mongoDBConfig.setSubmodelCollection("basyxTestSM");
+		contextConfig = new BaSyxContextConfiguration();
+		contextConfig.loadFromResource(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH);
+		aasConfig = new BaSyxAASServerConfiguration(AASServerBackend.MONGODB, "");
+	}
+
 	@Test
 	public void testAddSubmodelPersistency() throws Exception {
-		testAddAAS();
+		createAssetAdministrationShell();
+		createSubmodel();
 
-		Submodel sm = new Submodel("MongoDB", new Identifier(IdentifierType.CUSTOM, "MongoDBId"));
-		manager.createSubmodel(new ModelUrn(aasId), sm);
-
-		MongoDBSubmodelAPI api = new MongoDBSubmodelAPI(mongoDBConfig, sm.getIdentification().getId());
+		MongoDBSubmodelAPI api = new MongoDBSubmodelAPI(mongoDBConfig, SM_IDENTIFICATION.getId());
 		ISubmodel persistentSM = api.getSubmodel();
-		assertEquals("MongoDB", persistentSM.getIdShort());
+
+		assertEquals(SM_IDSHORT, persistentSM.getIdShort());
+	}
+
+	@Test
+	public void testAggregatorPersistency() throws Exception {
+		createAssetAdministrationShell();
+		createSubmodel();
+
+		MongoDBAASAggregator aggregator = new MongoDBAASAggregator(mongoDBConfig);
+		ISubmodel persistentSM = getSubmodelFromAggregator(aggregator);
+
+		assertEquals(SM_IDSHORT, persistentSM.getIdShort());
+	}
+
+	@SuppressWarnings("unchecked")
+	private ISubmodel getSubmodelFromAggregator(MongoDBAASAggregator aggregator) {
+		IModelProvider aasProvider = aggregator.getAASProvider(new ModelUrn(aasId));
+		Object smObject = aasProvider.getValue("/aas/submodels/MongoDB/submodel");
+		ISubmodel persistentSM = Submodel.createAsFacade((Map<String, Object>) smObject);
+		return persistentSM;
+	}
+
+	private void createSubmodel() {
+		Submodel sm = new Submodel(SM_IDSHORT, SM_IDENTIFICATION);
+		manager.createSubmodel(new ModelUrn(aasId), sm);
+	}
+
+	private void createAssetAdministrationShell() {
+		AssetAdministrationShell shell = new AssetAdministrationShell();
+		IIdentifier identifier = new ModelUrn(aasId);
+		shell.setIdentification(identifier);
+		shell.setIdShort("aasIdShort");
+		manager.createAAS(shell, getURL());
 	}
 
 	@AfterClass
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBSubmodelProvider.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBSubmodelProvider.java
index 6004fd0..8691ab2 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBSubmodelProvider.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBSubmodelProvider.java
@@ -17,7 +17,10 @@
 import org.eclipse.basyx.components.aas.mongodb.MongoDBAASAggregator;
 import org.eclipse.basyx.components.aas.mongodb.MongoDBSubmodelAPI;
 import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.Operation;
+import org.eclipse.basyx.submodel.restapi.MultiSubmodelElementProvider;
 import org.eclipse.basyx.submodel.restapi.SubmodelProvider;
+import org.eclipse.basyx.testsuite.regression.submodel.restapi.SimpleAASSubmodel;
 import org.eclipse.basyx.testsuite.regression.submodel.restapi.SubmodelProviderTest;
 import org.eclipse.basyx.testsuite.regression.vab.protocol.http.TestsuiteDirectory;
 import org.eclipse.basyx.vab.manager.VABConnectionManager;
@@ -55,6 +58,25 @@
 	}
 
 	/**
+	 * Invoking operations are not supported
+	 */
+	@Override
+	@Test
+	public void testOperationIdShortsWithKeywords() {
+		final String base_path = SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/keywords/";
+		VABElementProxy submodelElement = getConnectionManager().connectToVABElement(submodelAddr);
+		for (String keyword : SimpleAASSubmodel.KEYWORDS) {
+			Operation op = new Operation();
+			op.setIdShort(keyword + "Operation");
+
+			String path = base_path + op.getIdShort();
+			submodelElement.setValue(path, op);
+			submodelElement.getValue(path);
+			submodelElement.deleteValue(path);
+		}
+	}
+
+	/**
 	 * Operations are not supported
 	 */
 	@Override
@@ -97,18 +119,20 @@
 	/**
 	 * Now 4 instead of 8 elements
 	 */
+	@Override
 	@SuppressWarnings("unchecked")
 	@Test
 	public void testReadSubmodelElements() {
 		VABElementProxy submodel = getConnectionManager().connectToVABElement(submodelAddr);
 		Collection<Map<String, Object>> set = (Collection<Map<String, Object>>) submodel
 				.getValue("/submodel/submodelElements");
-		assertEquals(4, set.size());
+		assertEquals(5, set.size());
 	}
 
 	/**
 	 * Operations are not supported
 	 */
+	@Override
 	@Test
 	public void testReadSingleOperation() {
 	}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/resources/.env b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/resources/.env
index dc2072c..1752555 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/resources/.env
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/resources/.env
@@ -28,7 +28,7 @@
 # ##################
 # The image tag of the image that is build for this component
 
-BASYX_IMAGE_TAG=1.0.0
+BASYX_IMAGE_TAG=1.0.1
 
 # ##################
 # Container Name
diff --git a/components/basys.components/basyx.components.docker/basyx.components.registry/pom.xml b/components/basys.components/basyx.components.docker/basyx.components.registry/pom.xml
index 0185e3f..687b470 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.registry/pom.xml
+++ b/components/basys.components/basyx.components.docker/basyx.components.registry/pom.xml
@@ -6,12 +6,12 @@
 	<parent>
 		<groupId>org.eclipse.basyx</groupId>
 		<artifactId>basyx.components.docker</artifactId>
-		<version>1.0.0</version>
+		<version>1.0.1</version>
     </parent>
 	
 	<artifactId>basyx.components.registry</artifactId>
 	<name>BaSyx Registry</name>
-	<version>1.0.2</version>
+	<version>1.0.3</version>
 	
 	<properties>
 		<basyx.components.executable>org.eclipse.basyx.components.registry.executable.RegistryExecutable</basyx.components.executable>
diff --git a/components/basys.components/basyx.components.docker/basyx.components.registry/src/test/resources/.env b/components/basys.components/basyx.components.docker/basyx.components.registry/src/test/resources/.env
index 36083e8..35ce24f 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.registry/src/test/resources/.env
+++ b/components/basys.components/basyx.components.docker/basyx.components.registry/src/test/resources/.env
@@ -28,7 +28,7 @@
 # ##################
 # The image tag of the image that is build for this component
 
-BASYX_IMAGE_TAG=1.0.2
+BASYX_IMAGE_TAG=1.0.3
 
 # ##################
 # Container Name
diff --git a/components/basys.components/basyx.components.docker/pom.xml b/components/basys.components/basyx.components.docker/pom.xml
index 6afe083..afee13e 100644
--- a/components/basys.components/basyx.components.docker/pom.xml
+++ b/components/basys.components/basyx.components.docker/pom.xml
@@ -5,7 +5,7 @@
 	<parent>
 		<groupId>org.eclipse.basyx</groupId>
 		<artifactId>basyx.components</artifactId>
-		<version>1.0.0</version>
+		<version>1.0.1</version>
     </parent>
 	
 	<artifactId>basyx.components.docker</artifactId>
@@ -178,7 +178,7 @@
 		<dependency>
 			<groupId>org.eclipse.basyx</groupId>
 			<artifactId>basyx.components.lib</artifactId>
-			<version>1.0.0</version>
+			<version>1.0.1</version>
 		</dependency>
 	</dependencies>
 </project>
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.lib/pom.xml b/components/basys.components/basyx.components.lib/pom.xml
index 1cf5fe2..7d17605 100644
--- a/components/basys.components/basyx.components.lib/pom.xml
+++ b/components/basys.components/basyx.components.lib/pom.xml
@@ -5,7 +5,7 @@
 	<parent>
 		<groupId>org.eclipse.basyx</groupId>
 		<artifactId>basyx.components</artifactId>
-		<version>1.0.0</version>
+		<version>1.0.1</version>
     </parent>
 	
 	<artifactId>basyx.components.lib</artifactId>
@@ -35,13 +35,13 @@
 		<dependency>
   			<groupId>org.camunda.bpm</groupId>
   			<artifactId>camunda-engine</artifactId>
-  			<version>7.12.0</version>
+  			<version>7.15.0</version>
 		</dependency>
 		
 		<dependency>
       		<groupId>org.camunda.bpm.model</groupId>
       		<artifactId>camunda-bpmn-model</artifactId>
-      		<version>7.12.0</version>
+      		<version>7.15.0</version>
     	</dependency>
 		<!-- Handles resources & files -->
 		<dependency>
diff --git a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/xml/XMLAASBundleFactory.java b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/xml/XMLAASBundleFactory.java
index 751dea4..b59e46f 100644
--- a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/xml/XMLAASBundleFactory.java
+++ b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/xml/XMLAASBundleFactory.java
@@ -85,7 +85,13 @@
 				IAsset asset = getByReference(assetRef, assets);
 				((AssetAdministrationShell) shell).setAsset((Asset) asset);
 			} catch (ResourceNotFoundException e) {
-				logger.warn("Can't find asset with id " + shell.getAssetReference().getKeys().get(0).getValue() + " for AAS " + shell.getIdShort() + "; If the asset is not provided in another way, this is an error!");
+				// Enables parsing external aasx-files without any keys in assetref
+				if (shell.getAssetReference().getKeys().size() > 0) {
+					logger.warn("Can't find asset with id " + shell.getAssetReference().getKeys().get(0).getValue() + " for AAS " + shell.getIdShort() + "; If the asset is not provided in another way, this is an error!");
+				}
+				else {
+					logger.warn("Can't find asset for AAS " + shell.getIdShort() + "; If the asset is not provided in another way, this is an error!");	
+				}
 			}
 
 			// Retrieve submodels
diff --git a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/support/bundle/AASBundleHelper.java b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/support/bundle/AASBundleHelper.java
index f7a48fa..37e1fd7 100644
--- a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/support/bundle/AASBundleHelper.java
+++ b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/support/bundle/AASBundleHelper.java
@@ -17,6 +17,7 @@
 import org.eclipse.basyx.aas.registration.api.IAASRegistry;
 import org.eclipse.basyx.submodel.metamodel.api.ISubmodel;
 import org.eclipse.basyx.submodel.metamodel.map.Submodel;
+import org.eclipse.basyx.submodel.restapi.SubmodelProvider;
 import org.eclipse.basyx.vab.exception.provider.ProviderException;
 import org.eclipse.basyx.vab.exception.provider.ResourceNotFoundException;
 import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
@@ -74,7 +75,7 @@
 			IModelProvider provider = aggregator.getAASProvider(aas.getIdentification());
 			for (ISubmodel sm : bundle.getSubmodels()) {
 				try {
-					provider.getValue("/aas/submodels/" + sm.getIdShort());
+					provider.getValue("/aas/submodels/" + sm.getIdShort() + "/" + SubmodelProvider.SUBMODEL);
 					// If no ResourceNotFoundException occurs, SM exists on server
 					// -> no further action required
 				} catch (ResourceNotFoundException e) {
diff --git a/components/basys.components/basyx.components.lib/src/test/java/org/eclipse/basyx/regression/support/bundle/TestAASBundleHelper.java b/components/basys.components/basyx.components.lib/src/test/java/org/eclipse/basyx/regression/support/bundle/TestAASBundleHelper.java
index 8c28852..790494b 100644
--- a/components/basys.components/basyx.components.lib/src/test/java/org/eclipse/basyx/regression/support/bundle/TestAASBundleHelper.java
+++ b/components/basys.components/basyx.components.lib/src/test/java/org/eclipse/basyx/regression/support/bundle/TestAASBundleHelper.java
@@ -33,6 +33,7 @@
 import org.eclipse.basyx.submodel.metamodel.facade.SubmodelElementMapCollectionConverter;
 import org.eclipse.basyx.submodel.metamodel.map.Submodel;
 import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
+import org.eclipse.basyx.submodel.restapi.SubmodelProvider;
 import org.eclipse.basyx.support.bundle.AASBundle;
 import org.eclipse.basyx.support.bundle.AASBundleHelper;
 import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
@@ -145,7 +146,7 @@
 		IModelProvider provider = aggregator.getAASProvider(new Identifier(IdentifierType.CUSTOM, AAS_ID));
 		
 		Submodel sm = SubmodelElementMapCollectionConverter.mapToSM(
-				(Map<String, Object>) provider.getValue("/aas/submodels/" + SM_ID));
+				(Map<String, Object>) provider.getValue("/aas/submodels/" + SM_ID + "/" + SubmodelProvider.SUBMODEL));
 		
 		assertEquals(SM_ID, sm.getIdentification().getId());
 	}
diff --git a/components/basys.components/pom.xml b/components/basys.components/pom.xml
index 6bc6bf7..727e318 100644
--- a/components/basys.components/pom.xml
+++ b/components/basys.components/pom.xml
@@ -5,7 +5,7 @@
 	
 	<groupId>org.eclipse.basyx</groupId>
 	<artifactId>basyx.components</artifactId>
-	<version>1.0.0</version>
+	<version>1.0.1</version>
 	<name>BaSyx Components</name>
 
 	<packaging>pom</packaging>
@@ -121,14 +121,14 @@
 			<dependency>
 				<groupId>org.eclipse.basyx</groupId>
 				<artifactId>basyx.sdk</artifactId>
-				<version>1.0.0</version>
+				<version>1.0.1</version>
 			</dependency>
 		
 			<!-- BaSyx SDK tests -->
 			<dependency>
 				<groupId>org.eclipse.basyx</groupId>
 				<artifactId>basyx.sdk</artifactId>
-				<version>1.0.0</version>
+				<version>1.0.1</version>
 				<classifier>tests</classifier>
 				<scope>test</scope>
 			</dependency>
diff --git a/components/basyx.tck/basyx.tck.AASServer/pom.xml b/components/basyx.tck/basyx.tck.AASServer/pom.xml
index f4b0326..7f6cba4 100644
--- a/components/basyx.tck/basyx.tck.AASServer/pom.xml
+++ b/components/basyx.tck/basyx.tck.AASServer/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <groupId>org.eclipse.basyx</groupId>
     <artifactId>basyx.tck</artifactId>
-    <version>1.0.0</version>
+    <version>1.0.1</version>
   </parent>
   
   <artifactId>basyx.tck.AASServer</artifactId>
diff --git a/components/basyx.tck/basyx.tck.registry/pom.xml b/components/basyx.tck/basyx.tck.registry/pom.xml
index b609541..3100684 100644
--- a/components/basyx.tck/basyx.tck.registry/pom.xml
+++ b/components/basyx.tck/basyx.tck.registry/pom.xml
@@ -6,7 +6,7 @@
   <parent>
     <groupId>org.eclipse.basyx</groupId>
     <artifactId>basyx.tck</artifactId>
-    <version>1.0.0</version>
+    <version>1.0.1</version>
   </parent>
   
   <artifactId>basyx.tck.registry</artifactId>
diff --git a/components/basyx.tck/pom.xml b/components/basyx.tck/pom.xml
index 9abf62a..b82a154 100644
--- a/components/basyx.tck/pom.xml
+++ b/components/basyx.tck/pom.xml
@@ -2,7 +2,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.eclipse.basyx</groupId>
   <artifactId>basyx.tck</artifactId>
-  <version>1.0.0</version>
+  <version>1.0.1</version>
   
   
   <packaging>pom</packaging>
@@ -111,13 +111,13 @@
 			<dependency>
 				<groupId>org.eclipse.basyx</groupId>
 				<artifactId>basyx.sdk</artifactId>
-				<version>1.0.0</version>
+				<version>1.0.1</version>
 			</dependency>
 			<!-- BaSyx SDK tests -->
 			<dependency>
 				<groupId>org.eclipse.basyx</groupId>
 				<artifactId>basyx.sdk</artifactId>
-				<version>1.0.0</version>
+				<version>1.0.1</version>
 				<classifier>tests</classifier>
 				<scope>test</scope>
 			</dependency>
diff --git a/examples/basys.examples/pom.xml b/examples/basys.examples/pom.xml
index e47a66e..c7ffa79 100644
--- a/examples/basys.examples/pom.xml
+++ b/examples/basys.examples/pom.xml
@@ -2,7 +2,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.eclipse.basyx</groupId>
   <artifactId>basyx.examples</artifactId>
-  <version>1.0.0</version>
+  <version>1.0.1</version>
   <packaging>jar</packaging>
   <name>BaSyx Examples</name>
   
@@ -104,28 +104,28 @@
 		<dependency>
 			<groupId>org.eclipse.basyx</groupId>
 			<artifactId>basyx.components.lib</artifactId>
-			<version>1.0.0</version>
+			<version>1.0.1</version>
 		</dependency>
 		
 		<!-- Add explicit SQLRegistry dependency -->
 		<dependency>
 			<groupId>org.eclipse.basyx</groupId>
 			<artifactId>basyx.components.registry</artifactId>
-			<version>1.0.2</version>
+			<version>1.0.3</version>
 		</dependency>
 				
 		<!-- Add explicit AAS Server component dependency -->
 		<dependency>
 			<groupId>org.eclipse.basyx</groupId>
 			<artifactId>basyx.components.AASServer</artifactId>
-			<version>1.0.0</version>
+			<version>1.0.1</version>
 		</dependency>
 		
 		<!-- Adds additional classes of the BaSys SDK for tests -->
 		<dependency>
 			<groupId>org.eclipse.basyx</groupId>
 			<artifactId>basyx.sdk</artifactId>
-			<version>1.0.0</version>
+			<version>1.0.1</version>
 			<classifier>tests</classifier>
 			<scope>test</scope>
 		</dependency>
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/submodel/TestExecuteOperation.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/submodel/TestExecuteOperation.java
index e532841..b70fdb1 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/submodel/TestExecuteOperation.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/submodel/TestExecuteOperation.java
@@ -28,8 +28,9 @@
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.Operation;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.OperationVariable;
-import org.eclipse.basyx.vab.protocol.http.server.BaSyxHTTPServer;
+import org.eclipse.basyx.submodel.restapi.SubmodelProvider;
 import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
+import org.eclipse.basyx.vab.protocol.http.server.BaSyxHTTPServer;
 import org.junit.After;
 import org.junit.Test;
 
@@ -112,7 +113,7 @@
 		server.start();
 		
 		IIdentifier aasIdentifier = new Identifier(IdentifierType.CUSTOM, AAS_ID);
-		SubmodelDescriptor descriptor = new SubmodelDescriptor(submodel, "http://localhost:8082/submodel");
+		SubmodelDescriptor descriptor = new SubmodelDescriptor(submodel, "http://localhost:8082/submodel/" + SubmodelProvider.SUBMODEL);
 		
 		// Register the new Submodel
 		AASRegistryProxy registry = new AASRegistryProxy(registryComponent.getRegistryPath());
diff --git a/examples/basyx.aasWrapper/pom.xml b/examples/basyx.aasWrapper/pom.xml
index 599b939..ec8231c 100644
--- a/examples/basyx.aasWrapper/pom.xml
+++ b/examples/basyx.aasWrapper/pom.xml
@@ -5,7 +5,7 @@
 	<parent>
 		<groupId>org.eclipse.basyx</groupId>
 		<artifactId>basyx.components.docker</artifactId>
-		<version>1.0.0</version>
+		<version>1.0.1</version>
 	</parent>
 	
 	<artifactId>basyx.components.AASWrapper</artifactId>
diff --git a/examples/basyx.aasWrapper/src/test/resources/.env b/examples/basyx.aasWrapper/src/test/resources/.env
index 4ca39a7..da08260 100644
--- a/examples/basyx.aasWrapper/src/test/resources/.env
+++ b/examples/basyx.aasWrapper/src/test/resources/.env
@@ -21,14 +21,14 @@
 # ##################
 # The image of the image that is build for this component
 
-BASYX_IMAGE_NAME=basyx/aas-wrapper
+BASYX_IMAGE_NAME=eclipsebasyx/aas-wrapper
 
 # ##################
 # Image Tag
 # ##################
 # The image tag of the image that is build for this component
 
-BASYX_IMAGE_TAG=1.0.0
+BASYX_IMAGE_TAG=1.0.1
 
 # ##################
 # Container Name
diff --git a/examples/basyx.dashboardAAS/pom.xml b/examples/basyx.dashboardAAS/pom.xml
index 183dff4..11d96a3 100644
--- a/examples/basyx.dashboardAAS/pom.xml
+++ b/examples/basyx.dashboardAAS/pom.xml
@@ -5,7 +5,7 @@
 	<parent>
 		<groupId>org.eclipse.basyx</groupId>
 		<artifactId>basyx.components.docker</artifactId>
-		<version>1.0.0</version>
+		<version>1.0.1</version>
 	</parent>
 	
 	<artifactId>basyx.components.dashboardAAS</artifactId>
diff --git a/examples/basyx.dashboardAAS/src/test/resources/.env b/examples/basyx.dashboardAAS/src/test/resources/.env
index f71a8db..5f2ef8c 100644
--- a/examples/basyx.dashboardAAS/src/test/resources/.env
+++ b/examples/basyx.dashboardAAS/src/test/resources/.env
@@ -21,14 +21,14 @@
 # ##################
 # The image of the image that is build for this component
 
-BASYX_IMAGE_NAME=basyx/dashboard-aas
+BASYX_IMAGE_NAME=eclipsebasyx/dashboard-aas
 
 # ##################
 # Image Tag
 # ##################
 # The image tag of the image that is build for this component
 
-BASYX_IMAGE_TAG=1.0.0
+BASYX_IMAGE_TAG=1.0.1
 
 # ##################
 # Container Name
diff --git a/examples/basyx.hello_world/pom.xml b/examples/basyx.hello_world/pom.xml
index d5aa122..c09f442 100644
--- a/examples/basyx.hello_world/pom.xml
+++ b/examples/basyx.hello_world/pom.xml
@@ -2,7 +2,7 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>org.eclipse.basyx</groupId>
 	<artifactId>basyx.hello_world</artifactId>
-	<version>1.0.0</version>
+	<version>1.0.1</version>
 	<name>BaSyx Hello World</name>
 	
 		<properties>
@@ -32,21 +32,21 @@
 		<dependency>
 			<groupId>org.eclipse.basyx</groupId>
 			<artifactId>basyx.components.lib</artifactId>
-			<version>1.0.0</version>
+			<version>1.0.1</version>
 		</dependency>
 		
 		<!-- Add Registry Server component dependency -->
 		<dependency>
 			<groupId>org.eclipse.basyx</groupId>
 			<artifactId>basyx.components.registry</artifactId>
-			<version>1.0.2</version>
+			<version>1.0.3</version>
 		</dependency>
 				
 		<!-- Add AAS Server component dependency -->
 		<dependency>
 			<groupId>org.eclipse.basyx</groupId>
 			<artifactId>basyx.components.AASServer</artifactId>
-			<version>1.0.0</version>
+			<version>1.0.1</version>
 		</dependency>
 		
 		
diff --git a/examples/basyx.nodered/build.bat b/examples/basyx.nodered/build.bat
index 6e3726f..29d8c77 100644
--- a/examples/basyx.nodered/build.bat
+++ b/examples/basyx.nodered/build.bat
@@ -1 +1 @@
-docker build -t basyx/node-red:0.1.0-SNAPSHOT .
\ No newline at end of file
+docker build -t eclipsebasyx/examples-dataflow-node-red:1.0.1 .
\ No newline at end of file
diff --git a/examples/basyx.nodered/build.sh b/examples/basyx.nodered/build.sh
index ce0a3c0..fcc2220 100644
--- a/examples/basyx.nodered/build.sh
+++ b/examples/basyx.nodered/build.sh
@@ -1,2 +1,2 @@
 #!/usr/bin/env sh
-docker build -t basyx/node-red:0.1.0-SNAPSHOT .
\ No newline at end of file
+docker build -t eclipsebasyx/examples-dataflow-node-red:1.0.1 .
\ No newline at end of file
diff --git a/sdks/java/basys.sdk/pom.xml b/sdks/java/basys.sdk/pom.xml
index f02c306..c72d20b 100644
--- a/sdks/java/basys.sdk/pom.xml
+++ b/sdks/java/basys.sdk/pom.xml
@@ -5,7 +5,7 @@
 
 	<groupId>org.eclipse.basyx</groupId>
 	<artifactId>basyx.sdk</artifactId>
-	<version>1.0.0</version>
+	<version>1.0.1</version>
 	<name>BaSyx SDK</name>
 
 	<packaging>jar</packaging>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/aasx/AASXFactory.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/aasx/AASXFactory.java
index 28cf3bb..a09d971 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/aasx/AASXFactory.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/aasx/AASXFactory.java
@@ -15,6 +15,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerException;
@@ -85,7 +86,7 @@
 	public static void buildAASX(Collection<IAssetAdministrationShell> aasList, Collection<IAsset> assetList, 
 			Collection<IConceptDescription> conceptDescriptionList, Collection<ISubmodel> submodelList, Collection<InMemoryFile> files, OutputStream os) throws IOException, TransformerException, ParserConfigurationException {
 		
-		prepareFilePaths(submodelList);
+		prepareFilePaths(submodelList, files);
 		
 		OPCPackage rootPackage = OPCPackage.create(os);
 		
@@ -148,7 +149,11 @@
 	 * @return UUID
 	 */
 	private static String createUniqueID() {
-		return UUID.randomUUID().toString();
+		// only letters or underscore as start of id allowed
+		// https://www.w3.org/TR/1999/REC-xml-names-19990114/#ns-qualnames
+		//
+		// old AASX Package Explorer versions expect a leading R
+		return "Rid_" + UUID.randomUUID().toString();
 	}
 	
 	/**
@@ -178,7 +183,9 @@
 		}		
 		writeDataToPart(part, content);
 		root.registerPartAndContentType(part);
-		relateTo.addRelationship(partName, TargetMode.INTERNAL, relType, createUniqueID());
+		// set TargetMode to EXTERNAL to force absolute file paths
+    // this step is necessary for compatibility reasons with AASXPackageExplorer
+		relateTo.addRelationship(partName, TargetMode.EXTERNAL, relType, createUniqueID());
 		return part;
 	}
 	
@@ -232,13 +239,26 @@
 	}
 	
 	/**
-	 * Replaces the path in all File Elements with the result of preparePath
+	 * Find files which has a valid in memory file path
+	 * @param elements
+	 * @param inMemoryFiles
+	 * @return
+	 */
+	private static Collection<File> findInMemoryFileElements(Collection<ISubmodelElement> elements, Collection<InMemoryFile> inMemoryFiles) {
+		Collection<File> files = findFileElements(elements);
+		return files.stream().filter(f -> 
+			isInMemoryFile(inMemoryFiles, f.getValue()))
+				.collect(Collectors.toList());
+	}
+	
+	/**
+	 * Replaces the path in File Elements which has an in memory file with the result of preparePath
 	 * 
 	 * @param submodels the Submodels
 	 */
-	private static void prepareFilePaths(Collection<ISubmodel> submodels) {
+	private static void prepareFilePaths(Collection<ISubmodel> submodels, Collection<InMemoryFile> inMemoryFiles) {
 		submodels.stream()
-			.forEach(sm -> findFileElements(sm.getSubmodelElements().values()).stream().forEach(f -> f.setValue(preparePath(f.getValue()))));
+			.forEach(sm -> findInMemoryFileElements(sm.getSubmodelElements().values(), inMemoryFiles).stream().forEach(f -> f.setValue(preparePath(f.getValue()))));
 	}
 	
 	/**
@@ -270,4 +290,20 @@
 		}
 		throw new ResourceNotFoundException("The wanted file '" + path + "' was not found in the given files.");
 	}
+	
+	/**
+	 * Finds an InMemoryFile by its path
+	 * 
+	 * @param files the InMemoryFiles
+	 * @param path the path of the wanted file
+	 * @return the InMemoryFile if it was found; else null
+	 */
+	private static boolean isInMemoryFile(Collection<InMemoryFile> files, String path) {
+		for(InMemoryFile file: files) {
+			if(VABPathTools.stripSlashes(file.getPath()).equals(VABPathTools.stripSlashes(path))) {
+				return true;
+			}
+		}
+		return false;
+	}
 }
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/aasx/AASXPackageExplorerConformantHelper.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/aasx/AASXPackageExplorerConformantHelper.java
new file mode 100644
index 0000000..f6868b5
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/aasx/AASXPackageExplorerConformantHelper.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+* Copyright (C) 2021 the Eclipse BaSyx Authors
+*
+* This program and the accompanying materials are made
+* available under the terms of the Eclipse Public License 2.0
+* which is available at https://www.eclipse.org/legal/epl-2.0/
+*
+* SPDX-License-Identifier: EPL-2.0
+******************************************************************************/
+package org.eclipse.basyx.aas.factory.aasx;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.basyx.aas.metamodel.api.IAssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.api.parts.asset.IAsset;
+import org.eclipse.basyx.aas.metamodel.map.AasEnv;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.submodel.metamodel.api.ISubmodel;
+import org.eclipse.basyx.submodel.metamodel.api.parts.IConceptDescription;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IKey;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+
+/**
+ * Helper class providing methods for handling inconsistencies in regard to
+ * BaSyx and AASXPackageExplorer
+ * 
+ * @author fried
+ *
+ */
+public class AASXPackageExplorerConformantHelper {
+	/**
+	 * Converts meta model elements so that the AASXPackageExplorer can load their
+	 * serialized AASX
+	 * 
+	 * @param aasList
+	 * @param assetList
+	 * @param conceptDescriptionList
+	 * @param submodelList
+	 * @return
+	 */
+	public static AasEnv adapt(Collection<IAssetAdministrationShell> aasList, Collection<IAsset> assetList,
+			Collection<IConceptDescription> conceptDescriptionList, Collection<ISubmodel> submodelList) {
+
+		Collection<IAssetAdministrationShell> convertedAASs = aasList.stream()
+				.map(AASXPackageExplorerConformantHelper::removeFirstKeyFromSubmodelReferences)
+				.collect(Collectors.toList());
+
+		return new AasEnv(convertedAASs, assetList, conceptDescriptionList, submodelList);
+	}
+
+	/**
+	 * Converts meta model elements so that the AASXPackageExplorer can load their
+	 * serialized AASX
+	 * 
+	 * @param env
+	 * @return
+	 */
+	public static AasEnv adapt(AasEnv env) {
+		return adapt(env.getAssetAdministrationShells(), env.getAssets(), env.getConceptDescriptions(),
+				env.getSubmodels());
+	}
+
+	private static IAssetAdministrationShell removeFirstKeyFromSubmodelReferences(IAssetAdministrationShell shell) {
+		Collection<IReference> convertedReferences = shell.getSubmodelReferences().stream()
+				.map(AASXPackageExplorerConformantHelper::removeFirstKeyElement).collect(Collectors.toList());
+
+		((AssetAdministrationShell) shell).setSubmodelReferences(convertedReferences);
+
+		return shell;
+	}
+
+	private static IReference removeFirstKeyElement(IReference reference) {
+		List<IKey> keys = reference.getKeys();
+		keys.remove(0);
+
+		IReference ref = new Reference(keys);
+		return ref;
+	}
+
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/json/JSONToMetamodelConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/json/JSONToMetamodelConverter.java
index 634e67e..6bc11e9 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/json/JSONToMetamodelConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/json/JSONToMetamodelConverter.java
@@ -55,27 +55,27 @@
 
 	@SuppressWarnings("unchecked")
 	private AssetAdministrationShell parseAssetAdministrationShell(Object mapObject) {
-		AssetAdministrationShell parsedAAS = AssetAdministrationShell.createAsFacade((Map<String, Object>) mapObject);
+		Map<String, Object> aasMap = (Map<String, Object>) mapObject;
 		// Fix Asset - Asset in json-Serialization is just a reference 
-		Map<String, Object> assetRefMap = (Map<String, Object>) parsedAAS.get(AssetAdministrationShell.ASSET);
+		Map<String, Object> assetRefMap = (Map<String, Object>) aasMap.get(AssetAdministrationShell.ASSET);
 		if (assetRefMap.get(Reference.KEY) == null && assetRefMap.get(Asset.KIND) != null) {
 			// => Is already an asset, => does not need to be fixed
-			return parsedAAS;
+			return AssetAdministrationShell.createAsFacade((Map<String, Object>) mapObject);
 		}
-		parsedAAS.put(AssetAdministrationShell.ASSETREF, assetRefMap);
+		aasMap.put(AssetAdministrationShell.ASSETREF, assetRefMap);
 		
 		// Now try to find the Asset and add it to the AssetAdministrationShell
-		IReference assetRef = parsedAAS.getAssetReference();
+		IReference assetRef = Reference.createAsFacade((Map<String, Object>) aasMap.get(AssetAdministrationShell.ASSETREF));
 		IKey lastKey = assetRef.getKeys().get(assetRef.getKeys().size() - 1);
 		String idValue = lastKey.getValue();
 		for (Asset asset : assetBuf) {
 			if (asset.getIdentification().getId().equals(idValue)) {
-				parsedAAS.put(AssetAdministrationShell.ASSET, asset);
+				aasMap.put(AssetAdministrationShell.ASSET, asset);
 				break;
 			}
 		}
 
-		return parsedAAS;
+		return AssetAdministrationShell.createAsFacade((Map<String, Object>) mapObject);
 	}
 	
 	/**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/api/parts/AssetXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/api/parts/AssetXMLConverter.java
index c152b15..9ac5757 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/api/parts/AssetXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/api/parts/AssetXMLConverter.java
@@ -170,7 +170,7 @@
 	private static void buildBillOfMaterial(Document document, Element root, IAsset asset) {
 		IReference billOfMaterial = asset.getBillOfMaterial();
 		if (billOfMaterial != null) {
-			Element billOfMaterialRoot = document.createElement(ASSET_IDENTIFICATION_MODEL_REF);
+			Element billOfMaterialRoot = document.createElement(ASSET_BILLOFMATERIAL);
 			billOfMaterialRoot.appendChild(ReferenceXMLConverter.buildReferenceXML(document, billOfMaterial));
 			root.appendChild(billOfMaterialRoot);
 		}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/AasEnv.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/AasEnv.java
index 3cf7b51..f865d26 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/AasEnv.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/AasEnv.java
@@ -46,6 +46,14 @@
 		putAll(new ModelType(MODELTYPE));
 	}
 
+	public AasEnv(Collection<IAssetAdministrationShell> aasList, Collection<IAsset> assetList,
+			Collection<IConceptDescription> conceptDescriptionList, Collection<ISubmodel> submodelList) {
+		setAssetAdministrationShells(aasList);
+		setAssets(assetList);
+		setConceptDescriptions(conceptDescriptionList);
+		setSubmodels(submodelList);
+	}
+
 	/**
 	 * Creates a AssetAdministrationShell object from a map
 	 * 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/restapi/MultiSubmodelProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/restapi/MultiSubmodelProvider.java
index e2b4483..19f5d9c 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/restapi/MultiSubmodelProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/restapi/MultiSubmodelProvider.java
@@ -95,6 +95,9 @@
  */
 public class MultiSubmodelProvider implements IModelProvider {
 
+	public static final String AAS = "aas";
+	public static final String SUBMODELS_PREFIX = VABPathTools.concatenatePaths(AAS, AssetAdministrationShell.SUBMODELS);
+
 	/**
 	 * Store aas providers
 	 */
@@ -220,7 +223,7 @@
 
 	@SuppressWarnings("unchecked")
 	public void addSubmodel(SubmodelProvider modelContentProvider) {
-		Submodel sm = Submodel.createAsFacade((Map<String, Object>) modelContentProvider.getValue("/"));
+		Submodel sm = Submodel.createAsFacade((Map<String, Object>) modelContentProvider.getValue("/submodel"));
 		addSubmodel(sm, modelContentProvider);
 	}
 
@@ -258,7 +261,7 @@
 		VABPathTools.checkPathForNull(path);
 		path = VABPathTools.stripSlashes(path);
 		String[] pathElements = VABPathTools.splitPath(path);
-		if (pathElements.length > 0 && pathElements[0].equals("aas")) {
+		if (pathElements.length > 0 && pathElements[0].equals(AAS)) {
 			if (pathElements.length == 1) {
 				return aas_provider.getValue("");
 			}
@@ -272,16 +275,16 @@
 						// Get a model provider for the submodel in the registry
 						provider = getModelProvider(pathElements[2]);
 					}
-					
+
 					// - Retrieve submodel or property value
-					return provider.getValue(VABPathTools.buildPath(pathElements, 4));
+					return provider.getValue(VABPathTools.buildPath(pathElements, 3));
 				}
 			} else {
 				// Handle access to AAS
 				return aas_provider.getValue(VABPathTools.buildPath(pathElements, 1));
 			}
 		} else {
-			return new MalformedRequestException("The request " + path + " is not allowed for this endpoint");
+			throw new MalformedRequestException("The request " + path + " is not allowed for this endpoint");
 		}
 	}
 
@@ -297,7 +300,7 @@
 		// Make a list and return all local submodels
 		Collection<Submodel> submodels = new HashSet<>();
 		for (IModelProvider submodel : submodel_providers.values()) {
-			submodels.add(Submodel.createAsFacade((Map<String, Object>) submodel.getValue("")));
+			submodels.add(Submodel.createAsFacade((Map<String, Object>) submodel.getValue("/submodel")));
 		}
 
 		// Check for remote submodels
@@ -350,15 +353,12 @@
 	public void setValue(String path, Object newValue) throws ProviderException {
  		VABPathTools.checkPathForNull(path);
 		path = VABPathTools.stripSlashes(path);
-		// Split path
 		String[] pathElements = VABPathTools.splitPath(path);
 		String propertyPath = VABPathTools.buildPath(pathElements, 3);
-		// - Ignore first 2 elements, as it is "/aas/submodels" --> 'aas','submodels'
-		
-		if (path.equals("aas")) {
+		if (path.equals(AAS)) {
 			createAssetAdministrationShell(newValue);
-		} else if (!path.startsWith("aas/submodels")) {
-			throw new MalformedRequestException("Access to MultiSubmodelProvider always has to start with \"aas/submodels\", was " + path);
+		} else if (!path.startsWith(SUBMODELS_PREFIX)) {
+			throw new MalformedRequestException("Access to MultiSubmodelProvider always has to start with \"" + SUBMODELS_PREFIX + "\", was " + path);
 		} else if (propertyPath.isEmpty()) {
 			createSubmodel(newValue);
 		} else {
@@ -393,9 +393,12 @@
 	public void deleteValue(String path) throws ProviderException {
 		VABPathTools.checkPathForNull(path);
 		path = VABPathTools.stripSlashes(path);
+		if (!path.startsWith(SUBMODELS_PREFIX)) {
+			throw new MalformedRequestException("Access to MultiSubmodelProvider always has to start with \"" + SUBMODELS_PREFIX + "\", was " + path);
+		}
+		
 		String[] pathElements = VABPathTools.splitPath(path);
 		String propertyPath = VABPathTools.buildPath(pathElements, 3);
-		// - Ignore first 2 elements, as it is "/aas/submodels" --> 'aas','submodels'
 		if (pathElements.length == 3) {
 			// Delete Submodel from registered AAS
 			String smIdShort = pathElements[2];
@@ -405,8 +408,8 @@
 
 			// Delete submodel reference from aas
 			// TODO: This is a hack until the API is further clarified
-			Submodel sm = Submodel.createAsFacade((Map<String, Object>) submodel_providers.get(smIdShort).getValue("/"));
-			aas_provider.deleteValue("aas/submodels/" + sm.getIdentification().getId());
+			Submodel sm = Submodel.createAsFacade((Map<String, Object>) submodel_providers.get(smIdShort).getValue("/" + SubmodelProvider.SUBMODEL));
+			aas_provider.deleteValue(SUBMODELS_PREFIX + "/" + sm.getIdentification().getId());
 
 			// Remove submodel provider
 			submodel_providers.remove(smIdShort);
@@ -432,10 +435,13 @@
 	public Object invokeOperation(String path, Object... parameter) throws ProviderException {
 		VABPathTools.checkPathForNull(path);
 		path = VABPathTools.stripSlashes(path);
+		if (!path.startsWith(SUBMODELS_PREFIX)) {
+			throw new MalformedRequestException("Access to MultiSubmodelProvider always has to start with \"" + SUBMODELS_PREFIX + "\", was " + path);
+		}
+
 		String[] pathElements = VABPathTools.splitPath(path);
 		String operationPath = VABPathTools.buildPath(pathElements, 3);
-		// - Ignore first 2 elements, as it is "/aas/submodels" --> 'aas','submodels'
-		// - Invoke provider and return result
+
 		IModelProvider provider;
 		if (isSubmodelLocal(pathElements[2])) {
 			provider = submodel_providers.get(pathElements[2]);
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/XMLHelper.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/XMLHelper.java
index 9967865..6ed37b8 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/XMLHelper.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/XMLHelper.java
@@ -13,6 +13,11 @@
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetype.ValueType;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetype.ValueTypeHelper;
+
+import com.google.common.base.Strings;
+
 /**
  * A Helper class containing tools for the XML converter
  * 
@@ -54,4 +59,35 @@
 	public static String getString(Object object) {
 		return object instanceof String ? ((String) object).trim() : "";
 	}
+	
+	/**
+	 * adapts AASX value type to local value types 
+	 * @param valueType
+	 * @return
+	 */
+	public static ValueType convertAASXValueTypeToLocal(String valueType) {
+		// Enables parsing external aasx-files with empty type
+		if (Strings.isNullOrEmpty(valueType)) {
+			return ValueType.AnySimpleType;
+		}
+		
+		// Enables parsing external aasx-files with anyURI instead of anyuri
+		else if (valueType.equals("anyURI")) {
+			return ValueType.AnyURI;
+		}
+		
+		// Enables parsing external aasx-files with date instead of dateTime
+		else if (valueType.equals("date")) {
+			return ValueType.DateTime;
+		}
+		
+		// Enables parsing external aasx-files with decimal instead of double
+		else if (valueType.equals("decimal")) {
+			return ValueType.Double;
+		}
+		
+		else {
+			return ValueTypeHelper.fromName(valueType);
+		}
+	}
 }
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/api/dataspecification/DataSpecificationIEC61360XMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/api/dataspecification/DataSpecificationIEC61360XMLConverter.java
index f3f52b0..b7e80c1 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/api/dataspecification/DataSpecificationIEC61360XMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/api/dataspecification/DataSpecificationIEC61360XMLConverter.java
@@ -75,11 +75,11 @@
 		
 		// PreferredName - LangStrings
 		LangStrings preferredName = LangStringsXMLConverter
-				.parseLangStrings((Map<String, Object>) contentObj.get(IEC61360_PREFERREDNAME), IEC61360_LANGSTRING);
+				.parseLangStrings(contentObj.get(IEC61360_PREFERREDNAME), IEC61360_LANGSTRING);
 		spec.setPreferredName(preferredName);
 		// ShortName - LangStrings
 		LangStrings shortName = LangStringsXMLConverter
-				.parseLangStrings((Map<String, Object>) contentObj.get(IEC61360_SHORTNAME), IEC61360_LANGSTRING);
+				.parseLangStrings(contentObj.get(IEC61360_SHORTNAME), IEC61360_LANGSTRING);
 		spec.setShortName(shortName);
 		// Unit - String
 		spec.setUnit(XMLHelper.getString(contentObj.get(IEC61360_UNIT)));
@@ -94,7 +94,7 @@
 		spec.setDataType(DataTypeIEC61360.fromString(XMLHelper.getString(contentObj.get(IEC61360_DATATYPE))));
 		// Definition - LangStrings
 		LangStrings definition = LangStringsXMLConverter
-				.parseLangStrings((Map<String, Object>) contentObj.get(IEC61360_DEFINITION), IEC61360_LANGSTRING);
+				.parseLangStrings(contentObj.get(IEC61360_DEFINITION), IEC61360_LANGSTRING);
 		spec.setDefinition(definition);
 		// ValueFormat - String
 		spec.setValueFormat(XMLHelper.getString(contentObj.get(IEC61360_VALUEFORMAT)));
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/HasDataSpecificationXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/HasDataSpecificationXMLConverter.java
index 9eb7956..dbf2d78 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/HasDataSpecificationXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/HasDataSpecificationXMLConverter.java
@@ -113,7 +113,7 @@
 	}
 
 	/**
-	 * Populates a given XML map with the data form a given IHasDataSpecification object<br>
+	 * Populates a given XML map with the data from a given IHasDataSpecification object<br>
 	 * Creates the &lt;aas:embeddedDataSpecification&gt; tag in the given root
 	 * 
 	 * @param document the XML document
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/HasSemanticsXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/HasSemanticsXMLConverter.java
index b5ea693..4843837 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/HasSemanticsXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/HasSemanticsXMLConverter.java
@@ -47,7 +47,7 @@
 	
 	
 	/**
-	 * Populates a given XML map with the data form a given IHasSemantics object<br>
+	 * Populates a given XML map with the data from a given IHasSemantics object<br>
 	 * Creates the &lt;aas:semanticId&gt; tag in the given root
 	 * 
 	 * @param document the XML document
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/IdentifiableXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/IdentifiableXMLConverter.java
index 6dd0fb5..b16ac0d 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/IdentifiableXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/IdentifiableXMLConverter.java
@@ -16,6 +16,8 @@
 import org.eclipse.basyx.submodel.metamodel.api.qualifier.IIdentifiable;
 import org.eclipse.basyx.submodel.metamodel.map.qualifier.AdministrativeInformation;
 import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -29,6 +31,7 @@
  *
  */
 public class IdentifiableXMLConverter {
+	private static final Logger logger = LoggerFactory.getLogger(IdentifiableXMLConverter.class);
 
 	public static final String ADMINISTRATION = "aas:administration";
 	public static final String VERSION = "aas:version";
@@ -53,15 +56,34 @@
 		}
 		String id = XMLHelper.getString(identierFromXML.get(XMLHelper.TEXT));
 		String idType = XMLHelper.getString(identierFromXML.get(IDTYPE));
-		if (Strings.isNullOrEmpty(id) || Strings.isNullOrEmpty(idType)) {
-			throw createInvalidIdentifierException(xmlObject);
+		if (Strings.isNullOrEmpty(id)) {
+			// Warns without exception to enable parsing external aasx-files without id
+			logger.warn("Invalid XML of Identifiable. No valid identification is present. " + xmlObject.toString());
 		}
+		
+		if (Strings.isNullOrEmpty(idType)) {
+			// Warns without exception to enable parsing external aasx-files without idType
+			logger.warn("Invalid XML of Identifiable. empty identifierType changed to default identifierType Custom. " + xmlObject.toString());
+			idType = IdentifierType.CUSTOM.toString();
+		}
+		
+		// Enables parsing external aasx-files with URI instead of IRI
+		if (idType.equalsIgnoreCase("URI")) {
+			idType = IdentifierType.IRI.toString();
+		}
+			
 		identifiable.setIdentification(IdentifierType.fromString(idType), id);
 
 		Map<String, Object> administrationFromXML = (Map<String, Object>) xmlObject.get(ADMINISTRATION);
 		if(administrationFromXML != null) {
 			String version = XMLHelper.getString(administrationFromXML.get(VERSION));
 			String revision = XMLHelper.getString(administrationFromXML.get(REVISION));
+			
+			// Enables parsing external aasx-files with revision and empty version
+			if (!Strings.isNullOrEmpty(revision) && Strings.isNullOrEmpty(version)) {
+				version = "0.0.1";
+			}
+			
 			identifiable.setAdministration(new AdministrativeInformation(version, revision));
 		}
 	}
@@ -70,7 +92,7 @@
 	
 	
 	/**
-	 * Populates a given XML map with the data form a given IIdentifiable object<br>
+	 * Populates a given XML map with the data from a given IIdentifiable object<br>
 	 * Creates the &lt;aas:administration&gt; and &lt;aas:identification&gt; tags in the given root
 	 * 
 	 * @param document the XML document
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/LangStringsXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/LangStringsXMLConverter.java
index e302fcc..3fc5461 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/LangStringsXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/LangStringsXMLConverter.java
@@ -42,13 +42,40 @@
 	}
 
 	/**
-	 * Parses the LangStrings object from XML with a custom lang string xml tag
+	 * Parses the LangStrings object from XML/String with a custom lang string xml tag
 	 * 
-	 * @param xmlObject the XML map containing the &lt;langString&gt; tags
+	 * @param obj the LangString objects or a single string
 	 * @param tagName   the custom &lt;*langString*&gt; tagName
 	 * @return the parsed LangStrings object
 	 */
-	public static LangStrings parseLangStrings(Map<String, Object> xmlObject, String tagName) {
+	@SuppressWarnings("unchecked")
+	public static LangStrings parseLangStrings(Object obj, String tagName) {
+		if (obj == null) {
+			return new LangStrings();
+		} else if (obj instanceof Map) {
+			return parseLangStringsFromMap((Map<String, Object>) obj, tagName);
+		} else {
+			return parseLangStringsFromString((String) obj);
+		}
+	}
+	
+	/**
+	 * Parses the LangStrings object from String description
+	 * @param str given description
+	 * @return parsed LangStrings object
+	 */
+	private static LangStrings parseLangStringsFromString(String str) {
+		LangString langString = new LangString("EN", str);
+		return new LangStrings(langString);
+	}
+	
+	/**
+	 * Parses the LangStrings object from XML with a custom lang string xml tag
+	 * @param xmlObject given XML object
+	 * @param tagName the custom &lt;*langString*&gt; tagName
+	 * @return the parsed LangStrings object
+	 */
+	private static LangStrings parseLangStringsFromMap(Map<String, Object> xmlObject, String tagName) {
 		LangStrings langStrings = new LangStrings();
 		
 		if(xmlObject != null) {
@@ -66,7 +93,7 @@
 	
 	
 	/**
-	 * Builds XML form a given LangStrings object
+	 * Builds XML from a given LangStrings object
 	 * 
 	 * @param document the XML document
 	 * @param root the root Element where the &lt;aas:langString&gt; tags should be in
@@ -77,7 +104,7 @@
 	}
 
 	/**
-	 * Builds XML form a given LangStrings object with a custom langString tagName
+	 * Builds XML from a given LangStrings object with a custom langString tagName
 	 * 
 	 * @param document the XML document
 	 * @param root the root Element where the &lt;langString&gt; tags should be in
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/ReferableXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/ReferableXMLConverter.java
index e4922f2..a7def92 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/ReferableXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/ReferableXMLConverter.java
@@ -14,9 +14,12 @@
 import org.eclipse.basyx.submodel.factory.xml.XMLHelper;
 import org.eclipse.basyx.submodel.factory.xml.converters.reference.ReferenceXMLConverter;
 import org.eclipse.basyx.submodel.metamodel.api.qualifier.IReferable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.AdministrativeInformation;
 import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangStrings;
 import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
 import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -30,6 +33,7 @@
  *
  */
 public class ReferableXMLConverter {
+	private static final Logger logger = LoggerFactory.getLogger(AdministrativeInformation.class);
 	
 	public static final String ID_SHORT = "aas:idShort";
 	public static final String CATEGORY = "aas:category";
@@ -51,7 +55,8 @@
 		
 		Reference parent = ReferenceXMLConverter.parseReference((Map<String, Object>) xmlObject.get(PARENT));
 		if (Strings.isNullOrEmpty(idShort)) {
-			throw new RuntimeException("Invalid XML of Referable. No valid idShort is present. " + xmlObject.toString());
+			// Warning without exception for empty idshort for parsing external aasx-files
+			logger.warn("Invalid XML of Referable. No valid idShort is present. " + xmlObject.toString());
 		}
 		referable.setIdShort(idShort);
 		
@@ -73,15 +78,14 @@
 	 * @param xmlObject the XML map containing the &lt;aas:description&gt; tag
 	 * @return a LangStrings Object parsed form the XML
 	 */
-	@SuppressWarnings("unchecked")
 	private static LangStrings parseDescription(Map<String, Object> xmlObject) {
+		Object descObj = xmlObject.get(DESCRIPTION);
 		
-		Map<String, Object> descObj = (Map<String, Object>) xmlObject.get(DESCRIPTION);
 		if (descObj == null) {
 			return null;
 		}
 		
-		return LangStringsXMLConverter.parseLangStrings(descObj);
+		return LangStringsXMLConverter.parseLangStrings(descObj, LangStringsXMLConverter.LANG_STRING);
 	}
 	
 	
@@ -89,7 +93,7 @@
 	
 	
 	/**
-	 * Populates a given XML map with the data form a given IReferable object<br>
+	 * Populates a given XML map with the data from a given IReferable object<br>
 	 * Creates the relevant tags in the given root
 	 * 
 	 * @param document the XML document
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/haskind/HasKindXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/haskind/HasKindXMLConverter.java
index 09a3d1f..d9e850d 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/haskind/HasKindXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/haskind/HasKindXMLConverter.java
@@ -40,13 +40,17 @@
 	public static void populateHasKind(Map<String, Object> xmlObject, HasKind hasKind) {
 		String hasKindValue = XMLHelper.getString(xmlObject.get(KIND));
 		if (!Strings.isNullOrEmpty(hasKindValue)) {
+			// Enables parsing external aasx-files with Type instead of Template
+			if (hasKindValue.equals("Type")) {
+				hasKindValue = ModelingKind.TEMPLATE.toString();
+			}
 			hasKind.setModelingKind(ModelingKind.fromString(hasKindValue));	
 		}
 	}
 	
 	
 	/**
-	 * Populates a given XML map with the data form a given IHasKind object<br>
+	 * Populates a given XML map with the data from a given IHasKind object<br>
 	 * Creates the &lt;aas:kind&gt; tag in the given root
 	 * 
 	 * @param document the XML document
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/qualifiable/QualifiableXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/qualifiable/QualifiableXMLConverter.java
index c4ab1d6..50f680d 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/qualifiable/QualifiableXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/qualifier/qualifiable/QualifiableXMLConverter.java
@@ -27,7 +27,6 @@
 import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Qualifiable;
 import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Qualifier;
 import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
-import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetype.ValueTypeHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -136,7 +135,7 @@
 		if (valueType == null || valueType.isEmpty()) {
 			logger.warn("Creating element " + xmlQualifier + " without mandatory valueType!");
 		} else {
-			qualifier.setValueType(ValueTypeHelper.fromName(valueType));
+			qualifier.setValueType(XMLHelper.convertAASXValueTypeToLocal(valueType));
 		}
 		return qualifier;
 	}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/reference/ReferenceXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/reference/ReferenceXMLConverter.java
index 39afdad..b0c972f 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/reference/ReferenceXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/reference/ReferenceXMLConverter.java
@@ -25,6 +25,8 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import com.google.common.base.Strings;
+
 /**
  * Handles the conversion between an IReference object and the XML tag &lt;aas:keys&gt; in both directions
  * 
@@ -105,12 +107,26 @@
 		String idType = XMLHelper.getString(xmlObject.get(IDTYPE));
 		String type = XMLHelper.getString(xmlObject.get(TYPE));
 		boolean local = Boolean.parseBoolean(XMLHelper.getString(xmlObject.get(LOCAL)));
-	
+		
+		// Enables parsing external aasx-files with empty or null id type
+		if (Strings.isNullOrEmpty(idType)) {
+			idType = KeyType.CUSTOM.toString();
+		}
+		
+		// Enables parsing external aasx-files with URI instead of IRI
+		if (idType.equalsIgnoreCase("URI")) {
+			idType = KeyType.IRI.toString();
+		}
+		
+		// Enables parsing external aasx-files with empty or null key type
+		if (Strings.isNullOrEmpty(type)) {
+			type = KeyElements.REFERENCEELEMENT.toString();
+		}
 		return new Key(KeyElements.fromString(type), local, text, KeyType.fromString(idType));
 	}
 	
 	/**
-	 * Builds XML form a given Collection of IReference objects
+	 * Builds XML from a given Collection of IReference objects
 	 * 
 	 * @param document   the XML document
 	 * @param references a Collection of IReference objects to be converted to XML
@@ -121,7 +137,7 @@
 	}
 
 	/**
-	 * Builds XML form a given Collection of IReference objects
+	 * Builds XML from a given Collection of IReference objects
 	 * 
 	 * @param document    the XML document
 	 * @param references  a Collection of IReference objects to be converted to XML
@@ -146,7 +162,7 @@
 	
 	
 	/**
-	 * Builds XML form a given single IReference object
+	 * Builds XML from a given single IReference object
 	 * 
 	 * @param document the XML document
 	 * @param reference the IReference object to be converted to XML
@@ -158,7 +174,7 @@
 	}
 	
 	/**
-	 * Builds XML form a given single IReference object
+	 * Builds XML from a given single IReference object
 	 * 
 	 * @param document    the XML document
 	 * @param reference   the IReference object to be converted to XML
@@ -174,7 +190,7 @@
 	}
 
 	/**
-	 * Builds XML form a given IKey object
+	 * Builds XML from a given IKey object
 	 * 
 	 * @param document   the XML document
 	 * @param key        the IKey object to be converted to XML
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/CapabilityXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/CapabilityXMLConverter.java
new file mode 100644
index 0000000..99fa84b
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/CapabilityXMLConverter.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (C) 2021 the Eclipse BaSyx Authors
+ * 
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ ******************************************************************************/
+package org.eclipse.basyx.submodel.factory.xml.converters.submodelelement;
+
+import java.util.Map;
+
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ICapability;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.Capability;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * Parses &lt;aas:capability&gt; and builds the Capability object form it <br>
+ * Builds &lt;aas:capability&gt; from a given Capability object
+ * 
+ * @author espen, fischer
+ *
+ */
+public class CapabilityXMLConverter extends SubmodelElementXMLConverter {
+
+	public static final String CAPABILITY = "aas:capability";
+
+	/**
+	 * Parses a Map containing the content of XML tag &lt;aas:capability&gt;
+	 * 
+	 * @param xmlObject
+	 *            the Map with the content of XML tag &lt;aas:capability&gt;
+	 * @return the parsed Capability
+	 */
+	public static Capability parseCapability(Map<String, Object> xmlObject) {
+		Capability capabilityMap = new Capability();
+		populateSubmodelElement(xmlObject, capabilityMap);
+		return capabilityMap;
+	}
+
+	/**
+	 * Builds the &lt;aas:capability&gt; XML tag for a Capability
+	 * 
+	 * @param document
+	 *            the XML document
+	 * @param capability
+	 *            the ICapability to build the XML for
+	 * @return the &lt;aas:capability&gt; XML tag for the given Capability
+	 */
+	public static Element buildCapability(Document document, ICapability capability) {
+		Element xmlCapabilityRoot = document.createElement(CAPABILITY);
+
+		populateSubmodelElement(document, xmlCapabilityRoot, capability);
+
+		return xmlCapabilityRoot;
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/SubmodelElementCollectionXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/SubmodelElementCollectionXMLConverter.java
index 8768403..01c9d62 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/SubmodelElementCollectionXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/SubmodelElementCollectionXMLConverter.java
@@ -22,7 +22,7 @@
 
 /**
  * Parses &lt;aas:submodelElementCollection&gt; and builds the SubmodelElementCollection object from it <br>
- * Builds &lt;aas:submodelElementCollection&gt; form a given SubmodelElementCollection object
+ * Builds &lt;aas:submodelElementCollection&gt; from a given SubmodelElementCollection object
  * 
  * @author conradi
  *
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/SubmodelElementXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/SubmodelElementXMLConverter.java
index 6d0545d..3b24b91 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/SubmodelElementXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/SubmodelElementXMLConverter.java
@@ -32,6 +32,7 @@
 import org.eclipse.basyx.submodel.factory.xml.converters.submodelelement.relationship.AnnotatedRelationshipElementXMLConverter;
 import org.eclipse.basyx.submodel.factory.xml.converters.submodelelement.relationship.RelationshipElementXMLConverter;
 import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ICapability;
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElementCollection;
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IBlob;
@@ -50,6 +51,7 @@
 import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
 import org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind.HasKind;
 import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Qualifiable;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.Capability;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElement;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.Blob;
@@ -133,6 +135,10 @@
 			xmlObject = (Map<String, Object>) xmlObject.get(BasicEventXMLConverter.BASIC_EVENT);
 			return BasicEventXMLConverter.parseBasicEvent(xmlObject);
 		}
+		else if (xmlObject.containsKey(CapabilityXMLConverter.CAPABILITY)) {
+			xmlObject = (Map<String, Object>) xmlObject.get(CapabilityXMLConverter.CAPABILITY);
+			return CapabilityXMLConverter.parseCapability(xmlObject);
+		}
 		else if (xmlObject.containsKey(EntityXMLConverter.ENTITY)) {
 			xmlObject = (Map<String, Object>) xmlObject.get(EntityXMLConverter.ENTITY);
 			return EntityXMLConverter.parseEntity(xmlObject);
@@ -273,6 +279,8 @@
 						document, (IAnnotatedRelationshipElement) submodelElement);
 			case Operation.MODELTYPE:
 				return OperationXMLConverter.buildOperation(document, (IOperation) submodelElement);
+			case Capability.MODELTYPE:
+				return CapabilityXMLConverter.buildCapability(document, (ICapability) submodelElement);
 			default:
 				return null;
 		}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/BlobXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/BlobXMLConverter.java
index 64f7615..d3b7485 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/BlobXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/BlobXMLConverter.java
@@ -20,7 +20,7 @@
 
 /**
  * Parses &lt;aas:blob&gt; and builds the Blob object from it <br>
- * Builds &lt;aas:blob&gt; form a given Blob object
+ * Builds &lt;aas:blob&gt; from a given Blob object
  * 
  * @author conradi
  *
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/FileXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/FileXMLConverter.java
index 0301509..ae36ce4 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/FileXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/FileXMLConverter.java
@@ -20,7 +20,7 @@
 
 /**
  * Parses &lt;aas:file&gt; and builds the File object from it <br>
- * Builds &lt;aas:file&gt; form a given File object
+ * Builds &lt;aas:file&gt; from a given File object
  * 
  * @author conradi
  *
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/MultiLanguagePropertyXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/MultiLanguagePropertyXMLConverter.java
index 8b919c7..518db1e 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/MultiLanguagePropertyXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/MultiLanguagePropertyXMLConverter.java
@@ -43,8 +43,8 @@
 	public static MultiLanguageProperty parseMultiLanguageProperty(Map<String, Object> xmlObject) {
 		Map<String, Object> xmlValueId = (Map<String, Object>) xmlObject.get(VALUE_ID);
 		Reference valueId = ReferenceXMLConverter.parseReference(xmlValueId);
-		Map<String, Object> xmlLangStrings = (Map<String, Object>) xmlObject.get(VALUE);
-		LangStrings langStrings = LangStringsXMLConverter.parseLangStrings(xmlLangStrings);
+		Object xmlLangStrings = xmlObject.get(VALUE);
+		LangStrings langStrings = LangStringsXMLConverter.parseLangStrings(xmlLangStrings, LangStringsXMLConverter.LANG_STRING);
 		MultiLanguageProperty mLProperty = new MultiLanguageProperty(valueId, langStrings);
 		populateSubmodelElement(xmlObject, mLProperty);
 		return mLProperty;
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/PropertyXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/PropertyXMLConverter.java
index b402c72..90e6c95 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/PropertyXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/PropertyXMLConverter.java
@@ -18,7 +18,6 @@
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IProperty;
 import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
-import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetype.ValueTypeHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -57,7 +56,7 @@
 		Map<String, Object> xmlValueId = (Map<String, Object>) xmlObject.get(VALUE_ID);
 		Reference valueId = ReferenceXMLConverter.parseReference(xmlValueId);
 		
-		property.set(value, ValueTypeHelper.fromName(valueType));
+		property.set(value, XMLHelper.convertAASXValueTypeToLocal(valueType));
 		
 		if(valueId != null) {
 			property.setValueId(valueId);
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/RangeXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/RangeXMLConverter.java
index 58fdb7c..4b93788 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/RangeXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/RangeXMLConverter.java
@@ -14,14 +14,13 @@
 import org.eclipse.basyx.submodel.factory.xml.XMLHelper;
 import org.eclipse.basyx.submodel.factory.xml.converters.submodelelement.SubmodelElementXMLConverter;
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IRange;
-import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetype.ValueTypeHelper;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.range.Range;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
 /**
  * Parses &lt;aas:range&gt; and builds the Range object from it <br>
- * Builds &lt;aas:range&gt; form a given Range object
+ * Builds &lt;aas:range&gt; from a given Range object
  * 
  * @author conradi
  *
@@ -43,7 +42,7 @@
 		String valueType = XMLHelper.getString(xmlObject.get(VALUE_TYPE));
 		String min = XMLHelper.getString(xmlObject.get(MIN));
 		String max = XMLHelper.getString(xmlObject.get(MAX));
-		Range range = new Range(ValueTypeHelper.fromName(valueType), min, max);
+		Range range = new Range(XMLHelper.convertAASXValueTypeToLocal(valueType), min, max);
 		populateSubmodelElement(xmlObject, range);
 		return range;
 	}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/ReferenceElementXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/ReferenceElementXMLConverter.java
index f51283f..c81c656 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/ReferenceElementXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/dataelement/ReferenceElementXMLConverter.java
@@ -21,7 +21,7 @@
 
 /**
  * Parses &lt;aas:referenceElement&gt; and builds the ReferenceElement object from it <br>
- * Builds &lt;aas:referenceElement&gt; form a given ReferenceElement object
+ * Builds &lt;aas:referenceElement&gt; from a given ReferenceElement object
  * 
  * @author conradi
  *
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/entity/EntityXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/entity/EntityXMLConverter.java
index 60a81ef..c65b3f2 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/entity/EntityXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/entity/EntityXMLConverter.java
@@ -27,7 +27,7 @@
 
 /**
  * Parses &lt;aas:entity&gt; and builds the Entity object from it <br>
- * Builds &lt;aas:entity&gt; form a given Entity object
+ * Builds &lt;aas:entity&gt; from a given Entity object
  * 
  * @author conradi
  *
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/event/BasicEventXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/event/BasicEventXMLConverter.java
index c8b3051..e12e750 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/event/BasicEventXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/event/BasicEventXMLConverter.java
@@ -22,7 +22,7 @@
 
 /**
  * Parses &lt;aas:basicEvent&gt; and builds the BasicEvent object from it <br>
- * Builds &lt;aas:basicEvent&gt; form a given BasicEvent object
+ * Builds &lt;aas:basicEvent&gt; from a given BasicEvent object
  * 
  * @author conradi
  *
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/operation/OperationXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/operation/OperationXMLConverter.java
index 890f941..e982a38 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/operation/OperationXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/operation/OperationXMLConverter.java
@@ -27,7 +27,7 @@
 
 /**
  * Parses &lt;aas:operation&gt; and builds the Operation object from it <br>
- * Builds &lt;aas:operation&gt; form a given Operation object
+ * Builds &lt;aas:operation&gt; from a given Operation object
  * 
  * @author conradi
  *
@@ -49,26 +49,23 @@
 	 */
 	@SuppressWarnings("unchecked")
 	public static Operation parseOperation(Map<String, Object> xmlObject) {
+		List<OperationVariable> inList = new ArrayList<>();
+		List<OperationVariable> outList = new ArrayList<>();
+		List<OperationVariable> inoutList = new ArrayList<>();
 		
 		Map<String, Object> inObj = (Map<String, Object>) xmlObject.get(INPUT_VARIABLE);
-		List<Map<String, Object>> xmlOpVars = XMLHelper.getList(inObj.get(OPERATION_VARIABLE));
-		List<OperationVariable> inList = new ArrayList<>();
-		for(Map<String, Object> map : xmlOpVars) {
-			inList.add(parseOperationVariable(map));
+		if (inObj != null) {
+			inList = getOperationVariables(inObj);
 		}
 		
 		Map<String, Object> outObj = (Map<String, Object>) xmlObject.get(OUTPUT_VARIABLE);
-		xmlOpVars = XMLHelper.getList(outObj.get(OPERATION_VARIABLE));
-		List<OperationVariable> outList = new ArrayList<>();
-		for(Map<String, Object> map : xmlOpVars) {
-			outList.add(parseOperationVariable(map));
+		if (outObj != null) {
+			outList = getOperationVariables(outObj);
 		}
 		
 		Map<String, Object> inoutObj = (Map<String, Object>) xmlObject.get(INOUTPUT_VARIABLE);
-		xmlOpVars = XMLHelper.getList(inoutObj.get(OPERATION_VARIABLE));
-		List<OperationVariable> inoutList = new ArrayList<>();
-		for(Map<String, Object> map : xmlOpVars) {
-			inoutList.add(parseOperationVariable(map));
+		if (inoutObj != null) {
+			inoutList = getOperationVariables(inoutObj);	
 		}
 	
 		Operation operation = new Operation(inList, outList, inoutList, null);
@@ -156,4 +153,29 @@
 
 		return operationVariableRoot;
 	}
+	
+	/**
+	 * Gets Operation Variables In/Out/InOut from variable map
+	 * @param varObj map containing variables
+	 * @return List of OperationVariable
+	 */
+	private static List<OperationVariable> getOperationVariables(Map<String, Object> varObj) {
+		List<OperationVariable> variableList = new ArrayList<>();
+		Object operationVarObj = varObj.get(OPERATION_VARIABLE);
+		
+		//TODO: Remove after non-existing aas:operationVariable problem fixed in AAS Package Explorer 
+		if (operationVarObj == null) {
+			if (varObj.get(VALUE) != null) {
+				operationVarObj = varObj;
+			}
+		}
+		
+		List<Map<String, Object>> xmlOpVars = XMLHelper.getList(operationVarObj);
+		
+		for(Map<String, Object> map : xmlOpVars) {
+			variableList.add(parseOperationVariable(map));
+		}
+		
+		return variableList;
+	}
 }
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/relationship/RelationshipElementXMLConverter.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/relationship/RelationshipElementXMLConverter.java
index c75c7f2..d6eaf68 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/relationship/RelationshipElementXMLConverter.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/converters/submodelelement/relationship/RelationshipElementXMLConverter.java
@@ -23,7 +23,7 @@
 
 /**
  * Parses &lt;aas:relationshipElement&gt; and builds the RelationshipElement object from it <br>
- * Builds &lt;aas:relationshipElement&gt; form a given RelationshipElement object
+ * Builds &lt;aas:relationshipElement&gt; from a given RelationshipElement object
  * 
  * @author conradi
  *
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedCapability.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedCapability.java
new file mode 100644
index 0000000..933ae09
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedCapability.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (C) 2021 the Eclipse BaSyx Authors
+ * 
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ ******************************************************************************/
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement;
+
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ICapability;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.Capability;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+
+/**
+ * "Connected" implementation of ICapability
+ * 
+ * @author espen, fischer
+ *
+ */
+public class ConnectedCapability extends ConnectedSubmodelElement implements ICapability {
+
+	public ConnectedCapability(VABElementProxy proxy) {
+		super(proxy);
+	}
+
+	@Override
+	protected KeyElements getKeyElement() {
+		return KeyElements.CAPABILITY;
+	}
+
+	@Override
+	public Capability getLocalCopy() {
+		return Capability.createAsFacade(getElem()).getLocalCopy();
+	}
+
+	@Override
+	public Object getValue() {
+		throw new UnsupportedOperationException("A Capability has no value");
+	}
+
+	@Override
+	public void setValue(Object value) {
+		throw new UnsupportedOperationException("A Capability has no value");
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedSubmodelElementFactory.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedSubmodelElementFactory.java
index f0bcadd..31b7520 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedSubmodelElementFactory.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedSubmodelElementFactory.java
@@ -31,6 +31,7 @@
 import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.relationship.ConnectedAnnotatedRelationshipElement;
 import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.relationship.ConnectedRelationshipElement;
 import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.Capability;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.Blob;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.File;
@@ -136,6 +137,8 @@
 			return new ConnectedOperation(proxy);
 		} else if(BasicEvent.isBasicEvent(mapContent)) {
 			return new ConnectedBasicEvent(proxy);
+		} else if (Capability.isCapability(mapContent)) {
+			return new ConnectedCapability(proxy);
 		} else {
 			return null;
 		}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/submodelelement/SubmodelElementFacadeFactory.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/submodelelement/SubmodelElementFacadeFactory.java
index 06c615e..b4dc489 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/submodelelement/SubmodelElementFacadeFactory.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/submodelelement/SubmodelElementFacadeFactory.java
@@ -12,6 +12,7 @@
 import java.util.Map;
 
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.Capability;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.Blob;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.File;
@@ -64,6 +65,8 @@
 			return Operation.createAsFacade(submodelElement);
 		} else if (BasicEvent.isBasicEvent(submodelElement)) {
 			return BasicEvent.createAsFacade(submodelElement);
+		} else if (Capability.isCapability(submodelElement)) {
+			return Capability.createAsFacade(submodelElement);
 		} else {
 			throw new RuntimeException("Can not create a submodel element from given map: " + submodelElement);
 		}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Qualifier.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Qualifier.java
index 15d91ac..41720c7 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Qualifier.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Qualifier.java
@@ -61,6 +61,7 @@
 		put(VALUE, ValueTypeHelper.prepareForSerialization(value));
 		put(VALUEID, valueId);
 		put(VALUETYPE, valueType);
+		putAll(new ModelType(MODELTYPE));
 	}
 
 	/**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/Capability.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/Capability.java
new file mode 100644
index 0000000..88e06d1
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/Capability.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (C) 2021 the Eclipse BaSyx Authors
+ * 
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ ******************************************************************************/
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement;
+
+import java.util.Map;
+
+import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ICapability;
+import org.eclipse.basyx.submodel.metamodel.map.modeltype.ModelType;
+
+/**
+ * A Capability element as defined in DAAS document
+ * 
+ * @author espen, fischer
+ *
+ */
+public class Capability extends SubmodelElement implements ICapability {
+
+	public static final String MODELTYPE = "Capability";
+
+	public Capability() {
+		putAll(new ModelType(MODELTYPE));
+	}
+
+	/**
+	 * Constructor accepting only mandatory attribute
+	 * 
+	 * @param idShort
+	 */
+	public Capability(String idShort) {
+		super(idShort);
+
+		putAll(new ModelType(MODELTYPE));
+	}
+
+	@Override
+	protected KeyElements getKeyElement() {
+		return KeyElements.CAPABILITY;
+	}
+
+	/**
+	 * Creates a Capability object from a map
+	 * 
+	 * @param obj
+	 *            a Capability object as raw map
+	 * @return a Capability object, that behaves like a facade for the given map
+	 */
+	public static Capability createAsFacade(Map<String, Object> obj) {
+		if (obj == null) {
+			return null;
+		}
+
+		if (!isValid(obj)) {
+			throw new MetamodelConstructionException(Capability.class, obj);
+		}
+
+		Capability facade = new Capability();
+		facade.setMap(obj);
+		return facade;
+	}
+
+	/**
+	 * Check whether all mandatory elements for the metamodel exist in a map
+	 * 
+	 * @return true/false
+	 */
+	public static boolean isValid(Map<String, Object> obj) {
+		return SubmodelElement.isValid(obj);
+	}
+
+	/**
+	 * Returns true if the given submodel element map is recognized as a Capability
+	 * element
+	 */
+	public static boolean isCapability(Map<String, Object> map) {
+		String modelType = ModelType.createAsFacade(map).getName();
+		// Either model type is set or the element type specific attributes are
+		// contained (fallback)
+		return MODELTYPE.equals(modelType) || (modelType == null);
+	}
+
+	@Override
+	public Capability getLocalCopy() {
+		// Return a shallow copy
+		Capability copy = new Capability();
+		copy.putAll(this);
+		return copy;
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/dataelement/property/valuetype/ValueTypeHelper.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/dataelement/property/valuetype/ValueTypeHelper.java
index c3db504..4da0bd4 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/dataelement/property/valuetype/ValueTypeHelper.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/dataelement/property/valuetype/ValueTypeHelper.java
@@ -108,7 +108,7 @@
 				objectType = ValueType.YearMonthDuration;
 			} else if (c == QName.class) {
 				objectType = ValueType.QName;
-			} else if (c == XMLGregorianCalendar.class) {
+			} else if (obj instanceof XMLGregorianCalendar) {
 				objectType = ValueType.DateTime;
 			} else {
 				throw new RuntimeException("Cannot map object " + obj + " to any PropertyValueTypeDef");
@@ -219,7 +219,7 @@
 	public static Object prepareForSerialization(Object value) {
 		if(value != null) {
 			Class<?> c = value.getClass();
-			if (c == Duration.class || c == Period.class || c == QName.class || c == XMLGregorianCalendar.class) {
+			if (c == Duration.class || c == Period.class || c == QName.class || value instanceof XMLGregorianCalendar) {
 				return value.toString();
 			}
 		}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/OperationProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/OperationProvider.java
index a962722..70ddcd2 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/OperationProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/OperationProvider.java
@@ -144,10 +144,13 @@
 	private Object createInvocationResponseFromDirectResult(InvocationRequest request, Object directResult) {
 		// Get SubmodelElement output template
 		Collection<IOperationVariable> outputs = copyOutputVariables();
-		SubmodelElement outputElem = (SubmodelElement) outputs.iterator().next().getValue();
-		// Set result object
-		outputElem.setValue(directResult);
-
+		if(outputs.size() > 0)
+		{
+			SubmodelElement outputElem = (SubmodelElement) outputs.iterator().next().getValue();
+			// Set result object
+			outputElem.setValue(directResult);
+		};
+		
 		// Create and return InvokationResponse
 		return new InvocationResponse(request.getRequestId(), new ArrayList<>(), outputs, ExecutionState.COMPLETED);
 	}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/SubmodelProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/SubmodelProvider.java
index 3dcb31b..1097c1f 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/SubmodelProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/SubmodelProvider.java
@@ -93,9 +93,11 @@
 		path = VABPathTools.stripSlashes(path);
 		String submodelWithSlash = SUBMODEL + "/";
 		if (path.startsWith(submodelWithSlash)) {
-			path = path.replaceFirst("submodel/", "");
+			path = path.replaceFirst(submodelWithSlash, "");
 		} else if (path.equals(SUBMODEL)) {
 			path = "";
+		} else {
+			throw new MalformedRequestException("The request " + path + " is not allowed for this endpoint. /" + SUBMODEL + " is missing");
 		}
 		path = VABPathTools.stripSlashes(path);
 		return path;
@@ -127,7 +129,7 @@
 				path = removeSMElementPrefix(path);
 
                 if (endsWithValue(splitted)) { // Request for the value of an property
-                    String idShortPath = path.replaceFirst(Pattern.quote("/value"), "");
+                    String idShortPath = removeValueSuffix(path);
                     return submodelAPI.getSubmodelElementValue(idShortPath);
                 } else if (isInvocationListPath(splitted)) {
                     List<String> idShorts = getIdShorts(splitted);
@@ -163,6 +165,20 @@
 		return splitted[splitted.length - 1].equals(Property.VALUE);
 	}
 
+	/**
+     * Removes a trailing <code>/value</code> from the path if it exists.
+     *
+     * @param path The original path, which might or might not end on {@value Property.VALUE}.
+     * @return The new path
+     */
+    private String removeValueSuffix(String path) {
+        String suffix = "/" + Property.VALUE;
+        if (path.endsWith(suffix)) {
+            path = path.substring(0, path.length() - suffix.length());
+        }
+
+        return path;
+    }
 
 	private boolean isInvocationListPath(String[] splitted) {
 		return splitted.length > 2 && splitted[splitted.length - 2].equals(OperationProvider.INVOCATION_LIST);
@@ -173,11 +189,11 @@
 	public void setValue(String path, Object newValue) throws ProviderException {
 		path = removeSubmodelPrefix(path);
 		if (path.isEmpty()) {
-			throw new MalformedRequestException("Set on \"submodel\" not supported");
+			throw new MalformedRequestException("Set on \"" + SUBMODEL + "\" not supported");
 		} else {
 			String[] splitted = VABPathTools.splitPath(path);
 			path = removeSMElementPrefix(path);
-			String idshortPath = path.replaceFirst(Pattern.quote("/value"), "");
+			String idshortPath = removeValueSuffix(path);
 			if (endsWithValue(splitted)) {
 				submodelAPI.updateSubmodelElement(idshortPath, newValue);
 			} else {
@@ -215,7 +231,7 @@
 				throw new MalformedRequestException("Path " + path + " not supported for delete");
 			}
 		} else {
-			throw new MalformedRequestException("Path \"submodel\" not supported for delete");
+			throw new MalformedRequestException("Path \"" + SUBMODEL + "\" not supported for delete");
 		}
 	}
 
@@ -244,7 +260,7 @@
 					return submodelAPI.invokeOperation(path, parameters);
 				}
 			} else {
-				throw new MalformedRequestException("Given path '" + path + "' does not end in /invoke");
+				throw new MalformedRequestException("Given path '" + path + "' does not end in /" + Operation.INVOKE);
 			}
 		}
 	}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/provider/ProviderException.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/provider/ProviderException.java
index 8eb45b2..7e0e3af 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/provider/ProviderException.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/provider/ProviderException.java
@@ -22,39 +22,16 @@
 	 * Version information for serialized instances
 	 */
 	private static final long serialVersionUID = 1L;
-	
-	
-	/**
-	 * Store message
-	 */
-	protected String message = null;
-	
-	
-	/**
-	 * Constructor
-	 */
+
 	public ProviderException(String msg) {
-		// Store message
-		message = msg;
-	}
-	
-		
-	public ProviderException(Exception e) {
-		super(e);
+		super(msg);
 	}
 
+	public ProviderException(Throwable cause) {
+		super(cause);
+	}
 
 	public ProviderException(String message, Throwable cause) {
-		super(cause);
-		this.message = message;
-	}
-
-
-	/**
-	 * Return detailed message
-	 */
-	@Override
-	public String getMessage() {
-		return message;
+		super(message, cause);
 	}
 }
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/connector/HTTPConnector.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/connector/HTTPConnector.java
index 83f39cf..b1faddd 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/connector/HTTPConnector.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/connector/HTTPConnector.java
@@ -276,7 +276,11 @@
 	}
 
 	private ProviderException handleProcessingException(HttpMethod method, int statusCode) {
-		return ExceptionToHTTPCodeMapper.mapToException(statusCode, "[HTTP " + method.name() + "] Failed to request " + this.address + " with mediatype " + this.mediaType);
+		if (statusCode == 0) {
+			return ExceptionToHTTPCodeMapper.mapToException(404, "[HTTP " + method.name() + "] Failed to request " + this.address + " with mediatype " + this.mediaType);
+		} else {
+			return ExceptionToHTTPCodeMapper.mapToException(statusCode, "[HTTP " + method.name() + "] Failed to request " + this.address + " with mediatype " + this.mediaType);
+		}
 	}
 	
 	/**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/BaSyxHTTPServer.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/BaSyxHTTPServer.java
index a5eb5cc..3364aef 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/BaSyxHTTPServer.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/BaSyxHTTPServer.java
@@ -10,6 +10,7 @@
 package org.eclipse.basyx.vab.protocol.http.server;
 
 import java.io.File;
+import java.util.EnumSet;
 import java.util.Iterator;
 import java.util.Map.Entry;
 import java.util.UUID;
@@ -27,7 +28,7 @@
 import org.slf4j.LoggerFactory;
 
 /**
- * Starter Class for Apache Tomcat 8.0.53 HTTP server that adds the provided servlets and respective mappings on startup.
+ * Starter Class for Apache Tomcat HTTP server that adds the provided servlets and respective mappings on startup.
  * 
  * @author pschorn, espen, haque
  * 
@@ -41,6 +42,11 @@
 	static {
 		// Enable coding of forward slash in tomcat
 		System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true");
+		
+		// Throw exception on startup error, unless user explicitly disables it
+		if (System.getProperty("org.apache.catalina.startup.EXIT_ON_INIT_FAILURE") == null) {
+			System.setProperty("org.apache.catalina.startup.EXIT_ON_INIT_FAILURE", "true");
+		}
 	}
 	   
 	/**
@@ -116,10 +122,26 @@
 	
 	/**
 	 * Starts the server in a new thread to avoid blocking the main thread
+	 * 
+	 * <p>
+	 * This method blocks until the server is up and running.
+	 * 
+	 * <p>
+	 * If an error occurs during server startup the process is aborted and the method returns immediately. 
+	 * {@link #hasEnded()} returns <code>true</code> in this case.
+	 * <br>This behavior can be disabled by setting the system property 
+	 * <code>org.apache.catalina.startup.EXIT_ON_INIT_FAILURE = false</code>, for instance with the <code>-D</code> 
+	 * command line option when launching the JVM, or through {@link System#setProperty(String, String)} (before the 
+	 * first call to {@link BaSyxHTTPServer}). In this case the startup is finished regardless of any errors and 
+	 * subsequent calls to {@link #hasEnded()} return <code>false</code>, but the server might be left in an undefined 
+	 * and non-functional state.
+	 * 
+	 * <p>
+	 * TODO: Throw exception upon startup failure. This is a breaking change, so wait until next major version.
 	 */
 	public void start() {
 		logger.trace("Starting Tomcat.....");
-        
+		
 		Thread serverThread = new Thread(() -> {
 			try {
 				tomcat.stop();
@@ -141,20 +163,29 @@
 				// Keeps the server thread alive until the server is shut down
 				tomcat.getServer().await();
 			} catch (LifecycleException e) {
-				logger.error("Exception in start", e);
+				logger.error("Failed to start HTTP server.", e);
+				
+				synchronized (tomcat) {
+					tomcat.notifyAll();
+				}
 			}
 		});
 		serverThread.start();
-
+		
+		// Wait until tomcat is started before returning
+		EnumSet<LifecycleState> returnStates = EnumSet.of(LifecycleState.STARTED, LifecycleState.FAILED);
 		synchronized (tomcat) {
 			try {
-				tomcat.wait();
+				while (!returnStates.contains(tomcat.getServer().getState())) {
+					tomcat.wait();
+				}
 			} catch (InterruptedException e) {
-				logger.error("Exception in start", e);
+				logger.error("Interrupted while waiting for tomcat to start. Stopping tomcat.", e);
+				shutdown();
 			}
 		}
 	}
-	
+
 	/**
 	 * This Method stops and destroys the tomcat instance. This is important since Tomcat would be already 
 	 * bound to port 8080 when new tests are run that require a start of tomcat
@@ -171,5 +202,12 @@
 		}
 	}
 	
-	
+	/**
+	 * Returns a value indicating whether the server is currently running.
+	 * 
+	 * @return <code>false</code> if the server is running, <code>true</code> otherwise.
+	 */
+	public boolean hasEnded() {
+		return tomcat.getServer().getState() != LifecycleState.STARTED;
+	}
 }
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/DefaultHostNameVerifier.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/https/DefaultHostNameVerifier.java
similarity index 92%
rename from sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/DefaultHostNameVerifier.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/https/DefaultHostNameVerifier.java
index 7e0f876..1e2b34d 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/DefaultHostNameVerifier.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/https/DefaultHostNameVerifier.java
@@ -7,7 +7,7 @@
  * 
  * SPDX-License-Identifier: EPL-2.0
  ******************************************************************************/
-package org.eclipse.basyx.testsuite.regression.vab.protocol.https;
+package org.eclipse.basyx.vab.protocol.https;
 
 
 import javax.net.ssl.HostnameVerifier;
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/DefaultTrustManager.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/https/DefaultTrustManager.java
similarity index 93%
rename from sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/DefaultTrustManager.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/https/DefaultTrustManager.java
index 0cee46b..ceb09e5 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/DefaultTrustManager.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/https/DefaultTrustManager.java
@@ -7,7 +7,7 @@
  * 
  * SPDX-License-Identifier: EPL-2.0
  ******************************************************************************/
-package org.eclipse.basyx.testsuite.regression.vab.protocol.https;
+package org.eclipse.basyx.vab.protocol.https;
 
 import javax.net.ssl.X509TrustManager;
 import java.security.cert.X509Certificate;
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/HTTPSConnector.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/https/HTTPSConnector.java
similarity index 95%
rename from sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/HTTPSConnector.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/https/HTTPSConnector.java
index 0d6bd32..c88c7b6 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/HTTPSConnector.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/https/HTTPSConnector.java
@@ -7,7 +7,7 @@
  * 
  * SPDX-License-Identifier: EPL-2.0
  ******************************************************************************/
-package org.eclipse.basyx.testsuite.regression.vab.protocol.https;
+package org.eclipse.basyx.vab.protocol.https;
 
 import java.security.KeyManagementException;
 import java.security.NoSuchAlgorithmException;
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/HTTPSConnectorProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/https/HTTPSConnectorProvider.java
similarity index 93%
rename from sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/HTTPSConnectorProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/https/HTTPSConnectorProvider.java
index 3d63679..1a8e47e 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/HTTPSConnectorProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/https/HTTPSConnectorProvider.java
@@ -7,7 +7,7 @@
  * 
  * SPDX-License-Identifier: EPL-2.0
  ******************************************************************************/
-package org.eclipse.basyx.testsuite.regression.vab.protocol.https;
+package org.eclipse.basyx.vab.protocol.https;
 
 import org.eclipse.basyx.vab.coder.json.connector.JSONConnector;
 import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/JerseyHttpsClientFactory.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/https/JerseyHttpsClientFactory.java
similarity index 84%
rename from sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/JerseyHttpsClientFactory.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/https/JerseyHttpsClientFactory.java
index 6d68d2c..a698383 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/JerseyHttpsClientFactory.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/https/JerseyHttpsClientFactory.java
@@ -7,7 +7,7 @@
  * 
  * SPDX-License-Identifier: EPL-2.0
  ******************************************************************************/
-package org.eclipse.basyx.testsuite.regression.vab.protocol.https;
+package org.eclipse.basyx.vab.protocol.https;
 
 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.KeyManager;
@@ -15,6 +15,7 @@
 import javax.net.ssl.TrustManager;
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
+
 import java.security.KeyManagementException;
 import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
@@ -28,6 +29,7 @@
  *
  */
 public class JerseyHttpsClientFactory {
+	private static final String PROTOCOL = "TLSv1.2";
 
 	/**
 	 * Returns an HTTPS client
@@ -36,7 +38,7 @@
 	 * @throws NoSuchAlgorithmException
 	 */
     public static Client getJerseyHTTPSClient() throws KeyManagementException, NoSuchAlgorithmException {
-        SSLContext sslContext = getSslContext();
+        SSLContext sslContext = getSslContext(PROTOCOL);
         HostnameVerifier allHostsValid = new DefaultHostNameVerifier();
 
         return ClientBuilder.newBuilder()
@@ -47,14 +49,15 @@
 
     /**
      * Retrieves an SSL Context
-     * with TLSv1 protocol
+     * with given protocol
+     * @param protocol
      * @return
      * @throws NoSuchAlgorithmException
      * @throws KeyManagementException
      */
-    private static SSLContext getSslContext() throws NoSuchAlgorithmException,
+    private static SSLContext getSslContext(String protocol) throws NoSuchAlgorithmException,
                                                      KeyManagementException {
-        SSLContext sslContext = SSLContext.getInstance("TLSv1");
+        SSLContext sslContext = SSLContext.getInstance(protocol);
 
         KeyManager[] keyManagers = null;
         TrustManager[] trustManager = {new DefaultTrustManager()};
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/factory/aasx/AASXFactoryTest.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/factory/aasx/AASXFactoryTest.java
index 6a6925c..2939e97 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/factory/aasx/AASXFactoryTest.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/factory/aasx/AASXFactoryTest.java
@@ -10,6 +10,7 @@
 package org.eclipse.basyx.testsuite.regression.aas.factory.aasx;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.io.ByteArrayInputStream;
@@ -50,6 +51,7 @@
 
 	private static final String XML_PATH = "aasx/xml/content.xml";
 	private static final String ORIGIN_PATH = "aasx/aasx-origin";
+	private static final String EXTERNAL_FILE_URL = "http://localhost:8080/image.png";
 	
 	
 	private AssetAdministrationShell aas;
@@ -73,7 +75,7 @@
 		sm1 = new Submodel("sm1", new ModelUrn("SM1_ID"));
 		sm2 = new Submodel("sm2", new ModelUrn("SM2_ID"));
 		
-		File file1 = new File("http://localhost:8080/image.png", "image/png");
+        File file1 = new File(EXTERNAL_FILE_URL, "image/png");
 		file1.setIdShort("file1");
 		File file2 = new File("aasx/Document/docu.pdf", "application/pdf");
 		file2.setIdShort("file2");
@@ -98,16 +100,12 @@
 		assetList.add(asset);
 		
 		
-		byte[] content1 = {0,1,2,3,4};
-		InMemoryFile file = new InMemoryFile(content1, "/image.png");
+		byte[] content1 = {5,6,7,8,9};
+		InMemoryFile file = new InMemoryFile(content1, "/aasx/Document/docu.pdf");
 		fileList.add(file);
 		
-		byte[] content2 = {5,6,7,8,9};
-		file = new InMemoryFile(content2, "/aasx/Document/docu.pdf");
-		fileList.add(file);
-		
-		byte[] content3 = {10,11,12,13,14};
-		file = new InMemoryFile(content3, "aasx/Document/docu2.pdf");
+		byte[] content2 = {10,11,12,13,14};
+		file = new InMemoryFile(content2, "aasx/Document/docu2.pdf");
 		fileList.add(file);
 	}
 	
@@ -158,6 +156,7 @@
 			assertTrue(filePaths.contains(VABPathTools.stripSlashes(file.getPath())));
 		}
 		
+		assertFalse(filePaths.contains(VABPathTools.stripSlashes(EXTERNAL_FILE_URL)));	
 	}
 	
 }
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/factory/aasx/AASXPackageExplorerConformantHelperTest.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/factory/aasx/AASXPackageExplorerConformantHelperTest.java
new file mode 100644
index 0000000..f5d8910
--- /dev/null
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/factory/aasx/AASXPackageExplorerConformantHelperTest.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+* Copyright (C) 2021 the Eclipse BaSyx Authors
+*
+* This program and the accompanying materials are made
+* available under the terms of the Eclipse Public License 2.0
+* which is available at https://www.eclipse.org/legal/epl-2.0/
+*
+* SPDX-License-Identifier: EPL-2.0
+******************************************************************************/
+package org.eclipse.basyx.testsuite.regression.aas.factory.aasx;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.basyx.aas.factory.aasx.AASXPackageExplorerConformantHelper;
+import org.eclipse.basyx.aas.metamodel.api.IAssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.api.parts.asset.AssetKind;
+import org.eclipse.basyx.aas.metamodel.map.AasEnv;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.CustomId;
+import org.eclipse.basyx.aas.metamodel.map.parts.Asset;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IKey;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.junit.Test;
+
+/**
+ * 
+ * @author fried
+ *
+ */
+public class AASXPackageExplorerConformantHelperTest {
+	@Test
+	public void testRemoveAASRefInSubmodelRef() {
+		Key submodelKey = createDummySubmodelKey();
+		AssetAdministrationShell testAAS = createAASWithSingleSubmodelReferenceContainingAASKey(submodelKey);
+
+		AasEnv env = AASXPackageExplorerConformantHelper.adapt(Collections.singleton(testAAS), Collections.emptyList(),
+				Collections.emptyList(), Collections.emptyList());
+
+		assertAASKeyRemovedFromSubmodelReferences(submodelKey, env);
+	}
+
+	private Key createDummySubmodelKey() {
+		return new Key(KeyElements.SUBMODEL, false, "testSubmodel", IdentifierType.CUSTOM);
+	}
+
+	private void assertAASKeyRemovedFromSubmodelReferences(Key submodelKey, AasEnv env) {
+		Collection<IAssetAdministrationShell> convertedAASs = env.getAssetAdministrationShells();
+		assertEquals(1, convertedAASs.size());
+
+		IAssetAdministrationShell convertedAAS = convertedAASs.iterator().next();
+		Collection<IReference> convertedReferences = convertedAAS.getSubmodelReferences();
+		assertEquals(1, convertedReferences.size());
+
+		Reference expected = new Reference(submodelKey);
+		assertEquals(expected, convertedReferences.iterator().next());
+	}
+
+	private AssetAdministrationShell createAASWithSingleSubmodelReferenceContainingAASKey(Key submodelKey) {
+		AssetAdministrationShell testAAS = createDummyAAS("testAAS");
+
+		Reference submodelReference = createSubmodelReference(testAAS, submodelKey);
+
+		testAAS.addSubmodelReference(submodelReference);
+		return testAAS;
+	}
+
+	private Reference createSubmodelReference(IAssetAdministrationShell aas, Key submodelKey) {
+		Key aasKey = createDummyAASKey(aas);
+
+		List<IKey> keys = Arrays.asList(aasKey, submodelKey);
+
+		return new Reference(keys);
+	}
+
+	private AssetAdministrationShell createDummyAAS(final String aasId) {
+		return new AssetAdministrationShell("testAASIdShort", new CustomId(aasId),
+				new Asset("testAssetIdShort", new CustomId("testAsset"), AssetKind.INSTANCE));
+	}
+
+	private Key createDummyAASKey(IAssetAdministrationShell aas) {
+		IIdentifier identifier = aas.getIdentification();
+		return new Key(KeyElements.ASSETADMINISTRATIONSHELL, false, identifier.getId(), identifier.getIdType());
+	}
+}
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/factory/xml/TestXMLConverter.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/factory/xml/TestXMLConverter.java
index 47ce3c5..6f27053 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/factory/xml/TestXMLConverter.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/factory/xml/TestXMLConverter.java
@@ -35,9 +35,11 @@
 import org.eclipse.basyx.submodel.metamodel.api.ISubmodel;
 import org.eclipse.basyx.submodel.metamodel.api.dataspecification.IDataSpecificationContent;
 import org.eclipse.basyx.submodel.metamodel.api.dataspecification.IEmbeddedDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
 import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
 import org.eclipse.basyx.submodel.metamodel.api.parts.IConceptDescription;
 import org.eclipse.basyx.submodel.metamodel.api.qualifier.IHasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.haskind.ModelingKind;
 import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IConstraint;
 import org.eclipse.basyx.submodel.metamodel.api.reference.IKey;
 import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
@@ -45,12 +47,16 @@
 import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyType;
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IDataElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IRange;
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.entity.EntityType;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperationVariable;
 import org.eclipse.basyx.submodel.metamodel.map.Submodel;
 import org.eclipse.basyx.submodel.metamodel.map.dataspecification.DataSpecificationIEC61360Content;
 import org.eclipse.basyx.submodel.metamodel.map.parts.ConceptDescription;
 import org.eclipse.basyx.submodel.metamodel.map.qualifier.LangStrings;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.Capability;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.Blob;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.File;
@@ -72,6 +78,7 @@
 public class TestXMLConverter {
 
 	private String xmlInPath = "src/test/resources/aas/factory/xml/in.xml";
+	private String xmlInExternalAllowedPath = "src/test/resources/aas/factory/xml/inExternalAllowed.xml";
 	
 	private XMLToMetamodelConverter converter;
 	
@@ -142,6 +149,50 @@
 		checkSubmodels(converterWithoutTypes.parseSubmodels());
 	}
 	
+	@SuppressWarnings("unchecked")
+	@Test
+	public void testBuildExternalAllowedXML() throws Exception {
+		String xml = new String(Files.readAllBytes(Paths.get(xmlInExternalAllowedPath)));
+		converter = new XMLToMetamodelConverter(xml);
+		//Convert the in.xml to Objects
+		List<IAssetAdministrationShell> assetAdministrationShellList = converter.parseAAS();
+		List<IAsset> assetList = converter.parseAssets();
+		List<IConceptDescription> conceptDescriptionList = converter.parseConceptDescriptions();
+		List<ISubmodel> submodelList = converter.parseSubmodels();
+		
+		IAssetAdministrationShell secondShell = assetAdministrationShellList.get(1);
+		
+		assertEquals("", secondShell.getIdShort());
+		IIdentifier identifier = secondShell.getIdentification();
+		assertEquals(IdentifierType.CUSTOM, identifier.getIdType());
+		assertEquals("", identifier.getId());
+		IKey key = secondShell.getAssetReference().getKeys().get(0);
+		assertEquals(KeyElements.REFERENCEELEMENT, key.getType());
+		assertEquals(KeyType.IRI, key.getIdType());
+		
+		IAsset asset = assetList.get(1);
+		assertEquals(IdentifierType.IRI, asset.getIdentification().getIdType());
+		
+		IProperty property1 = submodelList.get(0).getProperties().get("rotationSpeed");
+		assertEquals(ValueType.AnySimpleType, property1.getValueType());
+
+		IProperty property2 = submodelList.get(0).getProperties().get("emptyDouble");
+		assertEquals(ValueType.AnyURI, property2.getValueType());
+		
+		IProperty property3 = submodelList.get(0).getProperties().get("emptyDouble2");
+		assertEquals(ValueType.DateTime, property3.getValueType());
+		
+		IRange range = Range.createAsFacade((Map<String, Object>) submodelList.get(0).getSubmodelElement("range_id"));
+		assertEquals(ValueType.Double, range.getValueType());
+		
+		IOperation operation = Operation.createAsFacade((Map<String, Object>) submodelList.get(0).getSubmodelElement("operation_ID"));
+		assertEquals(ModelingKind.TEMPLATE, operation.getInOutputVariables().iterator().next().getValue().getModelingKind());
+		
+		IDataSpecificationContent content = conceptDescriptionList.get(0).getEmbeddedDataSpecifications().iterator().next().getContent();
+		DataSpecificationIEC61360Content parsed = DataSpecificationIEC61360Content.createAsFacade((Map<String, Object>) content);
+		assertEquals("Only Description", parsed.getShortName().get("EN"));  
+	}
+	
 	private void checkAASs(List<IAssetAdministrationShell> aasList) {
 		assertEquals(2, aasList.size());
 		
@@ -343,7 +394,7 @@
 	private void checkSubmodelElements(ISubmodel submodel) {
 		Map<String, ISubmodelElement> submodelElements = (Map<String, ISubmodelElement>)
 				((Map<String, Object>)submodel).get(Submodel.SUBMODELELEMENT);
-		assertEquals(13, submodelElements.size());
+				assertEquals(14, submodelElements.size());
 		
 		ISubmodelElement element = submodelElements.get("rotationSpeed");
 		assertTrue(element instanceof Property);
@@ -367,6 +418,9 @@
 		keys = basicEvent.getObserved().getKeys();
 		assertEquals(1, keys.size());
 		assertEquals("http://www.zvei.de/demo/submodelDefinitions/87654346", keys.get(0).getValue());
+
+		element = submodelElements.get("capability_id");
+		assertTrue(element instanceof Capability);
 		
 		element = submodelElements.get("entity_id");
 		assertTrue(element instanceof Entity);
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/manager/TestAASHTTP.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/manager/TestAASHTTP.java
index fff8642..a4c467c 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/manager/TestAASHTTP.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/manager/TestAASHTTP.java
@@ -133,7 +133,7 @@
 
 		Map<String, ISubmodelElement> elements = sm.getSubmodelElements();
 		// 2 properties, 4 operations, 1 collection
-		assertEquals(8, elements.size());
+		assertEquals(9, elements.size());
 
 	}
 }
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/restapi/MultiSubmodelProviderTest.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/restapi/MultiSubmodelProviderTest.java
index 87c1b84..af618f9 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/restapi/MultiSubmodelProviderTest.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/restapi/MultiSubmodelProviderTest.java
@@ -26,6 +26,7 @@
 import org.eclipse.basyx.submodel.restapi.SubmodelProvider;
 import org.eclipse.basyx.testsuite.regression.submodel.restapi.SimpleAASSubmodel;
 import org.eclipse.basyx.testsuite.regression.vab.manager.VABConnectionManagerStub;
+import org.eclipse.basyx.vab.exception.provider.MalformedRequestException;
 import org.eclipse.basyx.vab.exception.provider.ProviderException;
 import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 import org.junit.Before;
@@ -59,10 +60,7 @@
 		stub.addProvider(urn, "", provider);
 		proxy = stub.connectToVABElement(urn);
 	}
-
-	/**
-	 * Run JUnit test case
-	 */
+	
 	@Test
 	public void invokeExceptionTest() {
 		// Invoke operationEx1
@@ -77,6 +75,19 @@
 			fail();
 		} catch (ProviderException e) {}
 	}
+	
+	@Test
+	public void invalidPathPrefixInvokeTest() {
+		try {
+			proxy.invokeOperation("/aas/submodelX/SimpleAASSubmodel/submodel/submodelElements/complex/" + Operation.INVOKE, 10, 3);
+			fail();
+		} catch (MalformedRequestException e) {}
+		
+		try {
+			proxy.invokeOperation("/abc/submodels/SimpleAASSubmodel/submodel/submodelElements/complex/" + Operation.INVOKE, 10, 3);
+			fail();
+		} catch (MalformedRequestException e) {}
+	}
 
 	@Test
 	public void invokeTest() {
@@ -93,6 +104,19 @@
 
 		getTestRunner("SimpleAASSubmodel");
 	}
+	
+	@Test
+	public void invalidPathPrefixGetTest() {
+		try {
+			proxy.getValue("/aas/submodelX/SimpleAASSubmodel/submodel/");
+			fail();
+		} catch (MalformedRequestException e) {}
+		
+		try {
+			proxy.getValue("/abc/submodel/SimpleAASSubmodel/submodel/");
+			fail();
+		} catch (MalformedRequestException e) {}
+	}
 
 	@Test
 	public void updateSubmodelTest() {
@@ -108,6 +132,21 @@
 		String newId = shell.getSubmodels().get("TestSM").getIdentification().getId();
 		assertEquals("TestId2", newId);
 	}
+	
+	@Test
+	public void invalidPathPrefixSetTest() {
+		Submodel sm = new SimpleAASSubmodel("TestSM");
+		sm.setIdentification(IdentifierType.CUSTOM, "TestId");
+		try {
+			proxy.setValue("/aas/submodelX/" + sm.getIdShort(), sm);
+			fail();
+		} catch (MalformedRequestException e) {}
+		
+		try {
+			proxy.setValue("/abc/submodels/" + sm.getIdShort(), sm);
+			fail();
+		} catch (MalformedRequestException e) {}
+	}
 
 	@Test
 	public void createDeleteSubmodelTest() {
@@ -136,6 +175,22 @@
 			// Expected
 		}
 	}
+	
+	@Test
+	public void invalidPathPrefixDeleteTest() {
+		Submodel sm = new SimpleAASSubmodel("TestSM");
+		sm.setIdentification(IdentifierType.CUSTOM, "TestId");
+		try {
+			proxy.deleteValue("/aas/submodelX/SimpleAASSubmodel");
+			fail();
+		} catch (MalformedRequestException e) {}
+		
+		try {
+			proxy.deleteValue("/aas/submodelX/SimpleAASSubmodel");
+			fail();
+		} catch (MalformedRequestException e) {}
+	}
+
 
 	private void getTestRunner(String smId) {
 		// Get property value
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/factory/xml/converters/submodelelement/operation/TestOperationXMLConverter.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/factory/xml/converters/submodelelement/operation/TestOperationXMLConverter.java
new file mode 100644
index 0000000..f1c1a78
--- /dev/null
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/factory/xml/converters/submodelelement/operation/TestOperationXMLConverter.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+* Copyright (C) 2021 the Eclipse BaSyx Authors
+* 
+* This program and the accompanying materials are made
+* available under the terms of the Eclipse Public License 2.0
+* which is available at https://www.eclipse.org/legal/epl-2.0/
+
+* 
+* SPDX-License-Identifier: EPL-2.0
+******************************************************************************/
+
+package org.eclipse.basyx.testsuite.regression.submodel.factory.xml.converters.submodelelement.operation;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.basyx.submodel.factory.xml.converters.qualifier.ReferableXMLConverter;
+import org.eclipse.basyx.submodel.factory.xml.converters.submodelelement.operation.OperationXMLConverter;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.Operation;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.OperationVariable;
+import org.junit.Test;
+
+/**
+ * This class tests {@link OperationXMLConverter}
+ * @author haque
+ *
+ */
+public class TestOperationXMLConverter {
+
+	@Test
+	public void testParseOperationWithoutVariables() {
+		String idShort = "operation_ID";
+		Map<String, Object> operationMap = new HashMap<String, Object>();
+		operationMap.put(ReferableXMLConverter.ID_SHORT, "operation_ID");
+		Operation parsedOperation = OperationXMLConverter.parseOperation(operationMap);
+		assertEquals(idShort, parsedOperation.getIdShort());
+		assertEquals(new ArrayList<OperationVariable>(), parsedOperation.getInputVariables());
+		assertEquals(new ArrayList<OperationVariable>(), parsedOperation.getOutputVariables());
+		assertEquals(new ArrayList<OperationVariable>(), parsedOperation.getInOutputVariables());		
+	}
+}
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/connected/TestConnectedSubmodel.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/connected/TestConnectedSubmodel.java
index 0c56bc7..fa79a2f 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/connected/TestConnectedSubmodel.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/connected/TestConnectedSubmodel.java
@@ -30,7 +30,7 @@
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.OperationVariable;
 import org.eclipse.basyx.submodel.restapi.SubmodelProvider;
 import org.eclipse.basyx.testsuite.regression.submodel.metamodel.TestSubmodelSuite;
-import org.eclipse.basyx.testsuite.regression.vab.manager.VABConnectionManagerStub;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProvider;
 import org.eclipse.basyx.vab.support.TypeDestroyer;
 import org.eclipse.basyx.vab.support.TypeDestroyingProvider;
@@ -77,7 +77,7 @@
 		SubmodelProvider provider = new SubmodelProvider(new TypeDestroyingProvider(new VABLambdaProvider(reference)));
 
 		// Create the ConnectedSubmodel based on the manager
-		submodel = new ConnectedSubmodel(new VABConnectionManagerStub(provider).connectToVABElement(""));
+		submodel = new ConnectedSubmodel(new VABElementProxy("/" + SubmodelProvider.SUBMODEL, provider));
 	}
 
 	/**
@@ -119,7 +119,8 @@
 		SubmodelProvider provider = new SubmodelProvider(new TypeDestroyingProvider(new VABLambdaProvider(reference)));
 
 		// Create the ConnectedSubmodel based on the manager
-		ConnectedSubmodel cSM = new ConnectedSubmodel(new VABConnectionManagerStub(provider).connectToVABElement(""));
+		VABElementProxy smProxy = new VABElementProxy("/" + SubmodelProvider.SUBMODEL, provider);
+		ConnectedSubmodel cSM = new ConnectedSubmodel(smProxy);
 
 		Object expected = TypeDestroyer.destroyType(reference);
 		Object actual = cSM.getLocalCopy();
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/connected/submodelelement/TestConnectedSubmodelElementFactory.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/connected/submodelelement/TestConnectedSubmodelElementFactory.java
index 0cdb7b9..866c64b 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/connected/submodelelement/TestConnectedSubmodelElementFactory.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/connected/submodelelement/TestConnectedSubmodelElementFactory.java
@@ -18,6 +18,7 @@
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IProperty;
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
+import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.ConnectedCapability;
 import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.ConnectedSubmodelElementCollection;
 import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.ConnectedSubmodelElementFactory;
 import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.dataelement.ConnectedBlob;
@@ -30,6 +31,7 @@
 import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.operation.ConnectedOperation;
 import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.relationship.ConnectedRelationshipElement;
 import org.eclipse.basyx.submodel.metamodel.map.Submodel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.Capability;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.Blob;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.File;
@@ -40,8 +42,8 @@
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.event.BasicEvent;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.Operation;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.relationship.RelationshipElement;
-import org.eclipse.basyx.submodel.restapi.SubmodelProvider;
 import org.eclipse.basyx.submodel.restapi.MultiSubmodelElementProvider;
+import org.eclipse.basyx.submodel.restapi.SubmodelProvider;
 import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProvider;
 import org.eclipse.basyx.vab.support.TypeDestroyingProvider;
@@ -64,6 +66,7 @@
 	private static final String RANGE_ID = "RangeId";
 	private static final String REFELEMENT_ID = "RefElementId";
 	private static final String BASICEVENT_ID = "BasicEventId";
+	private static final String CAPABILITY_ID = "CapabilityId";
 	private static final String OPERATION_ID = "OperationId";
 	private static final String RELELEMENT_ID = "RelElementId";
 	private static final String SMELEMCOLLECTION_ID = "SmElemCollectionId";	
@@ -87,7 +90,8 @@
 		
 		values.put(Submodel.SUBMODELELEMENT, submodelElements);
 		
-		proxy = new VABElementProxy("", new SubmodelProvider(new TypeDestroyingProvider(new VABLambdaProvider(values))));
+		proxy = new VABElementProxy("/" + SubmodelProvider.SUBMODEL,
+				new SubmodelProvider(new TypeDestroyingProvider(new VABLambdaProvider(values))));
 	}
 	
 	/**
@@ -148,7 +152,10 @@
 		BasicEvent basicEvent = new BasicEvent();
 		basicEvent.setIdShort(BASICEVENT_ID);
 		ret.put(BASICEVENT_ID, basicEvent);
-		
+
+		Capability capability = new Capability();
+		capability.setIdShort(CAPABILITY_ID);
+		ret.put(CAPABILITY_ID, capability);
 		
 		RelationshipElement relElement = new RelationshipElement();
 		relElement.setIdShort(RELELEMENT_ID);
@@ -196,7 +203,7 @@
 				ConnectedSubmodelElementFactory.getConnectedSubmodelElements(
 						proxy, Submodel.SUBMODELELEMENT, Submodel.SUBMODELELEMENT);
 		
-		assertEquals(10, submodelElements.size());
+		assertEquals(11, submodelElements.size());
 		assertTrue(submodelElements.get(PROPERTY_ID) instanceof ConnectedProperty);
 		assertTrue(submodelElements.get(BLOB_ID) instanceof ConnectedBlob);
 		assertTrue(submodelElements.get(FILE_ID) instanceof ConnectedFile);
@@ -205,6 +212,7 @@
 		assertTrue(submodelElements.get(REFELEMENT_ID) instanceof ConnectedReferenceElement);
 		assertTrue(submodelElements.get(OPERATION_ID) instanceof ConnectedOperation);
 		assertTrue(submodelElements.get(BASICEVENT_ID) instanceof ConnectedBasicEvent);
+		assertTrue(submodelElements.get(CAPABILITY_ID) instanceof ConnectedCapability);
 		assertTrue(submodelElements.get(RELELEMENT_ID) instanceof ConnectedRelationshipElement);
 		assertTrue(submodelElements.get(SMELEMCOLLECTION_ID) instanceof ConnectedSubmodelElementCollection);
 	}
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/map/qualifier/qualifiable/TestQualifier.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/map/qualifier/qualifiable/TestQualifier.java
index 3b9cbad..2e2f017 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/map/qualifier/qualifiable/TestQualifier.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/map/qualifier/qualifiable/TestQualifier.java
@@ -10,10 +10,11 @@
 package org.eclipse.basyx.testsuite.regression.submodel.metamodel.map.qualifier.qualifiable;
 
 import static org.junit.Assert.assertEquals;
-
+import java.util.HashMap;
 import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
 import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
 import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
+import org.eclipse.basyx.submodel.metamodel.map.modeltype.ModelType;
 import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Qualifier;
 import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetype.ValueType;
@@ -95,4 +96,11 @@
 		qualifier.setSemanticId(reference);
 		assertEquals(reference, qualifier.getSemanticId());
 	}
+	
+	@SuppressWarnings("unchecked")
+    @Test
+    public void testModelType() {
+	    HashMap<String, Object> modelType = (HashMap<String, Object>)qualifier.get(ModelType.MODELTYPE);
+        assertEquals(Qualifier.MODELTYPE, modelType.get(ModelType.NAME));
+    }
 }
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/map/submodelelement/dataelement/property/TestProperty.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/map/submodelelement/dataelement/property/TestProperty.java
index 97e3270..17891dc 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/map/submodelelement/dataelement/property/TestProperty.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/metamodel/map/submodelelement/dataelement/property/TestProperty.java
@@ -16,10 +16,16 @@
 import java.math.BigInteger;
 import java.time.Duration;
 import java.time.LocalDate;
+import java.time.LocalTime;
 import java.time.Month;
 import java.time.Period;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
 import java.util.Collections;
-
+import java.util.GregorianCalendar;
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+import javax.xml.datatype.XMLGregorianCalendar;
 import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
 import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
 import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
@@ -79,7 +85,7 @@
 	} 
 	
 	@Test
-	public void testSet(){
+	public void testSet() throws DatatypeConfigurationException{
 		Property booleanProp = new Property();
 		Boolean isSomething = true;
 		booleanProp.setValue(isSomething);
@@ -111,6 +117,13 @@
 		bigNumberProp.setValue(bignumber);
 		assertEquals(bignumber, bigNumberProp.getValue());
 		assertEquals(ValueType.PositiveInteger, bigNumberProp.getValueType());
+		
+		Property dateProp = new Property();
+		GregorianCalendar dateValue = GregorianCalendar.from(ZonedDateTime.of(birthday, LocalTime.MIDNIGHT, ZoneId.of("UTC")));
+		XMLGregorianCalendar xmlDateValue = DatatypeFactory.newInstance().newXMLGregorianCalendar(dateValue);
+		dateProp.setValue(xmlDateValue);
+		assertEquals("1960-01-01T00:00:00.000Z", dateProp.get(Property.VALUE));
+		assertEquals(xmlDateValue, dateProp.getValue());
 	}
 
 	@Test
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/restapi/SimpleAASSubmodel.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/restapi/SimpleAASSubmodel.java
index 9257cef..c6c8949 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/restapi/SimpleAASSubmodel.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/restapi/SimpleAASSubmodel.java
@@ -11,6 +11,7 @@
 
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.List;
 import java.util.function.Function;
 
 import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
@@ -34,6 +35,11 @@
 
 	public static final String INTPROPIDSHORT = "integerProperty";
 	public static final String OPERATIONSIMPLEIDSHORT = "simple";
+	public static final List<String> KEYWORDS = Collections.unmodifiableList(Arrays.asList(
+	        Property.MODELTYPE, Property.VALUETYPE, Property.VALUE, Property.VALUEID,
+	        Submodel.MODELTYPE, Submodel.SUBMODELELEMENT,
+	        Operation.MODELTYPE, Operation.INVOKE, Operation.OUT, Operation.IN, Operation.INOUT, Operation.INVOKABLE,
+	        SubmodelElementCollection.MODELTYPE, SubmodelElementCollection.ALLOWDUPLICATES, SubmodelElementCollection.ORDERED));
 
 	public SimpleAASSubmodel() {
 		this("SimpleAASSubmodel");
@@ -111,5 +117,10 @@
 		containerPropRoot.setIdShort("containerRoot");
 		containerPropRoot.addSubmodelElement(containerProp);
 		addSubmodelElement(containerPropRoot);
+
+		// Create various submodel elements with keywords in their idShorts
+		SubmodelElementCollection containerKeywords = new SubmodelElementCollection();
+		containerKeywords.setIdShort("keywords");
+        addSubmodelElement(containerKeywords);
 	}
 }
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/restapi/SubmodelProviderTest.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/restapi/SubmodelProviderTest.java
index 02406d0..2d2d07b 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/restapi/SubmodelProviderTest.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/submodel/restapi/SubmodelProviderTest.java
@@ -20,14 +20,18 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.function.Function;
 
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
 import org.eclipse.basyx.submodel.metamodel.facade.SubmodelElementMapCollectionConverter;
 import org.eclipse.basyx.submodel.metamodel.map.Submodel;
 import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
 import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetype.ValueType;
 import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetype.ValueTypeHelper;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.Operation;
 import org.eclipse.basyx.submodel.restapi.MultiSubmodelElementProvider;
 import org.eclipse.basyx.submodel.restapi.OperationProvider;
 import org.eclipse.basyx.submodel.restapi.SubmodelProvider;
@@ -48,6 +52,7 @@
 public class SubmodelProviderTest {
 	private VABConnectionManager connManager;
 	protected static final String submodelAddr = "urn:fhg:es.iese:aas:1:1:submodel";
+	protected static final String SMPROVIDER_PATH_PREFIX = "/" + SubmodelProvider.SUBMODEL + "/";
 
 	protected VABConnectionManager getConnectionManager() {
 		if (connManager == null) {
@@ -63,23 +68,91 @@
 	}
 
 	/**
+	 * Tests all basic submodel operations with idShorts composed of various keywords.
+	 *
+	 * <p>
+	 * The test counts as successful if it finished without any exceptions thrown.
+	 */
+	public void testPropertyIdShortsWithKeywords() {
+	    final String base_path = SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/keywords/";
+	    VABElementProxy submodelElement = getConnectionManager().connectToVABElement(submodelAddr);
+
+	    for (String keyword : SimpleAASSubmodel.KEYWORDS) {
+	        Property prop = new Property();
+	        prop.setIdShort(keyword + "Property");
+	        prop.setValueType(ValueType.String);
+	        prop.setValue(null);
+
+	        String path = base_path + prop.getIdShort();
+	        submodelElement.setValue(path, prop);
+	        submodelElement.getValue(path);
+	        submodelElement.setValue(path + "/value", "Test");
+	        submodelElement.deleteValue(path);
+	    }
+	}
+
+	public void testOperationIdShortsWithKeywords() {
+		final String base_path = SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/keywords/";
+		VABElementProxy submodelElement = getConnectionManager().connectToVABElement(submodelAddr);
+	    for (String keyword : SimpleAASSubmodel.KEYWORDS) {
+            Operation op = new Operation();
+            op.setIdShort(keyword + "Operation");
+			op.setInvokable((Function<Object[], Object>) x -> {
+				return null;
+            });
+
+            Map<String, Object> param = wrapParameter("argument", 5);
+
+            String path = base_path + op.getIdShort();
+            submodelElement.setValue(path, op);
+            submodelElement.getValue(path);
+            submodelElement.invokeOperation(path + "/invoke", param);
+            submodelElement.deleteValue(path);
+        }
+	}
+
+	@Test
+	public void testSMElementCollectionIdShortWithKeywords() {
+		final String base_path = SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/keywords/";
+		VABElementProxy submodelElement = getConnectionManager().connectToVABElement(submodelAddr);
+
+	    for (String keyword : SimpleAASSubmodel.KEYWORDS) {
+            SubmodelElementCollection smc = new SubmodelElementCollection();
+            smc.setIdShort(keyword + "Property");
+
+            Property prop = new Property(500);
+            prop.setIdShort("testProp");
+
+            String path = base_path + smc.getIdShort();
+            submodelElement.setValue(path, smc);
+            submodelElement.setValue(path + "/" + prop.getIdShort(), prop);
+            submodelElement.getValue(path);
+            submodelElement.deleteValue(path);
+        }
+	}
+
+	/**
 	 * Tests accessing different paths that should be supported
 	 * @throws Exception 
 	 */
 	@Test
 	public void testPathsRaw() throws Exception {
 		SubmodelProvider provider = new SubmodelProvider(new SimpleAASSubmodel("mySubmodelId"));
-		provider.getValue("/submodel");
-		provider.getValue("/submodel/");
+		provider.getValue("/" + SubmodelProvider.SUBMODEL);
+		provider.getValue(SMPROVIDER_PATH_PREFIX);
+	}
 
+	@Test
+	public void testInvalidGetPath() {
+		VABElementProxy smProxy = getConnectionManager().connectToVABElement(submodelAddr);
 		try {
-			provider.getValue("invalid");
+			smProxy.getValue("");
 			fail();
-		} catch (Exception e) {
-			
+		} catch (MalformedRequestException e) {
 		}
 	}
 
+
 	/**
 	 * Test creating single property
 	 */
@@ -90,14 +163,38 @@
 		// Create element
 		Property prop = new Property(500);
 		prop.setIdShort("newProperty");
-		submodelElement.setValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/newProperty", prop);
+		submodelElement.setValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/newProperty", prop);
 
 		// Read back value
 		Integer result = (Integer) submodelElement
-				.getValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/newProperty/value");
+				.getValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/newProperty/value");
 		assertEquals(500, result.intValue());
 	}
 
+	@Test
+	public void testCreatePath() {
+		VABElementProxy smProxy = getConnectionManager().connectToVABElement(submodelAddr);
+		Property prop = new Property(500);
+		prop.setIdShort("newProperty");
+		try {
+			smProxy.createValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/newProperty", prop);
+			fail();
+		} catch (MalformedRequestException e) {
+		}
+	}
+
+	@Test
+	public void testInvalidSetPath() {
+		VABElementProxy smProxy = getConnectionManager().connectToVABElement(submodelAddr);
+		Property prop = new Property(500);
+		prop.setIdShort("newProperty");
+		try {
+			smProxy.setValue(MultiSubmodelElementProvider.ELEMENTS + "/newProperty", prop);
+			fail();
+		} catch (MalformedRequestException e) {
+		}
+	}
+
 	/**
 	 * Test updating a full property
 	 */
@@ -107,15 +204,16 @@
 
 		// Create element
 		Property prop = new Property("newProperty", 500);
-		submodelElement.setValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/newProperty", prop);
+		submodelElement.setValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/newProperty", prop);
 		
 		// Update element
 		Property updatedProp = new Property("newProperty", 400);
-		submodelElement.setValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/newProperty", updatedProp);
+		submodelElement.setValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/newProperty",
+				updatedProp);
 
 		// Read back value
 		Integer result = (Integer) submodelElement
-				.getValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/newProperty/value");
+				.getValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/newProperty/value");
 		assertEquals(400, result.intValue());
 	}
 
@@ -129,19 +227,24 @@
 		// Create element
 		Property prop = new Property(500);
 		prop.setIdShort("newProperty");
-		submodelElement.setValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/containerRoot/newProperty", prop);
+		submodelElement.setValue(
+				SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/containerRoot/newProperty", prop);
 		
 		// Read back value
 		Integer result = (Integer) submodelElement
-				.getValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/containerRoot/newProperty/value");
+				.getValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS
+						+ "/containerRoot/newProperty/value");
 		assertEquals(500, result.intValue());
 
 
-		submodelElement.setValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/containerRoot/container/newProperty", prop);
+		submodelElement.setValue(
+				SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/containerRoot/container/newProperty",
+				prop);
 
 		// Read back value
 		result = (Integer) submodelElement
-				.getValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/containerRoot/container/newProperty/value");
+				.getValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS
+						+ "/containerRoot/container/newProperty/value");
 		assertEquals(500, result.intValue());
 	}
 
@@ -152,16 +255,19 @@
 		// Create element
 		Property prop = new Property("newProperty", 500);
 		submodelElement.setValue(
-				"/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/containerRoot/container/newProperty", prop);
+				SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/containerRoot/container/newProperty",
+				prop);
 
 		// Update element
 		Property prop2 = new Property("newProperty", 400);
 		submodelElement.setValue(
-				"/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/containerRoot/container/newProperty", prop2);
+				SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/containerRoot/container/newProperty",
+				prop2);
 
 		// Read back value
 		Integer result = (Integer) submodelElement.getValue(
-				"/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/containerRoot/container/newProperty/value");
+				SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS
+						+ "/containerRoot/container/newProperty/value");
 		assertEquals(400, result.intValue());
 	}
 
@@ -174,34 +280,36 @@
 		VABElementProxy submodelElement = getConnectionManager().connectToVABElement(submodelAddr);
 
 		// Read list of properties
-		Object result = submodelElement.getValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "");
+		Object result = submodelElement.getValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "");
 		Collection<Map<String, Object>> propertySet = (Collection<Map<String, Object>>) result;
 		Map<String, Object> property = propertySet.stream().filter(elem -> elem.get(Identifiable.IDSHORT).equals("integerProperty")).findFirst().get();
 		assertEquals(123, property.get(Property.VALUE));
 
 		// Read whole property
-		result = submodelElement.getValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/integerProperty");
+		result = submodelElement
+				.getValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/integerProperty");
 		property = (Map<String, Object>) result;
 		assertEquals(123, property.get(Property.VALUE));
 
 		// Read idShort
-		result = submodelElement.getValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/stringProperty");
+		result = submodelElement
+				.getValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/stringProperty");
 		property = (Map<String, Object>) result;
 		assertEquals("stringProperty", property.get(Identifiable.IDSHORT));
 
 		// Read single value
 		String resString = (String) submodelElement
-				.getValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/stringProperty/value");
+				.getValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/stringProperty/value");
 		assertEquals("Test", resString);
 
 		// Read null value
 		Object resObject = submodelElement
-				.getValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/nullProperty/value");
+				.getValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/nullProperty/value");
 		assertEquals(null, resObject);
 
 		// Read container property
 		Collection<Object> resSet = (Collection<Object>) submodelElement
-				.getValue("/submodel/submodelElements/containerRoot/value");
+				.getValue(SMPROVIDER_PATH_PREFIX + "submodelElements/containerRoot/value");
 		assertEquals(1, resSet.size());
 		
 		// Get Collection from root-Collection
@@ -219,7 +327,7 @@
 		assertEquals(123, ((Property) containerValue.get("integerProperty")).getValue());
 
 		// Read nested property
-		String pathToNestedContainer = "/submodel/submodelElements/containerRoot/container";
+		String pathToNestedContainer = SMPROVIDER_PATH_PREFIX + "submodelElements/containerRoot/container";
 		String pathToNestedProperty = pathToNestedContainer + "/integerProperty/";
 		result = submodelElement.getValue(pathToNestedProperty);
 		property = (Map<String, Object>) result;
@@ -235,11 +343,12 @@
 		VABElementProxy submodelElement = getConnectionManager().connectToVABElement(submodelAddr);
 
 		// Update element
-		submodelElement.setValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/integerProperty/value", 3);
+		submodelElement
+				.setValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/integerProperty/value", 3);
 
 		// Check result
 		Map<String, Object> result = (Map<String, Object>) submodelElement
-				.getValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/integerProperty");
+				.getValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/integerProperty");
 		assertEquals(3, result.get(Property.VALUE));
 	}
 	
@@ -257,7 +366,8 @@
 		smElements.add(newProperty);
 		
 		// update value of smElemCollection
-		String path = VABPathTools.concatenatePaths("submodel", MultiSubmodelElementProvider.ELEMENTS, "containerRoot");
+		String path = VABPathTools.concatenatePaths(SubmodelProvider.SUBMODEL, MultiSubmodelElementProvider.ELEMENTS,
+				"containerRoot");
 		submodelElement.setValue(path + "/value", smElements);
 		
 		// read back the collection
@@ -281,7 +391,7 @@
 	public void testUpdateElementInSmElementCollection() {
 		VABElementProxy submodelElement = getConnectionManager().connectToVABElement(submodelAddr);
 
-		String path = VABPathTools.concatenatePaths("submodel", MultiSubmodelElementProvider.ELEMENTS,
+		String path = VABPathTools.concatenatePaths(SubmodelProvider.SUBMODEL, MultiSubmodelElementProvider.ELEMENTS,
 				"containerRoot", "container", "integerProperty", "value");
 
 		Integer value = (Integer) submodelElement.getValue(path);
@@ -300,11 +410,12 @@
 	@Test
 	public void testReadSingleOperation() {
 		VABElementProxy submodel = getConnectionManager().connectToVABElement(submodelAddr);
-		Map<String, Object> operation = (Map<String, Object>) submodel.getValue("/submodel/submodelElements/simple");
+		Map<String, Object> operation = (Map<String, Object>) submodel
+				.getValue(SMPROVIDER_PATH_PREFIX + "submodelElements/simple");
 		assertEquals("simple", operation.get(Identifiable.IDSHORT));
 		
 		try {
-			submodel.getValue("/submodel/submodelElements/simple/value");
+			submodel.getValue(SMPROVIDER_PATH_PREFIX + "submodelElements/simple/value");
 			fail();
 		} catch (MalformedRequestException e) {
 			// An Operation has no value
@@ -318,7 +429,7 @@
 	@Test
 	public void testReadSubmodelCheckElementsInCollection() {
 		VABElementProxy submodel = getConnectionManager().connectToVABElement(submodelAddr);
-		Map<String, Object> smMap = (Map<String, Object>) submodel.getValue("/submodel");
+		Map<String, Object> smMap = (Map<String, Object>) submodel.getValue("/" + SubmodelProvider.SUBMODEL);
 		Object o = smMap.get(Submodel.SUBMODELELEMENT);
 		assertTrue(o instanceof Collection<?>);
 	}
@@ -331,23 +442,32 @@
 	public void testReadSubmodelElements() {
 		VABElementProxy submodel = getConnectionManager().connectToVABElement(submodelAddr);
 		Collection<Map<String, Object>> set = (Collection<Map<String, Object>>) submodel
-				.getValue("/submodel/submodelElements");
-		assertEquals(8, set.size());
+				.getValue(SMPROVIDER_PATH_PREFIX + "submodelElements");
+		assertEquals(9, set.size());
 	}
 
-	/**
-	 * Test deleting a single property
-	 */
 	@Test
-	public void testDeleteProperty() {
+	public void testInvalidDeletePath() {
+		VABElementProxy smProxy = getConnectionManager().connectToVABElement(submodelAddr);
+		try {
+			smProxy.deleteValue(MultiSubmodelElementProvider.ELEMENTS + "/integerProperty");
+			fail();
+		} catch (MalformedRequestException e) {
+		}
+	}
+
+	@Test
+	public void testDeleteSingleProperty() {
 		VABElementProxy submodelElement = getConnectionManager().connectToVABElement(submodelAddr);
 
 		// Delete property
-		submodelElement.deleteValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/integerProperty");
+		submodelElement
+				.deleteValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/integerProperty");
 
 		// Test, if it has been deleted
 		try {
-			submodelElement.getValue("/submodel/" + MultiSubmodelElementProvider.ELEMENTS + "/integerProperty");
+			submodelElement
+					.getValue(SMPROVIDER_PATH_PREFIX + MultiSubmodelElementProvider.ELEMENTS + "/integerProperty");
 			fail();
 		} catch (ResourceNotFoundException e) {}
 	}
@@ -360,11 +480,11 @@
 		VABElementProxy submodelElement = getConnectionManager().connectToVABElement(submodelAddr);
 
 		// Delete operation
-		submodelElement.deleteValue("/submodel/submodelElements/simple");
+		submodelElement.deleteValue(SMPROVIDER_PATH_PREFIX + "submodelElements/simple");
 
 		// Test, if it has been deleted
 		try {
-			submodelElement.getValue("/submodel/submodelElements/simple");
+			submodelElement.getValue(SMPROVIDER_PATH_PREFIX + "submodelElements/simple");
 			fail();
 		} catch (ResourceNotFoundException e) {}
 	}
@@ -376,7 +496,7 @@
 	public void testDeletePropertyFromCollection() {
 		VABElementProxy submodelElement = getConnectionManager().connectToVABElement(submodelAddr);
 
-		String path = VABPathTools.concatenatePaths("submodel", MultiSubmodelElementProvider.ELEMENTS,
+		String path = VABPathTools.concatenatePaths(SubmodelProvider.SUBMODEL, MultiSubmodelElementProvider.ELEMENTS,
 				"containerRoot", "container", "integerProperty");
 		
 		assertNotNull(submodelElement.getValue(path));
@@ -409,9 +529,6 @@
 		} catch (ResourceNotFoundException e) {}
 	}
 
-	/**
-	 * Test invoking an operation
-	 */
 	@Test
 	public void testInvokeOperation() {
 		VABElementProxy submodelElement = getConnectionManager().connectToVABElement(submodelAddr);
@@ -421,14 +538,25 @@
 		Map<String, Object> param2 = wrapParameter("SecondNumber", 2);
 
 		// Invoke operation with wrapped parameters and check result
-		Object result = submodelElement.invokeOperation("/submodel/submodelElements/complex/invoke", param1, param2);
+		Object result = submodelElement.invokeOperation(SMPROVIDER_PATH_PREFIX + "submodelElements/complex/invoke",
+				param1, param2);
 		assertEquals(3, result);
 
 		// Invoke operation on parent element
-		result = submodelElement.invokeOperation("/submodel/submodelElements/simple/invoke");
+		result = submodelElement.invokeOperation(SMPROVIDER_PATH_PREFIX + "submodelElements/simple/invoke");
 		assertTrue((boolean) result);
 	}
 	
+	@Test
+	public void testInvalidInvokePath() {
+		VABElementProxy smProxy = getConnectionManager().connectToVABElement(submodelAddr);
+		try {
+			smProxy.invokeOperation("/submodelElements/simple/invoke" + Operation.INVOKE);
+			fail();
+		} catch (MalformedRequestException e) {
+		}
+	}
+
 	/**
 	 * Test invoking an operation from within a SubmodelElementCollection
 	 */
@@ -436,7 +564,7 @@
 	public void testInvokeOperationInCollection() {
 		VABElementProxy submodelElement = getConnectionManager().connectToVABElement(submodelAddr);
 		
-		String path = VABPathTools.concatenatePaths("submodel", MultiSubmodelElementProvider.ELEMENTS,
+		String path = VABPathTools.concatenatePaths(SubmodelProvider.SUBMODEL, MultiSubmodelElementProvider.ELEMENTS,
 				"containerRoot", "container", "operationId", "invoke");
 		
 		Object result = submodelElement.invokeOperation(path);
@@ -451,9 +579,9 @@
 	public void testGetValues() {
 		VABElementProxy submodelElement = getConnectionManager().connectToVABElement(submodelAddr);
 		Map<String, Object> values = (Map<String, Object>) submodelElement.getValue("submodel/" + SubmodelProvider.VALUES);
-		
-		assertEquals(4, values.size());
-		
+
+		assertEquals(5, values.size());
+
 		// Check if all expected Values are present
 		assertTrue(values.containsKey("containerRoot"));
 		Map<String, Object> collection1 = (Map<String, Object>) values.get("containerRoot");
@@ -475,7 +603,8 @@
 		VABElementProxy elementProxy = getConnectionManager().connectToVABElement(submodelAddr);
 		AsyncOperationHelper helper = new AsyncOperationHelper();
 		
-		String path = VABPathTools.concatenatePaths("submodel", MultiSubmodelElementProvider.ELEMENTS, AsyncOperationHelper.ASYNC_OP_ID);
+		String path = VABPathTools.concatenatePaths(SubmodelProvider.SUBMODEL, MultiSubmodelElementProvider.ELEMENTS,
+				AsyncOperationHelper.ASYNC_OP_ID);
 		elementProxy.setValue(path, helper.getAsyncOperation());
 		
 		// Wrap parameters before invoking add-operation
@@ -487,7 +616,9 @@
 		CallbackResponse response = CallbackResponse.createAsFacade((Map<String, Object>) elementProxy.invokeOperation(path, param1, param2));
 		String requestId = response.getRequestId();
 
-		String listPath = VABPathTools.concatenatePaths("submodel", MultiSubmodelElementProvider.ELEMENTS, AsyncOperationHelper.ASYNC_OP_ID, OperationProvider.INVOCATION_LIST);
+		String listPath = VABPathTools.concatenatePaths(SubmodelProvider.SUBMODEL,
+				MultiSubmodelElementProvider.ELEMENTS, AsyncOperationHelper.ASYNC_OP_ID,
+				OperationProvider.INVOCATION_LIST);
 		
 		// Try correct operationId, wrong requestId
 		try {
@@ -498,7 +629,7 @@
 		
 		// Try wrong operationId, correct requestId
 		try {
-			elementProxy.getValue("/submodel/submodelElements/simple/invocationList/" + requestId);
+			elementProxy.getValue(SMPROVIDER_PATH_PREFIX + "submodelElements/simple/invocationList/" + requestId);
 			fail();
 		} catch (ResourceNotFoundException e) {
 		}
@@ -528,16 +659,18 @@
 		VABElementProxy submodelElement = getConnectionManager().connectToVABElement(submodelAddr);
 		AsyncOperationHelper helper = new AsyncOperationHelper();
 		
-		String path = VABPathTools.concatenatePaths("submodel", MultiSubmodelElementProvider.ELEMENTS, AsyncOperationHelper.ASYNC_EXCEPTION_OP_ID);
+		String path = VABPathTools.concatenatePaths(SubmodelProvider.SUBMODEL, MultiSubmodelElementProvider.ELEMENTS,
+				AsyncOperationHelper.ASYNC_EXCEPTION_OP_ID);
 		submodelElement.setValue(path, helper.getAsyncExceptionOperation());
 
-		path = VABPathTools.concatenatePaths("submodel", MultiSubmodelElementProvider.ELEMENTS,
+		path = VABPathTools.concatenatePaths(SubmodelProvider.SUBMODEL, MultiSubmodelElementProvider.ELEMENTS,
 				AsyncOperationHelper.ASYNC_EXCEPTION_OP_ID, "invoke?async=true");
 		
 		CallbackResponse response = (CallbackResponse) submodelElement.invokeOperation(path);
 		String requestId = response.getRequestId();
 		
-		String requestPath = VABPathTools.concatenatePaths("submodel", MultiSubmodelElementProvider.ELEMENTS,
+		String requestPath = VABPathTools.concatenatePaths(SubmodelProvider.SUBMODEL,
+				MultiSubmodelElementProvider.ELEMENTS,
 				AsyncOperationHelper.ASYNC_EXCEPTION_OP_ID, OperationProvider.INVOCATION_LIST, requestId);
 		
 		// Check that it has not finished yet
@@ -561,7 +694,7 @@
 		}		
 	}
 	
-	private Map<String, Object> wrapParameter(String name, Object value) {
+	protected Map<String, Object> wrapParameter(String name, Object value) {
 		Map<String, Object> param = new HashMap<>();
 		param.put(Identifiable.IDSHORT, name);
 		param.put(Property.VALUE, value);
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/http/TestVABHTTP.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/http/TestVABHTTP.java
index 37658c5..6a1dc45 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/http/TestVABHTTP.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/http/TestVABHTTP.java
@@ -22,8 +22,10 @@
 
 import org.eclipse.basyx.testsuite.regression.vab.modelprovider.TestProvider;
 import org.eclipse.basyx.testsuite.regression.vab.support.RecordingProvider;
+import org.eclipse.basyx.vab.exception.provider.ResourceNotFoundException;
 import org.eclipse.basyx.vab.manager.VABConnectionManager;
 import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 import org.eclipse.basyx.vab.modelprovider.map.VABMapProvider;
 import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorFactory;
 import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
@@ -69,6 +71,16 @@
 	}
 
 	/**
+	 * Tests, if the provider throws a ResourceNotFoundException, if the HTTP endpoint
+	 * could not be reached
+	 */
+	@Test(expected = ResourceNotFoundException.class)
+	public void testResourceNotFound() {
+		IModelProvider httpProvider = new HTTPConnectorFactory().getConnector("notFound");
+		httpProvider.getValue("");
+	}
+
+	/**
 	 * Tests if multiple parameters are correctly accepted and passed to the
 	 * provider
 	 */
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/TestVABHTTPS.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/TestVABHTTPS.java
index a467dd4..5191dcf 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/TestVABHTTPS.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/protocol/https/TestVABHTTPS.java
@@ -32,6 +32,8 @@
 import org.eclipse.basyx.vab.modelprovider.map.VABMapProvider;
 import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
 import org.eclipse.basyx.vab.protocol.http.server.VABHTTPInterface;
+import org.eclipse.basyx.vab.protocol.https.HTTPSConnectorProvider;
+import org.eclipse.basyx.vab.protocol.https.JerseyHttpsClientFactory;
 import org.junit.Rule;
 import org.junit.Test;
 
diff --git a/sdks/java/basys.sdk/src/test/resources/aas/factory/json/aasJsonSchemaV2.0.1_Example.json b/sdks/java/basys.sdk/src/test/resources/aas/factory/json/aasJsonSchemaV2.0.1_Example.json
index afa70e0..0acdb99 100644
--- a/sdks/java/basys.sdk/src/test/resources/aas/factory/json/aasJsonSchemaV2.0.1_Example.json
+++ b/sdks/java/basys.sdk/src/test/resources/aas/factory/json/aasJsonSchemaV2.0.1_Example.json
@@ -9,13 +9,7 @@
             "value": "http://customer.com/assets/KHBVZJSQKIY",
             "idType": "IRI"
           }
-        ],
-        "kind": "Type",
-        "idShort": "assetId1",
-        "identification": {
-        	"idType": "IRI",
-        	"id": "assetId1"
-        }
+        ]
       },
       "submodels": [
         {
diff --git a/sdks/java/basys.sdk/src/test/resources/aas/factory/xml/in.xml b/sdks/java/basys.sdk/src/test/resources/aas/factory/xml/in.xml
index 31a966a..604a7fc 100644
--- a/sdks/java/basys.sdk/src/test/resources/aas/factory/xml/in.xml
+++ b/sdks/java/basys.sdk/src/test/resources/aas/factory/xml/in.xml
@@ -386,6 +386,11 @@
 					</aas:basicEvent>
 				</aas:submodelElement>
 				<aas:submodelElement>
+					<aas:capability>
+						<aas:idShort>capability_id</aas:idShort>
+					</aas:capability>
+				</aas:submodelElement>
+				<aas:submodelElement>
 					<aas:entity>
 						<aas:idShort>entity_id</aas:idShort>
 						<aas:assetRef>
diff --git a/sdks/java/basys.sdk/src/test/resources/aas/factory/xml/inExternalAllowed.xml b/sdks/java/basys.sdk/src/test/resources/aas/factory/xml/inExternalAllowed.xml
new file mode 100644
index 0000000..e36bfee
--- /dev/null
+++ b/sdks/java/basys.sdk/src/test/resources/aas/factory/xml/inExternalAllowed.xml
@@ -0,0 +1,651 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<aas:aasenv xmlns:aas="http://www.admin-shell.io/aas/2/0"
+	xmlns:IEC61360="http://www.admin-shell.io/IEC61360/2/0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://www.admin-shell.io/aas/2/0 AAS.xsd
+	http://www.admin-shell.io/IEC61360/2/0 IEC61360.xsd">
+	<aas:assetAdministrationShells>
+		<!-- This AAS is populated with all possible fields -->
+		<aas:assetAdministrationShell>
+			<aas:idShort>asset_admin_shell</aas:idShort>
+			<aas:category>test_category</aas:category>
+			<aas:description>any String</aas:description>
+			<aas:parent>
+				<aas:keys>
+					<aas:key idType="IRI" local="false" type="AssetAdministrationShell">aas_parent_id</aas:key>
+				</aas:keys>
+			</aas:parent>
+			<aas:identification idType="IRI">www.admin-shell.io/aas-sample/1/0</aas:identification>
+			<aas:administration>
+				<aas:version>1</aas:version>
+				<aas:revision>0</aas:revision>
+			</aas:administration>
+			<aas:embeddedDataSpecification>
+				<aas:dataSpecificationContent>
+					<aas:dataSpecificationIEC61360>
+						<IEC61360:preferredName>
+							<IEC61360:langString lang="DE">Drehzahl</IEC61360:langString>
+							<IEC61360:langString lang="EN">Rotation Speed</IEC61360:langString>
+						</IEC61360:preferredName>
+						<IEC61360:shortName>
+							<IEC61360:langString lang="DE">N</IEC61360:langString>
+						</IEC61360:shortName>
+						<IEC61360:unit>1/min</IEC61360:unit>
+						<IEC61360:unitId>
+							<IEC61360:keys>
+								<IEC61360:key idType="IRDI" local="false" type="GlobalReference">
+									0173-1#05-AAA650#002
+								</IEC61360:key>
+							</IEC61360:keys>
+						</IEC61360:unitId>
+						<IEC61360:valueFormat>NR1..5</IEC61360:valueFormat>
+					</aas:dataSpecificationIEC61360>
+				</aas:dataSpecificationContent>
+				<aas:dataSpecification>
+					<aas:keys>
+						<aas:key idType="IRI" local="false" type="GlobalReference">www.admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360</aas:key>
+					</aas:keys>
+				</aas:dataSpecification>
+			</aas:embeddedDataSpecification>
+			<aas:derivedFrom>
+				<aas:keys>
+					<aas:key type="ReferenceElement" local="false" idType="IRI">http://pk.festo.com/3s7plfdrs35</aas:key>
+				</aas:keys>
+			</aas:derivedFrom>
+			<aas:assetRef>
+				<aas:keys>
+					<aas:key type="Asset" local="false" idType="IRI">http://pk.festo.com/3s7plfdrs35</aas:key>
+				</aas:keys>
+			</aas:assetRef>
+			<aas:submodelRefs>
+				<aas:submodelRef>
+					<aas:keys>
+						<aas:key type="Submodel" local="true" idType="IRI">http://www.zvei.de/demo/submodel/12345679</aas:key>
+					</aas:keys>
+				</aas:submodelRef>
+				<aas:submodelRef>
+					<aas:keys>
+						<aas:key type="Submodel" local="true" idType="IRI">http://www.zvei.de/demo/submodel/12345679_2</aas:key>
+					</aas:keys>
+				</aas:submodelRef>
+			</aas:submodelRefs>
+			<aas:views>
+				<!-- This View is populated with all possible fields -->
+				<aas:view>
+					<aas:idShort>SampleView</aas:idShort>
+					<aas:category>test_categogy</aas:category>
+					<aas:description>any String</aas:description>
+					<aas:parent>
+						<aas:keys>
+							<aas:key idType="IRI" local="false" type="Submodel">view_parent_id</aas:key>
+						</aas:keys>
+					</aas:parent>
+					<aas:semanticId>
+						<aas:keys>
+							<aas:key idType="IRI" local="false" type="Submodel">view_semantic_id</aas:key>
+						</aas:keys>
+					</aas:semanticId>
+					<aas:embeddedDataSpecification>
+						<aas:dataSpecificationContent>
+							<aas:dataSpecificationIEC61360>
+								<IEC61360:preferredName>
+									<IEC61360:langString lang="DE">Drehzahl</IEC61360:langString>
+									<IEC61360:langString lang="EN">Rotation Speed</IEC61360:langString>
+								</IEC61360:preferredName>
+								<IEC61360:shortName>
+									<IEC61360:langString lang="DE">N</IEC61360:langString>
+								</IEC61360:shortName>
+								<IEC61360:unit>1/min</IEC61360:unit>
+								<IEC61360:unitId>
+									<IEC61360:keys>
+										<IEC61360:key local="false" type="GlobalReference" idType="IRDI">0173-1#05-AAA650#002</IEC61360:key>
+									</IEC61360:keys>
+								</IEC61360:unitId>
+								<IEC61360:valueFormat>NR1..5</IEC61360:valueFormat>
+							</aas:dataSpecificationIEC61360>
+						</aas:dataSpecificationContent>
+						<aas:dataSpecification>
+							<aas:keys>
+								<aas:key idType="IRI" local="false" type="GlobalReference">www.admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360</aas:key>
+							</aas:keys>
+						</aas:dataSpecification>
+					</aas:embeddedDataSpecification>
+					<aas:containedElements>
+						<aas:containedElementRef>
+							<aas:keys>
+								<aas:key type="Submodel" local="true" idType="IRI">"http://www.zvei.de/demo/submodel/12345679"</aas:key>
+								<aas:key type="Property" local="true" idType="IdShort">rotationSpeed</aas:key>
+							</aas:keys>
+						</aas:containedElementRef>
+					</aas:containedElements>
+				</aas:view>
+				<!-- This is a View with only the minimal required information in it. To test for Nullpointers and such. -->
+				<aas:view>
+					<aas:idShort>EmptyView</aas:idShort>
+					<aas:containedElements></aas:containedElements>
+				</aas:view>
+			</aas:views>
+			<aas:conceptDictionaries>
+				<aas:conceptDictionary>
+					<aas:idShort>SampleDic</aas:idShort>
+					<aas:conceptDescriptionRefs>
+						<aas:conceptDescriptionRef>
+							<aas:keys>
+								<aas:key type="ConceptDescription" local="true" idType="IRI">www.festo.com/dic/08111234</aas:key>
+							</aas:keys>
+						</aas:conceptDescriptionRef>
+					</aas:conceptDescriptionRefs>
+				</aas:conceptDictionary>
+			</aas:conceptDictionaries>
+		</aas:assetAdministrationShell>
+		<!-- This is an AAS with only the minimal required information in it. To test for Nullpointers and such. -->
+		<aas:assetAdministrationShell>
+			<aas:idShort></aas:idShort>
+			<aas:identification idType=""></aas:identification>
+			<aas:assetRef>
+				<aas:keys>
+					<aas:key type="" local="false" idType="URI">http://pk.festo.com/3s7plfdrs35</aas:key>
+				</aas:keys>
+			</aas:assetRef>
+		</aas:assetAdministrationShell>
+	</aas:assetAdministrationShells>
+	<aas:assets>
+		<!-- This Asset is populated with all possible fields -->
+		<aas:asset>
+			<aas:idShort>3s7plfdrs35_asset1</aas:idShort>
+			<aas:category>asset1_categogy</aas:category>
+			<aas:description>any String</aas:description>
+			<aas:parent>
+				<aas:keys>
+					<aas:key idType="IRI" local="false" type="Asset">asset_parent_id</aas:key>
+				</aas:keys>
+			</aas:parent>
+			<aas:identification idType="IRI">http://pk.festo.com/3s7plfdrs35</aas:identification>
+			<aas:administration>
+				<aas:version>1</aas:version>
+				<aas:revision>0</aas:revision>
+			</aas:administration>
+			<aas:embeddedDataSpecification>
+				<aas:dataSpecificationContent>
+					<aas:dataSpecificationIEC61360>
+						<IEC61360:preferredName>
+							<IEC61360:langString lang="DE">Drehzahl</IEC61360:langString>
+							<IEC61360:langString lang="EN">Rotation Speed</IEC61360:langString>
+						</IEC61360:preferredName>
+						<IEC61360:shortName>
+							<IEC61360:langString lang="DE">N</IEC61360:langString>
+						</IEC61360:shortName>
+						<IEC61360:unit>1/min</IEC61360:unit>
+						<IEC61360:unitId>
+							<IEC61360:keys>
+								<IEC61360:key local="false" type="GlobalReference" idType="IRDI">0173-1#05-AAA650#002</IEC61360:key>
+							</IEC61360:keys>
+						</IEC61360:unitId>
+						<IEC61360:valueFormat>NR1..5</IEC61360:valueFormat>
+					</aas:dataSpecificationIEC61360>
+				</aas:dataSpecificationContent>
+				<aas:dataSpecification>
+					<aas:keys>
+						<aas:key idType="IRI" local="false" type="GlobalReference">www.admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360</aas:key>
+					</aas:keys>
+				</aas:dataSpecification>
+			</aas:embeddedDataSpecification>
+			<aas:assetIdentificationModelRef>
+				<aas:keys>
+					<aas:key type="ConceptDescription" local="true" idType="IRI">www.festo.com/dic/08111234</aas:key>
+				</aas:keys>
+			</aas:assetIdentificationModelRef>
+			<aas:kind>Type</aas:kind>
+		</aas:asset>
+		<aas:asset>
+			<aas:idShort>emptyAsset</aas:idShort>
+			<aas:identification idType="URI">http://pk.festo.com/q30j38dlajx</aas:identification>
+			<aas:kind>Instance</aas:kind>
+		</aas:asset>
+	</aas:assets>
+	<aas:submodels>
+		<!-- This Submodel is populated with all possible fields -->
+		<aas:submodel>
+			<aas:idShort>3s7plfdrs35_submodel1</aas:idShort>
+			<aas:category>submodel1_categogy</aas:category>
+			<aas:description>any String</aas:description>
+			<aas:parent>
+				<aas:keys>
+					<aas:key idType="IRI" local="false" type="Submodel">submodel_parent_id</aas:key>
+				</aas:keys>
+			</aas:parent>
+			<aas:identification idType="IRI">http://www.zvei.de/demo/submodel/12345679</aas:identification>
+			<aas:administration>
+				<aas:version>1</aas:version>
+				<aas:revision>0</aas:revision>
+			</aas:administration>
+			<aas:kind>Instance</aas:kind>
+			<aas:semanticId>
+				<aas:keys>
+					<aas:key idType="IRI" local="false" type="Submodel">http://www.zvei.de/demo/submodelDefinitions/87654346</aas:key>
+				</aas:keys>
+			</aas:semanticId>
+			<aas:qualifier>
+				<aas:formula>
+					<aas:dependsOnRefs>
+						<aas:reference>
+							<aas:keys>
+								<aas:key local="false" type="GlobalReference" idType="IRDI">qualifier_reference</aas:key>
+							</aas:keys>
+						</aas:reference>
+					</aas:dependsOnRefs>
+				</aas:formula>
+				<aas:formula>
+					<aas:dependsOnRefs>
+						<aas:reference>
+							<aas:keys>
+								<aas:key local="false" type="GlobalReference" idType="IRDI">qualifier_reference2</aas:key>
+							</aas:keys>
+						</aas:reference>
+					</aas:dependsOnRefs>
+				</aas:formula>
+				<aas:qualifier>
+					<aas:valueId>
+						<aas:keys>
+							<aas:key idType="IRI" local="false" type="Submodel">http://www.zvei.de/demo/submodelDefinitions/87654346</aas:key>
+						</aas:keys>
+					</aas:valueId>
+					<aas:value>qualifierValue</aas:value>
+					<aas:type>qualifierType</aas:type>
+					<aas:valueType></aas:valueType>
+					<aas:semanticId>
+						<aas:keys>
+							<aas:key idType="IRI" local="false" type="GlobalReference">http://www.zvei.de/demo/submodelDefinitions/87654346</aas:key>
+						</aas:keys>
+					</aas:semanticId>
+				</aas:qualifier>
+				<aas:qualifier>
+					<aas:valueId>
+						<aas:keys>
+							<aas:key idType="IRI" local="false" type="Submodel">http://www.zvei.de/demo/submodelDefinitions/87654346</aas:key>
+						</aas:keys>
+					</aas:valueId>
+					<aas:value>qualifierValue2</aas:value>
+					<aas:type>qualifierType</aas:type>
+					<aas:valueType></aas:valueType>
+					<aas:semanticId>
+						<aas:keys>
+							<aas:key idType="IRI" local="false" type="GlobalReference">http://www.zvei.de/demo/submodelDefinitions/87654346</aas:key>
+						</aas:keys>
+					</aas:semanticId>
+				</aas:qualifier>
+			</aas:qualifier>
+			<aas:embeddedDataSpecification>
+				<aas:dataSpecificationContent>
+					<aas:dataSpecificationIEC61360>
+						<IEC61360:preferredName>
+							<IEC61360:langString lang="DE">Drehzahl</IEC61360:langString>
+							<IEC61360:langString lang="EN">Rotation Speed</IEC61360:langString>
+						</IEC61360:preferredName>
+						<IEC61360:shortName>
+							<IEC61360:langString lang="DE">N</IEC61360:langString>
+						</IEC61360:shortName>
+						<IEC61360:unit>1/min</IEC61360:unit>
+						<IEC61360:unitId>
+							<IEC61360:keys>
+								<IEC61360:key local="false" type="GlobalReference" idType="IRDI">0173-1#05-AAA650#002</IEC61360:key>
+							</IEC61360:keys>
+						</IEC61360:unitId>
+						<IEC61360:valueFormat>NR1..5</IEC61360:valueFormat>
+					</aas:dataSpecificationIEC61360>
+				</aas:dataSpecificationContent>
+				<aas:dataSpecification>
+					<aas:keys>
+						<aas:key idType="IRI" local="false" type="GlobalReference">www.admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360</aas:key>
+					</aas:keys>
+				</aas:dataSpecification>
+			</aas:embeddedDataSpecification>
+			<aas:submodelElements>
+				<aas:submodelElement>
+					<aas:property>
+						<aas:idShort>rotationSpeed</aas:idShort>
+						<aas:category>VARIABLE</aas:category>
+						<aas:semanticId>
+							<aas:keys>
+								<aas:key idType="IRI" type="ConceptDescription" local="true">www.festo.com/dic/08111234</aas:key>
+							</aas:keys>
+						</aas:semanticId>
+						<aas:qualifier>
+							<aas:qualifier>
+								<aas:valueId>
+									<aas:keys>
+										<aas:key idType="IRI" local="false" type="Submodel">http://www.zvei.de/demo/submodelDefinitions/87654346</aas:key>
+									</aas:keys>
+								</aas:valueId>
+								<aas:value>qualifierValue</aas:value>
+								<aas:type>qualifierType</aas:type>
+								<aas:valueType></aas:valueType>
+								<aas:semanticId>
+									<aas:keys>
+										<aas:key idType="IRI" local="false" type="GlobalReference">http://www.zvei.de/demo/submodelDefinitions/87654346</aas:key>
+									</aas:keys>
+								</aas:semanticId>
+							</aas:qualifier>
+						</aas:qualifier>
+						<aas:embeddedDataSpecification>
+							<aas:dataSpecificationContent>
+								<aas:dataSpecificationIEC61360>
+									<IEC61360:preferredName>
+										<IEC61360:langString lang="DE">Drehzahl</IEC61360:langString>
+										<IEC61360:langString lang="EN">Rotation Speed</IEC61360:langString>
+									</IEC61360:preferredName>
+									<IEC61360:shortName>
+										<IEC61360:langString lang="DE">N</IEC61360:langString>
+									</IEC61360:shortName>
+									<IEC61360:unit>1/min</IEC61360:unit>
+									<IEC61360:unitId>
+										<IEC61360:keys>
+											<IEC61360:key local="false" type="GlobalReference" idType="IRDI">0173-1#05-AAA650#002</IEC61360:key>
+										</IEC61360:keys>
+									</IEC61360:unitId>
+									<IEC61360:valueFormat>NR1..5</IEC61360:valueFormat>
+								</aas:dataSpecificationIEC61360>
+							</aas:dataSpecificationContent>
+							<aas:dataSpecification>
+								<aas:keys>
+									<aas:key idType="IRI" local="false" type="GlobalReference">www.admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360</aas:key>
+								</aas:keys>
+							</aas:dataSpecification>
+						</aas:embeddedDataSpecification>
+						<aas:valueId>
+							<aas:keys>
+								<aas:key local="false" type="GlobalReference" idType="IRDI">0173-1#05-AAA650#002</aas:key>
+							</aas:keys>
+						</aas:valueId>
+						<aas:value>2000</aas:value>
+						<aas:valueType></aas:valueType>
+					</aas:property>
+				</aas:submodelElement>
+				<aas:submodelElement>
+					<aas:property>
+						<aas:idShort>emptyDouble</aas:idShort>
+						<aas:valueType>anyURI</aas:valueType>
+					</aas:property>
+				</aas:submodelElement>
+				<aas:submodelElement>
+					<aas:property>
+						<aas:idShort>emptyDouble2</aas:idShort>
+						<aas:valueType>date</aas:valueType>
+						<aas:value>27-10-2009</aas:value>
+					</aas:property>
+				</aas:submodelElement>
+				<aas:submodelElement>
+					<aas:basicEvent>
+						<aas:idShort>basic_event_id</aas:idShort>
+						<aas:observed>
+							<aas:keys>
+								<aas:key idType="IRI" local="false" type="Submodel">http://www.zvei.de/demo/submodelDefinitions/87654346</aas:key>
+							</aas:keys>
+						</aas:observed>
+					</aas:basicEvent>
+				</aas:submodelElement>
+				<aas:submodelElement>
+					<aas:capability>
+						<aas:idShort>capability_id</aas:idShort>
+					</aas:capability>
+				</aas:submodelElement>
+				<aas:submodelElement>
+					<aas:entity>
+						<aas:idShort>entity_id</aas:idShort>
+						<aas:assetRef>
+							<aas:keys>
+								<aas:key idType="IRI" local="false" type="Submodel">http://www.zvei.de/demo/submodelDefinitions/87654346</aas:key>
+							</aas:keys>
+						</aas:assetRef>
+						<aas:entityType>CoManagedEntity</aas:entityType>
+						<aas:statements>
+							<!-- XML Schema currently supports only one statement, but multiple should be supported -->
+							<aas:submodelElement>
+								<aas:file>
+									<aas:idShort>file_ID</aas:idShort>
+									<aas:mimeType>file_mimetype</aas:mimeType>
+									<aas:value>file_value</aas:value>
+								</aas:file>
+							</aas:submodelElement>
+							<aas:submodelElement>
+								<aas:range>
+									<aas:idShort>range_id</aas:idShort>
+									<aas:min>10</aas:min>
+									<aas:valueType>integer</aas:valueType>
+								</aas:range>
+							</aas:submodelElement>
+						</aas:statements>
+					</aas:entity>
+				</aas:submodelElement>
+				<aas:submodelElement>
+					<aas:multiLanguageProperty>
+						<aas:idShort>multi_language_property_id</aas:idShort>
+						<aas:valueId>
+							<aas:keys>
+								<aas:key local="false" type="GlobalReference" idType="IRDI">0173-1#05-AAA650#002</aas:key>
+							</aas:keys>
+						</aas:valueId>
+						<aas:value>any String</aas:value>
+					</aas:multiLanguageProperty>
+				</aas:submodelElement>
+				<aas:submodelElement>
+					<aas:range>
+						<aas:idShort>range_id</aas:idShort>
+						<aas:max>10</aas:max>
+						<aas:min>1</aas:min>
+						<aas:valueType>decimal</aas:valueType>
+					</aas:range>
+				</aas:submodelElement>
+				<aas:submodelElement>
+					<aas:file>
+						<aas:idShort>file_id</aas:idShort>
+						<aas:mimeType>file_mimetype</aas:mimeType>
+						<aas:value>file_value</aas:value>
+					</aas:file>
+				</aas:submodelElement>
+				<aas:submodelElement>
+					<aas:blob>
+						<aas:idShort>blob_id</aas:idShort>
+						<aas:value>YmxvYit2YWx1ZQ==</aas:value>
+						<aas:mimeType>blob_mimetype</aas:mimeType>
+					</aas:blob>
+				</aas:submodelElement>
+				<aas:submodelElement>
+					<aas:referenceElement>
+						<aas:idShort>reference_ELE_ID</aas:idShort>
+						<aas:value>
+							<aas:keys>
+								<aas:key local="false" type="GlobalReference" idType="IRDI">0173-1#05-AAA650#002</aas:key>
+							</aas:keys>
+						</aas:value>
+					</aas:referenceElement>
+				</aas:submodelElement>
+				<aas:submodelElement>
+					<aas:submodelElementCollection>
+						<aas:idShort>submodelElementCollection_ID</aas:idShort>
+						<aas:allowDuplicates>true</aas:allowDuplicates>
+						<aas:ordered>false</aas:ordered>
+						<aas:value>
+							<aas:submodelElement>
+								<aas:file>
+									<aas:idShort>file_ID</aas:idShort>
+									<aas:mimeType>file_mimetype</aas:mimeType>
+									<aas:value>file_value</aas:value>
+								</aas:file>
+							</aas:submodelElement>
+							<aas:submodelElement>
+								<aas:blob>
+									<aas:idShort>blob_id</aas:idShort>
+									<aas:value>YmxvYit2YWx1ZQ==</aas:value>
+									<aas:mimeType>blob_mimetype</aas:mimeType>
+								</aas:blob>
+							</aas:submodelElement>
+						</aas:value>
+					</aas:submodelElementCollection>
+				</aas:submodelElement>
+				<aas:submodelElement>
+					<aas:relationshipElement>
+						<aas:idShort>relationshipElement_ID</aas:idShort>
+						<aas:first>
+							<aas:keys>
+								<aas:key local="false" type="GlobalReference" idType="IRDI">0173-1#05-AAA650#001</aas:key>
+							</aas:keys>
+						</aas:first>
+						<aas:second>
+							<aas:keys>
+								<aas:key local="false" type="GlobalReference" idType="IRDI">0173-1#05-AAA650#002</aas:key>
+							</aas:keys>
+						</aas:second>
+					</aas:relationshipElement>
+				</aas:submodelElement>
+				<aas:submodelElement>
+					<aas:annotatedRelationshipElement>
+						<aas:idShort>annotatedRelationshipElement_ID</aas:idShort>
+						<aas:first>
+							<aas:keys>
+								<aas:key local="false" type="GlobalReference" idType="IRDI">0173-1#05-AAA650#003</aas:key>
+							</aas:keys>
+						</aas:first>
+						<aas:second>
+							<aas:keys>
+								<aas:key local="false" type="GlobalReference" idType="IRDI">0173-1#05-AAA650#004</aas:key>
+							</aas:keys>
+						</aas:second>
+						<aas:annotations>
+							<aas:dataElement>
+								<aas:property>
+									<aas:idShort>prop1</aas:idShort>
+									<aas:kind>Instance</aas:kind>
+									<aas:value>1</aas:value>
+									<aas:valueType>integer</aas:valueType>
+								</aas:property>
+							</aas:dataElement>
+							<aas:dataElement>
+								<aas:property>
+									<aas:idShort>prop2</aas:idShort>
+									<aas:kind>Instance</aas:kind>
+									<aas:value>2</aas:value>
+									<aas:valueType>integer</aas:valueType>
+								</aas:property>
+							</aas:dataElement>
+						</aas:annotations>
+					</aas:annotatedRelationshipElement>
+				</aas:submodelElement>
+				<aas:submodelElement>
+					<aas:operation>
+						<aas:idShort>operation_ID</aas:idShort>
+						<aas:inoutputVariable>
+							<aas:operationVariable>
+								<aas:value>
+									<aas:referenceElement>
+										<aas:idShort>reference_ELE_ID2</aas:idShort>
+										<aas:value>
+											<aas:keys>
+												<aas:key local="false" type="GlobalReference" idType="IRDI">0173-1#05-AAA650#003</aas:key>
+											</aas:keys>
+										</aas:value>
+										<aas:kind>Type</aas:kind>
+									</aas:referenceElement>
+								</aas:value>
+							</aas:operationVariable>
+						</aas:inoutputVariable>
+						<aas:inputVariable>
+							<aas:operationVariable>
+								<aas:value>
+									<aas:file>
+										<aas:idShort>file_ID</aas:idShort>
+										<aas:mimeType>file_mimetype</aas:mimeType>
+										<aas:value>file_value</aas:value>
+										<aas:kind>Template</aas:kind>
+									</aas:file>
+								</aas:value>
+							</aas:operationVariable>
+							<aas:operationVariable>
+								<aas:value>
+									<aas:blob>
+										<aas:idShort>blob_ID</aas:idShort>
+										<aas:value>YmxvYit2YWx1ZQ==</aas:value>
+										<aas:mimeType>blob_mimetype</aas:mimeType>
+										<aas:kind>Template</aas:kind>
+									</aas:blob>
+								</aas:value>
+							</aas:operationVariable>
+						</aas:inputVariable>
+						<aas:outputVariable>
+							<aas:operationVariable>
+								<aas:value>
+									<aas:referenceElement>
+										<aas:idShort>reference_ELE_ID</aas:idShort>
+										<aas:value>
+											<aas:keys>
+												<aas:key local="false" type="GlobalReference" idType="IRDI">0173-1#05-AAA650#002</aas:key>
+											</aas:keys>
+										</aas:value>
+										<aas:kind>Template</aas:kind>
+									</aas:referenceElement>
+								</aas:value>
+							</aas:operationVariable>
+						</aas:outputVariable>
+					</aas:operation>
+				</aas:submodelElement>
+			</aas:submodelElements>
+		</aas:submodel>
+		<!-- This is a Submodel with only the minimal required information in it. To test for Nullpointers and such. -->
+		<aas:submodel>
+			<aas:idShort>testSubmodelIdShort2</aas:idShort>
+			<aas:identification idType="IRI">http://www.zvei.de/demo/submodel/12345679</aas:identification>
+			<aas:submodelElements></aas:submodelElements>
+		</aas:submodel>
+	</aas:submodels>
+	<aas:conceptDescriptions>
+		<!-- This ConceptDescription is populated with all possible fields -->
+		<aas:conceptDescription>
+			<aas:idShort>conceptDescription1</aas:idShort>
+			<aas:category>cs_category</aas:category>
+			<aas:description>any String</aas:description>
+			<aas:parent>
+				<aas:keys>
+					<aas:key idType="IRI" local="false" type="ConceptDescription">cs_parent_id</aas:key>
+				</aas:keys>
+			</aas:parent>
+			<aas:identification idType="IRI">www.festo.com/dic/08111234</aas:identification>
+			<aas:administration>
+				<aas:version>1</aas:version>
+				<aas:revision>0</aas:revision>
+			</aas:administration>
+			<aas:embeddedDataSpecification>
+				<aas:dataSpecificationContent>
+					<aas:dataSpecificationIEC61360>
+						<IEC61360:preferredName>
+							<IEC61360:langString lang="DE">Drehzahl</IEC61360:langString>
+							<IEC61360:langString lang="EN">Rotation Speed</IEC61360:langString>
+						</IEC61360:preferredName>
+						<IEC61360:shortName>Only Description</IEC61360:shortName>
+						<IEC61360:unit>1/min</IEC61360:unit>
+						<IEC61360:unitId>
+							<IEC61360:keys>
+								<IEC61360:key local="false" type="GlobalReference" idType="IRDI">0173-1#05-AAA650#002</IEC61360:key>
+							</IEC61360:keys>
+						</IEC61360:unitId>
+						<IEC61360:valueFormat>NR1..5</IEC61360:valueFormat>
+					</aas:dataSpecificationIEC61360>
+				</aas:dataSpecificationContent>
+				<aas:dataSpecification>
+					<aas:keys>
+						<aas:key idType="IRI" local="false" type="GlobalReference">www.admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360</aas:key>
+					</aas:keys>
+				</aas:dataSpecification>
+			</aas:embeddedDataSpecification>
+			<aas:isCaseOf>
+				<aas:keys>
+					<aas:key idType="IRI" type="ConceptDescription" local="true">www.festo.com/dic/08111234</aas:key>
+					<aas:key idType="IRI" type="ConceptDescription" local="true">www.festo.com/dic/08111234_2</aas:key>
+				</aas:keys>
+			</aas:isCaseOf>
+		</aas:conceptDescription>
+		<!-- This is a ConceptDescription with only the minimal required information in it. To test for Nullpointers and such. -->
+		<aas:conceptDescription>
+			<aas:idShort>conceptDescription2</aas:idShort>
+			<aas:identification idType="Custom">IN_emptyConceptDescription</aas:identification>
+		</aas:conceptDescription>
+	</aas:conceptDescriptions>
+</aas:aasenv>
\ No newline at end of file
