Adds single, configurable AASServer component

- Backend can be InMemory and MongoDB
- Source can be a .xml or .aasx file

Change-Id: I8c8ec1a442b1a8cd2573e6357e59a2014e52efc7
Signed-off-by: Daniel Espen <Daniel.Espen@iese.fraunhofer.de>
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/Dockerfile b/components/basys.components/basyx.components.docker/basyx.components.AASServer/Dockerfile
index 0c58366..e199c91 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/Dockerfile
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/Dockerfile
@@ -5,15 +5,25 @@
 ARG JAR_FILE
 COPY target/${JAR_FILE} /usr/share/basyxExecutable.jar
 COPY target/lib /usr/share/lib
+COPY src/main/resources/aas.properties /usr/share/config/aas.properties
 COPY src/main/resources/context.properties /usr/share/config/context.properties
+COPY src/test/resources/dockerMongodb.properties /usr/share/config/mongodb.properties
  
 # Expose the appropriate port. In case of Tomcat, this is 8080.
 ARG PORT
 EXPOSE ${PORT}
  
+# Set the path for the aas configuration file
+ARG AAS_CONFIG_KEY
+ENV ${AAS_CONFIG_KEY} "/usr/share/config/aas.properties"
+
 # Set the path for the context configuration file
 ARG CONTEXT_CONFIG_KEY
 ENV ${CONTEXT_CONFIG_KEY} "/usr/share/config/context.properties"
 
+# Set the path for the mongodb configuration file
+ARG MONGODB_CONFIG_KEY
+ENV ${MONGODB_CONFIG_KEY} "/usr/share/config/mongodb.properties"
+
 # Start the jar
 CMD java -jar "/usr/share/basyxExecutable.jar"
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/docker-compose.yml b/components/basys.components/basyx.components.docker/basyx.components.AASServer/docker-compose.yml
index b68ce05..b55d107 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/docker-compose.yml
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/docker-compose.yml
@@ -1,8 +1,26 @@
-version: '3'
+version: '2.1'
 services:
 
   aas:
     image: ${BASYX_IMAGE_NAME}:${BASYX_IMAGE_TAG}
     container_name: ${BASYX_CONTAINER_NAME}
     ports:
-      - ${BASYX_HOST_PORT}:${BASYX_CONTAINER_PORT}
\ No newline at end of file
+      - ${BASYX_HOST_PORT}:${BASYX_CONTAINER_PORT}
+    depends_on:
+      mongodb:
+        condition: service_healthy
+    links:
+      - mongodb
+
+  mongodb:
+    image: mongo:latest
+    container_name: mongodb
+    healthcheck:
+      test: echo 'db.runCommand("ping").ok' | mongo mongodb:27017/test --quiet
+      interval: 3s
+      timeout: 3s
+      retries: 5
+# Possibility to enable authentication
+#    environment:
+#      MONGO_INITDB_ROOT_USERNAME: root
+#      MONGO_INITDB_ROOT_PASSWORD: example
\ No newline at end of file
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 f1c885a..085bb50 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
@@ -16,7 +16,7 @@
 			basyx.components.executable is the executable class with the definition of the public void main(String[]).
 			It is needed when building the jar in the maven-jar-plugin (see basyx.components.docker/pom.xml) 
 		-->
-		<basyx.components.executable>org.eclipse.basyx.components.executable.AASServerExecutable</basyx.components.executable>
+		<basyx.components.executable>org.eclipse.basyx.components.aas.executable.AASServerExecutable</basyx.components.executable>
 	</properties>
   
 	<packaging>jar</packaging>
@@ -33,6 +33,29 @@
 		</plugins>
 	</build>
 	
