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
index e566c35..11e728b 100644
--- 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
@@ -42,12 +42,25 @@
 		BaSyxContextConfiguration config = new BaSyxContextConfiguration();
 		config.loadFromResource(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH);
 
+		startComponent(config.getHostname(), config.getPort(), config.getContextPath(), config.getDocBasePath(), config.getProperty("aasxPath"));
+	}
+
+	/**
+	 * Starts the AASX component at http://${hostName}:${port}/${path}
+	 * 
+	 * @param hostName
+	 * @param port
+	 * @param path
+	 * @param docBasePath
+	 * @throws IOException
+	 * @throws SAXException
+	 * @throws ParserConfigurationException
+	 */
+	public static void startComponent(String hostName, int port, String path, String docBasePath, String aasxPath) throws ParserConfigurationException, SAXException, IOException {
 		// Init HTTP context and add an XMLAAServlet according to the configuration
-		BaSyxContext context = new BaSyxContext(config.getContextPath(), config.getDocBasePath(), config.getHostname(), config.getPort());
+		BaSyxContext context = new BaSyxContext(path, docBasePath, hostName, port);
 
 		// Create the Servlet for aas
-		String aasxPath = config.getProperty("aasxPath");
-
 		context.addServletMapping(SERVLET_MAPPING, new AASXAASServlet(aasxPath));
 
 		// Create and start server
@@ -57,7 +70,6 @@
 
 		// start the server
 		server.start();
-
 	}
 
 
diff --git a/components/basys.components/basyx.components.docker/basyx.components.simple/src/main/java/org/eclipse/basyx/components/executable/InMemoryRegistryExecutable.java b/components/basys.components/basyx.components.docker/basyx.components.simple/src/main/java/org/eclipse/basyx/components/executable/InMemoryRegistryExecutable.java
index cefb994..6501fa7 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.simple/src/main/java/org/eclipse/basyx/components/executable/InMemoryRegistryExecutable.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.simple/src/main/java/org/eclipse/basyx/components/executable/InMemoryRegistryExecutable.java
@@ -35,9 +35,21 @@
 		// Load configuration
 		BaSyxContextConfiguration config = new BaSyxContextConfiguration();
 		config.loadFromResource(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH);
+
+		startComponent(config.getHostname(), config.getPort(), config.getContextPath(), config.getDocBasePath());
+	}
+	
+	/**
+	 * Starts the InMemoryRegistry at http://${hostName}:${port}/${path}
+	 * 
+	 * @param hostName
+	 * @param port
+	 * @param path
+	 * @param docBasePath
+	 */
+	public static void startComponent(String hostName, int port, String path, String docBasePath) {
 		// Init HTTP context and add an InMemoryRegistryServlet according to the configuration
-		BaSyxContext context = new BaSyxContext(config.getContextPath(), config.getDocBasePath(), config.getHostname(),
-				config.getPort());
+		BaSyxContext context = new BaSyxContext(path, docBasePath, hostName, port);
 		context.addServletMapping(SERVLET_MAPPING + "*", new InMemoryRegistryServlet());
 
 		// Create and start server
@@ -45,5 +57,4 @@
 		logger.info("Starting server...");
 		server.start();
 	}
-
 }
\ No newline at end of file
diff --git a/components/basys.components/basyx.components.docker/basyx.components.sqlregistry/src/main/java/org/eclipse/basyx/components/executable/SQLRegistryExecutable.java b/components/basys.components/basyx.components.docker/basyx.components.sqlregistry/src/main/java/org/eclipse/basyx/components/executable/SQLRegistryExecutable.java
index d51f2ed..832441a 100644
--- a/components/basys.components/basyx.components.docker/basyx.components.sqlregistry/src/main/java/org/eclipse/basyx/components/executable/SQLRegistryExecutable.java
+++ b/components/basys.components/basyx.components.docker/basyx.components.sqlregistry/src/main/java/org/eclipse/basyx/components/executable/SQLRegistryExecutable.java
@@ -34,12 +34,22 @@
 		// Load configuration
 		BaSyxContextConfiguration config = new BaSyxContextConfiguration();
 		config.loadFromResource(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH);
+		startComponent(config.getHostname(), config.getPort(), config.getContextPath(), config.getDocBasePath(), "dockerRegistry.properties");
+	}
 
+	/**
+	 * Starts the SQLRegistry at http://${hostName}:${port}/${path}
+	 * 
+	 * @param hostName
+	 * @param port
+	 * @param path
+	 * @param docBasePath
+	 */
+	public static void startComponent(String hostName, int port, String path, String docBasePath, String sqlPropertyPath) {
 		// Init HTTP context and add an SQLRegistryServlet according to the
 		// configuration
-		BaSyxContext context = new BaSyxContext(config.getContextPath(), config.getDocBasePath(), config.getHostname(),
-				config.getPort());
-		context.addServletMapping(SERVLET_MAPPING, new SQLRegistryServlet("dockerRegistry.properties"));
+		BaSyxContext context = new BaSyxContext(path, docBasePath, hostName, port);
+		context.addServletMapping(SERVLET_MAPPING, new SQLRegistryServlet(sqlPropertyPath));
 
 		// Create and start server
 		server = new AASHTTPServer(context);
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
index bad8a53..90ba9dd 100644
--- 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
@@ -44,11 +44,26 @@
 		BaSyxContextConfiguration config = new BaSyxContextConfiguration();
 		config.loadFromResource(BaSyxContextConfiguration.DEFAULT_CONFIG_PATH);
 
-		// Init HTTP context and add an XMLAAServlet according to the configuration
-		BaSyxContext context = new BaSyxContext(config.getContextPath(), config.getDocBasePath(), config.getHostname(), config.getPort());
+		startComponent(config.getHostname(), config.getPort(), config.getContextPath(), config.getDocBasePath(), config.getProperty("xmlPath"));
+	}
+	
 
+	/**
+	 * Starts the XML-AAS at http://${hostName}:${port}/${path}
+	 * 
+	 * @param hostName
+	 * @param port
+	 * @param path
+	 * @param docBasePath
+	 * @throws IOException
+	 * @throws SAXException
+	 * @throws ParserConfigurationException
+	 */
+	public static void startComponent(String hostName, int port, String path, String docBasePath, String xmlPath) throws IOException, ParserConfigurationException, SAXException {
+		// Init HTTP context and add an XMLAAServlet according to the configuration
+		BaSyxContext context = new BaSyxContext(path, docBasePath, hostName, port);
 		// Load xml content from file
-		String xmlContent = BaSyxConfiguration.getResourceString(config.getProperty("xmlPath"));
+		String xmlContent = BaSyxConfiguration.getResourceString(xmlPath);
 		context.addServletMapping(SERVLET_MAPPING, new XMLAASServlet(xmlContent));
 
 		// Create and start server