+	<dependencies>
+		<!-- Use MongoDB Java Drivers for db connections -->
+	    <dependency>
+	        <groupId>org.mongodb</groupId>
+	        <artifactId>mongodb-driver-sync</artifactId>
+	        <version>4.0.5</version>
+	    </dependency>
+
+		<!-- Use Spring Data MongoDB for db data management -->		
+		<dependency>
+			<groupId>org.springframework.data</groupId>
+			<artifactId>spring-data-mongodb</artifactId>
+			<version>3.0.1.RELEASE</version>
+		</dependency>
+		
+		<!-- Adds additional classes of the BaSys SDK for tests -->
+		<dependency>
+			<groupId>org.eclipse.basyx</groupId>
+			<artifactId>basyx.sdk</artifactId>
+			<classifier>tests</classifier>
+		</dependency>
+	</dependencies>
+	
 	<profiles>
 		<profile>
 			<!-- 
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/AASServerComponent.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/AASServerComponent.java
deleted file mode 100644
index 35cf501..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/AASServerComponent.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.eclipse.basyx.components;
-
-import java.io.IOException;
-
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.eclipse.basyx.components.servlet.AASServerServlet;
-import org.eclipse.basyx.vab.protocol.http.server.AASHTTPServer;
-import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
-
-/**
- * Component providing an empty AAS server that is able to receive AAS/SMs from
- * remote. It uses the Aggregator API, i.e. AAS should be pushed to
- * ${URL}/shells
- * 
- * @author schnicke
- *
- */
-public class AASServerComponent implements IComponent {
-	private static Logger logger = LoggerFactory.getLogger(AASServerComponent.class);
-
-	// The server with the servlet that will be created
-	private AASHTTPServer server;
-
-	private BaSyxContextConfiguration contextConfig;
-
-	/**
-	 * Constructs an empty AAS server using the passed arguments
-	 * 
-	 * @param hostName
-	 * @param port
-	 * @param path
-	 * @param docBasePath
-	 */
-	public AASServerComponent(BaSyxContextConfiguration contextConfig) {
-		this.contextConfig = contextConfig;
-	}
-
-	/**
-	 * Starts the AASX component at http://${hostName}:${port}/${path}
-	 * 
-	 * @param hostName
-	 * @param port
-	 * @param path
-	 * @param docBasePath
-	 * @throws IOException
-	 * @throws SAXException
-	 * @throws ParserConfigurationException
-	 */
-	@Override
-	public void startComponent() {
-		logger.info("Create the server...");
-		// Init HTTP context and add an XMLAAServlet according to the configuration
-		BaSyxContext context = contextConfig.createBaSyxContext();
-		// Create the Servlet for aas
-		context.addServletMapping("/*", new AASServerServlet());
-		server = new AASHTTPServer(context);
-
-		logger.info("Start the server...");
-		server.start();
-	}
-
-	/**
-	 * Retrieves the URL on which the component is providing its HTTP server
-	 * 
-	 * @return
-	 */
-	public String getURL() {
-		return contextConfig.getUrl();
-	}
-
-	@Override
-	public void stopComponent() {
-		server.shutdown();
-	}
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/AASServerComponent.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/AASServerComponent.java
new file mode 100644
index 0000000..c6accef
--- /dev/null
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/AASServerComponent.java
@@ -0,0 +1,259 @@
+package org.eclipse.basyx.components.aas;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.Collection;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.catalina.servlets.DefaultServlet;
+import org.eclipse.basyx.aas.aggregator.AASAggregator;
+import org.eclipse.basyx.aas.aggregator.api.IAASAggregator;
+import org.eclipse.basyx.aas.aggregator.restapi.AASAggregatorProvider;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.registration.proxy.AASRegistryProxy;
+import org.eclipse.basyx.components.IComponent;
+import org.eclipse.basyx.components.aas.aasx.AASXPackageManager;
+import org.eclipse.basyx.components.aas.aasx.SubmodelFileEndpointLoader;
+import org.eclipse.basyx.components.aas.configuration.AASServerBackend;
+import org.eclipse.basyx.components.aas.configuration.BaSyxAASServerConfiguration;
+import org.eclipse.basyx.components.aas.mongodb.MongoDBAASAggregator;
+import org.eclipse.basyx.components.aas.servlet.AASAggregatorServlet;
+import org.eclipse.basyx.components.configuration.BaSyxConfiguration;
+import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
+import org.eclipse.basyx.components.configuration.BaSyxMongoDBConfiguration;
+import org.eclipse.basyx.components.xml.XMLAASBundleFactory;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.support.bundle.AASBundle;
+import org.eclipse.basyx.support.bundle.AASBundleDescriptorFactory;
+import org.eclipse.basyx.support.bundle.AASBundleIntegrator;
+import org.eclipse.basyx.vab.protocol.http.server.AASHTTPServer;
+import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xml.sax.SAXException;
+
+/**
+ * Component providing an empty AAS server that is able to receive AAS/SMs from
+ * remote. It uses the Aggregator API, i.e. AAS should be pushed to
+ * ${URL}/shells
+ * 
+ * @author schnicke, espen
+ *
+ */
+public class AASServerComponent implements IComponent {
+	private static Logger logger = LoggerFactory.getLogger(AASServerComponent.class);
+
+	// The server with the servlet that will be created
+	private AASHTTPServer server;
+
+	// Configurations
+	private BaSyxContextConfiguration contextConfig;
+	private BaSyxAASServerConfiguration aasConfig;
+	private BaSyxMongoDBConfiguration mongoDBConfig;
+
+	// Initial AASBundle
+	protected Collection<AASBundle> aasBundles;
+
+	/**
+	 * Constructs an empty AAS server using the passed context
+	 */
+	public AASServerComponent(BaSyxContextConfiguration contextConfig) {
+		this.contextConfig = contextConfig;
+		this.aasConfig = new BaSyxAASServerConfiguration();
+	}
+
+	/**
+	 * Constructs an empty AAS server using the passed configuration
+	 */
+	public AASServerComponent(BaSyxContextConfiguration contextConfig, BaSyxAASServerConfiguration aasConfig) {
+		this.contextConfig = contextConfig;
+		this.aasConfig = aasConfig;
+	}
+
+	/**
+	 * Constructs an empty AAS server using the passed configuration
+	 */
+	public AASServerComponent(BaSyxContextConfiguration contextConfig, BaSyxAASServerConfiguration aasConfig,
+			BaSyxMongoDBConfiguration mongoDBConfig) {
+		this.contextConfig = contextConfig;
+		this.aasConfig = aasConfig;
+		this.aasConfig.setAASBackend(AASServerBackend.MONGODB);
+		this.mongoDBConfig = mongoDBConfig;
+	}
+
+	/**
+	 * Starts the AASX component at http://${hostName}:${port}/${path}
+	 */
+	@Override
+	public void startComponent() {
+		logger.info("Create the server...");
+		// Load the aggregator servlet
+		AASAggregatorServlet aggregatorServlet = loadAggregatorServlet();
+
+		// Init HTTP context and add an XMLAAServlet according to the configuration
+		BaSyxContext context = contextConfig.createBaSyxContext();
+		context.addServletMapping("/*", aggregatorServlet);
+
+		// An initial AAS has been loaded from the drive?
+		if (aasBundles != null) {
+			// 1. Also provide the files
+			context.addServletMapping("/aasx/*", new DefaultServlet());
+
+			// 2. Fix the file paths according to the servlet configuration
+			modifyFilePaths(contextConfig.getHostname(), contextConfig.getPort(), contextConfig.getContextPath());
+
+			// 3. Register the initial AAS
+			registerAAS();
+		}
+
+		logger.info("Start the server");
+		server = new AASHTTPServer(context);
+		server.start();
+	}
+
+	/**
+	 * Retrieves the URL on which the component is providing its HTTP server
+	 * 
+	 * @return
+	 */
+	public String getURL() {
+		return contextConfig.getUrl();
+	}
+
+	@Override
+	public void stopComponent() {
+		server.shutdown();
+	}
+
+	private void loadBundleFromXML(String xmlPath) throws IOException, ParserConfigurationException, SAXException {
+		logger.info("Loading aas from xml \"" + xmlPath + "\"");
+		String xmlContent = BaSyxConfiguration.getResourceString(xmlPath);
+		this.aasBundles = new XMLAASBundleFactory(xmlContent).create();
+	}
+
+	private void loadBundleFromAASX(String aasxPath)
+			throws IOException, ParserConfigurationException, SAXException, URISyntaxException {
+		logger.info("Loading aas from aasx \"" + aasxPath + "\"");
+
+		// Instantiate the aasx package manager
+		AASXPackageManager packageManager = new AASXPackageManager(aasxPath);
+
+		// Unpack the files referenced by the aas
+		packageManager.unzipRelatedFiles(aasxPath);
+
+		// Retrieve the aas from the package
+		this.aasBundles = packageManager.retrieveAASBundles();
+
+		// this.aasBundles.forEach(b -> Identifiable
+		// .createAsFacade((AssetAdministrationShell) b.getAAS(), KeyElements.ASSETADMINISTRATIONSHELL)
+		// .setIdentification(IdentifierType.CUSTOM, b.getAAS().getIdentification().getId().split("/")[0]));
+	}
+
+	private AASAggregatorServlet loadAggregatorServlet() {
+		// Load the initial AAS bundles from given source
+		loadAASFromSource(aasConfig.getAASSource());
+
+		// Load the aggregator
+		IAASAggregator aggregator = loadAASAggregator();
+
+		// Integrate the loaded bundles into the aggregator
+		if (aasBundles != null) {
+			AASBundleIntegrator.integrate(aggregator, aasBundles);
+		}
+
+		// Return the servlet for the resulting aggregator
+		return new AASAggregatorServlet(aggregator);
+	}
+
+	private void loadAASFromSource(String aasSource) {
+		if (aasSource.isEmpty()) {
+			return;
+		}
+
+		try {
+			if (aasSource.endsWith(".aasx")) {
+				loadBundleFromAASX(aasSource);
+			} else if (aasSource.endsWith(".xml")) {
+				loadBundleFromXML(aasSource);
+			}
+		} catch (IOException | ParserConfigurationException | SAXException | URISyntaxException e) {
+			logger.error("Could not load initial AAS from source " + aasSource);
+			e.printStackTrace();
+		}
+	}
+
+
+	private void registerAAS() {
+		String registryUrl = this.aasConfig.getRegistry();
+		if (registryUrl != null && !registryUrl.isEmpty()) {
+			logger.info("Registering AAS at registry \"" + registryUrl + "\"");
+			AASRegistryProxy registryProxy = new AASRegistryProxy(registryUrl);
+			Set<AASDescriptor> descriptors = retrieveDescriptors(contextConfig.getUrl());
+			descriptors.stream().forEach(registryProxy::register);
+		} else {
+			logger.info("No registry specified, skipped registration");
+		}
+	}
+
+	/**
+	 * Returns the set of AAS descriptors for the AAS contained in the AASX
+	 * 
+	 * @param hostBasePath
+	 *                     the path to the server; helper method for e.g. virtualization
+	 *                     environments
+	 * @return
+	 */
+	private Set<AASDescriptor> retrieveDescriptors(String hostBasePath) {
+		// Base path + aggregator accessor
+		final String fullBasePath = hostBasePath + "/" + AASAggregatorProvider.PREFIX;
+
+		return aasBundles.stream().map(b -> AASBundleDescriptorFactory.createAASDescriptor(b, fullBasePath))
+				.collect(Collectors.toSet());
+	}
+
+	/**
+	 * Fixes the File submodel element value paths according to the given endpoint configuration
+	 */
+	private void modifyFilePaths(String hostName, int port, String rootPath) {
+		for (AASBundle bundle : aasBundles) {
+			Set<ISubModel> submodels = bundle.getSubmodels();
+			for (ISubModel sm : submodels) {
+				SubmodelFileEndpointLoader.setRelativeFileEndpoints(sm, hostName, port, rootPath);
+			}
+		}
+	}
+
+	/**
+	 * Loads a aas aggregator servlet with a backend according to the configuration
+	 * 
+	 * @return
+	 */
+	private IAASAggregator loadAASAggregator() {
+		// Get aggregator according to backend config
+		AASServerBackend backendType = aasConfig.getAASBackend();
+		IAASAggregator aggregator = null;
+		if ( backendType == AASServerBackend.INMEMORY ) {
+			logger.info("Using InMemory backend");
+			aggregator = new AASAggregator();
+		} else if ( backendType == AASServerBackend.MONGODB ) {
+			logger.info("Using MongoDB backend");
+			aggregator = loadMongoDBAggregator();
+		}
+
+		return aggregator;
+	}
+
+	private IAASAggregator loadMongoDBAggregator() {
+		BaSyxMongoDBConfiguration config;
+		if (this.mongoDBConfig == null) {
+			config = new BaSyxMongoDBConfiguration();
+			config.loadFromDefaultSource();
+		} else {
+			config = this.mongoDBConfig;
+		}
+		return new MongoDBAASAggregator(config);
+	}
+}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/java/org/eclipse/basyx/components/aasx/AASXPackageManager.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/aasx/AASXPackageManager.java
similarity index 99%
rename from components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/java/org/eclipse/basyx/components/aasx/AASXPackageManager.java
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/aasx/AASXPackageManager.java
index 485b391..3449add 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/java/org/eclipse/basyx/components/aasx/AASXPackageManager.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/aasx/AASXPackageManager.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.components.aasx;
+package org.eclipse.basyx.components.aas.aasx;
 
 import java.io.File;
 import java.io.FileOutputStream;
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/java/org/eclipse/basyx/components/aasx/SubmodelFileEndpointLoader.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/aasx/SubmodelFileEndpointLoader.java
similarity index 97%
rename from components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/java/org/eclipse/basyx/components/aasx/SubmodelFileEndpointLoader.java
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/aasx/SubmodelFileEndpointLoader.java
index bdb7422..df341ca 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/java/org/eclipse/basyx/components/aasx/SubmodelFileEndpointLoader.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/aasx/SubmodelFileEndpointLoader.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.components.aasx;
+package org.eclipse.basyx.components.aas.aasx;
 
 import java.net.MalformedURLException;
 import java.net.URL;
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/configuration/AASServerBackend.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/configuration/AASServerBackend.java
new file mode 100644
index 0000000..cfbddbc
--- /dev/null
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/configuration/AASServerBackend.java
@@ -0,0 +1,52 @@
+package org.eclipse.basyx.components.aas.configuration;
+
+import org.eclipse.basyx.submodel.metamodel.enumhelper.StandardizedLiteralEnumHelper;
+
+import com.google.common.base.Strings;
+
+/**
+ * Possible types for AAS backends.
+ * 
+ * @author espen
+ *
+ */
+public enum AASServerBackend {
+	/**
+	 * Enum values of KeyElements
+	 */
+	INMEMORY("InMemory"),
+	MONGODB("MongoDB");
+	
+	private String literal;
+
+	private AASServerBackend(String literal) {
+		this.literal = literal;
+	}
+
+	@Override
+	public String toString() {
+		return literal;
+	}
+
+	/**
+	 * Method to transform string literal to AASBackend enum.
+	 * 
+	 * @see StandardizedLiteralEnumHelper StandardizedLiteralEnumHelper
+	 * 
+	 * @param literal
+	 * @return
+	 */
+	public static AASServerBackend fromString(String literal) {
+		if (Strings.isNullOrEmpty(literal)) {
+			return null;
+		}
+
+		AASServerBackend[] enumConstants = AASServerBackend.class.getEnumConstants();
+		for (AASServerBackend constant : enumConstants) {
+			if (constant.toString().equals(literal)) {
+				return constant;
+			}
+		}
+		throw new IllegalArgumentException("The literal '" + literal + "' is not a valid RegistryBackend");
+	}
+}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/configuration/BaSyxAASServerConfiguration.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/configuration/BaSyxAASServerConfiguration.java
new file mode 100644
index 0000000..f0a29ca
--- /dev/null
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/configuration/BaSyxAASServerConfiguration.java
@@ -0,0 +1,93 @@
+package org.eclipse.basyx.components.aas.configuration;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.basyx.components.configuration.BaSyxConfiguration;
+
+/**
+ * Represents a BaSyx server configuration for an AAS Server with any backend,
+ * that can be loaded from a properties file.
+ * 
+ * @author espen
+ *
+ */
+public class BaSyxAASServerConfiguration extends BaSyxConfiguration {
+	// Default BaSyx AAS configuration
+	public static final String DEFAULT_BACKEND = AASServerBackend.INMEMORY.toString();
+	public static final String DEFAULT_SOURCE = "";
+	public static final String DEFAULT_REGISTRY = "";
+
+	// Configuration keys
+	public static final String REGISTRY = "registry.path";
+	public static final String BACKEND = "aas.backend";
+	public static final String SOURCE = "aas.source";
+
+	// The default path for the context properties file
+	public static final String DEFAULT_CONFIG_PATH = "aas.properties";
+
+	// The default key for variables pointing to the configuration file
+	public static final String DEFAULT_FILE_KEY = "BASYX_AAS";
+
+	public static Map<String, String> getDefaultProperties() {
+		Map<String, String> defaultProps = new HashMap<>();
+		defaultProps.put(BACKEND, DEFAULT_BACKEND);
+		defaultProps.put(SOURCE, DEFAULT_SOURCE);
+		defaultProps.put(REGISTRY, DEFAULT_REGISTRY);
+		return defaultProps;
+	}
+
+	/**
+	 * Empty Constructor - use default values
+	 */
+	public BaSyxAASServerConfiguration() {
+		super(getDefaultProperties());
+	}
+
+	/**
+	 * Constructor with initial configuration - docBasePath and hostname are default values
+	 * 
+	 * @param backend The backend for the AASServer
+	 * @param source  The file source for the AASServer (e.g. an .aasx file)
+	 */
+	public BaSyxAASServerConfiguration(AASServerBackend backend, String source) {
+		super(getDefaultProperties());
+		setAASBackend(backend);
+		setAASSource(source);
+	}
+
+	/**
+	 * Constructor with predefined value map
+	 */
+	public BaSyxAASServerConfiguration(Map<String, String> values) {
+		super(values);
+	}
+
+	public void loadFromDefaultSource() {
+		loadFileOrDefaultResource(DEFAULT_FILE_KEY, DEFAULT_CONFIG_PATH);
+	}
+
+	public AASServerBackend getAASBackend() {
+		return AASServerBackend.fromString(getProperty(BACKEND));
+	}
+
+	public void setAASBackend(AASServerBackend backend) {
+		setProperty(BACKEND, backend.toString());
+	}
+
+	public String getAASSource() {
+		return getProperty(SOURCE);
+	}
+
+	public void setAASSource(String source) {
+		setProperty(SOURCE, source);
+	}
+
+	public String getRegistry() {
+		return getProperty(REGISTRY);
+	}
+
+	public void setRegistry(String registryPath) {
+		setProperty(REGISTRY, registryPath);
+	}
+}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/executable/AASServerExecutable.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/executable/AASServerExecutable.java
new file mode 100644
index 0000000..cd3a3e9
--- /dev/null
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/executable/AASServerExecutable.java
@@ -0,0 +1,47 @@
+package org.eclipse.basyx.components.aas.executable;
+
+import java.io.File;
+import java.net.URISyntaxException;
+
+import org.eclipse.basyx.components.aas.AASServerComponent;
+import org.eclipse.basyx.components.aas.configuration.BaSyxAASServerConfiguration;
+import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Starts an HTTP server that is able to receive AAS and submodels pushed from
+ * remote <br />
+ * They are made available at
+ * <i>localhost:4000/aasServer/shells/${aasId}/aas</i>. Submodels are available
+ * at
+ * <i>localhost:4000/aasServer/shells/${aasId}/submodels/${submodelId}/submodel</i><br
+ * />
+ * 
+ * @author schnicke, espen
+ */
+public class AASServerExecutable {
+	// Creates a Logger based on the current class
+	private static Logger logger = LoggerFactory.getLogger(AASServerExecutable.class);
+
+	public static void main(String[] args) throws URISyntaxException {
+		logger.info("Starting BaSyx AASServer component...");
+		// Load context configuration
+		BaSyxContextConfiguration contextConfig = new BaSyxContextConfiguration();
+		contextConfig.loadFromDefaultSource();
+
+		// Load aas configuration
+		BaSyxAASServerConfiguration aasConfig = new BaSyxAASServerConfiguration();
+		aasConfig.loadFromDefaultSource();
+
+		// Load the additional file path relative to the executed jar file
+		String rootPath = new File(AASServerExecutable.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParentFile().getPath();
+		String docBasePath = rootPath;
+		contextConfig.setDocBasePath(docBasePath);
+
+		AASServerComponent component = new AASServerComponent(contextConfig, aasConfig);
+		component.startComponent();
+
+		logger.info("BaSyx AAS Server component started");
+	}
+}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/mongodb/MongoDBAASAPI.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/mongodb/MongoDBAASAPI.java
similarity index 98%
rename from components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/mongodb/MongoDBAASAPI.java
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/mongodb/MongoDBAASAPI.java
index 3e8646f..99ae7c4 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/mongodb/MongoDBAASAPI.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/mongodb/MongoDBAASAPI.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.components.mongodb;
+package org.eclipse.basyx.components.aas.mongodb;
 
 import static org.springframework.data.mongodb.core.query.Criteria.where;
 import static org.springframework.data.mongodb.core.query.Query.query;
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/mongodb/MongoDBAASAggregator.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/mongodb/MongoDBAASAggregator.java
similarity index 97%
rename from components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/mongodb/MongoDBAASAggregator.java
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/mongodb/MongoDBAASAggregator.java
index b0eee89..8f0b915 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/mongodb/MongoDBAASAggregator.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/mongodb/MongoDBAASAggregator.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.components.mongodb;
+package org.eclipse.basyx.components.aas.mongodb;
 
 import static org.springframework.data.mongodb.core.query.Criteria.where;
 import static org.springframework.data.mongodb.core.query.Query.query;
@@ -165,8 +165,7 @@
 	private void addSubmodelProvidersById(String smId, VABMultiSubmodelProvider provider) {
 		ISubmodelAPI smApi = new MongoDBSubmodelAPI(smId);
 		SubModelProvider smProvider = new SubModelProvider(smApi);
-		String idShort = smApi.getSubmodel().getIdShort();
-		provider.addSubmodel(idShort, smProvider);
+		provider.addSubmodel(smProvider);
 	}
 
 	@SuppressWarnings("unchecked")
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/mongodb/MongoDBSubmodelAPI.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/mongodb/MongoDBSubmodelAPI.java
similarity index 68%
rename from components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/mongodb/MongoDBSubmodelAPI.java
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/mongodb/MongoDBSubmodelAPI.java
index 368b924..624b803 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/mongodb/MongoDBSubmodelAPI.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/mongodb/MongoDBSubmodelAPI.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.components.mongodb;
+package org.eclipse.basyx.components.aas.mongodb;
 
 import static org.springframework.data.mongodb.core.query.Criteria.where;
 import static org.springframework.data.mongodb.core.query.Query.query;
@@ -12,17 +12,16 @@
 import org.eclipse.basyx.components.configuration.BaSyxMongoDBConfiguration;
 import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
 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.facade.submodelelement.SubmodelElementFacadeFactory;
 import org.eclipse.basyx.submodel.metamodel.map.SubModel;
 import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
 import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+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.property.Property;
 import org.eclipse.basyx.submodel.restapi.SubmodelElementProvider;
 import org.eclipse.basyx.submodel.restapi.api.ISubmodelAPI;
-import org.eclipse.basyx.vab.exception.FeatureNotImplementedException;
 import org.eclipse.basyx.vab.exception.provider.MalformedRequestException;
 import org.eclipse.basyx.vab.exception.provider.ResourceNotFoundException;
 import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
@@ -168,7 +167,16 @@
 		if (element == null) {
 			throw new ResourceNotFoundException("The element \"" + idShort + "\" could not be found");
 		}
-		return element;
+		return convertSubmodelElement(element);
+	}
+
+	@SuppressWarnings("unchecked")
+	private ISubmodelElement convertSubmodelElement(ISubmodelElement element) {
+		// FIXME: Convert internal data structure of ISubmodelElement
+		Map<String, Object> elementMap = (Map<String, Object>) element;
+		IModelProvider elementProvider = new SubmodelElementProvider(new VABMapProvider(elementMap));
+		Object elementVABObj = elementProvider.getModelPropertyValue("");
+		return SubmodelElement.createAsFacade((Map<String, Object>) elementVABObj);
 	}
 
 	@Override
@@ -188,14 +196,38 @@
 		return sm.getOperations().values();
 	}
 
+
 	@Override
-	public Collection<IProperty> getProperties() {
+	public void addSubmodelElement(List<String> idShorts, ISubmodelElement elem) {
 		SubModel sm = (SubModel) getSubmodel();
-		return sm.getProperties().values();
+		// > 1 idShorts => add new sm element to an existing sm element
+		if (idShorts.size() > 1) {
+			idShorts = idShorts.subList(0, idShorts.size() - 1);
+			// Get parent SM element if more than 1 idShort
+			ISubmodelElement parentElement = getNestedSubmodelElement(sm, idShorts);
+			if (parentElement instanceof SubmodelElementCollection) {
+				((SubmodelElementCollection) parentElement).addSubModelElement(elem);
+				// Replace db entry
+				Query hasId = query(where(SMIDPATH).is(smId));
+				mongoOps.findAndReplace(hasId, sm, collection);
+			}
+		} else {
+			// else => directly add it to the submodel
+			sm.addSubModelElement(elem);
+			// Replace db entry
+			Query hasId = query(where(SMIDPATH).is(smId));
+			mongoOps.findAndReplace(hasId, sm, collection);
+		}
 	}
 
 	@Override
-	public void updateProperty(String idShort, Object newValue) {
+	public Collection<ISubmodelElement> getSubmodelElements() {
+		SubModel sm = (SubModel) getSubmodel();
+		return sm.getSubmodelElements().values();
+	}
+
+	@Override
+	public void updateSubmodelElement(String idShort, Object newValue) {
 		// Get sm from db
 		SubModel sm = (SubModel) getSubmodel();
 		// Unwrap value
@@ -206,10 +238,37 @@
 		Query hasId = query(where(SMIDPATH).is(smId));
 		mongoOps.findAndReplace(hasId, sm, collection);
 	}
-	
+
+	@SuppressWarnings("unchecked")
 	@Override
-	public void updateNestedProperty(List<String> idShorts, Object newValue) {
-		throw new FeatureNotImplementedException();
+	public void updateNestedSubmodelElement(List<String> idShorts, Object newValue) {
+		SubModel sm = (SubModel) getSubmodel();
+
+		// Get parent SM element
+		ISubmodelElement element = getNestedSubmodelElement(sm, idShorts);
+
+		// Update value
+		IModelProvider mapProvider = new VABMapProvider((Map<String, Object>) element);
+		IModelProvider elemProvider = SubmodelElementProvider.getElementProvider(mapProvider);
+		elemProvider.setModelPropertyValue(Property.VALUE, newValue);
+
+		// Replace db entry
+		Query hasId = query(where(SMIDPATH).is(smId));
+		mongoOps.findAndReplace(hasId, sm, collection);
+	}
+
+	@Override
+	public Object getSubmodelElementValue(String idShort) {
+		SubModel sm = (SubModel) getSubmodel();
+		return getElementProvider(sm, idShort).getModelPropertyValue("/value");
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object getNestedSubmodelElementValue(List<String> idShorts) {
+		ISubmodelElement lastElement = getNestedSubmodelElement(idShorts);
+		IModelProvider mapProvider = new VABMapProvider((Map<String, Object>) lastElement);
+		return SubmodelElementProvider.getElementProvider(mapProvider).getModelPropertyValue("/value");
 	}
 
 	@SuppressWarnings("unchecked")
@@ -225,33 +284,14 @@
 		return parameter;
 	}
 
-	@Override
-	public Object getPropertyValue(String idShort) {
-		SubModel sm = (SubModel) getSubmodel();
-		return getElementProvider(sm, idShort).getModelPropertyValue("/value");
-	}
-
 	@SuppressWarnings("unchecked")
 	private IModelProvider getElementProvider(SubModel sm, String idShort) {
-		// Remove element
 		ISubmodelElement elem = sm.getSubmodelElements().get(idShort);
 		IModelProvider mapProvider = new VABMapProvider((Map<String, Object>) elem);
-		return SubmodelElementProvider.getElementProvider((Map<String, Object>) elem, mapProvider);
+		return SubmodelElementProvider.getElementProvider(mapProvider);
 	}
 
-	@SuppressWarnings("unchecked")
-	@Override
-	public Object getNestedPropertyValue(List<String> idShorts) {
-		ISubmodelElement lastElement = getNestedSubmodelElement(idShorts);
-		IModelProvider mapProvider = new VABMapProvider((Map<String, Object>) lastElement);
-		return SubmodelElementProvider.getElementProvider((Map<String, Object>) lastElement, mapProvider)
-				.getModelPropertyValue("/value");
-	}
-
-	@Override
-	public ISubmodelElement getNestedSubmodelElement(List<String> idShorts) {
-		// Get sm from db
-		SubModel sm = (SubModel) getSubmodel();
+	private ISubmodelElement getNestedSubmodelElement(SubModel sm, List<String> idShorts) {
 		Map<String, ISubmodelElement> elemMap = sm.getSubmodelElements();
 		// Get last nested submodel element
 		for (int i = 0; i < idShorts.size() - 1; i++) {
@@ -265,23 +305,62 @@
 			}
 		}
 		String lastIdShort = idShorts.get(idShorts.size() - 1);
+		if (!elemMap.containsKey(lastIdShort)) {
+			throw new ResourceNotFoundException(lastIdShort
+					+ " in the nested submodel element path could not be resolved.");
+		}
 		return elemMap.get(lastIdShort);
 	}
 
 	@Override
+	public ISubmodelElement getNestedSubmodelElement(List<String> idShorts) {
+		// Get sm from db
+		SubModel sm = (SubModel) getSubmodel();
+		// Get nested sm element from this sm
+		return convertSubmodelElement(getNestedSubmodelElement(sm, idShorts));
+	}
+
+	@Override
 	public Object invokeOperation(String idShort, Object... params) {
 		// not possible to invoke operations on a submodel that is stored in a db
-		throw new MalformedRequestException("Invoke not supported by filesystem");
+		throw new MalformedRequestException("Invoke not supported by this backend");
 	}
 
 	@Override
 	public void deleteNestedSubmodelElement(List<String> idShorts) {
-		throw new FeatureNotImplementedException();
+		if ( idShorts.size() == 1 ) {
+			deleteSubmodelElement(idShorts.get(0));
+			return;
+		}
+		
+		// Get sm from db
+		SubModel sm = (SubModel) getSubmodel();
+		// Get parent collection
+		List<String> parentIds = idShorts.subList(0, idShorts.size() - 1);
+		ISubmodelElement parentElement = getNestedSubmodelElement(sm, parentIds);
+		// Remove element
+		SubmodelElementCollection coll = (SubmodelElementCollection) parentElement;
+		coll.deleteSubmodelElement(idShorts.get(idShorts.size() - 1));
+		// Replace db entry
+		Query hasId = query(where(SMIDPATH).is(smId));
+		mongoOps.findAndReplace(hasId, sm, collection);
 	}
 
 	@Override
 	public Object invokeNestedOperation(List<String> idShorts, Object... params) {
 		// not possible to invoke operations on a submodel that is stored in a db
-		throw new MalformedRequestException("Invoke not supported by filesystem");
+		throw new MalformedRequestException("Invoke not supported by this backend");
+	}
+
+	@Override
+	public Object invokeNestedOperationAsync(List<String> idShorts, Object... params) {
+		// not possible to invoke operations on a submodel that is stored in a db
+		throw new MalformedRequestException("Invoke not supported by this backend");
+	}
+
+	@Override
+	public Object getOperationResult(List<String> idShorts, String requestId) {
+		// not possible to invoke operations on a submodel that is stored in a db
+		throw new MalformedRequestException("Invoke not supported by this backend");
 	}
 }
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/servlet/AASAggregatorServlet.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/servlet/AASAggregatorServlet.java
new file mode 100644
index 0000000..e5b82cc
--- /dev/null
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/aas/servlet/AASAggregatorServlet.java
@@ -0,0 +1,25 @@
+package org.eclipse.basyx.components.aas.servlet;
+
+import org.eclipse.basyx.aas.aggregator.AASAggregator;
+import org.eclipse.basyx.aas.aggregator.api.IAASAggregator;
+import org.eclipse.basyx.aas.aggregator.restapi.AASAggregatorProvider;
+import org.eclipse.basyx.vab.protocol.http.server.VABHTTPInterface;
+
+/**
+ * A servlet containing the empty infrastructure needed to support receiving
+ * AAS/Submodels by clients and hosting them
+ * 
+ * @author schnicke
+ *
+ */
+public class AASAggregatorServlet extends VABHTTPInterface<AASAggregatorProvider> {
+	private static final long serialVersionUID = 1244938902937878401L;
+
+	public AASAggregatorServlet() {
+		super(new AASAggregatorProvider(new AASAggregator()));
+	}
+
+	public AASAggregatorServlet(IAASAggregator aggregator) {
+		super(new AASAggregatorProvider(aggregator));
+	}
+}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/executable/AASServerExecutable.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/executable/AASServerExecutable.java
deleted file mode 100644
index 2331ce5..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/executable/AASServerExecutable.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.eclipse.basyx.components.executable;
-
-import org.eclipse.basyx.components.AASServerComponent;
-import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Starts an HTTP server that is able to receive AAS and submodels pushed from
- * remote <br />
- * They are made available at
- * <i>localhost:4000/aasServer/shells/${aasId}/aas</i>. Submodels are available
- * at
- * <i>localhost:4000/aasServer/shells/${aasId}/submodels/${submodelId}/submodel</i><br
- * />
- * 
- * @author schnicke
- */
-public class AASServerExecutable {
-	// Creates a Logger based on the current class
-	private static Logger logger = LoggerFactory.getLogger(AASServerExecutable.class);
-
-	public static void main(String[] args) {
-		logger.info("Starting BaSyx AASServer component...");
-		// Load context configuration
-		BaSyxContextConfiguration contextConfig = new BaSyxContextConfiguration();
-		contextConfig.loadFromDefaultSource();
-
-		AASServerComponent component = new AASServerComponent(contextConfig);
-		component.startComponent();
-
-		logger.info("BaSyx AAS Server component started");
-	}
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/servlet/AASServerServlet.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/servlet/AASServerServlet.java
deleted file mode 100644
index 2f03aff..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/java/org/eclipse/basyx/components/servlet/AASServerServlet.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.eclipse.basyx.components.servlet;
-
-import org.eclipse.basyx.aas.aggregator.AASAggregator;
-import org.eclipse.basyx.aas.aggregator.restapi.AASAggregatorProvider;
-import org.eclipse.basyx.vab.protocol.http.server.VABHTTPInterface;
-
-/**
- * A servlet containing the empty infrastructure needed to support receiving
- * AAS/Submodels by clients and hosting them
- * 
- * @author schnicke
- *
- */
-public class AASServerServlet extends VABHTTPInterface<AASAggregatorProvider> {
-	private static final long serialVersionUID = 1244938902937878401L;
-
-	public AASServerServlet() {
-		super(new AASAggregatorProvider(new AASAggregator()));
-	}
-
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/resources/aas.properties b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/resources/aas.properties
new file mode 100644
index 0000000..82a0083
--- /dev/null
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/resources/aas.properties
@@ -0,0 +1,5 @@
+aas.backend=InMemory
+aas.source=
+# Example for loading an .aasx file and registering the AAS:
+#registry.path=http://localhost:4000/registry/
+#aas.source=aasx/01_Festo.aasx
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/resources/aasx/01_Festo.aasx b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/resources/aasx/01_Festo.aasx
similarity index 100%
rename from components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/resources/aasx/01_Festo.aasx
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/resources/aasx/01_Festo.aasx
Binary files differ
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/resources/context.properties b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/resources/context.properties
index a723466..bd80d1d 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/resources/context.properties
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/resources/context.properties
@@ -1,3 +1,3 @@
 contextPath=/aasServer
 contextHostname=localhost
-contextPort=4000
\ No newline at end of file
+contextPort=4001
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/resources/mongodb.properties b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/resources/mongodb.properties
similarity index 100%
rename from components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/resources/mongodb.properties
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/resources/mongodb.properties
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/resources/xml/aas.xml b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/resources/xml/aas.xml
similarity index 100%
rename from components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/resources/xml/aas.xml
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/main/resources/xml/aas.xml
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/components/AASServer/AASServerSuite.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/components/AASServer/AASServerSuite.java
deleted file mode 100644
index 54e5e03..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/components/AASServer/AASServerSuite.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.eclipse.basyx.components.AASServer;
-
-import static org.junit.Assert.assertEquals;
-
-import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.metamodel.api.IAssetAdministrationShell;
-import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
-import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
-import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
-import org.eclipse.basyx.aas.registration.memory.InMemoryRegistry;
-import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
-import org.eclipse.basyx.vab.protocol.api.IConnectorProvider;
-import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Suite for testing that the AAS Server component is set up correctly. The
- * tests here can be used by the component test itself and the integration test
- * 
- * @author schnicke
- *
- */
-public abstract class AASServerSuite {
-	protected IAASRegistryService aasRegistry;
-	private ConnectedAssetAdministrationShellManager manager;
-
-	private String aasId = "testId";
-
-	protected abstract String getURL();
-
-	@Before
-	public void setUp() {
-		// Create a dummy registry to test integration of XML AAS
-		aasRegistry = new InMemoryRegistry();
-
-		// Create ConnectedAASManager
-		IConnectorProvider connectorProvider = new HTTPConnectorProvider();
-		manager = new ConnectedAssetAdministrationShellManager(aasRegistry, connectorProvider);
-	}
-
-	@Test
-	public void testAddAAS() throws Exception {
-		AssetAdministrationShell shell = new AssetAdministrationShell();
-		IIdentifier identifier = new ModelUrn(aasId);
-		shell.setIdentification(identifier);
-		shell.setIdShort("aasIdShort");
-		
-		manager.createAAS(shell, identifier, getURL());
-
-		IAssetAdministrationShell remote = manager.retrieveAAS(identifier);
-		assertEquals(shell.getIdShort(), remote.getIdShort());
-	}
-
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/components/AASServer/ITAASServer.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/components/AASServer/ITAASServer.java
deleted file mode 100644
index 611e760..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/components/AASServer/ITAASServer.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.eclipse.basyx.components.AASServer;
-
-import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.eclipse.basyx.components.configuration.BaSyxDockerConfiguration;
-import org.junit.BeforeClass;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Tests the docker container using the test suite
- * 
- * @author schnicke
- *
- */
-public class ITAASServer extends AASServerSuite {
-
-	private static String URL;
-	
-	@Override
-	protected String getURL() {
-		return URL;
-	}
-
-	private static Logger logger = LoggerFactory.getLogger(AASServerSuite.class);
-
-	@BeforeClass
-	public static void setUpClass() {
-		logger.info("Running integration test...");
-
-		logger.info("Loading servlet configuration");
-		// Load the servlet configuration inside of the docker configuration from
-		// properties file
-		BaSyxContextConfiguration contextConfig = new BaSyxContextConfiguration();
-		contextConfig.loadFromResource(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH);
-
-		// Load the docker environment configuration from properties file
-		logger.info("Loading docker configuration");
-		BaSyxDockerConfiguration dockerConfig = new BaSyxDockerConfiguration();
-		dockerConfig.loadFromResource(BaSyxDockerConfiguration.DEFAULT_CONFIG_PATH);
-
-		URL = "http://localhost:" + dockerConfig.getHostPort() + contextConfig.getContextPath();
-	}
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/AASServerSuite.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/AASServerSuite.java
similarity index 96%
rename from components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/AASServerSuite.java
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/AASServerSuite.java
index 5f1af5a..6b3101f 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/AASServerSuite.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/AASServerSuite.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.components.MongoDBAASServer;
+package org.eclipse.basyx.regression.AASServer;
 
 import static org.junit.Assert.assertEquals;
 
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/java/org/eclipse/basyx/regression/aasx/AASXSuite.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/AASXSuite.java
similarity index 94%
rename from components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/java/org/eclipse/basyx/regression/aasx/AASXSuite.java
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/AASXSuite.java
index e233229..930be1b 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/java/org/eclipse/basyx/regression/aasx/AASXSuite.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/AASXSuite.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.regression.aasx;
+package org.eclipse.basyx.regression.AASServer;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -21,7 +21,6 @@
 import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
 import org.eclipse.basyx.aas.registration.memory.InMemoryRegistry;
 import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
-import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
 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.IFile;
@@ -41,14 +40,14 @@
  * @author schnicke, espen
  *
  */
-public class AASXSuite {
+public abstract class AASXSuite {
 	private static Logger logger = LoggerFactory.getLogger(AASXSuite.class);
 
 	protected IAASRegistryService aasRegistry;
 
 	protected static final String aasShortId = "Festo_3S7PM0CP4BD";
-	protected static final IIdentifier aasId = new ModelUrn("smart.festo.com/demo/aas/1/1/454576463545648365874");
-	protected static final IIdentifier smId = new ModelUrn("www.company.com/ids/sm/4343_5072_7091_3242");
+	protected static final ModelUrn aasId = new ModelUrn("smart.festo.com/demo/aas/1/1/454576463545648365874");
+	protected static final ModelUrn smId = new ModelUrn("www.company.com/ids/sm/4343_5072_7091_3242");
 	protected static final String smShortId = "Nameplate";
 
 	// Has to be individualized by each test inheriting from this suite
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/SimpleNoOpAASSubmodel.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/SimpleNoOpAASSubmodel.java
new file mode 100644
index 0000000..f1ad39f
--- /dev/null
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/SimpleNoOpAASSubmodel.java
@@ -0,0 +1,33 @@
+package org.eclipse.basyx.regression.AASServer;
+
+import java.util.Map;
+
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.Operation;
+import org.eclipse.basyx.testsuite.regression.submodel.restapi.SimpleAASSubmodel;
+
+public class SimpleNoOpAASSubmodel extends SimpleAASSubmodel {
+
+	public SimpleNoOpAASSubmodel() {
+		this("SimpleAASSubmodel");
+	}
+
+	public SimpleNoOpAASSubmodel(String idShort) {
+		super(idShort);
+
+		// Remove operations
+		deleteSubmodelElement("complex");
+		deleteSubmodelElement("simple");
+		deleteSubmodelElement("exception1");
+		deleteSubmodelElement("exception2");
+
+		Map<String, ISubmodelElement> elems = this.getSubmodelElements();
+		SubmodelElementCollection root = (SubmodelElementCollection) elems.get("containerRoot");
+		SubmodelElementCollection opContainer = (SubmodelElementCollection) root.getSubmodelElement("container");
+		opContainer.deleteSubmodelElement("operationId");
+		Operation opReplacement = new Operation("operationId");
+		opContainer.addSubModelElement(opReplacement);
+	}
+
+}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestAASXAASServer.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestAASXAASServer.java
new file mode 100644
index 0000000..c52f530
--- /dev/null
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestAASXAASServer.java
@@ -0,0 +1,60 @@
+package org.eclipse.basyx.regression.AASServer;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+
+import javax.servlet.ServletException;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.eclipse.basyx.aas.aggregator.restapi.AASAggregatorProvider;
+import org.eclipse.basyx.components.aas.AASServerComponent;
+import org.eclipse.basyx.components.aas.configuration.AASServerBackend;
+import org.eclipse.basyx.components.aas.configuration.BaSyxAASServerConfiguration;
+import org.eclipse.basyx.components.aas.executable.AASServerExecutable;
+import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xml.sax.SAXException;
+/**
+ * Test accessing to AAS using basys aas SDK
+ * 
+ * @author zhangzai
+ *
+ */
+public class TestAASXAASServer extends AASXSuite {
+	private static Logger logger = LoggerFactory.getLogger(TestAASXAASServer.class);
+	private static AASServerComponent component;
+
+	@BeforeClass
+	public static void setUpClass() throws ParserConfigurationException, SAXException, IOException, URISyntaxException, ServletException {
+		// Setup component's test configuration
+		BaSyxContextConfiguration contextConfig = new BaSyxContextConfiguration();
+		contextConfig.loadFromResource(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH);
+		BaSyxAASServerConfiguration aasConfig = new BaSyxAASServerConfiguration(AASServerBackend.INMEMORY, "aasx/01_Festo.aasx");
+		
+		// Load the additional file path relative to the executed jar file
+		String rootPath = new File(AASServerExecutable.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParentFile().getPath();
+		String docBasePath = rootPath;
+		contextConfig.setDocBasePath(docBasePath);
+
+		// Start the component
+		component = new AASServerComponent(contextConfig, aasConfig);
+		component.startComponent();
+		
+		rootEndpoint = "http://" + contextConfig.getHostname() + ":" + contextConfig.getPort() + "/"
+				+ contextConfig.getContextPath() + "/";
+		aasEndpoint = rootEndpoint + "/" + AASAggregatorProvider.PREFIX + "/" + aasId.getEncodedURN() + "/aas";
+		smEndpoint = aasEndpoint + "/submodels/" + smShortId + "/submodel";
+		logger.info("AAS URL for servlet test: " + aasEndpoint);
+	}
+
+	@AfterClass
+	public static void tearDownClass() {
+		component.stopComponent();
+	}
+}
+
+
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/java/org/eclipse/basyx/regression/aasx/TestAASXPackageManager.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestAASXPackageManager.java
similarity index 98%
rename from components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/java/org/eclipse/basyx/regression/aasx/TestAASXPackageManager.java
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestAASXPackageManager.java
index 7483923..e96614b 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/java/org/eclipse/basyx/regression/aasx/TestAASXPackageManager.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestAASXPackageManager.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.regression.aasx;
+package org.eclipse.basyx.regression.AASServer;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -14,7 +14,7 @@
 import javax.xml.parsers.ParserConfigurationException;
 
 import org.eclipse.basyx.aas.metamodel.api.IAssetAdministrationShell;
-import org.eclipse.basyx.components.aasx.AASXPackageManager;
+import org.eclipse.basyx.components.aas.aasx.AASXPackageManager;
 import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
 import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType;
 import org.eclipse.basyx.submodel.metamodel.api.reference.IKey;
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/java/org/eclipse/basyx/regression/aasx/TestFileEndpointLoader.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestFileEndpointLoader.java
similarity index 95%
rename from components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/java/org/eclipse/basyx/regression/aasx/TestFileEndpointLoader.java
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestFileEndpointLoader.java
index 60a5c34..1d0f91e 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/java/org/eclipse/basyx/regression/aasx/TestFileEndpointLoader.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestFileEndpointLoader.java
@@ -1,10 +1,10 @@
-package org.eclipse.basyx.regression.aasx;
+package org.eclipse.basyx.regression.AASServer;
 
 import static org.junit.Assert.assertEquals;
 
 import java.util.Map;
 
-import org.eclipse.basyx.components.aasx.SubmodelFileEndpointLoader;
+import org.eclipse.basyx.components.aas.aasx.SubmodelFileEndpointLoader;
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
 import org.eclipse.basyx.submodel.metamodel.api.submodelelement.dataelement.IFile;
 import org.eclipse.basyx.submodel.metamodel.map.SubModel;
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/components/AASServer/TestAASServer.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestInMemoryAASServer.java
similarity index 73%
rename from components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/components/AASServer/TestAASServer.java
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestInMemoryAASServer.java
index ab1fb15..4842f86 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/components/AASServer/TestAASServer.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestInMemoryAASServer.java
@@ -1,11 +1,12 @@
-package org.eclipse.basyx.components.AASServer;
+package org.eclipse.basyx.regression.AASServer;
 
 import java.io.IOException;
 
 import javax.xml.parsers.ParserConfigurationException;
 
-import org.eclipse.basyx.components.AASServerComponent;
+import org.eclipse.basyx.components.aas.AASServerComponent;
 import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
+import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.xml.sax.SAXException;
 
@@ -15,7 +16,7 @@
  * @author schnicke
  *
  */
-public class TestAASServer extends AASServerSuite {
+public class TestInMemoryAASServer extends AASServerSuite {
 
 	private static AASServerComponent component;
 
@@ -32,4 +33,9 @@
 		component = new AASServerComponent(config);
 		component.startComponent();
 	}
+
+	@AfterClass
+	public static void tearDownClass() {
+		component.stopComponent();
+	}
 }
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/TestMongoDBAggregator.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBAggregator.java
similarity index 80%
rename from components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/TestMongoDBAggregator.java
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBAggregator.java
index 0dccf86..3350a9d 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/TestMongoDBAggregator.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBAggregator.java
@@ -1,8 +1,8 @@
-package org.eclipse.basyx.components.MongoDBAASServer;
+package org.eclipse.basyx.regression.AASServer;
 
 import org.eclipse.basyx.aas.aggregator.api.IAASAggregator;
+import org.eclipse.basyx.components.aas.mongodb.MongoDBAASAggregator;
 import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.eclipse.basyx.components.mongodb.MongoDBAASAggregator;
 import org.eclipse.basyx.testsuite.regression.aas.aggregator.AASAggregatorSuite;
 
 public class TestMongoDBAggregator extends AASAggregatorSuite {
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
new file mode 100644
index 0000000..535e6f6
--- /dev/null
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBServer.java
@@ -0,0 +1,52 @@
+package org.eclipse.basyx.regression.AASServer;
+
+import java.io.IOException;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.eclipse.basyx.components.aas.AASServerComponent;
+import org.eclipse.basyx.components.aas.configuration.AASServerBackend;
+import org.eclipse.basyx.components.aas.configuration.BaSyxAASServerConfiguration;
+import org.eclipse.basyx.components.aas.mongodb.MongoDBAASAggregator;
+import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
+import org.eclipse.basyx.components.configuration.BaSyxMongoDBConfiguration;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.xml.sax.SAXException;
+
+/**
+ * Tests the component using the test suite
+ * 
+ * @author espen
+ *
+ */
+public class TestMongoDBServer extends AASServerSuite {
+
+	private static AASServerComponent component;
+
+	@Override
+	protected String getURL() {
+		return component.getURL();
+	}
+
+	@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);
+		BaSyxMongoDBConfiguration mongoDBConfig = new BaSyxMongoDBConfiguration();
+		BaSyxAASServerConfiguration aasConfig = new BaSyxAASServerConfiguration(AASServerBackend.MONGODB, "");
+
+		// Start component
+		component = new AASServerComponent(contextConfig, aasConfig, mongoDBConfig);
+		component.startComponent();
+	}
+
+	@AfterClass
+	public static void tearDownClass() {
+		component.stopComponent();
+	}
+}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/TestSubmodelProvider.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBSubmodelProvider.java
similarity index 82%
rename from components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/TestSubmodelProvider.java
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBSubmodelProvider.java
index bf8d777..9326fb9 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/TestSubmodelProvider.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestMongoDBSubmodelProvider.java
@@ -1,13 +1,13 @@
-package org.eclipse.basyx.components.MongoDBAASServer;
+package org.eclipse.basyx.regression.AASServer;
 
 import static org.junit.Assert.assertEquals;
 
 import java.util.Collection;
 import java.util.Map;
 
+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.components.mongodb.MongoDBAASAggregator;
-import org.eclipse.basyx.components.mongodb.MongoDBSubmodelAPI;
 import org.eclipse.basyx.submodel.restapi.SubModelProvider;
 import org.eclipse.basyx.testsuite.regression.submodel.restapi.SubModelProviderTest;
 import org.eclipse.basyx.testsuite.regression.vab.protocol.http.TestsuiteDirectory;
@@ -18,7 +18,7 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-public class TestSubmodelProvider extends SubModelProviderTest {
+public class TestMongoDBSubmodelProvider extends SubModelProviderTest {
 	private VABConnectionManager connManager;
 
 	@BeforeClass
@@ -70,6 +70,22 @@
 	}
 
 	/**
+	 * Operations are not supported
+	 */
+	@Override
+	@Test
+	public void testInvokeAsync() throws Exception {
+	}
+
+	/**
+	 * Operations are not supported
+	 */
+	@Override
+	@Test
+	public void testInvokeAsyncException() throws Exception {
+	}
+
+	/**
 	 * Now 4 instead of 8 elements
 	 */
 	@SuppressWarnings("unchecked")
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestXMLAAS.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestXMLAAS.java
new file mode 100644
index 0000000..f328ef9
--- /dev/null
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/TestXMLAAS.java
@@ -0,0 +1,45 @@
+package org.eclipse.basyx.regression.AASServer;
+
+import java.io.IOException;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.eclipse.basyx.aas.aggregator.restapi.AASAggregatorProvider;
+import org.eclipse.basyx.components.aas.AASServerComponent;
+import org.eclipse.basyx.components.aas.configuration.AASServerBackend;
+import org.eclipse.basyx.components.aas.configuration.BaSyxAASServerConfiguration;
+import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xml.sax.SAXException;
+
+public class TestXMLAAS extends XMLAASSuite {
+	private static Logger logger = LoggerFactory.getLogger(TestXMLAAS.class);
+	private static AASServerComponent component;
+
+
+	@BeforeClass
+	public static void setUpClass() throws ParserConfigurationException, SAXException, IOException {
+		// Setup component's test configuration
+		BaSyxContextConfiguration contextConfig = new BaSyxContextConfiguration();
+		contextConfig.loadFromResource(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH);
+		BaSyxAASServerConfiguration aasConfig = new BaSyxAASServerConfiguration(AASServerBackend.INMEMORY, "xml/aas.xml");
+
+		// Start component
+		component = new AASServerComponent(contextConfig, aasConfig);
+		component.startComponent();
+
+		String rootEndpoint = "http://" + contextConfig.getHostname() + ":" + contextConfig.getPort() + "/"
+				+ contextConfig.getContextPath() + "/";
+		aasEndpoint = rootEndpoint + "/" + AASAggregatorProvider.PREFIX + "/" + aasId.getEncodedURN() + "/aas";
+		smEndpoint = aasEndpoint + "/submodels/" + smShortId + "/submodel";
+		logger.info("AAS URL for servlet test: " + aasEndpoint);
+	}
+
+	@AfterClass
+	public static void tearDownClass() {
+		component.stopComponent();
+	}
+}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/test/java/org/eclipse/basyx/regression/xmlAAS/XMLAASSuite.java b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/XMLAASSuite.java
similarity index 89%
rename from components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/test/java/org/eclipse/basyx/regression/xmlAAS/XMLAASSuite.java
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/XMLAASSuite.java
index 19105ff..9e8690f 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/test/java/org/eclipse/basyx/regression/xmlAAS/XMLAASSuite.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/java/org/eclipse/basyx/regression/AASServer/XMLAASSuite.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.regression.xmlAAS;
+package org.eclipse.basyx.regression.AASServer;
 
 import static org.junit.Assert.assertEquals;
 
@@ -10,7 +10,6 @@
 import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
 import org.eclipse.basyx.aas.registration.memory.InMemoryRegistry;
 import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
-import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
 import org.eclipse.basyx.vab.protocol.api.IConnectorProvider;
 import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.Before;
@@ -23,13 +22,13 @@
  * @author schnicke
  *
  */
-public class XMLAASSuite {
+public abstract class XMLAASSuite {
 
 	protected IAASRegistryService registry;
 
 	protected static final String aasShortId = "aas1";
-	protected static final IIdentifier aasId = new ModelUrn("www.admin-shell.io/aas-sample/2/0");
-	protected static final IIdentifier smId = new ModelUrn("http://www.zvei.de/demo/submodel/12345679");
+	protected static final ModelUrn aasId = new ModelUrn("www.admin-shell.io/aas-sample/2/0");
+	protected static final ModelUrn smId = new ModelUrn("http://www.zvei.de/demo/submodel/12345679");
 	protected static final String smShortId = "submodel1";
 
 	// Has to be individualized by each test inheriting from this suite
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 4be6895..6c620d7 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
@@ -1,5 +1,5 @@
 BASYX_HOST_PORT=8082
-BASYX_CONTAINER_PORT=4000
+BASYX_CONTAINER_PORT=4001
 BASYX_IMAGE_NAME=basys/aas-server
 BASYX_CONTAINER_NAME=aas
 BASYX_IMAGE_TAG=0.0.1-SNAPSHOT
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/resources/dockerMongodb.properties b/components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/resources/dockerMongodb.properties
similarity index 100%
rename from components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/resources/dockerMongodb.properties
rename to components/basys.components/basyx.components.docker/basyx.components.AASServer/src/test/resources/dockerMongodb.properties
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/Dockerfile b/components/basys.components/basyx.components.docker/basyx.components.AASX/Dockerfile
deleted file mode 100644
index c803084..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/Dockerfile
+++ /dev/null
@@ -1,19 +0,0 @@
-# Add java runtime environment for execution
-FROM java:8-jdk-alpine 
-
-# Copy built jar to image using the jar name specified in the pom.xml (JAR_FILE)
-ARG JAR_FILE
-COPY target/${JAR_FILE} /usr/share/basyxExecutable.jar
-COPY target/lib /usr/share/lib
-COPY src/main/resources/context.properties /usr/share/config/context.properties
- 
-# Expose the appropriate port. In case of Tomcat, this is 8080.
-ARG PORT
-EXPOSE ${PORT}
-
-# Set the path for the context configuration file
-ARG CONTEXT_CONFIG_KEY
-ENV ${CONTEXT_CONFIG_KEY} "/usr/share/config/context.properties"
- 
-# Start the jar
-CMD java -jar "/usr/share/basyxExecutable.jar"
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/build.bat b/components/basys.components/basyx.components.docker/basyx.components.AASX/build.bat
deleted file mode 100644
index 64f74e3..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/build.bat
+++ /dev/null
@@ -1 +0,0 @@
-../.././mvnw clean install -U -Pdocker -DskipTests
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/build.sh b/components/basys.components/basyx.components.docker/basyx.components.AASX/build.sh
deleted file mode 100755
index 6820ccc..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/build.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/usr/bin/env sh
-../../mvnw clean install -U -Pdocker -DskipTests
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/docker-compose.yml b/components/basys.components/basyx.components.docker/basyx.components.AASX/docker-compose.yml
deleted file mode 100644
index 7e029c5..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/docker-compose.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-version: '3'
-services:
-
-  registry:
-    image: ${BASYX_IMAGE_NAME}:${BASYX_IMAGE_TAG}
-    container_name: ${BASYX_CONTAINER_NAME}
-    ports:
-      - ${BASYX_HOST_PORT}:${BASYX_CONTAINER_PORT}
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/pom.xml b/components/basys.components/basyx.components.docker/basyx.components.AASX/pom.xml
deleted file mode 100644
index 2e985e6..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/pom.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" 
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  
- 
-  <parent>
-		<groupId>org.eclipse.basyx</groupId>
-		<artifactId>basyx.components.docker</artifactId>
-		<version>0.0.1-SNAPSHOT</version>
-    </parent>
-	
-	<artifactId>basyx.components.AASX</artifactId>
-	<name>BaSyx AASX Docker Component</name>
-	
-	<properties>
-		<!--  
-			basyx.components.executable is the executable class with the definition of the public void main(String[]).
-			It is needed when building the jar in the maven-jar-plugin (see basyx.components.docker/pom.xml) 
-		-->
-		<basyx.components.executable>org.eclipse.basyx.components.executable.AASXExecutable</basyx.components.executable>
-	</properties>
-	
-	<packaging>jar</packaging>
-	
-	<!-- Define additional plugins that are not included by default -->
-	<!-- Plugin configuration is done in parent project(s) -->
-	<build>
-		<plugins>
-			<!-- Attach sources to jar file -->
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-source-plugin</artifactId>
-			</plugin>
-		</plugins>
-	</build>
-	
-	<dependencies>
-		<!-- This component is based on the xmlAAS component -->
-		<dependency>
-			<groupId>org.eclipse.basyx</groupId>
-			<artifactId>basyx.components.xmlAAS</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-	</dependencies>
-	
-	<profiles>
-		<profile>
-			<!-- 
-				"Docker" profile - do not build & install docker images by default
-				Run "mvn install -Pdocker" in order to include docker  
-			-->
-			<id>docker</id>
-			<build>
-				<plugins>
-					<!-- Read maven properties from file -->
-					<plugin>
-						<groupId>org.codehaus.mojo</groupId>
-						<artifactId>properties-maven-plugin</artifactId>
-					</plugin>
-				
-					<!-- Copy the dependencies necessary to run the jar -->
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-dependency-plugin</artifactId>
-					</plugin>
-				
-					<!-- Build the docker image -->
-					<plugin>
-						<groupId>com.spotify</groupId>
-						<artifactId>dockerfile-maven-plugin</artifactId>
-					</plugin>
-				
-					<!-- Create integration test environment -->
-					<plugin>
-						<groupId>com.dkanejs.maven.plugins</groupId>
-						<artifactId>docker-compose-maven-plugin</artifactId>
-					</plugin>
-					
-					<!-- Run integration tests -->
-					<plugin>    
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-failsafe-plugin</artifactId>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-	</profiles>
-</project>
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/java/org/eclipse/basyx/components/AASXComponent.java b/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/java/org/eclipse/basyx/components/AASXComponent.java
deleted file mode 100644
index b31c0a3..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/java/org/eclipse/basyx/components/AASXComponent.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package org.eclipse.basyx.components;
-
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.util.Set;
-
-import javax.servlet.ServletException;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.catalina.servlets.DefaultServlet;
-import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.registration.proxy.AASRegistryProxy;
-import org.eclipse.basyx.components.aasx.AASXPackageManager;
-import org.eclipse.basyx.components.aasx.SubmodelFileEndpointLoader;
-import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.eclipse.basyx.components.servlet.aas.AASBundleServlet;
-import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
-import org.eclipse.basyx.support.bundle.AASBundle;
-import org.eclipse.basyx.vab.protocol.http.server.AASHTTPServer;
-import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
-
-/**
- * A component that takes an AASX file and provides it via an HTTP server
- * 
- * @author schnicke, espen
- *
- */
-public class AASXComponent extends XMLAASComponent {
-	private static Logger logger = LoggerFactory.getLogger(AASXComponent.class);
-
-	public AASXComponent(BaSyxContextConfiguration contextConfig, String aasxPath,
-			String registryUrl) throws IOException, ParserConfigurationException, SAXException, URISyntaxException {
-		super(contextConfig);
-
-		// Instantiate the aasx package manager
-		AASXPackageManager packageManager = new AASXPackageManager(aasxPath);
-
-		// Unpack the files referenced by the aas
-		packageManager.unzipRelatedFiles(aasxPath);
-
-		// Retrieve the aas from the package
-		Set<AASBundle> aasBundles = packageManager.retrieveAASBundles();
-
-		setAASBundle(aasBundles);
-		setRegistryUrl(registryUrl);
-	}
-
-	/**
-	 * Starts the AASX component at http://${hostName}:${port}/${path}
-	 * 
-	 * @param hostName
-	 * @param port
-	 * @param path
-	 * @param docBasePath
-	 * @throws ServletException
-	 * @throws IOException
-	 * @throws SAXException
-	 * @throws ParserConfigurationException
-	 */
-	@Override
-	public void startComponent() {
-		// Init HTTP context and add an XMLAAServlet according to the configuration
-		BaSyxContext context = contextConfig.createBaSyxContext();
-		// Create the Servlet for aas
-		context.addServletMapping("/*", new AASBundleServlet(aasBundles));
-		context.addServletMapping("/aasx/*", new DefaultServlet());
-		server = new AASHTTPServer(context);
-
-		// Fix the file paths according to the servlet configuration
-		modifyFilePaths(contextConfig.getHostname(), contextConfig.getPort(), "");
-
-		// logger.info("Start the server...");
-		server.start();
-
-		if (registryUrl != null && !registryUrl.isEmpty()) {
-			logger.info("Registering AAS at registry \"" + registryUrl + "\"...");
-			AASRegistryProxy registryProxy = new AASRegistryProxy(registryUrl);
-			Set<AASDescriptor> descriptors = retrieveDescriptors();
-			descriptors.stream().forEach(registryProxy::register);
-		} else {
-			logger.info("No registry specified, skipped registration");
-		}
-	}
-
-	/**
-	 * Fixes the File submodel element value paths according to the given endpoint configuration
-	 */
-	private void modifyFilePaths(String hostName, int port, String rootPath) {
-		for (AASBundle bundle : aasBundles) {
-			Set<ISubModel> submodels = bundle.getSubmodels();
-			for (ISubModel sm : submodels) {
-				SubmodelFileEndpointLoader.setRelativeFileEndpoints(sm, hostName, port, rootPath);
-			}
-		}
-	}
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/java/org/eclipse/basyx/components/executable/AASXExecutable.java b/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/java/org/eclipse/basyx/components/executable/AASXExecutable.java
deleted file mode 100644
index b84aef3..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/java/org/eclipse/basyx/components/executable/AASXExecutable.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.eclipse.basyx.components.executable;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URISyntaxException;
-
-import javax.servlet.ServletException;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.eclipse.basyx.components.AASXComponent;
-import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
-
-/**
- * Starts an HTTP server providing multiple AAS and submodels as described in
- * the AASX package file specified in the properties file <br />
- * They are made available at <i>localhost:4000/aasx/$aasId/aas</i><br />
- * <br />
- * <b>Please note:</b> Neither the AASs nor the Submodels are added to the
- * registry. Additionally, the Submodel descriptors inside the AAS are missing.
- * <br />
- * There reason for this is, that the executable does not know about the outside
- * context (e.g. docker, ...)!
- * 
- * @author zhang
- */
-public class AASXExecutable {
-	private static Logger logger = LoggerFactory.getLogger(AASXExecutable.class);
-
-	public static void main(String[] args) throws IOException, ParserConfigurationException, SAXException, URISyntaxException, ServletException {
-		logger.info("Starting BaSyx AASX component");
-
-		// Load configuration
-		BaSyxContextConfiguration config = new BaSyxContextConfiguration();
-		config.loadFromDefaultSource();
-
-		// In addition to the context for the AAS, also the registryUrl and aasxPath can be specified
-		String registryUrl = config.getProperty("registry");
-		String aasxPath = config.getProperty("aasxPath");
-
-		// Load the additional file path relative to the executed jar file
-		String rootPath = new File(AASXExecutable.class.getProtectionDomain().getCodeSource().getLocation().toURI())
-				.getParentFile().getPath();
-		String docPath = rootPath + config.getDocBasePath();
-		config.setProperty(BaSyxContextConfiguration.DOCBASE, docPath);
-
-		// Get the path to the doc base path
-		AASXComponent component = new AASXComponent(config, aasxPath, registryUrl);
-		component.startComponent();
-	}
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/java/org/eclipse/basyx/components/servlets/AASXAASServlet.java b/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/java/org/eclipse/basyx/components/servlets/AASXAASServlet.java
deleted file mode 100644
index 75e7b67..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/java/org/eclipse/basyx/components/servlets/AASXAASServlet.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.eclipse.basyx.components.servlets;
-
-import java.io.IOException;
-
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.eclipse.basyx.components.aasx.AASXPackageManager;
-import org.eclipse.basyx.components.servlet.aas.AASBundleServlet;
-import org.xml.sax.SAXException;
-
-/**
- * It generates the AAS-bundle using AASX package manager. It also maps the AAS
- * to servlet and adds the submodels, assets and concept descriptors to the AAS.
- * 
- * 
- * @author zhangzai
- */
-public class AASXAASServlet extends AASBundleServlet {
-	private static final long serialVersionUID = -3487515646027982620L;
-
-
-
-	public AASXAASServlet(String filePath) throws ParserConfigurationException, SAXException, IOException {
-		super(new AASXPackageManager(filePath).retrieveAASBundles());
-
-	}
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/resources/context.properties b/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/resources/context.properties
deleted file mode 100644
index 5a788c8..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/resources/context.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-contextPath=/
-contextHostname=localhost
-contextPort=4000
-aasxPath=aasx/01_Festo.aasx
-contextDocPath=/
-#registry=http://localhost:8082/registry/api/v1/registry
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/resources/logback.xml b/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/resources/logback.xml
deleted file mode 100644
index 86341d6..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/main/resources/logback.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
- 
-<configuration>
- 
-  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-    
-    <!-- Example for a filter, which removes all entries not containing "[TEST]" in the message. -->
-    
-    <!--<filter class="ch.qos.logback.core.filter.EvaluatorFilter">      
-      <evaluator>
-        <expression>return message.contains("[TEST]");</expression>
-      </evaluator>
-      <OnMismatch>DENY</OnMismatch>
-      <OnMatch>NEUTRAL</OnMatch>
-    </filter>-->
-  
-    <encoder>
-      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
-    </encoder>
-  </appender>
-  
-  <root level="INFO">          
-    <appender-ref ref="STDOUT" />
-  </root>  
-   
-</configuration>
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/java/org/eclipse/basyx/regression/aasx/ITInAASX.java b/components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/java/org/eclipse/basyx/regression/aasx/ITInAASX.java
deleted file mode 100644
index 8d417ae..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/java/org/eclipse/basyx/regression/aasx/ITInAASX.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.eclipse.basyx.regression.aasx;
-
-import javax.ws.rs.ProcessingException;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.client.Invocation;
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.MediaType;
-
-import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.eclipse.basyx.components.configuration.BaSyxDockerConfiguration;
-import org.junit.BeforeClass;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A Test case for accessing an element of an aas which is hosted on Docker
- * 
- *
- */
-public class ITInAASX extends AASXSuite {
-	private static Logger logger = LoggerFactory.getLogger(ITInAASX.class);
-
-	@BeforeClass
-	public static void setUpClass() {
-		logger.info("Running integration test...");
-
-		logger.info("Loading servlet configuration");
-		// Load the servlet configuration inside of the docker configuration from
-		// properties file
-		BaSyxContextConfiguration contextConfig = new BaSyxContextConfiguration();
-		contextConfig.loadFromResource(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH);
-
-		// Load the docker environment configuration from properties file
-		logger.info("Loading docker configuration");
-		BaSyxDockerConfiguration dockerConfig = new BaSyxDockerConfiguration();
-		dockerConfig.loadFromResource(BaSyxDockerConfiguration.DEFAULT_CONFIG_PATH);
-
-		rootEndpoint = "http://localhost:" + dockerConfig.getHostPort() + contextConfig.getContextPath() + "/";
-		aasEndpoint = rootEndpoint + aasShortId + "/aas";
-		smEndpoint = rootEndpoint + aasShortId + "/aas/submodels/" + smShortId + "/submodel";
-
-		waitUntilReady();
-
-		logger.info("AAS URL for integration test: " + aasEndpoint);
-	}
-
-	/**
-	 * Waits for at most 4s until the container is ready
-	 */
-	private static void waitUntilReady() {
-		Client client = ClientBuilder.newClient();
-		WebTarget webTarget = client.target(rootEndpoint);
-		Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);
-		for (int i = 0; i < 20; i++) {
-			try {
-				invocationBuilder.get();
-				return;
-			} catch (ProcessingException e) {
-				// retry
-				try {
-					Thread.sleep(200);
-				} catch (InterruptedException e1) {
-					e1.printStackTrace();
-				}
-			}
-		}
-	}
-
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/java/org/eclipse/basyx/regression/aasx/TestAASX.java b/components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/java/org/eclipse/basyx/regression/aasx/TestAASX.java
deleted file mode 100644
index 71d3eab..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/java/org/eclipse/basyx/regression/aasx/TestAASX.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.eclipse.basyx.regression.aasx;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-
-import javax.servlet.ServletException;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.eclipse.basyx.components.executable.AASXExecutable;
-import org.junit.BeforeClass;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
-
-/**
- * Test accessing to AAS using basys aas SDK
- * 
- * @author zhangzai
- *
- */
-public class TestAASX extends AASXSuite {
-	private static Logger logger = LoggerFactory.getLogger(TestAASX.class);
-
-	@BeforeClass
-	public static void setUpClass() throws ParserConfigurationException, SAXException, IOException, URISyntaxException, ServletException {
-		AASXExecutable.main(new String[] {});
-
-		BaSyxContextConfiguration config = new BaSyxContextConfiguration();
-		config.loadFromResource(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH);
-
-		rootEndpoint = "http://" + config.getHostname() + ":" + config.getPort() + "/" + config.getContextPath() + "/";
-		aasEndpoint = rootEndpoint + aasShortId + "/aas";
-		smEndpoint = rootEndpoint + aasShortId + "/aas/submodels/" + smShortId + "/submodel";
-		logger.info("AAS URL for servlet test: " + aasEndpoint);
-	}
-}
-
-
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/resources/.env b/components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/resources/.env
deleted file mode 100644
index 7afa046..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/src/test/resources/.env
+++ /dev/null
@@ -1,5 +0,0 @@
-BASYX_HOST_PORT=8082
-BASYX_CONTAINER_PORT=8082
-BASYX_IMAGE_NAME=basys/aasx
-BASYX_CONTAINER_NAME=aasx
-BASYX_IMAGE_TAG=0.0.1-SNAPSHOT
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/start.bat b/components/basys.components/basyx.components.docker/basyx.components.AASX/start.bat
deleted file mode 100644
index f0ff9e1..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/start.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-cd src/test/resources
-docker-compose up
-cd ../../..
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/start.sh b/components/basys.components/basyx.components.docker/basyx.components.AASX/start.sh
deleted file mode 100755
index 4b9b54a..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/start.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env sh
-cd src/test/resources
-docker-compose up
-cd ../../..
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/stop.bat b/components/basys.components/basyx.components.docker/basyx.components.AASX/stop.bat
deleted file mode 100644
index b645246..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/stop.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-cd src/test/resources
-docker-compose down
-cd ../../..
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.AASX/stop.sh b/components/basys.components/basyx.components.docker/basyx.components.AASX/stop.sh
deleted file mode 100755
index e11a931..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.AASX/stop.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env sh
-cd src/test/resources
-docker-compose down
-cd ../../..
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/Dockerfile b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/Dockerfile
deleted file mode 100644
index f2ff452..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/Dockerfile
+++ /dev/null
@@ -1,24 +0,0 @@
-# Add java runtime environment for execution
-FROM java:8-jdk-alpine 
-
-# Copy built jar to image using the jar name specified in the pom.xml (JAR_FILE)
-ARG JAR_FILE
-COPY target/${JAR_FILE} /usr/share/basyxExecutable.jar
-COPY target/lib /usr/share/lib
-COPY src/main/resources/context.properties /usr/share/config/context.properties
-COPY src/test/resources/dockerMongodb.properties /usr/share/config/dbConfig.properties
- 
-# Expose the appropriate port. In case of Tomcat, this is 8080.
-ARG PORT
-EXPOSE ${PORT}
-
-# Set the path for the context configuration file
-ARG CONTEXT_CONFIG_KEY
-ENV ${CONTEXT_CONFIG_KEY} "/usr/share/config/context.properties"
-
-# Set the path for the mongodb configuration file
-ARG MONGODB_CONFIG_KEY
-ENV ${MONGODB_CONFIG_KEY} "/usr/share/config/dbConfig.properties"
- 
-# Start the jar
-CMD java -jar "/usr/share/basyxExecutable.jar" 
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/build.bat b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/build.bat
deleted file mode 100644
index 64f74e3..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/build.bat
+++ /dev/null
@@ -1 +0,0 @@
-../.././mvnw clean install -U -Pdocker -DskipTests
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/build.sh b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/build.sh
deleted file mode 100644
index 6820ccc..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/build.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/usr/bin/env sh
-../../mvnw clean install -U -Pdocker -DskipTests
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/docker-compose.yml b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/docker-compose.yml
deleted file mode 100644
index 131c53b..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/docker-compose.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-version: '2.1'
-services:
-  aas:
-    image: ${BASYX_IMAGE_NAME}:${BASYX_IMAGE_TAG}
-    container_name: ${BASYX_CONTAINER_NAME}
-    ports:
-      - ${BASYX_HOST_PORT}:${BASYX_CONTAINER_PORT}
-    depends_on:
-      mongodb:
-        condition: service_healthy
-    links:
-      - mongodb
-
-  mongodb:
-    image: mongo:latest
-    container_name: mongodb
-# Possibility to enable authentication
-#    environment:
-#      MONGO_INITDB_ROOT_USERNAME: root
-#      MONGO_INITDB_ROOT_PASSWORD: example
-    healthcheck:
-      test: echo 'db.runCommand("ping").ok' | mongo mongodb:27017/test --quiet
-      interval: 3s
-      timeout: 3s
-      retries: 5
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/pom.xml b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/pom.xml
deleted file mode 100644
index 81ea7d9..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/pom.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.eclipse.basyx</groupId>
-    <artifactId>basyx.components.docker</artifactId>
-    <version>0.0.1-SNAPSHOT</version>
-  </parent>
-  
-  <artifactId>basyx.components.mongodbAASServer</artifactId>
-  <name>MongoDB AAS Server</name>
-  
-  	<properties>
-		<!--  
-			basyx.components.executable is the executable class with the definition of the public void main(String[]).
-			It is needed when building the jar in the maven-jar-plugin (see basyx.components.docker/pom.xml) 
-		-->
-		<basyx.components.executable>org.eclipse.basyx.components.executable.AASServerExecutable</basyx.components.executable>
-	</properties>
-  
-	<packaging>jar</packaging>
-	
-	<!-- Define additional plugins that are not included by default -->
-	<!-- Plugin configuration is done in parent project(s) -->
-	<build>
-		<plugins>
-			<!-- Attach sources to jar file -->
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-source-plugin</artifactId>
-			</plugin>
-		</plugins>
-	</build>
-	
-	<dependencies>
-		<!-- Use MongoDB Java Drivers for db connections -->
-	    <dependency>
-	        <groupId>org.mongodb</groupId>
-	        <artifactId>mongodb-driver-sync</artifactId>
-	        <version>4.0.5</version>
-	    </dependency>
-
-		<!-- Use Spring Data MongoDB for db data management -->		
-		<dependency>
-			<groupId>org.springframework.data</groupId>
-			<artifactId>spring-data-mongodb</artifactId>
-			<version>3.0.1.RELEASE</version>
-		</dependency>
-		
-		<!-- Adds additional classes of the BaSys SDK for tests -->
-		<dependency>
-			<groupId>org.eclipse.basyx</groupId>
-			<artifactId>basyx.sdk</artifactId>
-			<classifier>tests</classifier>
-		</dependency>
-	</dependencies>
-	
-	<profiles>
-		<profile>
-			<!-- 
-				"Docker" profile - do not build & install docker images by default
-				Run "mvn install -Pdocker" in order to include docker  
-			-->
-			<id>docker</id>
-			<build>
-				<plugins>
-					<!-- Read maven properties from file -->
-					<plugin>
-						<groupId>org.codehaus.mojo</groupId>
-						<artifactId>properties-maven-plugin</artifactId>
-					</plugin>
-				
-					<!-- Copy the dependencies necessary to run the jar -->
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-dependency-plugin</artifactId>
-					</plugin>
-				
-					<!-- Build the docker image -->
-					<plugin>
-						<groupId>com.spotify</groupId>
-						<artifactId>dockerfile-maven-plugin</artifactId>
-					</plugin>
-				
-					<!-- Create integration test environment -->
-					<plugin>
-						<groupId>com.dkanejs.maven.plugins</groupId>
-						<artifactId>docker-compose-maven-plugin</artifactId>
-					</plugin>
-					
-					<!-- Run integration tests -->
-					<plugin>    
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-failsafe-plugin</artifactId>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-	</profiles>
-</project>
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/MongoDBAASServerComponent.java b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/MongoDBAASServerComponent.java
deleted file mode 100644
index c96fc54..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/MongoDBAASServerComponent.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.eclipse.basyx.components;
-
-import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.eclipse.basyx.components.configuration.BaSyxMongoDBConfiguration;
-import org.eclipse.basyx.components.servlet.MongoDBAASServerServlet;
-import org.eclipse.basyx.vab.protocol.http.server.AASHTTPServer;
-import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Component providing a persistent AAS server that is able to receive AAS/SMs
- * from remote. It uses the Aggregator API, i.e. AAS should be pushed to
- * ${URL}/shells
- * 
- * @author espen
- *
- */
-public class MongoDBAASServerComponent {
-	private static Logger logger = LoggerFactory.getLogger(MongoDBAASServerComponent.class);
-
-	// The component configuration
-	private BaSyxContextConfiguration contextConfig;
-	private BaSyxMongoDBConfiguration dbConfig;
-
-	// The server with the servlet that will be created
-	private AASHTTPServer server;
-
-	/**
-	 * Default constructor that loads default configurations
-	 */
-	public MongoDBAASServerComponent() {
-		this.contextConfig = new BaSyxContextConfiguration();
-		this.dbConfig = new BaSyxMongoDBConfiguration();
-	}
-
-	/**
-	 * Constructs an empty AAS server using the passed arguments
-	 * 
-	 * @param contextConfig
-	 * @param dbConfig
-	 */
-	public MongoDBAASServerComponent(BaSyxContextConfiguration contextConfig, BaSyxMongoDBConfiguration dbConfig) {
-		this.contextConfig = contextConfig;
-		this.dbConfig = dbConfig;
-	}
-
-	/**
-	 * Starts the AASX component at http://${hostName}:${port}/${path}
-	 */
-	public void startComponent() {
-		logger.info("Create the server...");
-		// Init HTTP context and add an XMLAAServlet according to the configuration
-		BaSyxContext context = contextConfig.createBaSyxContext();
-		// Create the Servlet for aas
-		context.addServletMapping("/*", new MongoDBAASServerServlet(dbConfig));
-		server = new AASHTTPServer(context);
-
-		logger.info("Start the server...");
-		server.start();
-	}
-
-	/**
-	 * Retrieves the URL on which the component is providing its HTTP server
-	 * 
-	 * @return
-	 */
-	public String getURL() {
-		return contextConfig.getUrl();
-	}
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/executable/AASServerExecutable.java b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/executable/AASServerExecutable.java
deleted file mode 100644
index dc760c3..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/executable/AASServerExecutable.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.eclipse.basyx.components.executable;
-
-import org.eclipse.basyx.components.MongoDBAASServerComponent;
-import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.eclipse.basyx.components.configuration.BaSyxMongoDBConfiguration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Starts an HTTP server backed by a MongoDB that is able to receive AAS and
- * submodels pushed from remote <br />
- * They are made available at
- * <i>localhost:4000/aasServer/shells/${aasId}/aas</i>. Submodels are available
- * at
- * <i>localhost:4000/aasServer/shells/${aasId}/submodels/${submodelId}/submodel</i><br
- * />
- * 
- * @author espen
- */
-public class AASServerExecutable {
-	// Creates a Logger based on the current class
-	private static Logger logger = LoggerFactory.getLogger(AASServerExecutable.class);
-
-	public static void main(String[] args) {
-		logger.info("Starting BaSyx MongoDB AASServer component...");
-		// Load context configuration
-		BaSyxContextConfiguration config = new BaSyxContextConfiguration();
-		config.loadFromDefaultSource();
-		
-		// Load db configuration
-		BaSyxMongoDBConfiguration dbConfig = new BaSyxMongoDBConfiguration();
-		dbConfig.loadFromDefaultSource();
-		
-		// Create and start component according to the configuration
-		MongoDBAASServerComponent component = new MongoDBAASServerComponent(config, dbConfig);
-		component.startComponent();
-		logger.info("BaSyx MongoDB AASServer component started");
-	}
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/servlet/MongoDBAASServerServlet.java b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/servlet/MongoDBAASServerServlet.java
deleted file mode 100644
index 8be8d61..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/java/org/eclipse/basyx/components/servlet/MongoDBAASServerServlet.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.eclipse.basyx.components.servlet;
-
-import org.eclipse.basyx.aas.aggregator.restapi.AASAggregatorProvider;
-import org.eclipse.basyx.components.configuration.BaSyxMongoDBConfiguration;
-import org.eclipse.basyx.components.mongodb.MongoDBAASAggregator;
-import org.eclipse.basyx.vab.protocol.http.server.VABHTTPInterface;
-
-/**
- * A servlet containing the empty infrastructure needed to support receiving
- * AAS/Submodels by clients and hosting them for MongoDB backend
- * 
- * @author espen
- *
- */
-public class MongoDBAASServerServlet extends VABHTTPInterface<AASAggregatorProvider> {
-	private static final long serialVersionUID = 1244938902937878401L;
-
-	public MongoDBAASServerServlet() {
-		super(new AASAggregatorProvider(new MongoDBAASAggregator()));
-	}
-
-	public MongoDBAASServerServlet(BaSyxMongoDBConfiguration config) {
-		super(new AASAggregatorProvider(new MongoDBAASAggregator(config)));
-	}
-
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/resources/context.properties b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/resources/context.properties
deleted file mode 100644
index a723466..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/resources/context.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-contextPath=/aasServer
-contextHostname=localhost
-contextPort=4000
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/resources/logback.xml b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/resources/logback.xml
deleted file mode 100644
index 86341d6..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/main/resources/logback.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
- 
-<configuration>
- 
-  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-    
-    <!-- Example for a filter, which removes all entries not containing "[TEST]" in the message. -->
-    
-    <!--<filter class="ch.qos.logback.core.filter.EvaluatorFilter">      
-      <evaluator>
-        <expression>return message.contains("[TEST]");</expression>
-      </evaluator>
-      <OnMismatch>DENY</OnMismatch>
-      <OnMatch>NEUTRAL</OnMatch>
-    </filter>-->
-  
-    <encoder>
-      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
-    </encoder>
-  </appender>
-  
-  <root level="INFO">          
-    <appender-ref ref="STDOUT" />
-  </root>  
-   
-</configuration>
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/ITAASServer.java b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/ITAASServer.java
deleted file mode 100644
index 344e733..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/ITAASServer.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.eclipse.basyx.components.MongoDBAASServer;
-
-import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.eclipse.basyx.components.configuration.BaSyxDockerConfiguration;
-import org.junit.BeforeClass;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Tests the docker container using the test suite
- * 
- * @author espen
- *
- */
-public class ITAASServer extends AASServerSuite {
-
-	private static String URL;
-	
-	@Override
-	protected String getURL() {
-		return URL;
-	}
-
-	private static Logger logger = LoggerFactory.getLogger(AASServerSuite.class);
-
-	@BeforeClass
-	public static void setUpClass() {
-		logger.info("Running integration test...");
-
-		logger.info("Loading servlet configuration");
-		// Load the servlet configuration inside of the docker configuration from
-		// properties file
-		BaSyxContextConfiguration contextConfig = new BaSyxContextConfiguration();
-		contextConfig.loadFromResource(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH);
-
-		// Load the docker environment configuration from properties file
-		logger.info("Loading docker configuration");
-		BaSyxDockerConfiguration dockerConfig = new BaSyxDockerConfiguration();
-		dockerConfig.loadFromResource(BaSyxDockerConfiguration.DEFAULT_CONFIG_PATH);
-
-		URL = "http://localhost:" + dockerConfig.getHostPort() + contextConfig.getContextPath();
-	}
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/SimpleNoOpAASSubmodel.java b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/SimpleNoOpAASSubmodel.java
deleted file mode 100644
index 8b319e6..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/SimpleNoOpAASSubmodel.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.eclipse.basyx.components.MongoDBAASServer;
-
-import java.util.Map;
-
-import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.testsuite.regression.submodel.restapi.SimpleAASSubmodel;
-
-public class SimpleNoOpAASSubmodel extends SimpleAASSubmodel {
-
-	public SimpleNoOpAASSubmodel() {
-		this("SimpleAASSubmodel");
-	}
-
-	public SimpleNoOpAASSubmodel(String idShort) {
-		super(idShort);
-
-		// Remove operations
-		Map<String, ISubmodelElement> elems = this.getSubmodelElements();
-		elems.remove("complex");
-		elems.remove("simple");
-		elems.remove("exception1");
-		elems.remove("exception2");
-	}
-
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/TestAASServer.java b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/TestAASServer.java
deleted file mode 100644
index aaba288..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/java/org/eclipse/basyx/components/MongoDBAASServer/TestAASServer.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.eclipse.basyx.components.MongoDBAASServer;
-
-import java.io.IOException;
-
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.eclipse.basyx.components.MongoDBAASServerComponent;
-import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.eclipse.basyx.components.configuration.BaSyxMongoDBConfiguration;
-import org.eclipse.basyx.components.mongodb.MongoDBAASAggregator;
-import org.junit.BeforeClass;
-import org.xml.sax.SAXException;
-
-/**
- * Tests the component using the test suite
- * 
- * @author espen
- *
- */
-public class TestAASServer extends AASServerSuite {
-
-	private static MongoDBAASServerComponent component;
-
-	@Override
-	protected String getURL() {
-		return component.getURL();
-	}
-
-	@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();
-
-		BaSyxContextConfiguration config = new BaSyxContextConfiguration();
-		config.loadFromResource(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH);
-		component = new MongoDBAASServerComponent(config, new BaSyxMongoDBConfiguration());
-		component.startComponent();
-	}
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/resources/.env b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/resources/.env
deleted file mode 100644
index d9e4e6e..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/src/test/resources/.env
+++ /dev/null
@@ -1,5 +0,0 @@
-BASYX_HOST_PORT=8082
-BASYX_CONTAINER_PORT=4000
-BASYX_IMAGE_NAME=basys/aas-server-mongodb
-BASYX_CONTAINER_NAME=aas
-BASYX_IMAGE_TAG=0.0.1-SNAPSHOT
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/start.bat b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/start.bat
deleted file mode 100644
index f0ff9e1..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/start.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-cd src/test/resources
-docker-compose up
-cd ../../..
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/start.sh b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/start.sh
deleted file mode 100644
index 4b9b54a..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/start.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env sh
-cd src/test/resources
-docker-compose up
-cd ../../..
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/stop.bat b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/stop.bat
deleted file mode 100644
index b645246..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/stop.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-cd src/test/resources
-docker-compose down
-cd ../../..
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/stop.sh b/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/stop.sh
deleted file mode 100644
index e11a931..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.mongodbAASServer/stop.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env sh
-cd src/test/resources
-docker-compose down
-cd ../../..
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/Dockerfile b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/Dockerfile
deleted file mode 100644
index 989ae81..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/Dockerfile
+++ /dev/null
@@ -1,19 +0,0 @@
-# Add java runtime environment for execution
-FROM java:8-jdk-alpine 
-
-# Copy built jar to image using the jar name specified in the pom.xml (JAR_FILE)
-ARG JAR_FILE
-COPY target/${JAR_FILE} /usr/share/basyxExecutable.jar
-COPY target/lib /usr/share/lib
-COPY src/main/resources/context.properties /usr/share/config/context.properties
- 
-# Expose the appropriate port. In case of Tomcat, this is 8080.
-ARG PORT
-EXPOSE ${PORT}
-
-# Set the path for the context configuration file
-ARG CONTEXT_CONFIG_KEY
-ENV ${CONTEXT_CONFIG_KEY} "/usr/share/config/context.properties"
-
-# Start the jar
-CMD java -jar "/usr/share/basyxExecutable.jar"
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/build.bat b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/build.bat
deleted file mode 100644
index 64f74e3..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/build.bat
+++ /dev/null
@@ -1 +0,0 @@
-../.././mvnw clean install -U -Pdocker -DskipTests
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/build.sh b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/build.sh
deleted file mode 100755
index 6820ccc..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/build.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/usr/bin/env sh
-../../mvnw clean install -U -Pdocker -DskipTests
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/docker-compose.yml b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/docker-compose.yml
deleted file mode 100644
index 952e5a3..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/docker-compose.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-version: '3'
-services:
-
-  aas:
-    image: ${BASYX_IMAGE_NAME}:${BASYX_IMAGE_TAG}
-    container_name: ${BASYX_CONTAINER_NAME}
-    ports:
-      - ${BASYX_HOST_PORT}:${BASYX_CONTAINER_PORT}
-      
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/pom.xml b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/pom.xml
deleted file mode 100644
index b8ef81c..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/pom.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	
-	<!--
-		Simple Docker Component
-	 
-		Serves as a template for simple docker components that do not depend on other docker containers.
-		Do NOT use the included in-memory registry in a productive environment - the entries are not stored permanently
-	 -->
-
-	<parent>
-		<groupId>org.eclipse.basyx</groupId>
-		<artifactId>basyx.components.docker</artifactId>
-		<version>0.0.1-SNAPSHOT</version>
-    </parent>
-	
-	<artifactId>basyx.components.xmlAAS</artifactId>
-	<name>BaSyx XML Docker Component</name>
-	
-	<properties>
-		<!--  
-			basyx.components.executable is the executable class with the definition of the public void main(String[]).
-			It is needed when building the jar in the maven-jar-plugin (see basyx.components.docker/pom.xml) 
-		-->
-		<basyx.components.executable>org.eclipse.basyx.components.executable.XMLExecutable</basyx.components.executable>
-	</properties>
-	
-	<packaging>jar</packaging>
-	
-	<!-- Define additional plugins that are not included by default -->
-	<!-- Plugin configuration is done in parent project(s) -->
-	<build>
-		<plugins>
-			<!-- Attach sources to jar file -->
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-source-plugin</artifactId>
-			</plugin>
-		</plugins>
-	</build>
-	
-	<profiles>
-		<profile>
-			<!-- 
-				"Docker" profile - do not build & install docker images by default
-				Run "mvn install -Pdocker" in order to include docker  
-			-->
-			<id>docker</id>
-			<build>
-				<plugins>
-					<!-- Read maven properties from file -->
-					<plugin>
-						<groupId>org.codehaus.mojo</groupId>
-						<artifactId>properties-maven-plugin</artifactId>
-					</plugin>
-				
-					<!-- Copy the dependencies necessary to run the jar -->
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-dependency-plugin</artifactId>
-					</plugin>
-				
-					<!-- Build the docker image -->
-					<plugin>
-						<groupId>com.spotify</groupId>
-						<artifactId>dockerfile-maven-plugin</artifactId>
-					</plugin>
-				
-					<!-- Create integration test environment -->
-					<plugin>
-						<groupId>com.dkanejs.maven.plugins</groupId>
-						<artifactId>docker-compose-maven-plugin</artifactId>
-					</plugin>
-					
-					<!-- Run integration tests -->
-					<plugin>    
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-failsafe-plugin</artifactId>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-	</profiles>
-</project>
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/java/org/eclipse/basyx/components/XMLAASComponent.java b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/java/org/eclipse/basyx/components/XMLAASComponent.java
deleted file mode 100644
index 4ad7e5a..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/java/org/eclipse/basyx/components/XMLAASComponent.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package org.eclipse.basyx.components;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.registration.proxy.AASRegistryProxy;
-import org.eclipse.basyx.components.configuration.BaSyxConfiguration;
-import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.eclipse.basyx.components.servlet.aas.AASBundleServlet;
-import org.eclipse.basyx.components.xml.XMLAASBundleFactory;
-import org.eclipse.basyx.support.bundle.AASBundle;
-import org.eclipse.basyx.support.bundle.AASBundleDescriptorFactory;
-import org.eclipse.basyx.vab.protocol.http.server.AASHTTPServer;
-import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
-
-/**
- * A component that takes an xml file (according to the AAS XML-Schema) and provides the AAS via an HTTP server
- * 
- * @author schnicke, espen
- *
- */
-public class XMLAASComponent implements IComponent {
-	private static Logger logger = LoggerFactory.getLogger(XMLAASComponent.class);
-
-	// The server with the servlet that will be created
-	protected AASHTTPServer server;
-
-	protected Collection<AASBundle> aasBundles;
-
-	protected BaSyxContextConfiguration contextConfig;
-	protected String registryUrl;
-
-	protected XMLAASComponent(BaSyxContextConfiguration contextConfig) {
-		// Sets the server context (still needs to load the bundle)
-		this.contextConfig = contextConfig;
-	}
-
-	public XMLAASComponent(BaSyxContextConfiguration contextConfig, String xmlPath,
-			String registryUrl) throws ParserConfigurationException, SAXException, IOException {
-		this(contextConfig);
-		String xmlContent = BaSyxConfiguration.getResourceString(xmlPath);
-		setAASBundle(new XMLAASBundleFactory(xmlContent).create());
-		setRegistryUrl(registryUrl);
-	}
-
-	protected void setAASBundle(Collection<AASBundle> aasBundles) {
-		this.aasBundles = aasBundles;
-	}
-
-	protected void setRegistryUrl(String registryUrl) {
-		this.registryUrl = registryUrl;
-	}
-
-
-	/**
-	 * Returns the set of AAS descriptors for the AAS contained in the AASX
-	 * 
-	 * @param hostBasePath
-	 *                     the path to the server; helper method for e.g. virtualization
-	 *                     environments
-	 * @return
-	 */
-	public Set<AASDescriptor> retrieveDescriptors(String hostBasePath) {
-		return aasBundles.stream().map(b -> AASBundleDescriptorFactory.createAASDescriptor(b, hostBasePath))
-				.collect(Collectors.toSet());
-	}
-
-	/**
-	 * Returns the set of AAS descriptors for the AAS contained in the AASX
-	 * 
-	 * @return
-	 */
-	public Set<AASDescriptor> retrieveDescriptors() {
-		String hostBasePath = contextConfig.getUrl();
-		return retrieveDescriptors(hostBasePath);
-	}
-
-	/**
-	 * Starts the AASX component at http://${hostName}:${port}/${path}
-	 * 
-	 * @param hostName
-	 * @param port
-	 * @param path
-	 * @param docBasePath
-	 * @throws IOException
-	 * @throws SAXException
-	 * @throws ParserConfigurationException
-	 */
-	@Override
-	public void startComponent() {
-		logger.info("Create the server...");
-		// Init HTTP context and add an XMLAAServlet according to the configuration
-		BaSyxContext context = contextConfig.createBaSyxContext();
-		// Create the Servlet for aas
-		context.addServletMapping("/*", new AASBundleServlet(aasBundles));
-		server = new AASHTTPServer(context);
-
-
-		logger.info("Start the server...");
-		server.start();
-
-		if (registryUrl != null && !registryUrl.isEmpty()) {
-			logger.info("Registering AAS at registry \"" + registryUrl + "\"...");
-			AASRegistryProxy registryProxy = new AASRegistryProxy(registryUrl);
-			Set<AASDescriptor> descriptors = retrieveDescriptors();
-			descriptors.stream().forEach(registryProxy::register);
-		} else {
-			logger.info("No registry specified, skipped registration");
-		}
-	}
-
-	@Override
-	public void stopComponent() {
-		server.shutdown();
-	}
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/java/org/eclipse/basyx/components/executable/XMLExecutable.java b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/java/org/eclipse/basyx/components/executable/XMLExecutable.java
deleted file mode 100644
index 31c3c97..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/java/org/eclipse/basyx/components/executable/XMLExecutable.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.eclipse.basyx.components.executable;
-
-import java.io.IOException;
-
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.eclipse.basyx.components.XMLAASComponent;
-import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
-
-/**
- * Starts an HTTP server providing multiple AAS and submodels as described in
- * the XML file specified in the properties file <br />
- * They are made available at <i>localhost:4000/xmlAAS/$aasId/aas</i><br />
- * <br />
- * <b>Please note:</b> Neither the AASs nor the Submodels are added to the
- * registry. Additionally, the Submodel descriptors inside the AAS are missing.
- * <br />
- * There reason for this is, that the executable does not know about the outside
- * context (e.g. docker, ...)!
- * 
- * @author haque, schnicke
- */
-public class XMLExecutable {
-	// Creates a Logger based on the current class
-	private static Logger logger = LoggerFactory.getLogger(XMLExecutable.class);
-
-	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
-		logger.info("Starting BaSyx XML component");
-
-		// Load configuration
-		BaSyxContextConfiguration config = new BaSyxContextConfiguration();
-		config.loadFromDefaultSource();
-
-		String xmlPath = config.getProperty("xmlPath");
-		String registryUrl = config.getProperty("registry");
-		XMLAASComponent component = new XMLAASComponent(config, xmlPath, registryUrl);
-		component.startComponent();
-		logger.info("BaSyx XML component started");
-	}
-}
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/java/org/eclipse/basyx/components/servlets/XMLAASServlet.java b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/java/org/eclipse/basyx/components/servlets/XMLAASServlet.java
deleted file mode 100644
index e44ac91..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/java/org/eclipse/basyx/components/servlets/XMLAASServlet.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.eclipse.basyx.components.servlets;
-
-import java.io.IOException;
-
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.eclipse.basyx.components.servlet.aas.AASBundleServlet;
-import org.eclipse.basyx.components.xml.XMLAASBundleFactory;
-import org.xml.sax.SAXException;
-
-/**
- * It imports AAS from given XML location provided in the context.properties and
- * maps the AAS to servlet. It also adds the submodels, assets and concept
- * descriptors to the AAS.
- * 
- * 
- * @author haque, schnicke
- */
-public class XMLAASServlet extends AASBundleServlet {
-	private static final long serialVersionUID = -3487515646027982620L;
-
-	public XMLAASServlet(String xmlContent) throws ParserConfigurationException, SAXException, IOException {
-		super(new XMLAASBundleFactory(xmlContent).create());
-	}
-}
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/resources/context.properties b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/resources/context.properties
deleted file mode 100644
index f093e52..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/resources/context.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-contextPath=/xmlAAS
-contextHostname=localhost
-contextPort=4000
-xmlPath=xml/aas.xml
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/resources/logback.xml b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/resources/logback.xml
deleted file mode 100644
index 86341d6..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/main/resources/logback.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
- 
-<configuration>
- 
-  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-    
-    <!-- Example for a filter, which removes all entries not containing "[TEST]" in the message. -->
-    
-    <!--<filter class="ch.qos.logback.core.filter.EvaluatorFilter">      
-      <evaluator>
-        <expression>return message.contains("[TEST]");</expression>
-      </evaluator>
-      <OnMismatch>DENY</OnMismatch>
-      <OnMatch>NEUTRAL</OnMatch>
-    </filter>-->
-  
-    <encoder>
-      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
-    </encoder>
-  </appender>
-  
-  <root level="INFO">          
-    <appender-ref ref="STDOUT" />
-  </root>  
-   
-</configuration>
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/test/java/org/eclipse/basyx/regression/xmlAAS/ITInXMLAAS.java b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/test/java/org/eclipse/basyx/regression/xmlAAS/ITInXMLAAS.java
deleted file mode 100644
index 3e15324..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/test/java/org/eclipse/basyx/regression/xmlAAS/ITInXMLAAS.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.eclipse.basyx.regression.xmlAAS;
-
-import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.eclipse.basyx.components.configuration.BaSyxDockerConfiguration;
-import org.junit.BeforeClass;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ITInXMLAAS extends XMLAASSuite {
-	private static Logger logger = LoggerFactory.getLogger(ITInXMLAAS.class);
-
-	@BeforeClass
-	public static void setUpClass() {
-		logger.info("Running integration test...");
-
-		logger.info("Loading servlet configuration");
-		// Load the servlet configuration inside of the docker configuration from properties file
-		BaSyxContextConfiguration contextConfig = new BaSyxContextConfiguration();
-		contextConfig.loadFromResource(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH);
-
-		// Load the docker environment configuration from properties file
-		logger.info("Loading docker configuration");
-		BaSyxDockerConfiguration dockerConfig = new BaSyxDockerConfiguration();
-		dockerConfig.loadFromResource(BaSyxDockerConfiguration.DEFAULT_CONFIG_PATH);
-
-		aasEndpoint = "http://localhost:" + dockerConfig.getHostPort() + contextConfig.getContextPath() + "/" + aasShortId + "/aas";
-		smEndpoint = "http://localhost:" + dockerConfig.getHostPort() + contextConfig.getContextPath() + "/" + aasShortId + "/aas/submodels/" + smShortId + "/submodel";
-
-		logger.info("AAS URL for integration test: " + aasEndpoint);
-	}
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/test/java/org/eclipse/basyx/regression/xmlAAS/TestXMLAAS.java b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/test/java/org/eclipse/basyx/regression/xmlAAS/TestXMLAAS.java
deleted file mode 100644
index 7fd042d..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/test/java/org/eclipse/basyx/regression/xmlAAS/TestXMLAAS.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.eclipse.basyx.regression.xmlAAS;
-
-import java.io.IOException;
-
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
-import org.eclipse.basyx.components.executable.XMLExecutable;
-import org.junit.BeforeClass;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
-
-public class TestXMLAAS extends XMLAASSuite {
-	private static Logger logger = LoggerFactory.getLogger(TestXMLAAS.class);
-
-	@BeforeClass
-	public static void setUpClass() throws ParserConfigurationException, SAXException, IOException {
-		XMLExecutable.main(new String[] {});
-
-		BaSyxContextConfiguration config = new BaSyxContextConfiguration();
-		config.loadFromResource(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH);
-
-		aasEndpoint = "http://" + config.getHostname() + ":" + config.getPort() + "/" + config.getContextPath() + "/" + aasShortId + "/aas";
-		smEndpoint = "http://" + config.getHostname() + ":" + config.getPort() + "/" + config.getContextPath() + "/" + aasShortId + "/aas/submodels/" + smShortId + "/submodel";
-		logger.info("AAS URL for servlet test: " + aasEndpoint);
-	}
-}
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/test/resources/.env b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/test/resources/.env
deleted file mode 100644
index 226a4c9..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/src/test/resources/.env
+++ /dev/null
@@ -1,5 +0,0 @@
-BASYX_HOST_PORT=8083
-BASYX_CONTAINER_PORT=4000
-BASYX_IMAGE_NAME=basys/aas-xml
-BASYX_CONTAINER_NAME=aas-xml
-BASYX_IMAGE_TAG=0.0.1-SNAPSHOT
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/start.bat b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/start.bat
deleted file mode 100644
index f0ff9e1..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/start.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-cd src/test/resources
-docker-compose up
-cd ../../..
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/start.sh b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/start.sh
deleted file mode 100755
index 4b9b54a..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/start.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env sh
-cd src/test/resources
-docker-compose up
-cd ../../..
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/stop.bat b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/stop.bat
deleted file mode 100644
index b645246..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/stop.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-cd src/test/resources
-docker-compose down
-cd ../../..
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/stop.sh b/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/stop.sh
deleted file mode 100755
index e11a931..0000000
--- a/components/basys.components/basyx.components.docker/basyx.components.xmlAAS/stop.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env sh
-cd src/test/resources
-docker-compose down
-cd ../../..
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/pom.xml b/components/basys.components/basyx.components.docker/pom.xml
index ddf8eed..b5f8d1f 100644
--- a/components/basys.components/basyx.components.docker/pom.xml
+++ b/components/basys.components/basyx.components.docker/pom.xml
@@ -16,8 +16,6 @@
 	<!-- Includes all components in this project as separated modules -->
 	<modules>
 		<module>basyx.components.registry</module>
-		<module>basyx.components.xmlAAS</module>
-		<module>basyx.components.AASX</module>
     	<module>basyx.components.AASServer</module>
   </modules>
 	
@@ -112,6 +110,7 @@
 							<!-- The system property/env keys for basyx configuration files -->
 							<CONTEXT_CONFIG_KEY>BASYX_CONTEXT</CONTEXT_CONFIG_KEY>
 							<REGISTRY_CONFIG_KEY>BASYX_REGISTRY</REGISTRY_CONFIG_KEY>
+							<AAS_CONFIG_KEY>BASYX_AAS</AAS_CONFIG_KEY>
 							<MONGODB_CONFIG_KEY>BASYX_MONGODB</MONGODB_CONFIG_KEY>
 							<DOCKER_CONFIG_KEY>BASYX_DOCKER</DOCKER_CONFIG_KEY>
 							<SQL_CONFIG_KEY>BASYX_SQL</SQL_CONFIG_KEY>
diff --git a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxContextConfiguration.java b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxContextConfiguration.java
index 0c00079..ca8a966 100644
--- a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxContextConfiguration.java
+++ b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxContextConfiguration.java
@@ -39,20 +39,40 @@
 		return defaultProps;
 	}
 
+	/**
+	 * Empty Constructor - use default values
+	 */
 	public BaSyxContextConfiguration() {
 		super(getDefaultProperties());
 	}
 
+	/**
+	 * Constructor with predefined value map
+	 */
 	public BaSyxContextConfiguration(Map<String, String> values) {
 		super(values);
 	}
 
+	/**
+	 * Constructor with initial configuration - docBasePath and hostname are default values
+	 * 
+	 * @param port        The port that will be occupied
+	 * @param contextPath The subpath for this context
+	 */
 	public BaSyxContextConfiguration(int port, String contextPath) {
 		this();
 		setPort(port);
 		setContextPath(contextPath);
 	}
 
+	/**
+	 * Constructor with initial configuration - docBasePath and hostname are default values
+	 * 
+	 * @param contextPath The subpath for this context
+	 * @param docBasePath The local base path for the documents
+	 * @param hostname    The hostname
+	 * @param port        The port that will be occupied
+	 */
 	public BaSyxContextConfiguration(String contextPath, String docBasePath, String hostname, int port) {
 		this();
 		setContextPath(contextPath);
diff --git a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxDockerConfiguration.java b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxDockerConfiguration.java
index 00d331d..cd52038 100644
--- a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxDockerConfiguration.java
+++ b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxDockerConfiguration.java
@@ -37,14 +37,28 @@
 		return defaultProps;
 	}
 
+	/**
+	 * Empty Constructor - use default values
+	 */
 	public BaSyxDockerConfiguration() {
 		super(getDefaultProperties());
 	}
 
+	/**
+	 * Constructor with predefined value map
+	 */
 	public BaSyxDockerConfiguration(Map<String, String> values) {
 		super(values);
 	}
 
+	/**
+	 * Constructor with initial configuration
+	 * 
+	 * @param hostPort      The port for the HOST
+	 * @param containerPort The port for the CONTAINER
+	 * @param imageName     The name of the image
+	 * @param containerName The name of the container
+	 */
 	public BaSyxDockerConfiguration(int hostPort, int containerPort, String imageName, String containerName) {
 		this();
 		setHostPort(hostPort);
diff --git a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxMongoDBConfiguration.java b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxMongoDBConfiguration.java
index 0ccdb5d..5ab9ef5 100644
--- a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxMongoDBConfiguration.java
+++ b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxMongoDBConfiguration.java
@@ -43,14 +43,30 @@
 		return defaultProps;
 	}
 
+	/**
+	 * Constructor with predefined value map
+	 */
 	public BaSyxMongoDBConfiguration(Map<String, String> values) {
 		super(values);
 	}
 
+	/**
+	 * Empty Constructor - use default values
+	 */
 	public BaSyxMongoDBConfiguration() {
 		super(getDefaultProperties());
 	}
 
+	/**
+	 * Constructor with initial configuration
+	 * 
+	 * @param user               The username for the mongodb
+	 * @param connectionUrl      Connection-URL for the mongodb
+	 * @param database           The database that shall be used
+	 * @param registryCollection Collection name for the registry data
+	 * @param aasCollection      Collection name for the AAS data
+	 * @param submodelCollection Collection name for the submodel data
+	 */
 	public BaSyxMongoDBConfiguration(String user, String connectionUrl, String database, String registryCollection,
 			String aasCollection, String submodelCollection) {
 		this();
@@ -62,6 +78,15 @@
 		setSubmodelCollection(submodelCollection);
 	}
 
+	/**
+	 * Constructor with initial configuration (without registry collection)
+	 * 
+	 * @param user               The username for the mongodb
+	 * @param connectionUrl      Connection-URL for the mongodb
+	 * @param database           The database that shall be used
+	 * @param aasCollection      Collection name for the AAS data
+	 * @param submodelCollection Collection name for the submodel data
+	 */
 	public BaSyxMongoDBConfiguration(String user, String connectionUrl, String database, String aasCollection,
 			String submodelCollection) {
 		this();
@@ -72,6 +97,15 @@
 		setSubmodelCollection(submodelCollection);
 	}
 
+	/**
+	 * Constructor with initial configuration (without aas collection)
+	 * 
+	 * @param user               The username for the mongodb
+	 * @param connectionUrl      Connection-URL for the mongodb
+	 * @param database           The database that shall be used
+	 * @param aasCollection      Collection name for the AAS data
+	 * @param submodelCollection Collection name for the submodel data
+	 */
 	public BaSyxMongoDBConfiguration(String user, String connectionUrl, String database, String registryCollection) {
 		this();
 		setUser(user);
diff --git a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxSQLConfiguration.java b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxSQLConfiguration.java
index 01760a6..86e1295 100644
--- a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxSQLConfiguration.java
+++ b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/components/configuration/BaSyxSQLConfiguration.java
@@ -40,14 +40,29 @@
 		return defaultProps;
 	}
 
+	/**
+	 * Constructor with predefined value map
+	 */
 	public BaSyxSQLConfiguration(Map<String, String> values) {
 		super(values);
 	}
 
+	/**
+	 * Empty Constructor - use default values
+	 */
 	public BaSyxSQLConfiguration() {
 		super(getDefaultProperties());
 	}
 
+	/**
+	 * Constructor with initial configuration
+	 * 
+	 * @param user   Username for SQL database
+	 * @param pass   Password for SQL database
+	 * @param path   SQL connection path
+	 * @param driver SQL driver
+	 * @param prefix SQL driver prefix
+	 */
 	public BaSyxSQLConfiguration(String user, String pass, String path, String driver, String prefix) {
 		this();
 		setUser(user);
diff --git a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/support/bundle/AASBundleDescriptorFactory.java b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/support/bundle/AASBundleDescriptorFactory.java
index 2291fa4..487ed63 100644
--- a/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/support/bundle/AASBundleDescriptorFactory.java
+++ b/components/basys.components/basyx.components.lib/src/main/java/org/eclipse/basyx/support/bundle/AASBundleDescriptorFactory.java
@@ -24,7 +24,9 @@
 		String nHostBasePath = VABPathTools.stripSlashes(hostBasePath);
 
 		// Create AASDescriptor
-		String aasBase = VABPathTools.concatenatePaths(nHostBasePath, bundle.getAAS().getIdShort(), "aas");
+		String endpointId = bundle.getAAS().getIdentification().getId();
+		endpointId = VABPathTools.encodePathElement(endpointId);
+		String aasBase = VABPathTools.concatenatePaths(nHostBasePath, endpointId, "aas");
 		AASDescriptor desc = new AASDescriptor(bundle.getAAS(), aasBase);
 		bundle.getSubmodels().stream().forEach(s -> {
 			SubmodelDescriptor smDesc = new SubmodelDescriptor(s, VABPathTools.concatenatePaths(aasBase, "submodels", s.getIdShort(), "submodel"));
diff --git a/components/basys.components/basyx.components.lib/src/test/java/org/eclipse/basyx/regression/support/bundle/TestAASBundleDescriptorFactory.java b/components/basys.components/basyx.components.lib/src/test/java/org/eclipse/basyx/regression/support/bundle/TestAASBundleDescriptorFactory.java
index 42d5003..e84be6f 100644
--- a/components/basys.components/basyx.components.lib/src/test/java/org/eclipse/basyx/regression/support/bundle/TestAASBundleDescriptorFactory.java
+++ b/components/basys.components/basyx.components.lib/src/test/java/org/eclipse/basyx/regression/support/bundle/TestAASBundleDescriptorFactory.java
@@ -8,6 +8,7 @@
 import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
 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.support.bundle.AASBundle;
 import org.eclipse.basyx.support.bundle.AASBundleDescriptorFactory;
 import org.eclipse.basyx.vab.modelprovider.VABPathTools;
@@ -24,7 +25,7 @@
 	public void testDescriptorCreation() {
 		String aasId = "aasId";
 		AssetAdministrationShell shell = new AssetAdministrationShell();
-		shell.setIdShort(aasId);
+		shell.setIdentification(new Identifier(IdentifierType.CUSTOM, aasId));
 
 		String smId = "smId";
 		SubModel sm = new SubModel();
diff --git a/examples/basys.examples/pom.xml b/examples/basys.examples/pom.xml
index 2f8b44e..c59cd91 100644
--- a/examples/basys.examples/pom.xml
+++ b/examples/basys.examples/pom.xml
@@ -288,13 +288,6 @@
 			<version>0.0.1-SNAPSHOT</version>
 		</dependency>
 		
-		<!-- Add explicit AASX component dependency -->
-		<dependency>
-			<groupId>org.eclipse.basyx</groupId>
-			<artifactId>basyx.components.AASX</artifactId>
-			<version>0.0.1-SNAPSHOT</version>
-		</dependency>
-		
 		<!-- Adds additional classes of the BaSys SDK for tests -->
 		<dependency>
 			<groupId>org.eclipse.basyx</groupId>
diff --git a/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/scenarios/cloudedgedeployment/CloudEdgeDeploymentScenario.java b/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/scenarios/cloudedgedeployment/CloudEdgeDeploymentScenario.java
index 47f97a2..7c1cebe 100644
--- a/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/scenarios/cloudedgedeployment/CloudEdgeDeploymentScenario.java
+++ b/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/scenarios/cloudedgedeployment/CloudEdgeDeploymentScenario.java
@@ -7,8 +7,8 @@
 import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
 import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
 import org.eclipse.basyx.aas.registration.proxy.AASRegistryProxy;
-import org.eclipse.basyx.components.AASServerComponent;
 import org.eclipse.basyx.components.IComponent;
+import org.eclipse.basyx.components.aas.AASServerComponent;
 import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
 import org.eclipse.basyx.components.registry.RegistryComponent;
 import org.eclipse.basyx.components.registry.configuration.BaSyxRegistryConfiguration;
diff --git a/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/scenarios/staticdynamic/StaticDynamicScenario.java b/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/scenarios/staticdynamic/StaticDynamicScenario.java
index 5859994..5af9cab 100644
--- a/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/scenarios/staticdynamic/StaticDynamicScenario.java
+++ b/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/scenarios/staticdynamic/StaticDynamicScenario.java
@@ -15,9 +15,9 @@
 import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
 import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
 import org.eclipse.basyx.aas.registration.proxy.AASRegistryProxy;
-import org.eclipse.basyx.components.AASServerComponent;
 import org.eclipse.basyx.components.IComponent;
-import org.eclipse.basyx.components.aasx.AASXPackageManager;
+import org.eclipse.basyx.components.aas.AASServerComponent;
+import org.eclipse.basyx.components.aas.aasx.AASXPackageManager;
 import org.eclipse.basyx.components.configuration.BaSyxContextConfiguration;
 import org.eclipse.basyx.components.registry.RegistryComponent;
 import org.eclipse.basyx.components.registry.configuration.BaSyxRegistryConfiguration;
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/contexts/BaSyxExamplesContext.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/contexts/BaSyxExamplesContext.java
index 24c007c..cb0bbd5 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/contexts/BaSyxExamplesContext.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/contexts/BaSyxExamplesContext.java
@@ -1,7 +1,7 @@
 package org.eclipse.basyx.examples.contexts;
 
+import org.eclipse.basyx.components.aas.servlet.AASAggregatorServlet;
 import org.eclipse.basyx.components.registry.servlet.InMemoryRegistryServlet;
-import org.eclipse.basyx.components.servlet.AASServerServlet;
 import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
 
 /**
@@ -38,7 +38,7 @@
 		
 		// Define Servlet infrastucture
 		addServletMapping(REGISTRYFRAGMENT + "*", new InMemoryRegistryServlet());
-		addServletMapping(AASSERVERFRAGMENT + "*", new AASServerServlet());
+		addServletMapping(AASSERVERFRAGMENT + "*", new AASAggregatorServlet());
 	}
 }
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/SubmodelElementProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/SubmodelElementProvider.java
index f28ac18..7a9bfe9 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/SubmodelElementProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/SubmodelElementProvider.java
@@ -26,9 +26,12 @@
 	private boolean specializedProvider = false;
 
 	public SubmodelElementProvider(IModelProvider proxy) {
+		IModelProvider unchangedProxy = proxy;
 		this.proxy = getElementProvider(proxy);
+		// if the returned element provider is the same, no specialized provider exists
+		specializedProvider = unchangedProxy != this.proxy;
 	}
-	
+
 	/**
 	 * Used to find out if an Element needs a specialized Provider (Collection, Operation)
 	 * 
@@ -36,19 +39,15 @@
 	 * @return either the unchanged Provider or the Provider nested into a specialized ElementProvider
 	 */
 	@SuppressWarnings("unchecked")
-	private IModelProvider getElementProvider(IModelProvider proxy) {
+	public static IModelProvider getElementProvider(IModelProvider proxy) {
 		Map<String, Object> elementMap = (Map<String, Object>) proxy.getModelPropertyValue("");
 		if(Operation.isOperation(elementMap)) {
-			specializedProvider = true;
 			return new OperationProvider(proxy);
 		} else if (SubmodelElementCollection.isSubmodelElementCollection(elementMap)) {
-			specializedProvider = true;
 			return new SubmodelElementCollectionProvider(proxy);
 		} else if(Property.isProperty(elementMap)) {
-			specializedProvider = true;
 			return new PropertyProvider(proxy);
 		} else {
-			specializedProvider = false;
 			return proxy;
 		}
 	}