Restructures Java SDK project

* fixes separation between vab and aas/submodel
* modifies test folder to match source structure
* adds clear separation of packages in vab, aas and submodel

Change-Id: Ia5acd8fcc7588869f169cd9c276813a3c647dc75
Signed-off-by: Daniel Espen <daniel.espen@iese.fraunhofer.de>
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/CFGBaSyxConnection.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/CFGBaSyxConnection.java
index ad1d7c3..1cb7301 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/CFGBaSyxConnection.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/CFGBaSyxConnection.java
@@ -1,7 +1,7 @@
 package org.eclipse.basyx.components.configuration;
 
-import org.eclipse.basyx.vab.core.IConnectorProvider;
-import org.eclipse.basyx.vab.core.directory.IVABDirectoryService;
+import org.eclipse.basyx.vab.directory.api.IVABDirectoryService;
+import org.eclipse.basyx.vab.protocol.api.IConnectorProvider;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/CFGBaSyxProtocolType.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/CFGBaSyxProtocolType.java
index b31ef5c..6678d1a 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/CFGBaSyxProtocolType.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/CFGBaSyxProtocolType.java
@@ -1,8 +1,8 @@
 package org.eclipse.basyx.components.configuration;
 
-import org.eclipse.basyx.vab.backend.connector.basyx.BaSyxConnectorProvider;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.IConnectorProvider;
+import org.eclipse.basyx.vab.protocol.api.IConnectorProvider;
+import org.eclipse.basyx.vab.protocol.basyx.connector.BaSyxConnectorProvider;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/builder/BaSyxDeviceManagerConfigurationBuilder.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/builder/BaSyxDeviceManagerConfigurationBuilder.java
index e1d2be2..0f878ab 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/builder/BaSyxDeviceManagerConfigurationBuilder.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/builder/BaSyxDeviceManagerConfigurationBuilder.java
@@ -2,8 +2,6 @@
 
 import org.eclipse.basyx.components.configuration.ConfigurableComponent;
 
-
-
 /**
  * Configuration builder for BaSyx device managers
  * 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/builder/BaSyxServiceConfigurationBuilder.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/builder/BaSyxServiceConfigurationBuilder.java
index 97dd688..265a0e1 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/builder/BaSyxServiceConfigurationBuilder.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/configuration/builder/BaSyxServiceConfigurationBuilder.java
@@ -1,15 +1,13 @@
 package org.eclipse.basyx.components.configuration.builder;
 
-import org.eclipse.basyx.aas.api.registry.AASHTTPRegistryProxy;
-import org.eclipse.basyx.aas.api.registry.IAASRegistryService;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
+import org.eclipse.basyx.aas.registration.httpproxy.AASHTTPRegistryProxy;
 import org.eclipse.basyx.components.configuration.CFGBaSyxProtocolType;
 import org.eclipse.basyx.components.configuration.ConfigurableComponent;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.directory.IVABDirectoryService;
-
-
+import org.eclipse.basyx.vab.directory.api.IVABDirectoryService;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 
 /**
  * Configuration builder for BaSyx services
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/devicemanager/DeviceManagerComponent.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/devicemanager/DeviceManagerComponent.java
index e643fab..2d64cf6 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/devicemanager/DeviceManagerComponent.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/devicemanager/DeviceManagerComponent.java
@@ -1,11 +1,11 @@
 package org.eclipse.basyx.components.devicemanager;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.SubmodelDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
 import org.eclipse.basyx.components.service.BaseBaSyxService;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/devicemanager/TCPControllableDeviceManagerComponent.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/devicemanager/TCPControllableDeviceManagerComponent.java
index 3bca2ad..7fede7c 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/devicemanager/TCPControllableDeviceManagerComponent.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/devicemanager/TCPControllableDeviceManagerComponent.java
@@ -6,8 +6,8 @@
 import org.eclipse.basyx.models.controlcomponent.ExecutionState;
 import org.eclipse.basyx.models.controlcomponent.OccupationState;
 import org.eclipse.basyx.models.controlcomponent.SimpleControlComponent;
-import org.eclipse.basyx.vab.backend.server.basyx.BaSyxTCPServer;
-import org.eclipse.basyx.vab.provider.hashmap.VABHashmapProvider;
+import org.eclipse.basyx.vab.modelprovider.map.VABHashmapProvider;
+import org.eclipse.basyx.vab.protocol.basyx.server.BaSyxTCPServer;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/directory/SQLDirectoryProvider.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/directory/SQLDirectoryProvider.java
index 8d4a80c..72e5865 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/directory/SQLDirectoryProvider.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/directory/SQLDirectoryProvider.java
@@ -13,11 +13,11 @@
 
 import javax.servlet.ServletException;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
 import org.eclipse.basyx.components.sqlprovider.driver.SQLDriver;
-import org.eclipse.basyx.vab.backend.http.tools.GSONTools;
-import org.eclipse.basyx.vab.backend.http.tools.factory.DefaultTypeFactory;
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.coder.json.serialization.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONTools;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 /**
  * Model Provider handling SQL Directory Services.
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/netcomm/TCPCommunicator.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/netcomm/TCPCommunicator.java
index fbe1321..59ce17c 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/netcomm/TCPCommunicator.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/netcomm/TCPCommunicator.java
@@ -9,7 +9,7 @@
 import java.util.Collection;
 import java.util.LinkedList;
 
-import org.eclipse.basyx.vab.backend.server.basyx.CoderTools;
+import org.eclipse.basyx.vab.protocol.basyx.CoderTools;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/processengine/connector/DeviceServiceDelegate.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/processengine/connector/DeviceServiceDelegate.java
index fb81f93..c9c933f 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/processengine/connector/DeviceServiceDelegate.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/processengine/connector/DeviceServiceDelegate.java
@@ -8,8 +8,8 @@
 import org.activiti.engine.delegate.DelegateExecution;
 import org.activiti.engine.delegate.Expression;
 import org.activiti.engine.delegate.JavaDelegate;
-import org.eclipse.basyx.vab.backend.http.tools.GSONTools;
-import org.eclipse.basyx.vab.backend.http.tools.factory.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONTools;
 
 /**
  * Java-Delegate is involved when the corresponding service-task of the BPMN-Model is executed. 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/processengine/connector/DeviceServiceExecutor.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/processengine/connector/DeviceServiceExecutor.java
index 0bf0583..afdbf24 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/processengine/connector/DeviceServiceExecutor.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/processengine/connector/DeviceServiceExecutor.java
@@ -3,13 +3,13 @@
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.manager.IAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperation;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.ISingleProperty;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.backend.connected.aas.ConnectedSubModel;
+import org.eclipse.basyx.aas.manager.api.IAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.ISingleProperty;
+import org.eclipse.basyx.submodel.metamodel.connected.ConnectedSubModel;
 
 
 /**
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/provider/BaseConfiguredProvider.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/provider/BaseConfiguredProvider.java
index 02271a3..f972d88 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/provider/BaseConfiguredProvider.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/provider/BaseConfiguredProvider.java
@@ -4,17 +4,17 @@
 import java.util.HashSet;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.backend.provider.SubModelProvider;
-import org.eclipse.basyx.aas.impl.metamodel.facades.SubmodelFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.SubmodelFacadeCustomSemantics;
-import org.eclipse.basyx.aas.impl.metamodel.facades.SubmodelFacadeIRDISemantics;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind.Kind;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable.Qualifier;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.facade.SubmodelFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.SubmodelFacadeCustomSemantics;
+import org.eclipse.basyx.submodel.metamodel.facade.SubmodelFacadeIRDISemantics;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind.Kind;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Qualifier;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.restapi.SubModelProvider;
 
 /**
  * Base class for providers that receiver their configuration through a configuration properties object
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/service/BaseBaSyxService.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/service/BaseBaSyxService.java
index dd8cae8..7b7ea46 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/service/BaseBaSyxService.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/service/BaseBaSyxService.java
@@ -3,14 +3,14 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.api.registry.IAASRegistryService;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
 import org.eclipse.basyx.components.configuration.ConfigurableComponent;
 import org.eclipse.basyx.components.configuration.builder.BaSyxServiceConfigurationBuilder;
-import org.eclipse.basyx.sdk.api.service.BaSyxService;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.service.api.BaSyxService;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlet/submodel/AASServlet.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlet/submodel/AASServlet.java
index a4c1bf8..6a621b6 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlet/submodel/AASServlet.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlet/submodel/AASServlet.java
@@ -1,9 +1,9 @@
 package org.eclipse.basyx.components.servlet.submodel;
 
-import org.eclipse.basyx.aas.backend.provider.AASModelProvider;
-import org.eclipse.basyx.aas.backend.provider.VABMultiSubmodelProvider;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.vab.backend.server.http.VABHTTPInterface;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.restapi.AASModelProvider;
+import org.eclipse.basyx.aas.restapi.VABMultiSubmodelProvider;
+import org.eclipse.basyx.vab.protocol.http.server.VABHTTPInterface;
 
 /**
  * AAS servlet class that exports a given Asset Administration Shell
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlet/submodel/SubmodelServlet.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlet/submodel/SubmodelServlet.java
index 334fa0e..a728dd3 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlet/submodel/SubmodelServlet.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlet/submodel/SubmodelServlet.java
@@ -1,8 +1,8 @@
 package org.eclipse.basyx.components.servlet.submodel;
 
-import org.eclipse.basyx.aas.backend.provider.SubModelProvider;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.vab.backend.server.http.VABHTTPInterface;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.restapi.SubModelProvider;
+import org.eclipse.basyx.vab.protocol.http.server.VABHTTPInterface;
 
 /**
  * A sub model servlet class that exports a given sub model
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlet/submodel/VABLambdaServlet.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlet/submodel/VABLambdaServlet.java
index c55bdc8..7f1f392 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlet/submodel/VABLambdaServlet.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlet/submodel/VABLambdaServlet.java
@@ -2,8 +2,8 @@
 
 import java.util.HashMap;
 
-import org.eclipse.basyx.vab.backend.server.http.VABHTTPInterface;
-import org.eclipse.basyx.vab.provider.lambda.VABLambdaProvider;
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProvider;
+import org.eclipse.basyx.vab.protocol.http.server.VABHTTPInterface;
 
 /**
  * Empty VAB provider servlet. It realizes a VAB lambda provider on its endpoint.
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/CFGSubModelProviderServlet.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/CFGSubModelProviderServlet.java
index 5ddd2e8..38d5024 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/CFGSubModelProviderServlet.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/CFGSubModelProviderServlet.java
@@ -7,10 +7,10 @@
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 
-import org.eclipse.basyx.aas.backend.provider.VABMultiSubmodelProvider;
+import org.eclipse.basyx.aas.restapi.VABMultiSubmodelProvider;
 import org.eclipse.basyx.components.cfgprovider.CFGSubModelProvider;
 import org.eclipse.basyx.components.provider.BaseConfiguredProvider;
-import org.eclipse.basyx.vab.backend.server.http.VABHTTPInterface;
+import org.eclipse.basyx.vab.protocol.http.server.VABHTTPInterface;
 
 /**
  * Servlet interface for configuration file sub model provider
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/RawCFGSubModelProviderServlet.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/RawCFGSubModelProviderServlet.java
index 820a65c..e890325 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/RawCFGSubModelProviderServlet.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/RawCFGSubModelProviderServlet.java
@@ -6,10 +6,10 @@
 
 import javax.servlet.ServletException;
 
-import org.eclipse.basyx.aas.backend.provider.VABMultiSubmodelProvider;
+import org.eclipse.basyx.aas.restapi.VABMultiSubmodelProvider;
 import org.eclipse.basyx.components.cfgprovider.RawCFGSubModelProvider;
 import org.eclipse.basyx.components.provider.BaseConfiguredProvider;
-import org.eclipse.basyx.vab.backend.server.http.VABHTTPInterface;
+import org.eclipse.basyx.vab.protocol.http.server.VABHTTPInterface;
 
 /**
  * Servlet interface for configuration file sub model provider
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/SQLDirectoryServlet.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/SQLDirectoryServlet.java
index b78bc9a..c8b6d3d 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/SQLDirectoryServlet.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/SQLDirectoryServlet.java
@@ -2,7 +2,7 @@
 
 
 import org.eclipse.basyx.components.directory.SQLDirectoryProvider;
-import org.eclipse.basyx.vab.backend.server.http.VABHTTPInterface;
+import org.eclipse.basyx.vab.protocol.http.server.VABHTTPInterface;
 
 
 /**
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/SQLSubModelProviderServlet.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/SQLSubModelProviderServlet.java
index e092ee2..1931567 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/SQLSubModelProviderServlet.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/SQLSubModelProviderServlet.java
@@ -6,10 +6,10 @@
 
 import javax.servlet.ServletException;
 
-import org.eclipse.basyx.aas.backend.provider.VABMultiSubmodelProvider;
+import org.eclipse.basyx.aas.restapi.VABMultiSubmodelProvider;
 import org.eclipse.basyx.components.provider.BaseConfiguredProvider;
 import org.eclipse.basyx.components.sqlprovider.SQLPreconfiguredSubModelProvider;
-import org.eclipse.basyx.vab.backend.server.http.VABHTTPInterface;
+import org.eclipse.basyx.vab.protocol.http.server.VABHTTPInterface;
 
 /**
  * Servlet interface for SQL sub model provider
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/StaticCFGDirectoryServlet.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/StaticCFGDirectoryServlet.java
index 88bbae3..25432b5 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/StaticCFGDirectoryServlet.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/StaticCFGDirectoryServlet.java
@@ -17,7 +17,7 @@
 
 import org.eclipse.basyx.components.directory.AASDirectoryEntry;
 import org.eclipse.basyx.components.directory.exception.AASDirectoryProviderException;
-import org.eclipse.basyx.vab.backend.server.http.BasysHTTPServlet;
+import org.eclipse.basyx.vab.protocol.http.server.BasysHTTPServlet;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/XMLXQueryServlet.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/XMLXQueryServlet.java
index eff8ce1..a95d959 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/XMLXQueryServlet.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/servlets/XMLXQueryServlet.java
@@ -6,10 +6,10 @@
 
 import javax.servlet.ServletException;
 
-import org.eclipse.basyx.aas.backend.provider.VABMultiSubmodelProvider;
+import org.eclipse.basyx.aas.restapi.VABMultiSubmodelProvider;
 import org.eclipse.basyx.components.provider.BaseConfiguredProvider;
 import org.eclipse.basyx.components.xmlxqueryprovider.XMLXQuerySubModelProvider;
-import org.eclipse.basyx.vab.backend.server.http.VABHTTPInterface;
+import org.eclipse.basyx.vab.protocol.http.server.VABHTTPInterface;
 
 /**
  * Servlet interface for XML XQuery sub model provider
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/sqlprovider/SQLPreconfiguredSubModelProvider.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/sqlprovider/SQLPreconfiguredSubModelProvider.java
index 9bbd305..c06827f 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/sqlprovider/SQLPreconfiguredSubModelProvider.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/sqlprovider/SQLPreconfiguredSubModelProvider.java
@@ -11,7 +11,7 @@
 import org.eclipse.basyx.components.sqlprovider.query.DynamicSQLQuery;
 import org.eclipse.basyx.components.sqlprovider.query.DynamicSQLRunner;
 import org.eclipse.basyx.components.sqlprovider.query.DynamicSQLUpdate;
-import org.eclipse.basyx.vab.provider.lambda.VABLambdaHandler;
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaHandler;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/components/sqlprovider/SQLSubModelProvider.java b/components/basys.components/src/main/java/org/eclipse/basyx/components/sqlprovider/SQLSubModelProvider.java
index 8c9ca21..1d761ad 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/components/sqlprovider/SQLSubModelProvider.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/components/sqlprovider/SQLSubModelProvider.java
@@ -11,7 +11,7 @@
 import org.eclipse.basyx.components.sqlprovider.query.DynamicSQLQuery;
 import org.eclipse.basyx.components.sqlprovider.query.DynamicSQLRunner;
 import org.eclipse.basyx.components.sqlprovider.query.DynamicSQLUpdate;
-import org.eclipse.basyx.vab.provider.lambda.VABLambdaHandler;
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaHandler;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/models/controlcomponent/SimpleProxyControlComponent.java b/components/basys.components/src/main/java/org/eclipse/basyx/models/controlcomponent/SimpleProxyControlComponent.java
index 3769078..a278903 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/models/controlcomponent/SimpleProxyControlComponent.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/models/controlcomponent/SimpleProxyControlComponent.java
@@ -2,7 +2,7 @@
 
 import org.eclipse.basyx.components.netcomm.NetworkReceiver;
 import org.eclipse.basyx.components.netcomm.TCPServer;
-import org.eclipse.basyx.sdk.api.service.BaSyxService;
+import org.eclipse.basyx.vab.service.api.BaSyxService;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/BaSysProcessModel.java b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/BaSysProcessModel.java
index b4cf8b6..84e407b 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/BaSysProcessModel.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/BaSysProcessModel.java
@@ -3,9 +3,9 @@
 import java.util.Collection;
 import java.util.LinkedList;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 import org.eclipse.basyx.models.manufacturing.process.model.device.DeviceIF;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/ProcessAAS.java b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/ProcessAAS.java
index 65996b5..79ecce4 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/ProcessAAS.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/ProcessAAS.java
@@ -1,6 +1,6 @@
 package org.eclipse.basyx.models.manufacturing.process.model;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/SequentialProcess.java b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/SequentialProcess.java
index c8e4d47..483eb77 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/SequentialProcess.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/SequentialProcess.java
@@ -4,7 +4,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 import org.eclipse.basyx.models.manufacturing.process.model.device.Device;
 import org.eclipse.basyx.models.manufacturing.process.model.device.QueueDevice;
 import org.eclipse.basyx.models.manufacturing.process.model.device.SequentialDevice;
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/TestSequentialProcessModel.java b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/TestSequentialProcessModel.java
index db66082..9cce57a 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/TestSequentialProcessModel.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/TestSequentialProcessModel.java
@@ -3,7 +3,7 @@
 import java.util.Collection;
 import java.util.NoSuchElementException;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 import org.junit.Test;
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/Device.java b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/Device.java
index 14a14c3..8c7eeff 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/Device.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/Device.java
@@ -2,7 +2,7 @@
 
 import java.util.Collection;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/DeviceIF.java b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/DeviceIF.java
index 646ed48..606afb8 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/DeviceIF.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/DeviceIF.java
@@ -2,7 +2,7 @@
 
 import java.util.Collection;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/QueueDevice.java b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/QueueDevice.java
index 244f3ec..e842fef 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/QueueDevice.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/QueueDevice.java
@@ -4,7 +4,7 @@
 import java.util.LinkedList;
 import java.util.Queue;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 import org.eclipse.basyx.models.manufacturing.process.model.queue.BoundedQueue;
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/SequentialDevice.java b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/SequentialDevice.java
index 60ea44c..9433213 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/SequentialDevice.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/SequentialDevice.java
@@ -1,6 +1,6 @@
 package org.eclipse.basyx.models.manufacturing.process.model.device;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 
 /**
  * A sequential device model
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/SortOutDevice.java b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/SortOutDevice.java
index c8b69d2..a3717bf 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/SortOutDevice.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/model/device/SortOutDevice.java
@@ -1,6 +1,6 @@
 package org.eclipse.basyx.models.manufacturing.process.model.device;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 
 /**
  * A device model that sorts products out
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/product/ProductAAS.java b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/product/ProductAAS.java
index da4032c..0ce892c 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/product/ProductAAS.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/product/ProductAAS.java
@@ -1,6 +1,6 @@
 package org.eclipse.basyx.models.manufacturing.process.product;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/product/ProductQualitySubmodel.java b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/product/ProductQualitySubmodel.java
index a1dcb48..cb28057 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/product/ProductQualitySubmodel.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/models/manufacturing/process/product/ProductQualitySubmodel.java
@@ -4,10 +4,10 @@
 import java.util.List;
 import java.util.function.Function;
 
-import org.eclipse.basyx.aas.impl.metamodel.factory.MetaModelElementFactory;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.operation.Operation;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.factory.java.MetaModelElementFactory;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.Operation;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/ActiveModel.java b/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/ActiveModel.java
index 7477b31..b072acf 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/ActiveModel.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/ActiveModel.java
@@ -3,7 +3,7 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 public class ActiveModel {
 	private Set<VABModelTaskGroup> groups = new HashSet<>();
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/HTTPGetter.java b/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/HTTPGetter.java
index 1a77e54..7e2293b 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/HTTPGetter.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/HTTPGetter.java
@@ -3,7 +3,8 @@
 import java.io.Serializable;
 import java.util.function.Supplier;
 
-import org.eclipse.basyx.aas.api.webserviceclient.WebServiceRawClient;
+import org.eclipse.basyx.tools.webserviceclient.WebServiceRawClient;
+
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/HTTPSupplier.java b/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/HTTPSupplier.java
index 4a4e04f..4a28099 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/HTTPSupplier.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/HTTPSupplier.java
@@ -3,7 +3,8 @@
 import java.io.Serializable;
 import java.util.function.Consumer;
 
-import org.eclipse.basyx.aas.api.webserviceclient.WebServiceRawClient;
+import org.eclipse.basyx.tools.webserviceclient.WebServiceRawClient;
+
 
 
 
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/VABModelTask.java b/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/VABModelTask.java
index ce1ff48..c4127b4 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/VABModelTask.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/VABModelTask.java
@@ -1,6 +1,6 @@
 package org.eclipse.basyx.tools.aas.active;
 
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 public interface VABModelTask {
 	public void execute(IModelProvider model) throws Exception;
diff --git a/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/VABModelTaskGroup.java b/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/VABModelTaskGroup.java
index 799b4e0..45c19f4 100644
--- a/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/VABModelTaskGroup.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/tools/aas/active/VABModelTaskGroup.java
@@ -7,7 +7,7 @@
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 public class VABModelTaskGroup {
 	private ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/webserviceclient/WebServiceJSONClient.java b/components/basys.components/src/main/java/org/eclipse/basyx/tools/webserviceclient/WebServiceJSONClient.java
similarity index 91%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/webserviceclient/WebServiceJSONClient.java
rename to components/basys.components/src/main/java/org/eclipse/basyx/tools/webserviceclient/WebServiceJSONClient.java
index 9565ea2..0826082 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/webserviceclient/WebServiceJSONClient.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/tools/webserviceclient/WebServiceJSONClient.java
@@ -1,8 +1,8 @@
-package org.eclipse.basyx.aas.api.webserviceclient;
+package org.eclipse.basyx.tools.webserviceclient;
 
-import org.eclipse.basyx.aas.api.exception.ServerException;
-import org.eclipse.basyx.vab.backend.http.tools.GSONTools;
-import org.eclipse.basyx.vab.backend.http.tools.factory.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONTools;
+import org.eclipse.basyx.vab.exception.ServerException;
 
 
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/webserviceclient/WebServiceRawClient.java b/components/basys.components/src/main/java/org/eclipse/basyx/tools/webserviceclient/WebServiceRawClient.java
similarity index 98%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/webserviceclient/WebServiceRawClient.java
rename to components/basys.components/src/main/java/org/eclipse/basyx/tools/webserviceclient/WebServiceRawClient.java
index 29dd368..2a8f760 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/webserviceclient/WebServiceRawClient.java
+++ b/components/basys.components/src/main/java/org/eclipse/basyx/tools/webserviceclient/WebServiceRawClient.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.webserviceclient;
+package org.eclipse.basyx.tools.webserviceclient;
 
 import java.io.Serializable;
 
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/cfgprovider/tests/TestCFGProvider.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/cfgprovider/tests/TestCFGProvider.java
index 54de5af..1a36f32 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/cfgprovider/tests/TestCFGProvider.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/cfgprovider/tests/TestCFGProvider.java
@@ -4,13 +4,13 @@
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
 import org.eclipse.basyx.regression.support.directory.ComponentsTestsuiteDirectory;
 import org.eclipse.basyx.regression.support.server.context.ComponentsRegressionContext;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServerResource;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.testsuite.support.AASHTTPServerResource;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/cfgprovider/tests/TestCFGProviderPropertyMetaData.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/cfgprovider/tests/TestCFGProviderPropertyMetaData.java
index 4875930..d520f85 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/cfgprovider/tests/TestCFGProviderPropertyMetaData.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/cfgprovider/tests/TestCFGProviderPropertyMetaData.java
@@ -4,13 +4,13 @@
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
 import org.eclipse.basyx.regression.support.directory.ComponentsTestsuiteDirectory;
 import org.eclipse.basyx.regression.support.server.context.ComponentsRegressionContext;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServerResource;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.testsuite.support.AASHTTPServerResource;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/cfgprovider/tests/TestCFGProviderSubmodelMetaData.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/cfgprovider/tests/TestCFGProviderSubmodelMetaData.java
index 5998501..4b521db 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/cfgprovider/tests/TestCFGProviderSubmodelMetaData.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/cfgprovider/tests/TestCFGProviderSubmodelMetaData.java
@@ -4,14 +4,14 @@
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.facades.AdministrativeInformationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
 import org.eclipse.basyx.regression.support.directory.ComponentsTestsuiteDirectory;
 import org.eclipse.basyx.regression.support.server.context.ComponentsRegressionContext;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServerResource;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.AdministrativeInformationFacade;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.testsuite.support.AASHTTPServerResource;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/directory/file/TestStaticDirectoryFileProvider.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/directory/file/TestStaticDirectoryFileProvider.java
index 94531b7..997e91c 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/directory/file/TestStaticDirectoryFileProvider.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/directory/file/TestStaticDirectoryFileProvider.java
@@ -7,10 +7,10 @@
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 
-import org.eclipse.basyx.aas.api.webserviceclient.WebServiceRawClient;
 import org.eclipse.basyx.regression.support.server.context.ComponentsRegressionContext;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServerResource;
-import org.eclipse.basyx.vab.backend.connector.MetaprotocolHandler;
+import org.eclipse.basyx.testsuite.support.AASHTTPServerResource;
+import org.eclipse.basyx.tools.webserviceclient.WebServiceRawClient;
+import org.eclipse.basyx.vab.coder.json.metaprotocol.MetaprotocolHandler;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/directory/file/TestStaticDirectoryFileProviderExceptions.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/directory/file/TestStaticDirectoryFileProviderExceptions.java
index 64c0203..2ce2154 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/directory/file/TestStaticDirectoryFileProviderExceptions.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/directory/file/TestStaticDirectoryFileProviderExceptions.java
@@ -7,9 +7,9 @@
 
 import javax.ws.rs.ServerErrorException;
 
-import org.eclipse.basyx.aas.api.webserviceclient.WebServiceJSONClient;
 import org.eclipse.basyx.regression.support.server.context.ComponentsRegressionContext;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServerResource;
+import org.eclipse.basyx.testsuite.support.AASHTTPServerResource;
+import org.eclipse.basyx.tools.webserviceclient.WebServiceJSONClient;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/directory/sql/TestDirectorySQLProvider.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/directory/sql/TestDirectorySQLProvider.java
index ae86094..294f745 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/directory/sql/TestDirectorySQLProvider.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/directory/sql/TestDirectorySQLProvider.java
@@ -7,14 +7,14 @@
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 
-import org.eclipse.basyx.aas.api.webserviceclient.WebServiceRawClient;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
 import org.eclipse.basyx.regression.support.server.context.ComponentsRegressionContext;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServerResource;
-import org.eclipse.basyx.vab.backend.connector.MetaprotocolHandler;
-import org.eclipse.basyx.vab.backend.http.tools.GSONTools;
-import org.eclipse.basyx.vab.backend.http.tools.factory.DefaultTypeFactory;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
+import org.eclipse.basyx.testsuite.support.AASHTTPServerResource;
+import org.eclipse.basyx.tools.webserviceclient.WebServiceRawClient;
+import org.eclipse.basyx.vab.coder.json.metaprotocol.MetaprotocolHandler;
+import org.eclipse.basyx.vab.coder.json.serialization.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONTools;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestAASServicecall.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestAASServicecall.java
index 598d243..3fde8e6 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestAASServicecall.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestAASServicecall.java
@@ -6,24 +6,24 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.api.registry.IAASRegistryService;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.backend.provider.AASModelProvider;
-import org.eclipse.basyx.aas.backend.provider.SubModelProvider;
-import org.eclipse.basyx.aas.backend.provider.VABMultiSubmodelProvider;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.SubmodelDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
+import org.eclipse.basyx.aas.registration.preconfigured.PreconfiguredRegistry;
+import org.eclipse.basyx.aas.restapi.AASModelProvider;
+import org.eclipse.basyx.aas.restapi.VABMultiSubmodelProvider;
 import org.eclipse.basyx.components.processengine.connector.DeviceServiceExecutor;
 import org.eclipse.basyx.regression.support.processengine.aas.DeviceAdministrationShellFactory;
 import org.eclipse.basyx.regression.support.processengine.executor.CoilcarServiceExecutor;
 import org.eclipse.basyx.regression.support.processengine.stubs.CoilcarStub;
 import org.eclipse.basyx.regression.support.processengine.submodel.DeviceSubmodelFactory;
-import org.eclipse.basyx.testsuite.support.vab.stub.AASRegistryStub;
-import org.eclipse.basyx.testsuite.support.vab.stub.ConnectorProviderStub;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.restapi.SubModelProvider;
+import org.eclipse.basyx.testsuite.support.ConnectorProviderStub;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -69,7 +69,7 @@
 		// Add aas to the provider
 		provider.setAssetAdministrationShell(new AASModelProvider(aas));
 		
-		IAASRegistryService registry = new AASRegistryStub();
+		IAASRegistryService registry = new PreconfiguredRegistry();
 		AASDescriptor aasDescriptor = new AASDescriptor("coilcar", IdentifierType.URI, "/aas");
 		SubmodelDescriptor smDescriptor = new SubmodelDescriptor("submodel1", IdentifierType.URI, "/aas/submodels/submodel1");
 		aasDescriptor.addSubmodelDescriptor(smDescriptor);
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestDeviceAdministrationShell.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestDeviceAdministrationShell.java
index 7b839a1..04ea253 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestDeviceAdministrationShell.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestDeviceAdministrationShell.java
@@ -5,18 +5,18 @@
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperation;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.backend.connected.aas.ConnectedAssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.SubmodelDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.connected.ConnectedAssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.registration.preconfigured.PreconfiguredRegistry;
 import org.eclipse.basyx.regression.support.server.context.ComponentsRegressionContext;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServerResource;
-import org.eclipse.basyx.testsuite.support.vab.stub.AASRegistryStub;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
+import org.eclipse.basyx.testsuite.support.AASHTTPServerResource;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
@@ -39,7 +39,7 @@
 
 	@Before
 	public void setupConnection() {
-		AASRegistryStub registry = new AASRegistryStub();
+		PreconfiguredRegistry registry = new PreconfiguredRegistry();
 		ModelUrn coilcarUrn = new ModelUrn("coilcar");
 		AASDescriptor ccDescriptor = new AASDescriptor("coilcar", IdentifierType.URI,
 				"http://localhost:8080/basys.components/Testsuite/Processengine/coilcar/aas");
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestJavaDelegate.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestJavaDelegate.java
index b95c9c3..da0c0e9 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestJavaDelegate.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestJavaDelegate.java
@@ -10,8 +10,8 @@
 import org.eclipse.basyx.components.processengine.connector.DeviceServiceDelegate;
 import org.eclipse.basyx.regression.support.processengine.stubs.BPMNEngineStub;
 import org.eclipse.basyx.regression.support.processengine.stubs.DeviceServiceExecutorStub;
-import org.eclipse.basyx.vab.backend.http.tools.GSONTools;
-import org.eclipse.basyx.vab.backend.http.tools.factory.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONTools;
 import org.junit.Test;
 
 /**
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestTransportProcess_ConfigureEngineProgrammatically.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestTransportProcess_ConfigureEngineProgrammatically.java
index 7ecdaea..76143dd 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestTransportProcess_ConfigureEngineProgrammatically.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/processengineconnector/tests/TestTransportProcess_ConfigureEngineProgrammatically.java
@@ -11,17 +11,17 @@
 import org.activiti.engine.RepositoryService;
 import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
 import org.activiti.engine.runtime.ProcessInstance;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.SubmodelDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.registration.preconfigured.PreconfiguredRegistry;
 import org.eclipse.basyx.components.processengine.connector.DeviceServiceDelegate;
 import org.eclipse.basyx.regression.support.processengine.executor.CoilcarServiceExecutor;
 import org.eclipse.basyx.regression.support.server.context.ComponentsRegressionContext;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServerResource;
-import org.eclipse.basyx.testsuite.support.vab.stub.AASRegistryStub;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
+import org.eclipse.basyx.testsuite.support.AASHTTPServerResource;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
@@ -41,7 +41,7 @@
 	 * */
 	ConnectedAssetAdministrationShellManager manager;
 	
-	AASRegistryStub registry;
+	PreconfiguredRegistry registry;
 	/**
 	 * Makes sure Tomcat Server is started
 	 */
@@ -54,7 +54,7 @@
 	@Before
 	public void build() {
 		// Create registry for aas
-		registry = new AASRegistryStub();
+		registry = new PreconfiguredRegistry();
 
 		// Create aas descriptor with meta-information of the aas
 		ModelUrn coilcarUrn = new ModelUrn("coilcar");
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderAAS.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderAAS.java
index 0554282..0e5f10e 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderAAS.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderAAS.java
@@ -2,13 +2,13 @@
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
 import org.eclipse.basyx.regression.support.directory.ComponentsTestsuiteDirectory;
 import org.eclipse.basyx.regression.support.server.context.ComponentsRegressionContext;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServerResource;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.testsuite.support.AASHTTPServerResource;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderAASNewModel.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderAASNewModel.java
index 69f77eb..d6f6501 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderAASNewModel.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderAASNewModel.java
@@ -2,13 +2,13 @@
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
 import org.eclipse.basyx.regression.support.directory.ComponentsTestsuiteDirectory;
 import org.eclipse.basyx.regression.support.server.context.ComponentsRegressionContext;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServerResource;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.testsuite.support.AASHTTPServerResource;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Ignore;
 import org.junit.Test;
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderComplexType.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderComplexType.java
index 4e4ae5f..8218eb7 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderComplexType.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderComplexType.java
@@ -6,13 +6,13 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
 import org.eclipse.basyx.regression.support.directory.ComponentsTestsuiteDirectory;
 import org.eclipse.basyx.regression.support.server.context.ComponentsRegressionContext;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServerResource;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.testsuite.support.AASHTTPServerResource;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderSimpleValues.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderSimpleValues.java
index 044c2d1..ef16d64 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderSimpleValues.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/rawcfgprovider/tests/TestRawCFGProviderSimpleValues.java
@@ -4,15 +4,15 @@
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.facades.AdministrativeInformationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
 import org.eclipse.basyx.regression.support.directory.ComponentsTestsuiteDirectory;
 import org.eclipse.basyx.regression.support.server.context.ComponentsRegressionContext;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServerResource;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.AdministrativeInformationFacade;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.testsuite.support.AASHTTPServerResource;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/sqlprovider/tests/SQLInvocationsTest.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/sqlprovider/tests/SQLInvocationsTest.java
index a770a22..22518b5 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/sqlprovider/tests/SQLInvocationsTest.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/sqlprovider/tests/SQLInvocationsTest.java
@@ -5,10 +5,10 @@
 
 import org.eclipse.basyx.regression.support.directory.ComponentsTestsuiteDirectory;
 import org.eclipse.basyx.regression.support.server.context.ComponentsRegressionContext;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServerResource;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.testsuite.support.AASHTTPServerResource;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/sqlprovider/tests/SQLQueriesTest.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/sqlprovider/tests/SQLQueriesTest.java
index 8cb1d86..ab72275 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/sqlprovider/tests/SQLQueriesTest.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/sqlprovider/tests/SQLQueriesTest.java
@@ -3,13 +3,13 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
 import org.eclipse.basyx.regression.support.directory.ComponentsTestsuiteDirectory;
 import org.eclipse.basyx.regression.support.server.context.ComponentsRegressionContext;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServerResource;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.testsuite.support.AASHTTPServerResource;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Ignore;
 import org.junit.Test;
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/directory/ComponentsTestsuiteDirectory.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/directory/ComponentsTestsuiteDirectory.java
index ee503de..c09fb89 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/directory/ComponentsTestsuiteDirectory.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/directory/ComponentsTestsuiteDirectory.java
@@ -1,6 +1,6 @@
 package org.eclipse.basyx.regression.support.directory;
 
-import org.eclipse.basyx.testsuite.support.backend.common.stubs.java.directory.TestsuiteDirectory;
+import org.eclipse.basyx.vab.directory.preconfigured.PreconfiguredDirectory;
 
 
 
@@ -11,7 +11,7 @@
  * @author kuhn
  *
  */
-public class ComponentsTestsuiteDirectory extends TestsuiteDirectory {
+public class ComponentsTestsuiteDirectory extends PreconfiguredDirectory {
 
 	
 	/**
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/SetupAAS.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/SetupAAS.java
index 205f4b6..c441c44 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/SetupAAS.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/SetupAAS.java
@@ -1,14 +1,14 @@
 package org.eclipse.basyx.regression.support.processengine;
 
-import org.eclipse.basyx.aas.backend.provider.AASModelProvider;
-import org.eclipse.basyx.aas.backend.provider.SubModelProvider;
-import org.eclipse.basyx.aas.backend.provider.VABMultiSubmodelProvider;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.restapi.AASModelProvider;
+import org.eclipse.basyx.aas.restapi.VABMultiSubmodelProvider;
 import org.eclipse.basyx.regression.support.processengine.aas.DeviceAdministrationShellFactory;
 import org.eclipse.basyx.regression.support.processengine.stubs.Coilcar;
 import org.eclipse.basyx.regression.support.processengine.submodel.DeviceSubmodelFactory;
-import org.eclipse.basyx.testsuite.support.vab.stub.VABConnectionManagerStub;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.restapi.SubModelProvider;
+import org.eclipse.basyx.testsuite.support.VABConnectionManagerStub;
 
 /**
  * Create AAS and VAB connection stub (without communication protocol for test purpose)
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/aas/DeviceAdministrationShellFactory.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/aas/DeviceAdministrationShellFactory.java
index 2b1fcfb..b82ccaf 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/aas/DeviceAdministrationShellFactory.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/aas/DeviceAdministrationShellFactory.java
@@ -3,8 +3,8 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.impl.metamodel.factory.MetaModelElementFactory;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
+import org.eclipse.basyx.aas.factory.java.MetaModelElementFactory;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
 
 public class DeviceAdministrationShellFactory {
 	
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/executor/CoilcarServiceExecutor.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/executor/CoilcarServiceExecutor.java
index 79613ad..9cfb24d 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/executor/CoilcarServiceExecutor.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/executor/CoilcarServiceExecutor.java
@@ -2,7 +2,7 @@
 
 import java.util.List;
 
-import org.eclipse.basyx.aas.api.manager.IAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.manager.api.IAssetAdministrationShellManager;
 import org.eclipse.basyx.components.processengine.connector.DeviceServiceExecutor;
 import org.eclipse.basyx.regression.support.processengine.SetupAAS;
 
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/servlet/CoilcarAASServlet.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/servlet/CoilcarAASServlet.java
index dc8c72e..76ab789 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/servlet/CoilcarAASServlet.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/servlet/CoilcarAASServlet.java
@@ -1,14 +1,14 @@
 package org.eclipse.basyx.regression.support.processengine.servlet;
 
-import org.eclipse.basyx.aas.backend.provider.AASModelProvider;
-import org.eclipse.basyx.aas.backend.provider.SubModelProvider;
-import org.eclipse.basyx.aas.backend.provider.VABMultiSubmodelProvider;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.restapi.AASModelProvider;
+import org.eclipse.basyx.aas.restapi.VABMultiSubmodelProvider;
 import org.eclipse.basyx.regression.support.processengine.aas.DeviceAdministrationShellFactory;
 import org.eclipse.basyx.regression.support.processengine.stubs.Coilcar;
 import org.eclipse.basyx.regression.support.processengine.submodel.DeviceSubmodelFactory;
-import org.eclipse.basyx.vab.backend.server.http.VABHTTPInterface;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.restapi.SubModelProvider;
+import org.eclipse.basyx.vab.protocol.http.server.VABHTTPInterface;
 
 /**
  * Servlet for device aas
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/stubs/BPMNModelFactory.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/stubs/BPMNModelFactory.java
index a1cbd9e..b852fb6 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/stubs/BPMNModelFactory.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/stubs/BPMNModelFactory.java
@@ -12,8 +12,8 @@
 import org.activiti.bpmn.model.SequenceFlow;
 import org.activiti.bpmn.model.ServiceTask;
 import org.activiti.bpmn.model.StartEvent;
-import org.eclipse.basyx.vab.backend.http.tools.GSONTools;
-import org.eclipse.basyx.vab.backend.http.tools.factory.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONTools;
 import org.activiti.bpmn.model.Process;
 
 /**
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/submodel/DeviceSubmodelFactory.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/submodel/DeviceSubmodelFactory.java
index 8c07a8a..ae6e50c 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/submodel/DeviceSubmodelFactory.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/processengine/submodel/DeviceSubmodelFactory.java
@@ -4,11 +4,11 @@
 import java.util.List;
 import java.util.function.Function;
 
-import org.eclipse.basyx.aas.impl.metamodel.factory.MetaModelElementFactory;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.operation.Operation;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.factory.java.MetaModelElementFactory;
 import org.eclipse.basyx.regression.support.processengine.stubs.ICoilcar;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.Operation;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
 
 
 public class DeviceSubmodelFactory {
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/server/BaSyxStandaloneServer.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/server/BaSyxStandaloneServer.java
index 72ea6a1..0e4c37e 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/server/BaSyxStandaloneServer.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/server/BaSyxStandaloneServer.java
@@ -4,8 +4,8 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServer;
-import org.eclipse.basyx.testsuite.support.backend.servers.BaSyxContext;
+import org.eclipse.basyx.vab.protocol.http.server.AASHTTPServer;
+import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
 
 
 
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/server/context/ComponentsRegressionContext.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/server/context/ComponentsRegressionContext.java
index b9880db..ba9ab5b 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/server/context/ComponentsRegressionContext.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/support/server/context/ComponentsRegressionContext.java
@@ -7,7 +7,7 @@
 import org.eclipse.basyx.components.servlets.StaticCFGDirectoryServlet;
 import org.eclipse.basyx.components.servlets.XMLXQueryServlet;
 import org.eclipse.basyx.regression.support.processengine.servlet.CoilcarAASServlet;
-import org.eclipse.basyx.testsuite.support.backend.servers.BaSyxContext;
+import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
 
 
 
diff --git a/components/basys.components/src/test/java/org/eclipse/basyx/regression/xqueryprovider/tests/XQueryProviderQueries.java b/components/basys.components/src/test/java/org/eclipse/basyx/regression/xqueryprovider/tests/XQueryProviderQueries.java
index 7fe389f..cb8ed56 100644
--- a/components/basys.components/src/test/java/org/eclipse/basyx/regression/xqueryprovider/tests/XQueryProviderQueries.java
+++ b/components/basys.components/src/test/java/org/eclipse/basyx/regression/xqueryprovider/tests/XQueryProviderQueries.java
@@ -2,10 +2,10 @@
 
 import org.eclipse.basyx.regression.support.directory.ComponentsTestsuiteDirectory;
 import org.eclipse.basyx.regression.support.server.context.ComponentsRegressionContext;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServerResource;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.testsuite.support.AASHTTPServerResource;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/pom.xml b/examples/basys.examples/pom.xml
index a9095d0..1027564 100644
--- a/examples/basys.examples/pom.xml
+++ b/examples/basys.examples/pom.xml
@@ -102,6 +102,13 @@
   </build>
   
   <dependencies>
+  		<!-- JUnit 4 for running JUnit tests -->
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.12</version>
+		</dependency>
+		
 		<!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
 		<!-- https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-client -->
 		<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
diff --git a/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/deployment/BaSyxDeployment.java b/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/deployment/BaSyxDeployment.java
index aeeabf2..9e76004 100644
--- a/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/deployment/BaSyxDeployment.java
+++ b/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/deployment/BaSyxDeployment.java
@@ -3,9 +3,9 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.sdk.api.service.BaSyxService;
-import org.eclipse.basyx.testsuite.support.backend.servers.AASHTTPServer;
-import org.eclipse.basyx.testsuite.support.backend.servers.BaSyxContext;
+import org.eclipse.basyx.vab.protocol.http.server.AASHTTPServer;
+import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
+import org.eclipse.basyx.vab.service.api.BaSyxService;
 import org.junit.rules.ExternalResource;
 
 
@@ -64,7 +64,8 @@
     /**
      * Execute before a test case starts
      */
-    protected void before() {
+    @Override
+	protected void before() {
     	// Iterate context components
     	for (Object contextComponent: contextComponents) {
     		// Process BaSyx context objects that run in a tomcat server
@@ -96,7 +97,8 @@
     /**
      * Execute after test case ends
      */
-    protected void after() {
+    @Override
+	protected void after() {
     	// Iterate context components
     	for (Object contextComponent: contextComponents) {
     		// Process BaSyx context objects that run in a tomcat server
diff --git a/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/support/directory/ExampleAASRegistry.java b/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/support/directory/ExampleAASRegistry.java
index 3cb5c27..40dabf6 100644
--- a/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/support/directory/ExampleAASRegistry.java
+++ b/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/support/directory/ExampleAASRegistry.java
@@ -1,12 +1,12 @@
 package org.eclipse.basyx.examples.support.directory;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.SubmodelDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
-import org.eclipse.basyx.testsuite.support.vab.stub.AASRegistryStub;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.registration.preconfigured.PreconfiguredRegistry;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
 
-public class ExampleAASRegistry extends AASRegistryStub {
+public class ExampleAASRegistry extends PreconfiguredRegistry {
 
 	public ExampleAASRegistry addAASMapping(String rawUrn, String endpoint) {
 		AASDescriptor aasDescriptor = new AASDescriptor(rawUrn, IdentifierType.URI, endpoint);
diff --git a/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/support/directory/ExamplesPreconfiguredDirectory.java b/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/support/directory/ExamplesPreconfiguredDirectory.java
index f216ea0..1a61c0d 100644
--- a/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/support/directory/ExamplesPreconfiguredDirectory.java
+++ b/examples/basys.examples/src/main/java/org/eclipse/basyx/examples/support/directory/ExamplesPreconfiguredDirectory.java
@@ -1,9 +1,6 @@
 package org.eclipse.basyx.examples.support.directory;
 
-import org.eclipse.basyx.testsuite.support.backend.common.stubs.java.directory.TestsuiteDirectory;
-
-
-
+import org.eclipse.basyx.vab.directory.preconfigured.PreconfiguredDirectory;
 
 /**
  * Implement the examples directory service with pre-configured directory entries
@@ -11,7 +8,7 @@
  * @author kuhn
  *
  */
-public class ExamplesPreconfiguredDirectory extends TestsuiteDirectory {
+public class ExamplesPreconfiguredDirectory extends PreconfiguredDirectory {
 
 	
 	/**
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/contexts/BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/contexts/BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory.java
index e825213..0098f83 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/contexts/BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/contexts/BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory.java
@@ -2,8 +2,7 @@
 
 import org.eclipse.basyx.components.servlets.RawCFGSubModelProviderServlet;
 import org.eclipse.basyx.components.servlets.SQLDirectoryServlet;
-import org.eclipse.basyx.testsuite.support.backend.servers.BaSyxContext;
-
+import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
 
 /**
  * BaSyx context that contains an Industrie 4.0 Servlet infrastructure
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/contexts/BaSyxExamplesContext_Empty.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/contexts/BaSyxExamplesContext_Empty.java
index 14ce616..f7ddbcb 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/contexts/BaSyxExamplesContext_Empty.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/contexts/BaSyxExamplesContext_Empty.java
@@ -1,6 +1,6 @@
 package org.eclipse.basyx.examples.contexts;
 
-import org.eclipse.basyx.testsuite.support.backend.servers.BaSyxContext;
+import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext;
 
 /**
  * BaSyx context that contains no infrastructure
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/application/ReceiveDeviceDashboardStatusApplication.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/application/ReceiveDeviceDashboardStatusApplication.java
index 8417713..25f2a6d 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/application/ReceiveDeviceDashboardStatusApplication.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/application/ReceiveDeviceDashboardStatusApplication.java
@@ -2,19 +2,16 @@
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.api.registry.AASHTTPRegistryProxy;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.registration.httpproxy.AASHTTPRegistryProxy;
 import org.eclipse.basyx.components.service.BaseBaSyxService;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-
-
-
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 
 /**
  * Example BaSys 4.0 application that monitors device (execution) status changes and device service invocation counters
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/application/ReceiveDeviceMaintenanceApplication.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/application/ReceiveDeviceMaintenanceApplication.java
index 041bc57..4ddf8a2 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/application/ReceiveDeviceMaintenanceApplication.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/application/ReceiveDeviceMaintenanceApplication.java
@@ -2,16 +2,17 @@
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.api.registry.AASHTTPRegistryProxy;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.registration.httpproxy.AASHTTPRegistryProxy;
 import org.eclipse.basyx.components.service.BaseBaSyxService;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
+
 
 
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/device/SmartBaSyxTCPDeviceMockup.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/device/SmartBaSyxTCPDeviceMockup.java
index 677770f..5cdb526 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/device/SmartBaSyxTCPDeviceMockup.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/device/SmartBaSyxTCPDeviceMockup.java
@@ -2,24 +2,22 @@
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.api.registry.AASHTTPRegistryProxy;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.SubmodelDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.registration.httpproxy.AASHTTPRegistryProxy;
 import org.eclipse.basyx.components.device.BaseSmartDevice;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
 import org.eclipse.basyx.models.controlcomponent.ExecutionState;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.backend.server.basyx.BaSyxTCPServer;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-import org.eclipse.basyx.vab.provider.hashmap.VABHashmapProvider;
-
-
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.modelprovider.map.VABHashmapProvider;
+import org.eclipse.basyx.vab.protocol.basyx.server.BaSyxTCPServer;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 
 /**
  * This class implements a mockup of a smart manufacturing device
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/devicemanager/BaSyxTCPControlManufacturingDeviceManager.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/devicemanager/BaSyxTCPControlManufacturingDeviceManager.java
index 8b01da3..ddd51e2 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/devicemanager/BaSyxTCPControlManufacturingDeviceManager.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/devicemanager/BaSyxTCPControlManufacturingDeviceManager.java
@@ -3,22 +3,20 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.api.registry.AASHTTPRegistryProxy;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.registration.httpproxy.AASHTTPRegistryProxy;
 import org.eclipse.basyx.components.devicemanager.TCPControllableDeviceManagerComponent;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
 import org.eclipse.basyx.models.controlcomponent.ControlComponentChangeListener;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.backend.server.basyx.BaSyxTCPServer;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-import org.eclipse.basyx.vab.provider.hashmap.VABHashmapProvider;
-
-
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.modelprovider.map.VABHashmapProvider;
+import org.eclipse.basyx.vab.protocol.basyx.server.BaSyxTCPServer;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 
 /**
  * Example manufacturing device manager code
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/devicemanager/ManufacturingDeviceActiveAASManager.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/devicemanager/ManufacturingDeviceActiveAASManager.java
index 274e466..2c76970 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/devicemanager/ManufacturingDeviceActiveAASManager.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/devicemanager/ManufacturingDeviceActiveAASManager.java
@@ -2,14 +2,12 @@
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
 import org.eclipse.basyx.tools.aas.active.HTTPGetter;
-import org.eclipse.basyx.vab.provider.lambda.VABLambdaProviderHelper;
-
-
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProviderHelper;
 
 /**
  * Example manufacturing device manager code
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/devicemanager/ManufacturingDeviceManager.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/devicemanager/ManufacturingDeviceManager.java
index cfc14e8..2050470 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/devicemanager/ManufacturingDeviceManager.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/mockup/devicemanager/ManufacturingDeviceManager.java
@@ -3,20 +3,18 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.api.registry.AASHTTPRegistryProxy;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.registration.httpproxy.AASHTTPRegistryProxy;
 import org.eclipse.basyx.components.configuration.CFGBaSyxProtocolType;
 import org.eclipse.basyx.components.devicemanager.TCPDeviceManagerComponent;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-
-
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 
 /**
  * Example manufacturing device manager code
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/RunSimpleTCPDevice.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/RunSimpleTCPDevice.java
index cffb511..b9a3059 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/RunSimpleTCPDevice.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/RunSimpleTCPDevice.java
@@ -9,13 +9,11 @@
 import org.eclipse.basyx.examples.mockup.device.SimpleTCPDeviceMockup;
 import org.eclipse.basyx.examples.mockup.devicemanager.ManufacturingDeviceManager;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
-
-
 /**
  * Example that illustrates a simple device (no control component), a manager, an application, Asset Administration Shells, and sub models
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/aas/RunAASDevice.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/aas/RunAASDevice.java
index 4718230..9beed27 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/aas/RunAASDevice.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/aas/RunAASDevice.java
@@ -10,14 +10,11 @@
 import org.eclipse.basyx.examples.mockup.devicemanager.ManufacturingDeviceActiveAASManager;
 import org.eclipse.basyx.examples.mockup.servers.SupplierStatusServlet;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
-
-
-
 /**
  * Example that illustrates a simple device (no control component), a manager, an application, an active Asset Administration Shells, and sub models
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/controllable/RunExampleSimpleControllableTCPDevice.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/controllable/RunExampleSimpleControllableTCPDevice.java
index 765d5ca..97b350f 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/controllable/RunExampleSimpleControllableTCPDevice.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/controllable/RunExampleSimpleControllableTCPDevice.java
@@ -10,15 +10,13 @@
 import org.eclipse.basyx.examples.mockup.devicemanager.BaSyxTCPControlManufacturingDeviceManager;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
 import org.eclipse.basyx.models.controlcomponent.ExecutionState;
-import org.eclipse.basyx.vab.backend.connector.JSONConnector;
-import org.eclipse.basyx.vab.backend.connector.basyx.BaSyxConnector;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
+import org.eclipse.basyx.vab.coder.json.connector.JSONConnector;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.protocol.basyx.connector.BaSyxConnector;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
-
-
 /**
  * Run example for controllable device
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/controllable/RunExampleSimpleSmartDevice.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/controllable/RunExampleSimpleSmartDevice.java
index ad2316f..f373515 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/controllable/RunExampleSimpleSmartDevice.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/scenarios/device/controllable/RunExampleSimpleSmartDevice.java
@@ -9,15 +9,13 @@
 import org.eclipse.basyx.examples.mockup.device.SmartBaSyxTCPDeviceMockup;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
 import org.eclipse.basyx.models.controlcomponent.ExecutionState;
-import org.eclipse.basyx.vab.backend.connector.JSONConnector;
-import org.eclipse.basyx.vab.backend.connector.basyx.BaSyxConnector;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
+import org.eclipse.basyx.vab.coder.json.connector.JSONConnector;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.protocol.basyx.connector.BaSyxConnector;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
-
-
 /**
  * Run example for smart device AAS
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/AccessAASProperties.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/AccessAASProperties.java
index 23c20bb..14ecd72 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/AccessAASProperties.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/AccessAASProperties.java
@@ -2,11 +2,9 @@
 
 import static org.junit.Assert.assertTrue;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
 import org.junit.Test;
 
-
-
 /**
  * This code snippet illustrates the creation of an Asset Administration Shell (AAS) data structure 
  * and how to access its properties via different kinds of access operations
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/CreateAAS.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/CreateAAS.java
index 849c78c..9899ba2 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/CreateAAS.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/CreateAAS.java
@@ -2,11 +2,9 @@
 
 import static org.junit.Assert.assertEquals;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
 import org.junit.Test;
 
-
-
 /**
  * Code snippet that illustrates the creation of an Asset Administration Shell (AAS) by extending an SDK class
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/RunComposedActiveModelSnippet.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/RunComposedActiveModelSnippet.java
index b97b0a6..98a19de 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/RunComposedActiveModelSnippet.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/RunComposedActiveModelSnippet.java
@@ -1,12 +1,12 @@
 package org.eclipse.basyx.examples.snippets.aas.active;
 
-import org.eclipse.basyx.aas.backend.provider.SubModelProvider;
 import org.eclipse.basyx.examples.snippets.aas.active.tasks.AverageTask;
 import org.eclipse.basyx.examples.snippets.aas.active.tasks.IncrementTask;
+import org.eclipse.basyx.submodel.restapi.SubModelProvider;
 import org.eclipse.basyx.tools.aas.active.ActiveModel;
 import org.eclipse.basyx.tools.aas.active.VABModelTaskGroup;
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.provider.lambda.VABLambdaProviderHelper;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProviderHelper;
 import org.junit.Ignore;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/RunInfluxDBActiveModelSnippet.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/RunInfluxDBActiveModelSnippet.java
index ec7e226..e6ec3db 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/RunInfluxDBActiveModelSnippet.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/RunInfluxDBActiveModelSnippet.java
@@ -1,10 +1,10 @@
 package org.eclipse.basyx.examples.snippets.aas.active;
 
-import org.eclipse.basyx.aas.backend.provider.SubModelProvider;
 import org.eclipse.basyx.examples.snippets.aas.active.tasks.InfluxDBTask;
+import org.eclipse.basyx.submodel.restapi.SubModelProvider;
 import org.eclipse.basyx.tools.aas.active.ActiveModel;
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.provider.lambda.VABLambdaProviderHelper;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProviderHelper;
 import org.junit.Ignore;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/tasks/AverageTask.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/tasks/AverageTask.java
index a0e9c0a..b4f710e 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/tasks/AverageTask.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/tasks/AverageTask.java
@@ -1,7 +1,7 @@
 package org.eclipse.basyx.examples.snippets.aas.active.tasks;
 
 import org.eclipse.basyx.tools.aas.active.VABModelTask;
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 /**
  * Task for computing the average value from a source property
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/tasks/IncrementTask.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/tasks/IncrementTask.java
index e5df9c2..ead95e7 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/tasks/IncrementTask.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/tasks/IncrementTask.java
@@ -1,7 +1,7 @@
 package org.eclipse.basyx.examples.snippets.aas.active.tasks;
 
 import org.eclipse.basyx.tools.aas.active.VABModelTask;
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 /**
  * Task for incrementing a given property in each execution step
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/tasks/InfluxDBTask.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/tasks/InfluxDBTask.java
index 151dbed..952fb00 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/tasks/InfluxDBTask.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/active/tasks/InfluxDBTask.java
@@ -6,7 +6,7 @@
 import java.net.URL;
 
 import org.eclipse.basyx.tools.aas.active.VABModelTask;
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 /**
  * Task for writing a value to an influxDB
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceAASDeployment.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceAASDeployment.java
index d6dab83..1bc8fda 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceAASDeployment.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceAASDeployment.java
@@ -2,19 +2,17 @@
 
 import static org.junit.Assert.assertTrue;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.IAssetAdministrationShell;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.backend.provider.AASModelProvider;
-import org.eclipse.basyx.aas.backend.provider.VABMultiSubmodelProvider;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
+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.restapi.AASModelProvider;
+import org.eclipse.basyx.aas.restapi.VABMultiSubmodelProvider;
 import org.eclipse.basyx.examples.support.directory.ExampleAASRegistry;
-import org.eclipse.basyx.vab.backend.connector.basyx.BaSyxConnectorProvider;
-import org.eclipse.basyx.vab.backend.server.basyx.BaSyxTCPServer;
+import org.eclipse.basyx.vab.protocol.basyx.connector.BaSyxConnectorProvider;
+import org.eclipse.basyx.vab.protocol.basyx.server.BaSyxTCPServer;
 import org.junit.Test;
 
-
-
 /**
  * Code snippet that illustrates the deployment of an AAS to a device, and connects to that AAS
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceAASDeploymentVAB.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceAASDeploymentVAB.java
index cd06a18..72ff53a 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceAASDeploymentVAB.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceAASDeploymentVAB.java
@@ -2,16 +2,14 @@
 
 import static org.junit.Assert.assertTrue;
 
-import org.eclipse.basyx.aas.backend.provider.AASModelProvider;
-import org.eclipse.basyx.aas.backend.provider.VABMultiSubmodelProvider;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.vab.backend.connector.JSONConnector;
-import org.eclipse.basyx.vab.backend.connector.basyx.BaSyxConnector;
-import org.eclipse.basyx.vab.backend.server.basyx.BaSyxTCPServer;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.restapi.AASModelProvider;
+import org.eclipse.basyx.aas.restapi.VABMultiSubmodelProvider;
+import org.eclipse.basyx.vab.coder.json.connector.JSONConnector;
+import org.eclipse.basyx.vab.protocol.basyx.connector.BaSyxConnector;
+import org.eclipse.basyx.vab.protocol.basyx.server.BaSyxTCPServer;
 import org.junit.Test;
 
-
-
 /**
  * Code snippet that illustrates the deployment of an AAS to a device, and connects to that AAS
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceSubModelDeployment.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceSubModelDeployment.java
index f81c356..492bf80 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceSubModelDeployment.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceSubModelDeployment.java
@@ -2,22 +2,20 @@
 
 import static org.junit.Assert.assertTrue;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.ISingleProperty;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.backend.provider.SubModelProvider;
-import org.eclipse.basyx.aas.backend.provider.VABMultiSubmodelProvider;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.restapi.VABMultiSubmodelProvider;
 import org.eclipse.basyx.examples.support.directory.ExampleAASRegistry;
-import org.eclipse.basyx.vab.backend.connector.basyx.BaSyxConnectorProvider;
-import org.eclipse.basyx.vab.backend.server.basyx.BaSyxTCPServer;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.ISingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.restapi.SubModelProvider;
+import org.eclipse.basyx.vab.protocol.basyx.connector.BaSyxConnectorProvider;
+import org.eclipse.basyx.vab.protocol.basyx.server.BaSyxTCPServer;
 import org.junit.Test;
 
-
-
 /**
  * Code snippet that illustrates the deployment of a AAS sub model to a device, and connects to that sub model
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceSubModelDeploymentVAB.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceSubModelDeploymentVAB.java
index 193189f..6823b29 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceSubModelDeploymentVAB.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/device/DeviceSubModelDeploymentVAB.java
@@ -4,17 +4,15 @@
 
 import java.util.HashMap;
 
-import org.eclipse.basyx.aas.backend.provider.SubModelProvider;
-import org.eclipse.basyx.aas.backend.provider.VABMultiSubmodelProvider;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.vab.backend.connector.JSONConnector;
-import org.eclipse.basyx.vab.backend.connector.basyx.BaSyxConnector;
-import org.eclipse.basyx.vab.backend.server.basyx.BaSyxTCPServer;
+import org.eclipse.basyx.aas.restapi.VABMultiSubmodelProvider;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.restapi.SubModelProvider;
+import org.eclipse.basyx.vab.coder.json.connector.JSONConnector;
+import org.eclipse.basyx.vab.protocol.basyx.connector.BaSyxConnector;
+import org.eclipse.basyx.vab.protocol.basyx.server.BaSyxTCPServer;
 import org.junit.Test;
 
-
-
 /**
  * Code snippet that illustrates the deployment of a AAS sub model to a device, and connects to that sub model using
  * Virtual Automation Bus (VAB) primitives.
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/http/ConnectToRemoteAAS.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/http/ConnectToRemoteAAS.java
index 988645d..bd2cb96 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/http/ConnectToRemoteAAS.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/deployment/http/ConnectToRemoteAAS.java
@@ -2,20 +2,18 @@
 
 import static org.junit.Assert.assertTrue;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.IAssetAdministrationShell;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
+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.components.servlet.submodel.AASServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_Empty;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExampleAASRegistry;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
-
-
 /**
  * Code snippet that illustrates the creation of an Asset Administration Shell (AAS) by extending an SDK class
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/registry/ConnectToAASEndpoints.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/registry/ConnectToAASEndpoints.java
index afcea77..a37396c 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/registry/ConnectToAASEndpoints.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/registry/ConnectToAASEndpoints.java
@@ -2,23 +2,21 @@
 
 import static org.junit.Assert.assertTrue;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.api.registry.AASHTTPRegistryProxy;
-import org.eclipse.basyx.aas.api.registry.IAASRegistryService;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.backend.connected.aas.ConnectedAssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.connected.ConnectedAssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
+import org.eclipse.basyx.aas.registration.httpproxy.AASHTTPRegistryProxy;
 import org.eclipse.basyx.components.servlet.submodel.AASServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
-
-
 /**
  * Code snippet that registers an AAS descriptor with the AAS registry and connects to the registered AAS endpoint
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/registry/ConnectToSubModelEndpoints.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/registry/ConnectToSubModelEndpoints.java
index 8bb71a5..cb216c1 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/registry/ConnectToSubModelEndpoints.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/registry/ConnectToSubModelEndpoints.java
@@ -2,28 +2,26 @@
 
 import static org.junit.Assert.assertTrue;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.ISingleProperty;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.api.registry.AASHTTPRegistryProxy;
-import org.eclipse.basyx.aas.api.registry.IAASRegistryService;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.SubmodelDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
+import org.eclipse.basyx.aas.registration.httpproxy.AASHTTPRegistryProxy;
 import org.eclipse.basyx.components.servlet.submodel.AASServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.ISingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
-
-
 /**
  * Code snippet that registers an AAS descriptor with the AAS registry and connects to a sub model of
  * the registered AAS endpoint
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/registry/RegisterRetrieveAASEndpoints.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/registry/RegisterRetrieveAASEndpoints.java
index f657026..db641af 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/registry/RegisterRetrieveAASEndpoints.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/registry/RegisterRetrieveAASEndpoints.java
@@ -2,23 +2,21 @@
 
 import static org.junit.Assert.assertTrue;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.api.registry.AASHTTPRegistryProxy;
-import org.eclipse.basyx.aas.api.registry.IAASRegistryService;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.SubmodelDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
+import org.eclipse.basyx.aas.registration.httpproxy.AASHTTPRegistryProxy;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
-
-
 /**
  * Code snippet that registers an AAS descriptor with the AAS registry and accesses the registry using HTTP calls
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/ConnectToAASSubModelSDK.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/ConnectToAASSubModelSDK.java
index 57669c9..1f2d49f 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/ConnectToAASSubModelSDK.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/ConnectToAASSubModelSDK.java
@@ -5,26 +5,24 @@
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.IContainerProperty;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.ISingleProperty;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.impl.metamodel.factory.MetaModelElementFactory;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.SubmodelElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.ContainerProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.factory.java.MetaModelElementFactory;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 import org.eclipse.basyx.components.servlet.submodel.SubmodelServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_Empty;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExampleAASRegistry;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.IContainerProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.ISingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.ContainerProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
-
-
 /**
  * Code snippet that illustrates the use of CRUD Virtual Automation Bus (VAB) operations
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/ConnectToAASSubModelVAB.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/ConnectToAASSubModelVAB.java
index 0e15b73..9bff294 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/ConnectToAASSubModelVAB.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/ConnectToAASSubModelVAB.java
@@ -6,22 +6,22 @@
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.impl.metamodel.factory.MetaModelElementFactory;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.SubmodelElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.ContainerProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.factory.java.MetaModelElementFactory;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 import org.eclipse.basyx.components.servlet.submodel.SubmodelServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_Empty;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExampleAASRegistry;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.ContainerProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/CreateAASSubModelSDK.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/CreateAASSubModelSDK.java
index a72c535..da4698e 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/CreateAASSubModelSDK.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/CreateAASSubModelSDK.java
@@ -5,11 +5,11 @@
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.factory.MetaModelElementFactory;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.SubmodelElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.ContainerProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.factory.java.MetaModelElementFactory;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.ContainerProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
 import org.junit.Test;
 
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/CreateAASSubModelVAB.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/CreateAASSubModelVAB.java
index 4af9054..ee65de6 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/CreateAASSubModelVAB.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/CreateAASSubModelVAB.java
@@ -4,9 +4,9 @@
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
 import org.junit.Test;
 
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/DynamicSubModelDeployment.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/DynamicSubModelDeployment.java
index 8884516..c3bdc93 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/DynamicSubModelDeployment.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/DynamicSubModelDeployment.java
@@ -2,23 +2,21 @@
 
 import static org.junit.Assert.assertTrue;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.ISingleProperty;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 import org.eclipse.basyx.components.servlet.submodel.AASServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExampleAASRegistry;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.ISingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
-
-
 /**
  * Code snippet that illustrates the creation of an AAS sub model
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/DynamicSubModelDeploymentHTTP.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/DynamicSubModelDeploymentHTTP.java
index 3a50bc5..61d8228 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/DynamicSubModelDeploymentHTTP.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/DynamicSubModelDeploymentHTTP.java
@@ -4,22 +4,20 @@
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.webserviceclient.WebServiceJSONClient;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
 import org.eclipse.basyx.components.servlet.submodel.AASServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.tools.webserviceclient.WebServiceJSONClient;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
-
-
 /**
  * Code snippet that illustrates the creation of an AAS sub model, and the access to the sub model via HTTP REST calls
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/InvokeSubModelOperationSDK.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/InvokeSubModelOperationSDK.java
index 3f1f674..5c578b6 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/InvokeSubModelOperationSDK.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/aas/submodels/InvokeSubModelOperationSDK.java
@@ -5,23 +5,21 @@
 import java.util.Map;
 import java.util.function.Function;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperation;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.impl.metamodel.factory.MetaModelElementFactory;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.operation.Operation;
+import org.eclipse.basyx.aas.factory.java.MetaModelElementFactory;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 import org.eclipse.basyx.components.servlet.submodel.SubmodelServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_Empty;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExampleAASRegistry;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.Operation;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
-
-
 /**
  * Code snippet that illustrates the definition and invocation of sub model operations
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/code/BaSyxCreateProvideUseExampleAASSubmodel.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/code/BaSyxCreateProvideUseExampleAASSubmodel.java
index a976cb9..41df9f9 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/code/BaSyxCreateProvideUseExampleAASSubmodel.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/code/BaSyxCreateProvideUseExampleAASSubmodel.java
@@ -4,15 +4,14 @@
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.backend.provider.SubModelProvider;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.vab.backend.connector.JSONConnector;
-import org.eclipse.basyx.vab.backend.connector.basyx.BaSyxConnector;
-import org.eclipse.basyx.vab.backend.server.basyx.BaSyxTCPServer;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.restapi.SubModelProvider;
+import org.eclipse.basyx.vab.coder.json.connector.JSONConnector;
+import org.eclipse.basyx.vab.protocol.basyx.connector.BaSyxConnector;
+import org.eclipse.basyx.vab.protocol.basyx.server.BaSyxTCPServer;
 import org.junit.Test;
 
-
 /**
  * Illustrate manual creation and providing of AAS sub model
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASServletConnection.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASServletConnection.java
index 823da78..0913910 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASServletConnection.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASServletConnection.java
@@ -5,30 +5,28 @@
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.IContainerProperty;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.ISingleProperty;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.impl.metamodel.factory.MetaModelElementFactory;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.SubmodelElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.ContainerProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
+import org.eclipse.basyx.aas.factory.java.MetaModelElementFactory;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 import org.eclipse.basyx.components.servlet.submodel.SubmodelServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_Empty;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExampleAASRegistry;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.IContainerProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.ISingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.ContainerProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
-
-
 /**
  * Export sub model through a servlet and connect to that servlet
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASServletConnectionFull.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASServletConnectionFull.java
index 78ee812..61a23bc 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASServletConnectionFull.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASServletConnectionFull.java
@@ -5,25 +5,25 @@
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.IContainerProperty;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.ISingleProperty;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.impl.metamodel.factory.MetaModelElementFactory;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.SubmodelElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.ContainerProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
+import org.eclipse.basyx.aas.factory.java.MetaModelElementFactory;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 import org.eclipse.basyx.components.servlet.submodel.SubmodelServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_Empty;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExampleAASRegistry;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.IContainerProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.ISingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.ContainerProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASSubModelServletConnectorConnection.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASSubModelServletConnectorConnection.java
index 59c29a0..04084a3 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASSubModelServletConnectorConnection.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASSubModelServletConnectorConnection.java
@@ -6,24 +6,24 @@
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.IContainerProperty;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.ISingleProperty;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.impl.metamodel.factory.MetaModelElementFactory;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.SubmodelElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.ContainerProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.factory.java.MetaModelElementFactory;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 import org.eclipse.basyx.components.servlet.submodel.SubmodelServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_Empty;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExampleAASRegistry;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.IContainerProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.ISingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.ContainerProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASSubModelServletVABConnection.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASSubModelServletVABConnection.java
index 8ebd42f..40ef43f 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASSubModelServletVABConnection.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/connection/servlet/AASSubModelServletVABConnection.java
@@ -5,18 +5,18 @@
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.factory.MetaModelElementFactory;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.SubmodelElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.ContainerProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.factory.java.MetaModelElementFactory;
 import org.eclipse.basyx.components.servlet.submodel.SubmodelServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_Empty;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.ContainerProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASDynamicOperationSnippet.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASDynamicOperationSnippet.java
index 457e97a..675266e 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASDynamicOperationSnippet.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASDynamicOperationSnippet.java
@@ -6,16 +6,16 @@
 import java.util.Map;
 import java.util.function.Supplier;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
 import org.eclipse.basyx.components.servlet.submodel.VABLambdaServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-import org.eclipse.basyx.vab.provider.lambda.VABLambdaProviderHelper;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProviderHelper;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASManualHTTPOperationsSnippet.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASManualHTTPOperationsSnippet.java
index 690e9f0..d352b01 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASManualHTTPOperationsSnippet.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASManualHTTPOperationsSnippet.java
@@ -4,16 +4,16 @@
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.webserviceclient.WebServiceJSONClient;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
 import org.eclipse.basyx.components.servlet.submodel.VABLambdaServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.tools.webserviceclient.WebServiceJSONClient;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASPropertiesCRUDAccessSnippet.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASPropertiesCRUDAccessSnippet.java
index bbe0a8c..f748ae1 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASPropertiesCRUDAccessSnippet.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASPropertiesCRUDAccessSnippet.java
@@ -2,15 +2,15 @@
 
 import static org.junit.Assert.assertTrue;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
 import org.eclipse.basyx.components.servlet.submodel.VABLambdaServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASTailoredSupplierSnippet.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASTailoredSupplierSnippet.java
index d425a10..aad113d 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASTailoredSupplierSnippet.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/aas/dynamic/RunAASTailoredSupplierSnippet.java
@@ -6,16 +6,16 @@
 import java.util.Map;
 import java.util.function.Supplier;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
 import org.eclipse.basyx.components.servlet.submodel.VABLambdaServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-import org.eclipse.basyx.vab.provider.lambda.VABLambdaProviderHelper;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProviderHelper;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/vab/connection/RunAASManualHTTPOperationsSnippet.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/vab/connection/RunAASManualHTTPOperationsSnippet.java
index 64e6643..b06638e 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/vab/connection/RunAASManualHTTPOperationsSnippet.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/vab/connection/RunAASManualHTTPOperationsSnippet.java
@@ -5,14 +5,14 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.webserviceclient.WebServiceJSONClient;
 import org.eclipse.basyx.components.servlet.submodel.VABLambdaServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.tools.webserviceclient.WebServiceJSONClient;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/vab/connection/RunAASPropertiesSnippet.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/vab/connection/RunAASPropertiesSnippet.java
index 9bfa37a..0d460ec 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/vab/connection/RunAASPropertiesSnippet.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/undoc/vab/connection/RunAASPropertiesSnippet.java
@@ -8,9 +8,9 @@
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/urn/ConstructURNs.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/urn/ConstructURNs.java
index 9863f10..7ec783a 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/urn/ConstructURNs.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/urn/ConstructURNs.java
@@ -2,7 +2,7 @@
 
 import static org.junit.Assert.assertTrue;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 import org.junit.Test;
 
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/CRUDOperations.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/CRUDOperations.java
index 06f6ee3..2a20dba 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/CRUDOperations.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/CRUDOperations.java
@@ -8,9 +8,9 @@
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/DynamicPropertyClass.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/DynamicPropertyClass.java
index 31c2d94..988eb17 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/DynamicPropertyClass.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/DynamicPropertyClass.java
@@ -10,10 +10,10 @@
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-import org.eclipse.basyx.vab.provider.lambda.VABLambdaProviderHelper;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProviderHelper;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/DynamicPropertyLambda.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/DynamicPropertyLambda.java
index 01c3fbc..06c173a 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/DynamicPropertyLambda.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/DynamicPropertyLambda.java
@@ -10,10 +10,10 @@
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-import org.eclipse.basyx.vab.provider.lambda.VABLambdaProviderHelper;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProviderHelper;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/ManualHTTPCalls.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/ManualHTTPCalls.java
index b021b66..1a4312a 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/ManualHTTPCalls.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/ManualHTTPCalls.java
@@ -5,19 +5,17 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.webserviceclient.WebServiceJSONClient;
 import org.eclipse.basyx.components.servlet.submodel.VABLambdaServlet;
 import org.eclipse.basyx.examples.contexts.BaSyxExamplesContext_1MemoryAASServer_1SQLDirectory;
 import org.eclipse.basyx.examples.deployment.BaSyxDeployment;
 import org.eclipse.basyx.examples.support.directory.ExamplesPreconfiguredDirectory;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnectorProvider;
-import org.eclipse.basyx.vab.core.VABConnectionManager;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.tools.webserviceclient.WebServiceJSONClient;
+import org.eclipse.basyx.vab.manager.VABConnectionManager;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnectorProvider;
 import org.junit.ClassRule;
 import org.junit.Test;
 
-
-
 /**
  * Code snippet that illustrates the use of VABvia HTTP REST calls
  * 
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/provider/FileSystemProviderClass.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/provider/FileSystemProviderClass.java
index 49553b1..086f3e2 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/provider/FileSystemProviderClass.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/provider/FileSystemProviderClass.java
@@ -4,12 +4,12 @@
 
 import java.util.HashMap;
 
-import org.eclipse.basyx.vab.backend.http.tools.GSONTools;
-import org.eclipse.basyx.vab.backend.http.tools.factory.DefaultTypeFactory;
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.provider.filesystem.FileSystemProvider;
-import org.eclipse.basyx.vab.provider.filesystem.filesystem.FileSystem;
-import org.eclipse.basyx.vab.provider.filesystem.filesystem.impl.GenericFileSystem;
+import org.eclipse.basyx.vab.coder.json.serialization.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONTools;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.filesystem.FileSystemProvider;
+import org.eclipse.basyx.vab.modelprovider.filesystem.filesystem.FileSystem;
+import org.eclipse.basyx.vab.modelprovider.filesystem.filesystem.GenericFileSystem;
 import org.junit.Test;
 
 /**
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/provider/VABHashMapProviderClass.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/provider/VABHashMapProviderClass.java
index 2f84c4b..574f205 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/provider/VABHashMapProviderClass.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/provider/VABHashMapProviderClass.java
@@ -5,8 +5,8 @@
 import java.util.HashMap;
 import java.util.function.Function;
 
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.provider.hashmap.VABHashmapProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.map.VABHashmapProvider;
 import org.junit.Test;
 
 /**
diff --git a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/provider/VABLambdaProviderClass.java b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/provider/VABLambdaProviderClass.java
index e511698..713f484 100644
--- a/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/provider/VABLambdaProviderClass.java
+++ b/examples/basys.examples/src/test/java/org/eclipse/basyx/examples/snippets/vab/provider/VABLambdaProviderClass.java
@@ -5,9 +5,9 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.provider.lambda.VABLambdaProvider;
-import org.eclipse.basyx.vab.provider.lambda.VABLambdaProviderHelper;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProvider;
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProviderHelper;
 import org.junit.Test;
 
 /**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/IAssetAdministrationShell.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/IAssetAdministrationShell.java
deleted file mode 100644
index 3cc5017..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/IAssetAdministrationShell.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas;
-
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IConceptDictionary;
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IView;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IHasDataSpecification;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IIdentifiable;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.security.ISecurity;
-import org.eclipse.basyx.vab.IElement;
-
-/**
- * Asset Administration Shell (AAS) interface
- * 
- * @author kuhn
- *
- */
-
-public interface IAssetAdministrationShell extends IElement, IIdentifiable, IHasDataSpecification {
-	/**
-	 * Return all registered sub models of this AAS
-	 * 
-	 * @return
-	 */
-	public Map<String, ISubModel> getSubModels();
-
-	/**
-	 * Add a sub model to the AAS
-	 * 
-	 * @param subModel
-	 *            The added sub model
-	 */
-	public void addSubModel(ISubModel subModel);
-
-	public ISecurity getSecurity();
-
-	public IReference getDerivedFrom();
-
-	public IReference getAsset();
-
-	public void setSubModel(Set<IReference> submodels);
-
-	public Set<IReference> getSubModel();
-
-	public Set<IView> getViews();
-
-	public Set<IConceptDictionary> getConceptDictionary();
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/ISubModel.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/ISubModel.java
deleted file mode 100644
index e39154b..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/ISubModel.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas;
-
-import java.util.Map;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IHasDataSpecification;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IHasSemantics;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IIdentifiable;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.haskind.IHasKind;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperation;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.IProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.IVABElementContainer;
-import org.eclipse.basyx.vab.IElement;
-
-/**
- * Interface API for sub models
- * 
- * @author kuhn
- *
- */
-public interface ISubModel extends IElement, IHasSemantics, IIdentifiable, IHasDataSpecification, IHasKind, IVABElementContainer {
-
-	public void setProperties(Map<String, IProperty> properties);
-
-	public void setOperations(Map<String, IOperation> operations);
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/parts/IAsset.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/parts/IAsset.java
deleted file mode 100644
index ace5378..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/parts/IAsset.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.parts;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IHasDataSpecification;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IIdentifiable;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.haskind.IHasKind;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-
-/**
- * Interface for class Identifier
- * 
- * @author rajashek
- *
- */
-
-public interface IAsset extends IHasDataSpecification,IHasKind,IIdentifiable {
-	public IReference getAssetIdentificationModel();
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/parts/IConceptDescription.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/parts/IConceptDescription.java
deleted file mode 100644
index c806026..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/parts/IConceptDescription.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.parts;
-
-import java.util.Set;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IHasDataSpecification;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IIdentifiable;
-/**
- * Interface for ConceptDescription
- * 
- * @author rajashek
- *
-*/
-public interface IConceptDescription extends IHasDataSpecification,IIdentifiable {
-	public Set<String> getisCaseOf();
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/parts/IConceptDictionary.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/parts/IConceptDictionary.java
deleted file mode 100644
index d54a044..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/parts/IConceptDictionary.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.parts;
-
-import java.util.Set;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IReferable;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-
-/**
- * Interface for ConceptDictionary
- * 
- * @author rajashek
- *
-*/
-
-public interface IConceptDictionary extends IReferable {
-	public Set<IReference> getConceptDescription();
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/parts/IView.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/parts/IView.java
deleted file mode 100644
index 0711b79..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/parts/IView.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.parts;
-
-import java.util.Set;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IHasDataSpecification;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IHasSemantics;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IReferable;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-/**
- * Interface for View
- * @author rajashek
- *
-*/
-
-public interface IView extends IHasSemantics,IHasDataSpecification,IReferable {
-	public Set<IReference> getContainedElement();
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/IHasSemantics.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/IHasSemantics.java
deleted file mode 100644
index 88957d8..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/IHasSemantics.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.qualifier;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-/**
- * Interface for HasSemantics
- * 
- * @author rajashek
- *
-*/
-public interface IHasSemantics  {
-	public IReference getSemanticId();
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/qualifiable/IConstraint.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/qualifiable/IConstraint.java
deleted file mode 100644
index d83def9..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/qualifiable/IConstraint.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable;
-/**
- * Interface for Constraint
- * @author rajashek
- *
-*/
-public interface IConstraint {
-
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/qualifiable/IFormula.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/qualifiable/IFormula.java
deleted file mode 100644
index e1061d5..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/qualifiable/IFormula.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable;
-
-import java.util.Set;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-/**
- * Interface for Formula
- * @author rajashek
- *
-*/
-public interface IFormula {
-	public  Set<IReference> getDependsOn();
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/qualifiable/IQualifier.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/qualifiable/IQualifier.java
deleted file mode 100644
index 49d549c..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/qualifiable/IQualifier.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IHasSemantics;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-
-/**
- * Interface for Qualifier
- * 
- * @author rajashek
- *
- */
-
-public interface IQualifier extends IHasSemantics {
-	public String getQualifierType();
-
-	public Object getQualifierValue();
-
-	public IReference getQualifierValueId();
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/IDataElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/IDataElement.java
deleted file mode 100644
index 0beb01a..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/IDataElement.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement;
-
-public interface IDataElement extends ISubmodelElement {
-
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/ISubmodelElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/ISubmodelElement.java
deleted file mode 100644
index 6b4f05e..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/ISubmodelElement.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IHasDataSpecification;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IHasSemantics;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IReferable;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.haskind.IHasKind;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IQualifiable;
-import org.eclipse.basyx.vab.IElement;
-
-public interface ISubmodelElement extends IElement,IHasDataSpecification,IReferable,IQualifiable,IHasSemantics,IHasKind {
-
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/operation/IOperationVariable.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/operation/IOperationVariable.java
deleted file mode 100644
index 6d79b98..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/operation/IOperationVariable.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElement;
-/**
- * Interface for OperationVariable
- * @author rajashek
- *
-*/
-public interface IOperationVariable extends ISubmodelElement {
-	public ISubmodelElement getValue();
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/IContainerProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/IContainerProperty.java
deleted file mode 100644
index 7bc3b25..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/IContainerProperty.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property;
-
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.IVABElementContainer;
-
-/**
- * Interface for AAS properties that contain other properties
- * 
- * @author schnicke
- *
- */
-public interface IContainerProperty extends IProperty, IVABElementContainer {
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/IProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/IProperty.java
deleted file mode 100644
index 75cd5c7..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/IProperty.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
-import org.eclipse.basyx.vab.IElement;
-
-/**
- * Interface for IElement properties
- * 
- * @author kuhn
- *
- */
-public interface IProperty extends IElement, IDataElement {
-
-	public PropertyType getPropertyType();
-	
-	public void setValueId(String obj);
-
-	public String getValueId();
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/IReferenceElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/IReferenceElement.java
deleted file mode 100644
index ea661a1..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/IReferenceElement.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
-
-/**
- * Interface for ReferenceElement
- * @author rajashek
- *
-*/
-
-public interface IReferenceElement extends IDataElement {
-	
-	
-	public void setValue(IReference ref);
-	
-	public IReference getValue();
-
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/PropertyType.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/PropertyType.java
deleted file mode 100644
index ae01a35..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/PropertyType.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property;
-
-public enum PropertyType {
-	Single, Collection, Map, Container
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/reference/IElementReference.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/reference/IElementReference.java
deleted file mode 100644
index 9048972..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/reference/IElementReference.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.eclipse.basyx.aas.api.reference;
-
-
-
-/**
- * Reference to a remote property
- * 
- * @author kuhn
- *
- */
-public interface IElementReference {
-
-	
-	/**
-	 * Get AAS ID
-	 */
-	public String getAASID();
-	
-	
-	/**
-	 * Get sub model ID
-	 */
-	public String getSubModelID();
-	
-	
-	/**
-	 * Get path to property
-	 */
-	public String getPathToProperty();
-	
-	
-	/**
-	 * Get server path to property that should be used when accessing the property
-	 */
-	public String getServerPathToProperty();
-
-	
-	/**
-	 * Return the unique ID that identifies an element
-	 * 
-	 * @return unique ID
-	 */
-	public String getId();
-	
-	
-	/**
-	 * Indicate AAS reference
-	 */
-	public boolean isAASReference();
-	
-	
-	/**
-	 * Indicate sub model reference
-	 */
-	public boolean isSubModelReference();
-	
-	
-	/**
-	 * Indicate property reference
-	 */
-	public boolean isPropertyReference();
-	
-	/**
-	 * Indicate if it is a collection
-	 */
-	public boolean isCollection();
-	
-	/**
-	 * Indicates if it is a map
-	 */
-	public boolean isMap();
-
-	
-	/**
-	 * Indicates if it is a property container
-	 */
-	public boolean isPropertyContainer();
-	
-	
-	/**
-	 * Add scope to aasID of element reference
-	 */
-	public void addScope(String scope);
-	
-	
-	/**
-	 * Set server path
-	 */
-	public void setServerpath(String serverPath);
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/services/ILocalModelProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/services/ILocalModelProvider.java
deleted file mode 100644
index c12c2cd..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/services/ILocalModelProvider.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.eclipse.basyx.aas.api.services;
-
-import org.eclipse.basyx.vab.core.IModelProvider;
-
-public interface ILocalModelProvider extends IModelProvider {
-	
-	/**
-	 * Local Model Provider for providers that must be encapsulating the data source directly. E.g. Consistency, Security (?)
-	 */
-
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/ConnectedSubModel.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/ConnectedSubModel.java
deleted file mode 100644
index 1dba8b5..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/ConnectedSubModel.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.eclipse.basyx.aas.backend.connected.aas;
-
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.identifier.IIdentifier;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IAdministrativeInformation;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperation;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.IProperty;
-import org.eclipse.basyx.aas.backend.connected.ConnectedVABModelMap;
-import org.eclipse.basyx.aas.backend.connected.aas.submodelelement.property.ConnectedPropertyFactory;
-import org.eclipse.basyx.aas.backend.connected.facades.ConnectedVABElementContainerFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.AdministrativeInformationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasKindFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.IdentifierFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferenceFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.IVABElementContainer;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-
-/**
- * "Connected" implementation of SubModel
- * 
- * @author rajashek
- *
- */
-public class ConnectedSubModel extends ConnectedVABModelMap<Object> implements IVABElementContainer, ISubModel {
-
-	ConnectedPropertyFactory factory = new ConnectedPropertyFactory();
-	ConnectedVABElementContainerFacade facade;
-
-	public ConnectedSubModel(VABElementProxy proxy) {
-		super(proxy);
-		facade = new ConnectedVABElementContainerFacade(proxy);
-	}
-
-	@Override
-	public IReference getSemanticId() {
-		return new ReferenceFacade(getElem());
-	}
-
-	@Override
-	public IAdministrativeInformation getAdministration() {
-		return new AdministrativeInformationFacade(getElem());
-	}
-
-	@Override
-	public IIdentifier getIdentification() {
-		return new IdentifierFacade(getElem());
-	}
-
-	@Override
-	public Set<IReference> getDataSpecificationReferences() {
-		return new HasDataSpecificationFacade(getElem()).getDataSpecificationReferences();
-	}
-
-	@Override
-	public String getHasKindReference() {
-		return new HasKindFacade(getElem()).getHasKindReference();
-	}
-
-	@Override
-	public void setProperties(Map<String, IProperty> properties) {
-		throwNotSupportedException();
-	}
-
-	@Override
-	public void setOperations(Map<String, IOperation> operations) {
-		throwNotSupportedException();
-	}
-
-	@Override
-	public String getIdshort() {
-		return (String) getElem().get(Referable.IDSHORT);
-	}
-
-	@Override
-	public String getCategory() {
-		return (String) getElem().get(Referable.CATEGORY);
-	}
-
-	@Override
-	public String getDescription() {
-		return (String) getElem().get(Referable.DESCRIPTION);
-	}
-
-	@SuppressWarnings("unchecked")
-	@Override
-	public IReference getParent() {
-		return new ReferenceFacade((Map<String, Object>) getElem().getPath(Referable.PARENT));
-	}
-
-	@Override
-	public void addSubModelElement(ISubmodelElement element) {
-		facade.addSubModelElement(element);
-	}
-
-	@Override
-	public Map<String, IDataElement> getDataElements() {
-		return facade.getDataElements();
-	}
-
-	@Override
-	public Map<String, IOperation> getOperations() {
-		return facade.getOperations();
-	}
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/ConnectedSubmodelElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/ConnectedSubmodelElement.java
deleted file mode 100644
index 998ea92..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/ConnectedSubmodelElement.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.eclipse.basyx.aas.backend.connected.aas.submodelelement;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.aas.backend.connected.ConnectedElement;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-/**
- * "Connected" implementation of SubmodelElement
- * @author rajashek
- *
- */
-public abstract class ConnectedSubmodelElement extends ConnectedElement implements ISubmodelElement {
-	public ConnectedSubmodelElement(VABElementProxy proxy) {
-		super(proxy);		
-	}
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedContainerProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedContainerProperty.java
deleted file mode 100644
index 7a9d9dfd..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedContainerProperty.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.eclipse.basyx.aas.backend.connected.aas.submodelelement.property;
-
-import java.util.Map;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperation;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.IContainerProperty;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.PropertyType;
-import org.eclipse.basyx.aas.backend.connected.facades.ConnectedVABElementContainerFacade;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-
-/**
- * Connects to a ComplexDataProperty as specified by meta model. <br />
- * Not contained in DAAS meta model
- * 
- * @author schnicke
- *
- */
-public class ConnectedContainerProperty extends ConnectedProperty implements IContainerProperty {
-
-	ConnectedPropertyFactory factory = new ConnectedPropertyFactory();
-	ConnectedVABElementContainerFacade facade;
-
-	public ConnectedContainerProperty(VABElementProxy proxy) {
-		super(PropertyType.Container, proxy);
-		facade = new ConnectedVABElementContainerFacade(proxy);
-	}
-
-	@Override
-	public void addSubModelElement(ISubmodelElement element) {
-		facade.addSubModelElement(element);
-	}
-
-	@Override
-	public Map<String, IDataElement> getDataElements() {
-		return facade.getDataElements();
-	}
-
-	@Override
-	public Map<String, IOperation> getOperations() {
-		return facade.getOperations();
-	}
-
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedEvent.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedEvent.java
deleted file mode 100644
index 8ae1a5f..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedEvent.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.eclipse.basyx.aas.backend.connected.aas.submodelelement.property;
-
-/**
- * "Connected" implementation of Event  
- * @author rajashek
- *
- */
-public class ConnectedEvent   {
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedReferenceElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedReferenceElement.java
deleted file mode 100644
index dd04ae7..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedReferenceElement.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.eclipse.basyx.aas.backend.connected.aas.submodelelement.property;
-
-import java.util.Map;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.IReferenceElement;
-import org.eclipse.basyx.aas.backend.connected.aas.submodelelement.ConnectedDataElement;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferenceFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-/**
- * "Connected" implementation of IReferenceElement
- * @author rajashek
- *
- */
-public class ConnectedReferenceElement extends ConnectedDataElement implements IReferenceElement {
-	public ConnectedReferenceElement(VABElementProxy proxy) {
-		super(proxy);		
-	}
-	
-
-	@Override
-	public void setValue(IReference ref) {
-		getProxy().setModelPropertyValue(SingleProperty.VALUE, ref);
-		
-	}
-
-	@SuppressWarnings("unchecked")
-	@Override
-	public IReference getValue() {
-		return new ReferenceFacade((Map<String, Object>) getElem().getPath(SingleProperty.VALUE));
-	}
-
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/file/ConnectedFile.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/file/ConnectedFile.java
deleted file mode 100644
index 6275ac9..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/file/ConnectedFile.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.eclipse.basyx.aas.backend.connected.aas.submodelelement.property.file;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.file.IFile;
-import org.eclipse.basyx.aas.backend.connected.aas.submodelelement.ConnectedDataElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.blob.Blob;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-/**
- * "Connected" implementation of IFile
- * @author rajashek
- *
- */
-public class ConnectedFile extends ConnectedDataElement implements IFile {
-	public ConnectedFile(VABElementProxy proxy) {
-		super(proxy);		
-	}
-	
-	@Override
-	public void setValue(String value) {
-		getProxy().setModelPropertyValue(SingleProperty.VALUE, value);
-		
-	}
-
-	@Override
-	public String getValue() {
-		return (String) getProxy().getModelPropertyValue(SingleProperty.VALUE);
-	}
-
-	@Override
-	public void setMimeType(String mimeType) {
-		getProxy().setModelPropertyValue(Blob.MIMETYPE, mimeType);
-		
-	}
-
-	@Override
-	public String getMimeType() {
-		return (String) getProxy().getModelPropertyValue(Blob.MIMETYPE);
-	}
-
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/factory/MetaModelElementFactory.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/java/MetaModelElementFactory.java
similarity index 81%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/factory/MetaModelElementFactory.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/java/MetaModelElementFactory.java
index 9518b49..a5e6aec 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/factory/MetaModelElementFactory.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/java/MetaModelElementFactory.java
@@ -1,17 +1,17 @@
-package org.eclipse.basyx.aas.impl.metamodel.factory;
+package org.eclipse.basyx.aas.factory.java;
 
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
 import java.util.function.Function;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.SubmodelElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.operation.Operation;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.operation.OperationVariable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.ContainerProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.Operation;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.OperationVariable;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.ContainerProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
 
 /**
  * Creates meta model entities <br />
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformAsset.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/TransformAsset.java
similarity index 71%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformAsset.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/TransformAsset.java
index 028689f..2b7b089 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformAsset.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/TransformAsset.java
@@ -1,11 +1,14 @@
-package org.eclipse.basyx.vab.provider.xml.transformers;
+package org.eclipse.basyx.aas.factory.xml;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.Description;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts.Asset;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind.HasKind;
+import org.eclipse.basyx.aas.metamodel.map.parts.Asset;
+import org.eclipse.basyx.submodel.factory.xml.TransformDescription;
+import org.eclipse.basyx.submodel.factory.xml.TransformHasKind;
+import org.eclipse.basyx.submodel.factory.xml.TransformIdentifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Description;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind.HasKind;
 
 /**
  * Returns Asset Object for the Map with <aas:asset>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformAssetAdministrationShell.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/TransformAssetAdministrationShell.java
similarity index 79%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformAssetAdministrationShell.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/TransformAssetAdministrationShell.java
index 28c27bf..d5ad144 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformAssetAdministrationShell.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/TransformAssetAdministrationShell.java
@@ -1,12 +1,13 @@
-package org.eclipse.basyx.vab.provider.xml.transformers;
+package org.eclipse.basyx.aas.factory.xml;
 
 import java.util.HashSet;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IView;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts.ConceptDictionary;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
+import org.eclipse.basyx.aas.metamodel.api.parts.IView;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.parts.ConceptDictionary;
+import org.eclipse.basyx.submodel.factory.xml.TransformIdentifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
 
 /**
  * Returns AssetAdministrationShell Object for the Map with
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformConceptDescription.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/TransformConceptDescription.java
similarity index 85%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformConceptDescription.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/TransformConceptDescription.java
index a73399a..1e44a43 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformConceptDescription.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/TransformConceptDescription.java
@@ -1,11 +1,13 @@
-package org.eclipse.basyx.vab.provider.xml.transformers;
+package org.eclipse.basyx.aas.factory.xml;
 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts.ConceptDescription;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
+import org.eclipse.basyx.aas.metamodel.map.parts.ConceptDescription;
+import org.eclipse.basyx.submodel.factory.xml.TransformHasDataSpecification;
+import org.eclipse.basyx.submodel.factory.xml.TransformIdentifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
 
 /**
  * Returns ConceptDescription Object for the Map with <aas:conceptDescription>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformConceptDictionary.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/TransformConceptDictionary.java
similarity index 90%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformConceptDictionary.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/TransformConceptDictionary.java
index f377c26..891c27f 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformConceptDictionary.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/TransformConceptDictionary.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.provider.xml.transformers;
+package org.eclipse.basyx.aas.factory.xml;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -6,10 +6,11 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IKey;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts.ConceptDictionary;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
+import org.eclipse.basyx.aas.metamodel.map.parts.ConceptDictionary;
+import org.eclipse.basyx.submodel.factory.xml.TransformKey;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IKey;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
 
 /**
  * Returns HashSet<ConceptDictionary> Object for the Map with
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformView.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/TransformView.java
similarity index 85%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformView.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/TransformView.java
index fc4b33a..bc01788 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformView.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/factory/xml/TransformView.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.provider.xml.transformers;
+package org.eclipse.basyx.aas.factory.xml;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -6,11 +6,12 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IView;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IKey;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts.View;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
+import org.eclipse.basyx.aas.metamodel.api.parts.IView;
+import org.eclipse.basyx.aas.metamodel.map.parts.View;
+import org.eclipse.basyx.submodel.factory.xml.TransformKey;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IKey;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
 
 /**
  * Returns HashSet<View> Object for the Map with <aas:views>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/IVABElementContainer.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/IVABElementContainer.java
deleted file mode 100644
index e17841d..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/IVABElementContainer.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap;
-
-import java.util.Map;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperation;
-
-public interface IVABElementContainer {
-	public void addSubModelElement(ISubmodelElement element);
-
-	public Map<String, IDataElement> getDataElements();
-
-	public Map<String, IOperation> getOperations();
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/UndefinedIDException.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/UndefinedIDException.java
deleted file mode 100644
index eed41a3..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/UndefinedIDException.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap;
-
-
-/**
- * Exception that indicates that a property without a defined ID and without an explicitly given ID should be added to a VAB HashMap
- * 
- * @author kuhn
- *
- */
-public class UndefinedIDException extends RuntimeException {
-
-	
-	/**
-	 * Version number of serialized instance
-	 */
-	private static final long serialVersionUID = 1L;
-}
-
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/qualifiable/Constraint.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/qualifiable/Constraint.java
deleted file mode 100644
index 9918ff9..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/qualifiable/Constraint.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable;
-
-import java.util.HashMap;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IConstraint;
-
-public abstract class Constraint extends HashMap<String, Object> implements IConstraint {
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/qualifiable/QualifierType.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/qualifiable/QualifierType.java
deleted file mode 100644
index 479233c..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/qualifiable/QualifierType.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable;
-
-public class QualifierType {
-
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/AbstractProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/AbstractProperty.java
deleted file mode 100644
index 0665501..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/AbstractProperty.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.IProperty;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.PropertyType;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.DataElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.valuetypedef.PropertyValueTypeDef;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
-
-public abstract class AbstractProperty extends DataElement implements IProperty {
-	private static final long serialVersionUID = 1724792579215822224L;
-
-	@Override
-	public PropertyType getPropertyType() {
-		PropertyValueTypeDef type = PropertyValueTypeDefHelper.fromName((String) get(SingleProperty.VALUETYPE));
-		if (type == PropertyValueTypeDef.Collection) {
-			return PropertyType.Collection;
-		} else if (type == PropertyValueTypeDef.Map) {
-			return PropertyType.Map;
-		} else {
-			return PropertyType.Single;
-		}
-	}
-
-	@Override
-	public void setValueId(String obj) {
-		put(SingleProperty.VALUEID, obj);
-
-	}
-
-	@Override
-	public String getValueId() {
-		return (String) get(SingleProperty.VALUEID);
-	}
-
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/ContainerProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/ContainerProperty.java
deleted file mode 100644
index d966b2c..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/ContainerProperty.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperation;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.IContainerProperty;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.PropertyType;
-import org.eclipse.basyx.aas.impl.metamodel.facades.VABElementContainerFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.IVABElementContainer;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-
-public class ContainerProperty extends AbstractProperty implements IContainerProperty, IVABElementContainer {
-	private static final long serialVersionUID = -8066834863070042378L;
-
-	private VABElementContainerFacade containerFacade;
-
-	
-	public ContainerProperty() {
-		containerFacade = new VABElementContainerFacade(this);
-
-		put(SubModel.SUBMODELELEMENT, new HashMap<>());
-
-		// Helper for operations and properties
-		put(SubModel.PROPERTIES, new HashMap<>());
-		put(SubModel.OPERATIONS, new HashMap<>());
-	}
-
-	@Override
-	public PropertyType getPropertyType() {
-		return PropertyType.Container;
-	}
-
-	@Override
-	public void addSubModelElement(ISubmodelElement element) {
-		containerFacade.addSubModelElement(element);
-	}
-
-	@Override
-	public Map<String, IDataElement> getDataElements() {
-		return containerFacade.getDataElements();
-	}
-
-	@Override
-	public Map<String, IOperation> getOperations() {
-		return containerFacade.getOperations();
-	}
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/reference/VABURNElementRef.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/reference/VABURNElementRef.java
deleted file mode 100644
index 4c2403a..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/reference/VABURNElementRef.java
+++ /dev/null
@@ -1,312 +0,0 @@
-package org.eclipse.basyx.aas.impl.reference;
-
-import org.eclipse.basyx.aas.api.exception.UnknownElementTypeException;
-import org.eclipse.basyx.aas.api.metamodel.aas.IAssetAdministrationShell;
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.reference.IElementReference;
-import org.eclipse.basyx.aas.impl.tools.BaSysID;
-import org.eclipse.basyx.aas.impl.tools.ElementTools;
-import org.eclipse.basyx.vab.IElement;
-import org.eclipse.basyx.vab.core.ref.VABElementRef;
-
-/**
- * URN reference to a remote property. This reference also contains RTTI
- * information
- * 
- * The element reference format is as following: -
- * urn:<legalBody>:<SubUnit>:<Submodel>:<version>:<revision>:<elementID>#<instance>
- * 
- * @author kuhn
- *
- */
-public class VABURNElementRef extends VABElementRef implements IElementReference {
-
-	/**
-	 * Store legal body part of reference
-	 */
-	protected String legalBody = null;
-
-	/**
-	 * Store sub unit part of reference
-	 */
-	protected String subUnit = null;
-
-	/**
-	 * Store sub model part of reference
-	 */
-	protected String subModel = null;
-
-	/**
-	 * Store version part of reference
-	 */
-	protected String version = null;
-
-	/**
-	 * Store revision part of reference
-	 */
-	protected String revision = null;
-
-	/**
-	 * Store element path part of reference. This path is the logic path to the
-	 * property that a user will use.
-	 */
-	protected String elementPath = null;
-
-	/**
-	 * Store instance information
-	 */
-	protected String instance = null;
-
-	protected boolean isCollection = false;
-
-	protected boolean isMap = false;
-
-	protected boolean isPropertyContainer = false;
-
-	/**
-	 * Default constructor
-	 */
-	public VABURNElementRef() {
-		// Do nothing
-	}
-
-	/**
-	 * Constructor that creates a reference to an IElement
-	 */
-	public VABURNElementRef(IElement element) {
-		// Serialize element reference
-		// - AAS
-		if (element instanceof IAssetAdministrationShell) {
-			legalBody = element.getId();
-		}
-		// - Sub model
-		else if (element instanceof ISubModel) {
-			legalBody = ElementTools.getAASID(element);
-			subUnit = element.getId();
-			// }
-			// // - Sub model property, event or operation
-			// // - FIXME: Interface types
-			// else if (element instanceof IProperty) {
-			// legalBody = ElementTools.getAASID(element);
-			// subUnit = ElementTools.getSubmodelID(element);
-			// elementPath = ElementTools.getFullPathToProperty(element);
-			// } else if (element instanceof _Operation) {
-			// legalBody = ElementTools.getAASID(element);
-			// subUnit = ElementTools.getSubmodelID(element);
-			// elementPath = ElementTools.getFullPathToProperty(element);
-			// } else if (element instanceof _Event) {
-			// legalBody = ElementTools.getAASID(element);
-			// subUnit = ElementTools.getSubmodelID(element);
-			// elementPath = ElementTools.getFullPathToProperty(element);
-		} else {
-			// Element type is not known...
-			throw new UnknownElementTypeException();
-		}
-
-		// Set server property path
-		if (getPath() == null) {
-			setPath(elementPath);
-		}
-	}
-
-	/**
-	 * Constructor that references an AAS
-	 */
-	public VABURNElementRef(String AASID) {
-		// Store IDs
-		legalBody = AASID;
-	}
-
-	/**
-	 * Constructor that references a sub model in an AAS
-	 */
-	public VABURNElementRef(String AASID, String SubModelID) {
-		// Store IDs
-		legalBody = AASID;
-		subUnit = SubModelID;
-	}
-
-	/**
-	 * Constructor that references a sub model property in an AAS
-	 */
-	public VABURNElementRef(String AASID, String SubModelID, String propPath) {
-		// Store IDs
-		legalBody = AASID;
-		subUnit = SubModelID;
-		elementPath = propPath;
-		setPath(elementPath);
-	}
-
-	/**
-	 * Get AAS ID
-	 */
-	@Override
-	public String getAASID() {
-		// Return AAS IS
-		return legalBody;
-	}
-
-	/**
-	 * Get sub model ID
-	 */
-	@Override
-	public String getSubModelID() {
-		// Return sub model ID
-		return subUnit;
-	}
-
-	/**
-	 * Get path to property
-	 */
-	@Override
-	public String getPathToProperty() {
-		// Return path to property
-		return elementPath;
-	}
-
-	/**
-	 * Get server path to property that should be used when accessing the property
-	 */
-	@Override
-	public String getServerPathToProperty() {
-		return getPath();
-	}
-
-	/**
-	 * Indicate if reference points to an AAS
-	 */
-	@Override
-	public boolean isAASReference() {
-		// An AAS reference only defines the unique AAS ID
-		if ((legalBody != null) && ((subUnit == null) || (subUnit.length() == 0))
-				&& ((elementPath == null) || (elementPath.length() == 0)))
-			return true;
-
-		// No AAS reference
-		return false;
-	}
-
-	/**
-	 * Indicate if reference points to an AAS sub model
-	 */
-	@Override
-	public boolean isSubModelReference() {
-		// A sub model reference only defines the unique sub model ID and optionally the
-		// AAS ID
-		if ((subUnit != null) && ((elementPath == null) || (elementPath.length() == 0)))
-			return true;
-
-		// No sub model reference
-		return false;
-	}
-
-	/**
-	 * Indicate if reference points to a property of an AAS sub model
-	 */
-	@Override
-	public boolean isPropertyReference() {
-		// A property reference defines the unique sub model ID, optionally the AAS ID,
-		// and the property path
-		if ((subUnit != null) && (elementPath != null))
-			return true;
-
-		// No sub model reference
-		return false;
-	}
-
-	/**
-	 * Return the unique ID that identifies an element
-	 * 
-	 * @return unique ID
-	 */
-	@Override
-	public String getId() {
-		// If sub model is null or empty, ID as AAS ID
-		if ((subUnit == null) || (subUnit.length() == 0))
-			return legalBody;
-
-		// If path is null or empty, ID is sub model ID
-		if ((elementPath == null) || (elementPath.length() == 0))
-			return subUnit;
-
-		// ID is in the property path
-		// check if it is a nested property
-		if (elementPath.contains(".")) {
-			String[] splitted = elementPath.split("\\.");
-			return splitted[splitted.length - 1];
-		} else {
-			return this.elementPath;
-		}
-	}
-
-	/**
-	 * Add scope to aasID
-	 */
-	@Override
-	public void addScope(String scope) {
-		// Only process valid scopes
-		if (scope == null)
-			return;
-
-		// When aasID is null or empty set aasID to scope and return
-		if (legalBody == null) {
-			legalBody = scope;
-			return;
-		}
-		if (legalBody.length() == 0) {
-			legalBody = scope;
-			return;
-		}
-
-		// Check if scope is already added
-		if (legalBody.endsWith(scope))
-			return;
-
-		// Add scope
-		this.legalBody = BaSysID.instance.addScope(legalBody, scope);
-	}
-
-	/**
-	 * Set server path
-	 */
-	@Override
-	public void setServerpath(String serverPath) {
-		setPath(serverPath);
-	}
-
-	/**
-	 * Indicate if it is a collection
-	 */
-	@Override
-	public boolean isCollection() {
-		return this.isCollection;
-	}
-
-	/**
-	 * Indicate if it is a collection
-	 */
-	@Override
-	public boolean isMap() {
-		return this.isMap;
-	}
-
-	/**
-	 * Set element type for collections and maps
-	 */
-	public void setKind(String kind) {
-		System.out.println("Set kind for property " + this.getId() + " to " + kind);
-
-		if (kind.equals("collection")) {
-			this.isCollection = true;
-		} else if (kind.equals("map")) {
-			this.isMap = true;
-		} else if (kind.equals("container")) {
-			this.isPropertyContainer = true;
-		}
-	}
-
-	@Override
-	public boolean isPropertyContainer() {
-		return this.isPropertyContainer;
-	}
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/tools/BaSysID.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/tools/BaSysID.java
deleted file mode 100644
index db09394..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/tools/BaSysID.java
+++ /dev/null
@@ -1,408 +0,0 @@
-package org.eclipse.basyx.aas.impl.tools;
-
-
-/**
- * Class that supports building IDs of asset administration shell IDs and sub models for the directory server <br>
- * 
- * Format:  {@code <aas>/<qualifier>/<submodel>/<qualifier>/<propertypath> } <br>
- * 
- * Examples: <br>
- * - status.lsw12.groundfloow.kaiserslautern.iese.fraunhofer.de (globally scoped - can be resolved via DNS)<br>
- * - status.lsw12                                               (local scope)
- * 
- * @author kuhn, pschorn
- *
- */
-public class BaSysID {
-
-	
-	/**
-	 * Singleton BaSys ID instance 
-	 */
-	public static final BaSysID instance = new BaSysID();
-	
-	
-	
-	/**
-	 * Prevent additional instances
-	 */
-	private BaSysID() {
-		// Do nothing
-	}
-	
-	
-	
-	
-	
-	/**
-	 * Create an ID string that refers to an Asset Administration Shell for the directory server
-	 * @version 0.2
-	 * 
-	 * @param aasID ID of asset administration shell
-	 * @return Built ID in format {@code <aasID>/aas}
-	 * 
-	 * 
-	 */
-	public String buildAASID(String aasID) {
-	
-		return aasID.endsWith("/aas") ? aasID : aasID + "/aas";
-		
-	}
-	
-	
-	/**
-	 * Create an ID string that refers to a single sub model for the directory server
-	 * @version 0.2
-	 * 
-	 * @param smID ID of sub model
-	 * 
-	 * @return Built ID in format {@code <smID>/submodel} (mind the "s"!)
-	 */
-	public String buildSMID(String smID) {
-		
-		return smID.endsWith("/submodel") ? smID : smID + "/submodel";
-	}
-	
-	
-	/**
-	 * Create an ID string for the directory server
-	 * @version 0.2
-	 * 
-	 * @param aasID ID of asset administration shell
-	 * @param subModelID ID of sub model
-	 * 
-	 * @return Built ID in format {@code <aasID>/aas} or {@code <smID>/submodel} or {@code <aasID>/aas/submodels/<subModelID> }
-	 */
-	public String buildPath(String aasID, String subModelID) {
-		// Only return one id if other is is null or empty
-		if ((aasID == null)      || (aasID.length()==0))      return buildSMID(subModelID);
-		if ((subModelID == null) || (subModelID.length()==0)) return buildAASID(aasID);
-
-		// Build path
-		return aasID+ "/aas/submodels/" +subModelID; // return subModelID+"."+aasID;
-	}
-	
-	/**
-	 * Create default service path 
-	 * @param qualifier refers to a qualifier "properties", "operations" or "events"
-	 * @param path can be null if a type qualifier
-	 */
-	public String buildPath(String aasID, String aasSubmodelID, String path, String qualifier) {
-		String servicePath = "";
-		
-		if (aasSubmodelID!=null && aasID != null) { 
-			servicePath = buildAASID(aasID) + "/submodels/"+aasSubmodelID;		
-		
-		} else if (aasSubmodelID != null && aasID == null) {
-			servicePath = aasSubmodelID +"/submodel"; // handles single submodel case
-		}
-		
-		if (qualifier!=null) 	 servicePath = servicePath + "/" + qualifier;
-		if (path!=null)      	 servicePath = servicePath + "/" + path;
-		
-		return servicePath;
-	}
-	
-	
-	/**
-	 * Create a scoped ID string for the directory server. The scope will be reversed so that top level scope comes last.
-	 * @version 0.2
-	 * 
-	 * @param scope sub model scope as a string array
-	 * @param aasID ID of asset administration shell
-	 * @param subModelID ID of sub model
-	 * 
-	 * @return Build ID in format {@code <scope1>.<scope2>. ... .<scopeN>/<aasID>/aas/submodels/<subModelID> } where scope1 is the topscope
-	 */
-	public String buildPath(String[] scope, String aasID, String subModelID) {
-		// Support building the result string
-		StringBuilder result = new StringBuilder();
-		
-		// Append reversed scope
-		for (int i=0; i<scope.length; i++) result.append("."+scope[i]);
-		
-		// Build sub model and AAS part
-		result.append("/" + buildAASID(aasID) + "/submodels/" + subModelID);
-		
-		// Return build ID
-		return result.toString();
-	}
-
-	
-	/**
-	 * Create a scoped ID string for the directory server. The scope will be reversed so that top level scope comes last.
-	 * @version 0.2
-	 * 
-	 * @param scope sub model scope
-	 * @param subModelID ID of sub model
-	 * 
-	 * @return Built ID in format {@code <scope1>.<scope2>.....<scopeN>/<subModelID>/submodel } where scope1 is the topscope
-	 */
-	public String buildPath(String[] scope, String subModelID) {
-		// Support building the result string
-		StringBuilder result = new StringBuilder();
-		
-		// Append reversed scope 
-		for (int i=0; i<scope.length; i++) result.append("/"+scope[i]);
-		
-		// Build sub model part
-		result.append("/" + buildSMID(subModelID)); 
-		
-		// Return build ID
-		return result.toString();
-	}
-
-	
-	
-	
-	/**
-	 * <pre>
-	 *   Get aas id from a qualified path that may contain scope. Handle the following cases <br> Truncates scope!
-	 *  @version 0.2
-	 *  @return "" or aasID and scope if available
-	 *  @param path has format <br>
-	 *  (1) {@code <aasID>/aas } or <br>
-	 *  (2) {@code <aasID>/aas/submodels } or <br>
-	 *  (3) {@code <aasID>/aas/submodels/<submodelID> } or <br>
-	 *  (4) {@code <aasID>/aas/submodels/<submodelID>/... } or <br>
-	 *  (5) {@code <submodelID>/submodel/... } 			
-	 */
-	public String getAASID(String path) {
-		
-		String[] splitted = path.split("/");
-		
-		// (1-4) search for aas id
-		for (int i=1;i<splitted.length;i++) {
-			
-			// Search for <aasID>/aas pattern and return preceding id (and scope)
-			if (splitted[i].equals("aas")) return splitted[i-1];
-		}
-		// (5) A submodelID gets processed
-		return "";
-		
-		
-	}
-
-	
-	
-	/**
-	 * Takes the possibly scoped address and returns the service path starting from it
-	 * @param path {@code <scope1>...<scopeN>/<aasID>/<qualifiers> or <scope1>...<scopeN>/<submodelID>/<qualifiers>}
-	 * @param address is the scoped aasId or submodel
- 	 * @return {@code scope/<aasID>/<qualifiers> or scope/<submodelID>/<qualifiers>}
-	 */
-	public String getScopedServicePath(String path, String address) {
-		
-		return path.substring(path.indexOf(address));
-	}
-	
-	
-	
-	/**
-	 * Return un-scoped service path
-	 * @param path
-	 * @return the service path without the scope
-	 */
-	public String getUnScopedServicePath(String path) {
-		String aasID = getAASID(path);
-		String submodelID = getSubmodelID(path);
-		
-		if (aasID != null) return aasID + path.substring(path.indexOf("/aas")); 
-		if (submodelID != null) return aasID + path.substring(path.indexOf("/submodel"));
-		return ""; 
-	}
-
-	
-
-	/**
-	 *  <pre>
-	 *   Get sub model id from a qualified path that my contain scope. Handle the following cases <br>
-	 *   @version 0.2
-	 *  @return "" or submodelID if available
-	 *  @param path has format <br>
-	 *  (1) {@code <aasID>/aas } or <br>
-	 *  (2) {@code <aasID>/aas/submodels } or <br>
-	 *  (3) {@code <aasID>/aas/submodels/<submodelID> } or <br>
-	 *  (4) {@code <aasID>/aas/submodels/<submodelID>/... } or <br>
-	 *  (5) {@code <submodelID>/submodel/... } 						 	 
-	 * 
-	 */
-	public String getSubmodelID(String path) {
-		
-		String[] splitted = path.split("/");
-		
-		// Search for submodel ID
-		for (int i=1;i<splitted.length;i++) {
-			
-			// (5) search for submodel identifier and return preceding id
-			if (splitted[i].equals("submodel")) return splitted[i-1];
-			
-			// Case (1-4) search for /aas/submodels/<submodelID> pattern and return <submodelID>
-			else if (splitted[i].equals("aas") && splitted.length>i+2 && splitted[i+1].equals("submodels")) return splitted[i+2];
-			
-		}
-		// Submodel Identifier not found.
-		return "";
-		
-	}
-
-
-	/**
-	 * <pre>
-	 * Get qualified element ID or qualifier from path that my contain scope. Handle the following cases <br>
-	 * @version 0.2
-	 * @return If an AAS or Submodel is requested, return ""; otherwise, return qualifier or element ID
-	 * @param path has format <br>
-	 * (1) {@code <aasID>/aas/submodels } <br> - return "submodels" identifier
-	 * (1.1) {@code <aasID>/aas/children  -> } return "children" identifier
-	 * (2) {@code <aasID>/aas/submodels/<submodelID>/properties} <br>
-	 * (3) {@code <aasID>/aas/submodels/<submodelID>/operations} <br>
-	 * (4) {@code <aasID>/aas/submodels/<submodelID>/events} <br>
-	 * (5) {@code <aasID>/aas/submodels/<submodelID>/properties/<propertyID> -> Returns the property ID }<br>
-	 * (6) {@code <aasID>/aas/submodels/<submodelID>/operations/<operationID> -> Returns the operation ID }<br>
-	 * (7) {@code <aasID>/aas/submodels/<submodelID>/events/<eventID> -> Returns the event ID} <br>
-	 * (X) {@code <submodelID>/submodel
-	 * (8) {@code <submodelID>/submodel/properties }<br>
-	 * (9) {@code <submodelID>/submodel/operations }<br>
-	 * (10) {@code <submodelID>/submodel/events} <br>
-	 * (11) {@code <submodelID>/submodel/properties/<propertyID> }<br>
-	 * (12) {@code <submodelID>/submodel/operations/<operationID> }<br>
-	 * (13) {@code <submodelID>/submodel/events/<eventID>} <br>
-	 * 
-	 * TODO add frozen and clock
-	 * 
-	 */
-	public String getPath(String path) {
-		
-		String[] splitted = path.split("/");
-		
-		// Search for element ID or qualifier. Start with Index 1 because first identifier is always element ID
-		for (int i = 1; i < splitted.length; i++) {
-			
-			// Handle cases (8 - 13)
-			if (splitted[i].equals("submodel")) {
-				
-				// Handle case (11 - 13)
-				if (splitted.length == i+3 ) return splitted[i+2];
-				
-				// Handle case (8 - 10)
-				if (splitted.length == i+2) return splitted[i+1];
-				
-			}
-			
-			// Handle cases (1 - 7)
-			if (splitted[i].equals("submodels")) {
-				
-				// Handle case (5 - 7)
-				if (splitted.length == i+4) return splitted[i+3];
-				
-				// Handle case (2 - 4) 
-				if (splitted.length == i+3 ) return splitted[i+2];
-					
-				// Handle case (1)
-				if (splitted.length == i+1) return "submodels";
-			}
-			
-			// Handle case 1.1
-			if (splitted[i].equals("children")) {
-				return "children";
-			}
-		}
-		
-		// If an AAS or Submodel is requested, return "". Also handles Case (X).
-		return "";
-	}
-	
-	
-	/**
-	 * Split a property path to extract next property id TODO check compatible with version 0.2
-	 */
-	private String[] splitPropertyPath(String pathString) {
-		
-		// Return empty array for empty string
-		if (pathString.length() == 0) return new String[0];
-		
-		// Process paths that have no splitting character
-		if ((pathString.indexOf(".") == -1)) return new String[] {pathString};
-
-		// Split string into path segments
-		return pathString.split("[/\\.]");
-	}
-
-	
-	/**
-	 * Get the last n path entries of a path. Used for identifying nested operations.
-	 */
-	public String[] getLastPathEntries(String path, int lastEntries) {
-		
-		// Return result
-		String[] result = new String[lastEntries];
-
-		// Temporary variables
-		String   propPath   = BaSysID.instance.getPath(path);
-		String[] pathArray  = splitPropertyPath(propPath);
-
-		// Copy requested path elements
-		for (int i=0; i<lastEntries; i++) result[i]=pathArray[pathArray.length-lastEntries+i];
-
-		// Return path
-		return result;
-	}
-
-	
-	
-	/**
-	 * Get scoped, qualified address (submodel ID and AAS ID)
-	 * {@code example input: Testsuite/GW/IESE/line1/gateway_line12/device2.line2.manufacturing.de/aas }
-	 * TODO check compatible with version 0.2
-	 */
-	public String getAddress(String path) {
-		return buildPath(getAASID(path), getSubmodelID(path));
-	}
-
-
-
-
-
-	/**
-	 * Add Scope to an AAS ID
-	 * @param aasID
-	 * @param scope
-	 * @return
-	 */
-	public String addScope(String aasID, String scope) {
-		
-		// Case that aasID has other scope
-		if (aasID.indexOf("/") != -1 ) return scope +"."+ aasID;
-		
-		// Otherwise
-		return scope + "/" + aasID;
-	}
-
-
-
-
-	/**
-	 * Expects '{aasId}/aas' and return '{aasId}/aas/submodels'
-	 * @param id
-	 * @return
-	 */
-	public String buildSubmodelsQuery(String id) {
-		return id + "/submodels";
-	}
-
-
-
-	
-	/**
-	 *  Expects '{aasId}/aas/submodels/{smId}' and returns '{aasId}/aas/submodels/{smId}/{type}'
-	 * @param id
-	 * @param type
-	 * @return
-	 */
-	public String buildQualifiedQuery(String id, String type) {
-		return id + "/" + type;
-	}	
-}
-
-
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/tools/ElementTools.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/tools/ElementTools.java
deleted file mode 100644
index 14ed7ae..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/tools/ElementTools.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.eclipse.basyx.aas.impl.tools;
-
-import org.eclipse.basyx.vab.IElement;
-
-/**
- * Element utility functions
- * 
- * @author kuhn
- *
- */
-public class ElementTools {
-
-	
-	/**
-	 * Get AAS ID of this element
-	 */
-	public static String getAASID(IElement element) {
-		// Temporary variables
-		IElement el = element;
-		
-		// Look for AAS in hierarchy
-		// while ((!(el instanceof IAssetAdministrationShell)) && (el != null)) el = el.getParent(); uncomment until new DAAS MetaModel is implemented
-		
-		// Get ID
-		if (el != null) return el.getId();
-		
-		// Element has no AAS ID
-		return "";
-	}
-
-
-//	/**
-//	 * Get sub model ID of this element - uncomment until new DAAS MetaModel is implemented
-//	 */
-//	public static String getSubmodelID(IElement element) {
-//		// Temporary variables
-//		IElement el = element;
-//		
-//		// Look for AAS in hierarchy
-//		while ((!(el instanceof ISubModel)) && (el != null)) el = el.getParent(); 
-//		
-//		// Get ID
-//		if (el != null) return el.getId();
-//		
-//		// Indicate error
-//		throw new ResourceNotFoundException(element.getId());
-//	}
-	
-	
-//	/**
-//	 * Get the full path to an property - uncomment until new DAAS MetaModel is implemented
-//	 */
-//	public static String getFullPathToProperty(IElement element) {
-//		// Return value
-//		StringBuilder result = new StringBuilder();
-//		
-//		// Temporary variables
-//		IElement el = element;
-//		
-//		// Create path to property
-//		while ((!(el instanceof ISubModel)) && (el != null)) {
-//			if (result.length() > 0) result.insert(0, "/");
-//			
-//			result.insert(0, el.getId());
-//			
-//			el = el.getParent();
-//		}
-//		
-//		// Return path
-//		return result.toString();
-//	}
-}
-
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/ConnectedAssetAdministrationShellManager.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/manager/ConnectedAssetAdministrationShellManager.java
similarity index 71%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/ConnectedAssetAdministrationShellManager.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/manager/ConnectedAssetAdministrationShellManager.java
index a1f20f1..2bad9fd 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/ConnectedAssetAdministrationShellManager.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/manager/ConnectedAssetAdministrationShellManager.java
@@ -1,25 +1,25 @@
 /**
  * 
  */
-package org.eclipse.basyx.aas.backend.connected;
+package org.eclipse.basyx.aas.manager;
 
 import java.util.Collection;
 
-import org.eclipse.basyx.aas.api.exception.FeatureNotImplementedException;
-import org.eclipse.basyx.aas.api.manager.IAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.api.metamodel.aas.IAssetAdministrationShell;
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.api.registry.IAASRegistryService;
-import org.eclipse.basyx.aas.backend.connected.aas.ConnectedAssetAdministrationShell;
-import org.eclipse.basyx.aas.backend.connected.aas.ConnectedSubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.SubmodelDescriptor;
-import org.eclipse.basyx.vab.core.IConnectorProvider;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.aas.manager.api.IAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.api.IAssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.connected.ConnectedAssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.connected.ConnectedSubModel;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.vab.exception.FeatureNotImplementedException;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.protocol.api.IConnectorProvider;
 
 /**
  * Implement a AAS manager backend that communicates via HTTP/REST<br />
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/manager/IAssetAdministrationShellManager.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/manager/api/IAssetAdministrationShellManager.java
similarity index 76%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/manager/IAssetAdministrationShellManager.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/manager/api/IAssetAdministrationShellManager.java
index 63fa1b0..5cba206 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/manager/IAssetAdministrationShellManager.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/manager/api/IAssetAdministrationShellManager.java
@@ -1,12 +1,12 @@
-package org.eclipse.basyx.aas.api.manager;
+package org.eclipse.basyx.aas.manager.api;
 
 import java.util.Collection;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.IAssetAdministrationShell;
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
+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.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
 
 
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/IAssetAdministrationShell.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/IAssetAdministrationShell.java
new file mode 100644
index 0000000..12ffef7
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/IAssetAdministrationShell.java
@@ -0,0 +1,51 @@
+package org.eclipse.basyx.aas.metamodel.api;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.basyx.aas.metamodel.api.parts.IConceptDictionary;
+import org.eclipse.basyx.aas.metamodel.api.parts.IView;
+import org.eclipse.basyx.aas.metamodel.api.security.ISecurity;
+import org.eclipse.basyx.submodel.metamodel.api.IElement;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IHasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IIdentifiable;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+
+/**
+ * Asset Administration Shell (AAS) interface
+ * 
+ * @author kuhn
+ *
+ */
+
+public interface IAssetAdministrationShell extends IElement, IIdentifiable, IHasDataSpecification {
+	/**
+	 * Return all registered sub models of this AAS
+	 * 
+	 * @return
+	 */
+	public Map<String, ISubModel> getSubModels();
+
+	/**
+	 * Add a sub model to the AAS
+	 * 
+	 * @param subModel
+	 *            The added sub model
+	 */
+	public void addSubModel(ISubModel subModel);
+
+	public ISecurity getSecurity();
+
+	public IReference getDerivedFrom();
+
+	public IReference getAsset();
+
+	public void setSubModel(Set<IReference> submodels);
+
+	public Set<IReference> getSubModel();
+
+	public Set<IView> getViews();
+
+	public Set<IConceptDictionary> getConceptDictionary();
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/dataspecification/IDataSpecification.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/dataspecification/IDataSpecification.java
similarity index 76%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/dataspecification/IDataSpecification.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/dataspecification/IDataSpecification.java
index bee91f1..39ccf33 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/dataspecification/IDataSpecification.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/dataspecification/IDataSpecification.java
@@ -1,6 +1,6 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.dataspecification;
+package org.eclipse.basyx.aas.metamodel.api.dataspecification;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
 
 /**
  * Interface for DataSpecification
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/parts/IAsset.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/parts/IAsset.java
new file mode 100644
index 0000000..c778c64
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/parts/IAsset.java
@@ -0,0 +1,17 @@
+package org.eclipse.basyx.aas.metamodel.api.parts;
+
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IHasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IIdentifiable;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.haskind.IHasKind;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+
+/**
+ * Interface for class Identifier
+ * 
+ * @author rajashek
+ *
+ */
+
+public interface IAsset extends IHasDataSpecification,IHasKind,IIdentifiable {
+	public IReference getAssetIdentificationModel();
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/parts/IConceptDescription.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/parts/IConceptDescription.java
new file mode 100644
index 0000000..9930a5c
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/parts/IConceptDescription.java
@@ -0,0 +1,15 @@
+package org.eclipse.basyx.aas.metamodel.api.parts;
+
+import java.util.Set;
+
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IHasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IIdentifiable;
+/**
+ * Interface for ConceptDescription
+ * 
+ * @author rajashek
+ *
+*/
+public interface IConceptDescription extends IHasDataSpecification,IIdentifiable {
+	public Set<String> getisCaseOf();
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/parts/IConceptDictionary.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/parts/IConceptDictionary.java
new file mode 100644
index 0000000..6235d53
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/parts/IConceptDictionary.java
@@ -0,0 +1,17 @@
+package org.eclipse.basyx.aas.metamodel.api.parts;
+
+import java.util.Set;
+
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IReferable;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+
+/**
+ * Interface for ConceptDictionary
+ * 
+ * @author rajashek
+ *
+*/
+
+public interface IConceptDictionary extends IReferable {
+	public Set<IReference> getConceptDescription();
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/parts/IView.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/parts/IView.java
new file mode 100644
index 0000000..e5fb210
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/parts/IView.java
@@ -0,0 +1,17 @@
+package org.eclipse.basyx.aas.metamodel.api.parts;
+
+import java.util.Set;
+
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IHasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IHasSemantics;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IReferable;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+/**
+ * Interface for View
+ * @author rajashek
+ *
+*/
+
+public interface IView extends IHasSemantics,IHasDataSpecification,IReferable {
+	public Set<IReference> getContainedElement();
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/policypoints/IAccessControlPolicyPoints.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/policypoints/IAccessControlPolicyPoints.java
similarity index 83%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/policypoints/IAccessControlPolicyPoints.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/policypoints/IAccessControlPolicyPoints.java
index 6ccba94..a87ead7 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/policypoints/IAccessControlPolicyPoints.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/policypoints/IAccessControlPolicyPoints.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.policypoints;
+package org.eclipse.basyx.aas.metamodel.api.policypoints;
 
 /**
  * Interface for AccessControlPolicyPoints
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/security/ISecurity.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/security/ISecurity.java
similarity index 74%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/security/ISecurity.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/security/ISecurity.java
index 7f32f3c..fd27168 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/security/ISecurity.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/api/security/ISecurity.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.security;
+package org.eclipse.basyx.aas.metamodel.api.security;
 
 /**
  * Interface for Security
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/ConnectedAssetAdministrationShell.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/connected/ConnectedAssetAdministrationShell.java
similarity index 73%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/ConnectedAssetAdministrationShell.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/connected/ConnectedAssetAdministrationShell.java
index 4159728..2b53d4f 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/ConnectedAssetAdministrationShell.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/connected/ConnectedAssetAdministrationShell.java
@@ -1,29 +1,30 @@
-package org.eclipse.basyx.aas.backend.connected.aas;
+package org.eclipse.basyx.aas.metamodel.connected;
 
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.IAssetAdministrationShell;
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.identifier.IIdentifier;
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IConceptDictionary;
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IView;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IAdministrativeInformation;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.security.ISecurity;
-import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
-import org.eclipse.basyx.aas.backend.connected.ConnectedVABModelMap;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ConceptDictionaryFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.IdentifiableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferenceFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.SecurityFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ViewFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager;
+import org.eclipse.basyx.aas.metamodel.api.IAssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.api.parts.IConceptDictionary;
+import org.eclipse.basyx.aas.metamodel.api.parts.IView;
+import org.eclipse.basyx.aas.metamodel.api.security.ISecurity;
+import org.eclipse.basyx.aas.metamodel.facade.parts.ConceptDictionaryFacade;
+import org.eclipse.basyx.aas.metamodel.facade.parts.ViewFacade;
+import org.eclipse.basyx.aas.metamodel.facade.security.SecurityFacade;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IAdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.connected.ConnectedSubModel;
+import org.eclipse.basyx.submodel.metamodel.connected.ConnectedVABModelMap;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.IdentifiableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.reference.ReferenceFacade;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 
 /**
  * "Connected" implementation of IAssetAdministrationShell
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/AssetAdministrationShellFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/AssetAdministrationShellFacade.java
similarity index 81%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/AssetAdministrationShellFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/AssetAdministrationShellFacade.java
index aac1107..1c80e6a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/AssetAdministrationShellFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/AssetAdministrationShellFacade.java
@@ -1,20 +1,20 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.aas.metamodel.facade;
 
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.IAssetAdministrationShell;
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IConceptDictionary;
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IView;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.security.ISecurity;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.Identifier;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.AdministrativeInformation;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
+import org.eclipse.basyx.aas.metamodel.api.IAssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.api.parts.IConceptDictionary;
+import org.eclipse.basyx.aas.metamodel.api.parts.IView;
+import org.eclipse.basyx.aas.metamodel.api.security.ISecurity;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.AdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
 
 /**
  * Facade providing access to a map containing the AssetAdministrationShell
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/DataSpecificationFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/dataspecification/DataSpecificationFacade.java
similarity index 91%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/DataSpecificationFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/dataspecification/DataSpecificationFacade.java
index c12022d..4df8fb1 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/DataSpecificationFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/dataspecification/DataSpecificationFacade.java
@@ -1,10 +1,10 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.aas.metamodel.facade.dataspecification;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.dataspecification.IDataSpecification;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.dataspecification.DataSpecification;
+import org.eclipse.basyx.aas.metamodel.api.dataspecification.IDataSpecification;
+import org.eclipse.basyx.aas.metamodel.map.dataspecification.DataSpecification;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
 
 /**
  * Facade providing access to a map containing the DataSpecification structure
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/AssetFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/parts/AssetFacade.java
similarity index 74%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/AssetFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/parts/AssetFacade.java
index d64942d..c92bdae 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/AssetFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/parts/AssetFacade.java
@@ -1,18 +1,18 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.aas.metamodel.facade.parts;
 
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IAsset;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IAdministrativeInformation;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.Identifier;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts.Asset;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.AdministrativeInformation;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind.HasKind;
+import org.eclipse.basyx.aas.metamodel.api.parts.IAsset;
+import org.eclipse.basyx.aas.metamodel.map.parts.Asset;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IAdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.AdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind.HasKind;
 
 /**
  * Facade providing access to a map containing the Asset structure
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/ConceptDescriptionFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/parts/ConceptDescriptionFacade.java
similarity index 73%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/ConceptDescriptionFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/parts/ConceptDescriptionFacade.java
index cfe468f..f57f600 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/ConceptDescriptionFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/parts/ConceptDescriptionFacade.java
@@ -1,19 +1,19 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.aas.metamodel.facade.parts;
 
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.identifier.IIdentifier;
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IConceptDescription;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IAdministrativeInformation;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.Identifier;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts.ConceptDescription;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.AdministrativeInformation;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
+import org.eclipse.basyx.aas.metamodel.api.parts.IConceptDescription;
+import org.eclipse.basyx.aas.metamodel.map.parts.ConceptDescription;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IAdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.AdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
 
 /**
  * Facade providing access to a map containing the ConceptDescription structure
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/ConceptDictionaryFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/parts/ConceptDictionaryFacade.java
similarity index 79%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/ConceptDictionaryFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/parts/ConceptDictionaryFacade.java
index 15275a0..4189f3a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/ConceptDictionaryFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/parts/ConceptDictionaryFacade.java
@@ -1,13 +1,13 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.aas.metamodel.facade.parts;
 
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IConceptDictionary;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts.ConceptDictionary;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
+import org.eclipse.basyx.aas.metamodel.api.parts.IConceptDictionary;
+import org.eclipse.basyx.aas.metamodel.map.parts.ConceptDictionary;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
 
 /**
  * Facade providing access to a map containing the ConceptDictionary structure
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/ViewFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/parts/ViewFacade.java
similarity index 78%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/ViewFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/parts/ViewFacade.java
index 2fb4d19..37ac8ae 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/ViewFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/parts/ViewFacade.java
@@ -1,14 +1,14 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.aas.metamodel.facade.parts;
 
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IView;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts.View;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasSemantics;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
+import org.eclipse.basyx.aas.metamodel.api.parts.IView;
+import org.eclipse.basyx.aas.metamodel.map.parts.View;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
 
 /**
  * Facade providing access to a map containing the View structure
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/AccessControlPolicyPointsFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/policypoints/AccessControlPolicyPointsFacade.java
similarity index 85%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/AccessControlPolicyPointsFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/policypoints/AccessControlPolicyPointsFacade.java
index 44e23fe..8f256dd 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/AccessControlPolicyPointsFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/policypoints/AccessControlPolicyPointsFacade.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.aas.metamodel.facade.policypoints;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.policypoints.IAccessControlPolicyPoints;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.policypoints.AccessControlPolicyPoints;
+import org.eclipse.basyx.aas.metamodel.api.policypoints.IAccessControlPolicyPoints;
+import org.eclipse.basyx.aas.metamodel.map.policypoints.AccessControlPolicyPoints;
 
 /**
  * Facade providing access to a map containing the AccessControlPolicyPoints
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/SecurityFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/security/SecurityFacade.java
similarity index 78%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/SecurityFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/security/SecurityFacade.java
index 7efa81a..7196323 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/SecurityFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/facade/security/SecurityFacade.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.aas.metamodel.facade.security;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.security.ISecurity;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.security.Security;
+import org.eclipse.basyx.aas.metamodel.api.security.ISecurity;
+import org.eclipse.basyx.aas.metamodel.map.security.Security;
 
 /**
  * Facade providing access to a map containing the Security structure
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/AssetAdministrationShell.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/AssetAdministrationShell.java
similarity index 79%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/AssetAdministrationShell.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/AssetAdministrationShell.java
index fe44cfc..2f13246 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/AssetAdministrationShell.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/AssetAdministrationShell.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas;
+package org.eclipse.basyx.aas.metamodel.map;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -8,29 +8,30 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.IAssetAdministrationShell;
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.identifier.IIdentifier;
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IConceptDictionary;
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IView;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IAdministrativeInformation;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.security.ISecurity;
-import org.eclipse.basyx.aas.impl.metamodel.facades.AssetAdministrationShellFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.IdentifiableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.VABModelMap;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.SubmodelDescriptor;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts.ConceptDictionary;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts.View;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Key;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.enums.KeyElements;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.enums.KeyType;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.security.Security;
+import org.eclipse.basyx.aas.metamodel.api.IAssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.api.parts.IConceptDictionary;
+import org.eclipse.basyx.aas.metamodel.api.parts.IView;
+import org.eclipse.basyx.aas.metamodel.api.security.ISecurity;
+import org.eclipse.basyx.aas.metamodel.facade.AssetAdministrationShellFacade;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.parts.ConceptDictionary;
+import org.eclipse.basyx.aas.metamodel.map.parts.View;
+import org.eclipse.basyx.aas.metamodel.map.security.Security;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IAdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.IdentifiableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.map.reference.enums.KeyType;
+import org.eclipse.basyx.vab.model.VABModelMap;
 
 /**
  * AssetAdministrationShell class <br/>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/dataspecification/DataSpecification.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/dataspecification/DataSpecification.java
similarity index 90%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/dataspecification/DataSpecification.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/dataspecification/DataSpecification.java
index 701b7b6..50b90b1 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/dataspecification/DataSpecification.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/dataspecification/DataSpecification.java
@@ -1,12 +1,12 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.dataspecification;
+package org.eclipse.basyx.aas.metamodel.map.dataspecification;
 
 import java.util.HashMap;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.dataspecification.IDataSpecification;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.facades.DataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
+import org.eclipse.basyx.aas.metamodel.api.dataspecification.IDataSpecification;
+import org.eclipse.basyx.aas.metamodel.facade.dataspecification.DataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
 
 /**
  * DataSpecification class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/descriptor/AASDescriptor.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/descriptor/AASDescriptor.java
similarity index 90%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/descriptor/AASDescriptor.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/descriptor/AASDescriptor.java
index a5249b4..8d922ef 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/descriptor/AASDescriptor.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/descriptor/AASDescriptor.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor;
+package org.eclipse.basyx.aas.metamodel.map.descriptor;
 
 import java.util.Arrays;
 import java.util.Collection;
@@ -8,14 +8,14 @@
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.Identifier;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts.Asset;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.AdministrativeInformation;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.parts.Asset;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.AdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Description;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
 
 
 /**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/modelurn/ModelUrn.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/descriptor/ModelUrn.java
similarity index 97%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/modelurn/ModelUrn.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/descriptor/ModelUrn.java
index 8d4e0b2..7024396 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/modelurn/ModelUrn.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/descriptor/ModelUrn.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.modelurn;
+package org.eclipse.basyx.aas.metamodel.map.descriptor;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/descriptor/SubmodelDescriptor.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/descriptor/SubmodelDescriptor.java
similarity index 86%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/descriptor/SubmodelDescriptor.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/descriptor/SubmodelDescriptor.java
index bdd62fa..faba12f 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/descriptor/SubmodelDescriptor.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/descriptor/SubmodelDescriptor.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor;
+package org.eclipse.basyx.aas.metamodel.map.descriptor;
 
 import java.util.Arrays;
 import java.util.HashMap;
@@ -6,10 +6,11 @@
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.Identifier;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.AdministrativeInformation;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind.Kind;
+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.AdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Description;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind.Kind;
 
 
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/parts/Asset.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/parts/Asset.java
similarity index 76%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/parts/Asset.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/parts/Asset.java
index 0a80bcb..a974dbb 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/parts/Asset.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/parts/Asset.java
@@ -1,21 +1,21 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts;
+package org.eclipse.basyx.aas.metamodel.map.parts;
 
 import java.util.HashMap;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.identifier.IIdentifier;
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IAsset;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IAdministrativeInformation;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.facades.AssetFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasKindFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.IdentifiableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind.HasKind;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
+import org.eclipse.basyx.aas.metamodel.api.parts.IAsset;
+import org.eclipse.basyx.aas.metamodel.facade.parts.AssetFacade;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IAdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.IdentifiableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.haskind.HasKindFacade;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind.HasKind;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
 
 /**
  * Asset class as described in DAAS document<br/>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/parts/ConceptDescription.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/parts/ConceptDescription.java
similarity index 74%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/parts/ConceptDescription.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/parts/ConceptDescription.java
index 15f31bc..683f85e 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/parts/ConceptDescription.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/parts/ConceptDescription.java
@@ -1,19 +1,19 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts;
+package org.eclipse.basyx.aas.metamodel.map.parts;
 
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.identifier.IIdentifier;
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IConceptDescription;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IAdministrativeInformation;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ConceptDescriptionFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.IdentifiableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
+import org.eclipse.basyx.aas.metamodel.api.parts.IConceptDescription;
+import org.eclipse.basyx.aas.metamodel.facade.parts.ConceptDescriptionFacade;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IAdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.IdentifiableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
 
 /**
  * ConceptDescription class as described in DAAS document
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/parts/ConceptDictionary.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/parts/ConceptDictionary.java
similarity index 81%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/parts/ConceptDictionary.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/parts/ConceptDictionary.java
index 0a5c5df..391d099 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/parts/ConceptDictionary.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/parts/ConceptDictionary.java
@@ -1,14 +1,14 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts;
+package org.eclipse.basyx.aas.metamodel.map.parts;
 
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IConceptDictionary;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ConceptDictionaryFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
+import org.eclipse.basyx.aas.metamodel.api.parts.IConceptDictionary;
+import org.eclipse.basyx.aas.metamodel.facade.parts.ConceptDictionaryFacade;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
 
 /**
  * ConceptDictionary class as described in DAAS document
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/parts/View.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/parts/View.java
similarity index 75%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/parts/View.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/parts/View.java
index ae6492c..88a5d2f 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/parts/View.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/parts/View.java
@@ -1,19 +1,19 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.parts;
+package org.eclipse.basyx.aas.metamodel.map.parts;
 
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.parts.IView;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasSemanticsFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ViewFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasSemantics;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
+import org.eclipse.basyx.aas.metamodel.api.parts.IView;
+import org.eclipse.basyx.aas.metamodel.facade.parts.ViewFacade;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasSemanticsFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
 
 /**
  * View as defined by DAAS document. <br/>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/policypoints/AccessControlPolicyPoints.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/policypoints/AccessControlPolicyPoints.java
similarity index 88%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/policypoints/AccessControlPolicyPoints.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/policypoints/AccessControlPolicyPoints.java
index 1c65d38..0d0f171 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/policypoints/AccessControlPolicyPoints.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/policypoints/AccessControlPolicyPoints.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.policypoints;
+package org.eclipse.basyx.aas.metamodel.map.policypoints;
 
 import java.util.HashMap;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.policypoints.IAccessControlPolicyPoints;
-import org.eclipse.basyx.aas.impl.metamodel.facades.AccessControlPolicyPointsFacade;
+import org.eclipse.basyx.aas.metamodel.api.policypoints.IAccessControlPolicyPoints;
+import org.eclipse.basyx.aas.metamodel.facade.policypoints.AccessControlPolicyPointsFacade;
 
 /**
  * Security class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/policypoints/PolicyAdministrationPoint.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/policypoints/PolicyAdministrationPoint.java
similarity index 62%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/policypoints/PolicyAdministrationPoint.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/policypoints/PolicyAdministrationPoint.java
index d96f426..bbe2f24 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/policypoints/PolicyAdministrationPoint.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/policypoints/PolicyAdministrationPoint.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.policypoints;
+package org.eclipse.basyx.aas.metamodel.map.policypoints;
 
 /**
  * Security class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/policypoints/PolicyDecisionPoint.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/policypoints/PolicyDecisionPoint.java
similarity index 61%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/policypoints/PolicyDecisionPoint.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/policypoints/PolicyDecisionPoint.java
index 255bdaf..33a8994 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/policypoints/PolicyDecisionPoint.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/policypoints/PolicyDecisionPoint.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.policypoints;
+package org.eclipse.basyx.aas.metamodel.map.policypoints;
 
 /**
  * Security class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/policypoints/PolicyEnforcementPoint.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/policypoints/PolicyEnforcementPoint.java
similarity index 62%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/policypoints/PolicyEnforcementPoint.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/policypoints/PolicyEnforcementPoint.java
index a21a62b..eaacae3 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/policypoints/PolicyEnforcementPoint.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/policypoints/PolicyEnforcementPoint.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.policypoints;
+package org.eclipse.basyx.aas.metamodel.map.policypoints;
 
 /**
  * Security class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/policypoints/PolicyInformationPoints.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/policypoints/PolicyInformationPoints.java
similarity index 62%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/policypoints/PolicyInformationPoints.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/policypoints/PolicyInformationPoints.java
index db0feca..19dcd5b 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/policypoints/PolicyInformationPoints.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/policypoints/PolicyInformationPoints.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.policypoints;
+package org.eclipse.basyx.aas.metamodel.map.policypoints;
 
 /**
  * Security class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/security/Security.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/security/Security.java
similarity index 82%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/security/Security.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/security/Security.java
index 5e6780e..5324b98 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/security/Security.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/metamodel/map/security/Security.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.security;
+package org.eclipse.basyx.aas.metamodel.map.security;
 
 import java.util.HashMap;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.security.ISecurity;
-import org.eclipse.basyx.aas.impl.metamodel.facades.SecurityFacade;
+import org.eclipse.basyx.aas.metamodel.api.security.ISecurity;
+import org.eclipse.basyx.aas.metamodel.facade.security.SecurityFacade;
 
 /**
  * KeyElements as defined in DAAS document
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/registry/IAASRegistryService.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/registration/api/IAASRegistryService.java
similarity index 75%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/registry/IAASRegistryService.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/registration/api/IAASRegistryService.java
index bfebfc1..a15ba57 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/registry/IAASRegistryService.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/registration/api/IAASRegistryService.java
@@ -1,7 +1,7 @@
-package org.eclipse.basyx.aas.api.registry;
+package org.eclipse.basyx.aas.registration.api;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
 
 
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/registry/AASHTTPRegistryProxy.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/registration/httpproxy/AASHTTPRegistryProxy.java
similarity index 82%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/registry/AASHTTPRegistryProxy.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/registration/httpproxy/AASHTTPRegistryProxy.java
index dbb3c02..e6b44ae 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/registry/AASHTTPRegistryProxy.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/registration/httpproxy/AASHTTPRegistryProxy.java
@@ -1,12 +1,13 @@
-package org.eclipse.basyx.aas.api.registry;
+package org.eclipse.basyx.aas.registration.httpproxy;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
-import org.eclipse.basyx.vab.core.directory.VABHTTPDirectoryProxy;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
+import org.eclipse.basyx.vab.directory.http.VABHTTPDirectoryProxy;
 
 
 
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/support/vab/stub/AASRegistryStub.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/registration/preconfigured/PreconfiguredRegistry.java
similarity index 66%
rename from sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/support/vab/stub/AASRegistryStub.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/registration/preconfigured/PreconfiguredRegistry.java
index 6a5631d..494d67e 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/support/vab/stub/AASRegistryStub.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/registration/preconfigured/PreconfiguredRegistry.java
@@ -1,13 +1,16 @@
-package org.eclipse.basyx.testsuite.support.vab.stub;
+package org.eclipse.basyx.aas.registration.preconfigured;
 
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
-import org.eclipse.basyx.aas.api.registry.IAASRegistryService;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor;
+import org.eclipse.basyx.aas.metamodel.map.descriptor.ModelUrn;
+import org.eclipse.basyx.aas.registration.api.IAASRegistryService;
 
-public class AASRegistryStub implements IAASRegistryService {
+/**
+ * Implements a preconfigured local registry
+ */
+public class PreconfiguredRegistry implements IAASRegistryService {
 	protected Map<String, AASDescriptor> descriptorMap = new HashMap<>();
 
 	@Override
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/AASModelProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/restapi/AASModelProvider.java
similarity index 90%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/AASModelProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/restapi/AASModelProvider.java
index cd1a30c..6a61e40 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/AASModelProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/restapi/AASModelProvider.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.aas.backend.provider;
+package org.eclipse.basyx.aas.restapi;
 
 import java.util.Map;
 
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.provider.lambda.VABLambdaProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProvider;
 
 /**
  * Model provider explicitely meant to implement the access to the AAS object. This excludes access to the submodels,
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/VABMultiAASProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/restapi/VABMultiAASProvider.java
similarity index 96%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/VABMultiAASProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/restapi/VABMultiAASProvider.java
index 06d2648..f1aa6ad 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/VABMultiAASProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/restapi/VABMultiAASProvider.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.aas.backend.provider;
+package org.eclipse.basyx.aas.restapi;
 
 import java.util.HashMap;
 
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 /**
  * Provider, that redirects requests for different Asset Administration Shells.
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/VABMultiSubmodelProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/restapi/VABMultiSubmodelProvider.java
similarity index 95%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/VABMultiSubmodelProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/restapi/VABMultiSubmodelProvider.java
index a094f3c..93171b0 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/VABMultiSubmodelProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/restapi/VABMultiSubmodelProvider.java
@@ -1,13 +1,14 @@
-package org.eclipse.basyx.aas.backend.provider;
+package org.eclipse.basyx.aas.restapi;
 
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.restapi.SubModelProvider;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 /**
  * Provider class that implements the AssetAdministrationShellServices <br />
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformDescription.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformDescription.java
similarity index 83%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformDescription.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformDescription.java
index b85fd0a..d95233e 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformDescription.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformDescription.java
@@ -1,8 +1,8 @@
-package org.eclipse.basyx.vab.provider.xml.transformers;
+package org.eclipse.basyx.submodel.factory.xml;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.Description;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Description;
 
 /**
  * Returns Description Object for the Map with <aas:description>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformHasDataSpecification.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformHasDataSpecification.java
similarity index 80%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformHasDataSpecification.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformHasDataSpecification.java
index 39eed82..da68c95 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformHasDataSpecification.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformHasDataSpecification.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.provider.xml.transformers;
+package org.eclipse.basyx.submodel.factory.xml;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -6,10 +6,10 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IKey;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IKey;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
 
 /**
  * Returns HasDataSpecification Object for the Map with
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformHasKind.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformHasKind.java
similarity index 74%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformHasKind.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformHasKind.java
index 5872faa..5373e8a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformHasKind.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformHasKind.java
@@ -1,8 +1,8 @@
-package org.eclipse.basyx.vab.provider.xml.transformers;
+package org.eclipse.basyx.submodel.factory.xml;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind.HasKind;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind.HasKind;
 
 /**
  * Returns HasKind Object for t he Map with <aas:kind>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformHasSemantics.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformHasSemantics.java
similarity index 78%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformHasSemantics.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformHasSemantics.java
index 95d0bec..aec3b94 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformHasSemantics.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformHasSemantics.java
@@ -1,13 +1,13 @@
-package org.eclipse.basyx.vab.provider.xml.transformers;
+package org.eclipse.basyx.submodel.factory.xml;
 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IKey;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasSemantics;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IKey;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
 
 /**
  * Returns HasSemantics Object for the Map with <aas:semanticId>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformIdentifiable.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformIdentifiable.java
similarity index 90%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformIdentifiable.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformIdentifiable.java
index 51612a4..845afc4 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformIdentifiable.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformIdentifiable.java
@@ -1,8 +1,8 @@
-package org.eclipse.basyx.vab.provider.xml.transformers;
+package org.eclipse.basyx.submodel.factory.xml;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
 
 /**
  * Returns Identifiable Object for the Map with <aas:identification> &
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformKey.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformKey.java
similarity index 81%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformKey.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformKey.java
index 1134261..93fd493 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformKey.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformKey.java
@@ -1,8 +1,8 @@
-package org.eclipse.basyx.vab.provider.xml.transformers;
+package org.eclipse.basyx.submodel.factory.xml;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
 /**
  * Returns Key Object for the Map with <aas:Key>
  * 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformProperty.java
similarity index 92%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformProperty.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformProperty.java
index a5985c7..08cc1ea 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformProperty.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformProperty.java
@@ -1,12 +1,12 @@
-package org.eclipse.basyx.vab.provider.xml.transformers;
+package org.eclipse.basyx.submodel.factory.xml;
 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasSemantics;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
 
 /**
  * Returns HashSet<Property> Object for the Map with <aas:submodelElements>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformSubmodel.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformSubmodel.java
similarity index 75%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformSubmodel.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformSubmodel.java
index ea065f5..c8591cf 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/transformers/TransformSubmodel.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/factory/xml/TransformSubmodel.java
@@ -1,13 +1,13 @@
-package org.eclipse.basyx.vab.provider.xml.transformers;
+package org.eclipse.basyx.submodel.factory.xml;
 
 import java.util.HashSet;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasSemantics;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind.HasKind;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind.HasKind;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
 
 /**
  * Returns SubModel Object for the Map with <aas:submodels>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/IElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/IElement.java
similarity index 87%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/IElement.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/IElement.java
index 6328cd7..8598892 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/IElement.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/IElement.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab;
+package org.eclipse.basyx.submodel.metamodel.api;
 
 
 /**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/ISubModel.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/ISubModel.java
new file mode 100644
index 0000000..261adf6
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/ISubModel.java
@@ -0,0 +1,24 @@
+package org.eclipse.basyx.submodel.metamodel.api;
+
+import java.util.Map;
+
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IHasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IHasSemantics;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IIdentifiable;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.haskind.IHasKind;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.IProperty;
+import org.eclipse.basyx.submodel.metamodel.map.IVABElementContainer;
+
+/**
+ * Interface API for sub models
+ * 
+ * @author kuhn
+ *
+ */
+public interface ISubModel extends IElement, IHasSemantics, IIdentifiable, IHasDataSpecification, IHasKind, IVABElementContainer {
+
+	public void setProperties(Map<String, IProperty> properties);
+
+	public void setOperations(Map<String, IOperation> operations);
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/identifier/IIdentifier.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/identifier/IIdentifier.java
similarity index 79%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/identifier/IIdentifier.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/identifier/IIdentifier.java
index 032d2e1..b5b2f58 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/identifier/IIdentifier.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/identifier/IIdentifier.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.identifier;
+package org.eclipse.basyx.submodel.metamodel.api.identifier;
 /**
  * Interface for class Identifier
  *  
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/IAdministrativeInformation.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/IAdministrativeInformation.java
similarity index 77%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/IAdministrativeInformation.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/IAdministrativeInformation.java
index ec81603..edd1307 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/IAdministrativeInformation.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/IAdministrativeInformation.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.qualifier;
+package org.eclipse.basyx.submodel.metamodel.api.qualifier;
 
 
 /**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/IHasDataSpecification.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/IHasDataSpecification.java
similarity index 60%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/IHasDataSpecification.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/IHasDataSpecification.java
index fe5fc4e..3172e20 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/IHasDataSpecification.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/IHasDataSpecification.java
@@ -1,8 +1,8 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.qualifier;
+package org.eclipse.basyx.submodel.metamodel.api.qualifier;
 
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
 
 /**
  * Interface for HasDataSpecification
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/IHasSemantics.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/IHasSemantics.java
new file mode 100644
index 0000000..9d016b4
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/IHasSemantics.java
@@ -0,0 +1,12 @@
+package org.eclipse.basyx.submodel.metamodel.api.qualifier;
+
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+/**
+ * Interface for HasSemantics
+ * 
+ * @author rajashek
+ *
+*/
+public interface IHasSemantics  {
+	public IReference getSemanticId();
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/IIdentifiable.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/IIdentifiable.java
similarity index 62%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/IIdentifiable.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/IIdentifiable.java
index 37b3b58..2a831f7 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/IIdentifiable.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/IIdentifiable.java
@@ -1,6 +1,6 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.qualifier;
+package org.eclipse.basyx.submodel.metamodel.api.qualifier;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
 
 /**
  * Interface for Identifiable
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/IReferable.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/IReferable.java
similarity index 66%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/IReferable.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/IReferable.java
index 382b920..ca71bea 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/IReferable.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/IReferable.java
@@ -1,6 +1,6 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.qualifier;
+package org.eclipse.basyx.submodel.metamodel.api.qualifier;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
 
 /**
  * Interface for Referable the function names are self explanatory
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/haskind/IHasKind.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/haskind/IHasKind.java
similarity index 65%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/haskind/IHasKind.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/haskind/IHasKind.java
index 2a819a4..a26fd33 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/haskind/IHasKind.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/haskind/IHasKind.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.qualifier.haskind;
+package org.eclipse.basyx.submodel.metamodel.api.qualifier.haskind;
 
 /**
  * Interface for HasKind
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/qualifiable/IConstraint.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/qualifiable/IConstraint.java
new file mode 100644
index 0000000..736af18
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/qualifiable/IConstraint.java
@@ -0,0 +1,9 @@
+package org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable;
+/**
+ * Interface for Constraint
+ * @author rajashek
+ *
+*/
+public interface IConstraint {
+
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/qualifiable/IFormula.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/qualifiable/IFormula.java
new file mode 100644
index 0000000..1a2a13b
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/qualifiable/IFormula.java
@@ -0,0 +1,13 @@
+package org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable;
+
+import java.util.Set;
+
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+/**
+ * Interface for Formula
+ * @author rajashek
+ *
+*/
+public interface IFormula {
+	public  Set<IReference> getDependsOn();
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/qualifiable/IQualifiable.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/qualifiable/IQualifiable.java
similarity index 68%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/qualifiable/IQualifiable.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/qualifiable/IQualifiable.java
index 083c771..b2dba87 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/qualifier/qualifiable/IQualifiable.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/qualifiable/IQualifiable.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable;
+package org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable;
 
 import java.util.Set;
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/qualifiable/IQualifier.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/qualifiable/IQualifier.java
new file mode 100644
index 0000000..72a8c74
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/qualifier/qualifiable/IQualifier.java
@@ -0,0 +1,19 @@
+package org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable;
+
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IHasSemantics;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+
+/**
+ * Interface for Qualifier
+ * 
+ * @author rajashek
+ *
+ */
+
+public interface IQualifier extends IHasSemantics {
+	public String getQualifierType();
+
+	public Object getQualifierValue();
+
+	public IReference getQualifierValueId();
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/reference/IKey.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/reference/IKey.java
similarity index 68%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/reference/IKey.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/reference/IKey.java
index e519b2f..7e7704e 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/reference/IKey.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/reference/IKey.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.reference;
+package org.eclipse.basyx.submodel.metamodel.api.reference;
 
 /**
  * Provides access to values of Key elements as provided by DAAS document
@@ -11,7 +11,7 @@
 	/**
 	 * 
 	 * @return See
-	 *         {@link org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.enums.KeyElements
+	 *         {@link org.eclipse.basyx.submodel.metamodel.map.reference.enums.KeyElements
 	 *         KeyElements} and its children for possible values
 	 */
 	public String getType();
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/reference/IReference.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/reference/IReference.java
similarity index 89%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/reference/IReference.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/reference/IReference.java
index 65d244f..e602d77 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/reference/IReference.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/reference/IReference.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.reference;
+package org.eclipse.basyx.submodel.metamodel.api.reference;
 
 import java.util.List;
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/IDataElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/IDataElement.java
new file mode 100644
index 0000000..eb45797
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/IDataElement.java
@@ -0,0 +1,5 @@
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement;
+
+public interface IDataElement extends ISubmodelElement {
+
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/IReferenceElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/IReferenceElement.java
similarity index 60%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/IReferenceElement.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/IReferenceElement.java
index ca6fb56..4b70dfd 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/IReferenceElement.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/IReferenceElement.java
@@ -1,6 +1,6 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement;
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
 /**
  * Interface for ReferenceElement
  * @author rajashek
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/IRelationshipElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/IRelationshipElement.java
similarity index 68%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/IRelationshipElement.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/IRelationshipElement.java
index b1e7004..b7b5902 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/IRelationshipElement.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/IRelationshipElement.java
@@ -1,6 +1,6 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement;
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
 
 /**
  * Interface for DataSpecification
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/ISubmodelElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/ISubmodelElement.java
new file mode 100644
index 0000000..fd7e19c
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/ISubmodelElement.java
@@ -0,0 +1,12 @@
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement;
+
+import org.eclipse.basyx.submodel.metamodel.api.IElement;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IHasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IHasSemantics;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IReferable;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.haskind.IHasKind;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IQualifiable;
+
+public interface ISubmodelElement extends IElement,IHasDataSpecification,IReferable,IQualifiable,IHasSemantics,IHasKind {
+
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/ISubmodelElementCollection.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/ISubmodelElementCollection.java
similarity index 89%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/ISubmodelElementCollection.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/ISubmodelElementCollection.java
index 0bcea15..d9eef7f 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/ISubmodelElementCollection.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/ISubmodelElementCollection.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement;
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement;
 
 import java.util.List;
 import java.util.Map;
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/operation/IOperation.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/operation/IOperation.java
similarity index 77%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/operation/IOperation.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/operation/IOperation.java
index fe76e71..4ffd06b 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/operation/IOperation.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/operation/IOperation.java
@@ -1,10 +1,10 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation;
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation;
 
 import java.util.List;
 import java.util.function.Function;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.vab.IElement;
+import org.eclipse.basyx.submodel.metamodel.api.IElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
 
 /**
  * Interface for IElement operations
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/operation/IOperationVariable.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/operation/IOperationVariable.java
new file mode 100644
index 0000000..cba6b00
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/operation/IOperationVariable.java
@@ -0,0 +1,11 @@
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation;
+
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+/**
+ * Interface for OperationVariable
+ * @author rajashek
+ *
+*/
+public interface IOperationVariable extends ISubmodelElement {
+	public ISubmodelElement getValue();
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/ICollectionProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/ICollectionProperty.java
similarity index 84%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/ICollectionProperty.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/ICollectionProperty.java
index ad1323c..aa29a2a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/ICollectionProperty.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/ICollectionProperty.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property;
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement.property;
 
 import java.util.Collection;
 
-import org.eclipse.basyx.aas.api.exception.ServerException;
-import org.eclipse.basyx.aas.api.exception.TypeMismatchException;
+import org.eclipse.basyx.vab.exception.ServerException;
+import org.eclipse.basyx.vab.exception.TypeMismatchException;
 
 /**
  * Interface for AAS properties that carry a collection
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/IContainerProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/IContainerProperty.java
new file mode 100644
index 0000000..116722f
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/IContainerProperty.java
@@ -0,0 +1,12 @@
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement.property;
+
+import org.eclipse.basyx.submodel.metamodel.map.IVABElementContainer;
+
+/**
+ * Interface for AAS properties that contain other properties
+ * 
+ * @author schnicke
+ *
+ */
+public interface IContainerProperty extends IProperty, IVABElementContainer {
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/IMapProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/IMapProperty.java
similarity index 84%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/IMapProperty.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/IMapProperty.java
index bde52be..8c629b3 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/IMapProperty.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/IMapProperty.java
@@ -1,10 +1,10 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property;
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement.property;
 
 import java.util.Collection;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.exception.ServerException;
-import org.eclipse.basyx.aas.api.exception.TypeMismatchException;
+import org.eclipse.basyx.vab.exception.ServerException;
+import org.eclipse.basyx.vab.exception.TypeMismatchException;
 
 /**
  * Interface for AAS properties that carry a map
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/IProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/IProperty.java
new file mode 100644
index 0000000..4699b0b
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/IProperty.java
@@ -0,0 +1,19 @@
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement.property;
+
+import org.eclipse.basyx.submodel.metamodel.api.IElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
+
+/**
+ * Interface for IElement properties
+ * 
+ * @author kuhn
+ *
+ */
+public interface IProperty extends IElement, IDataElement {
+
+	public PropertyType getPropertyType();
+	
+	public void setValueId(String obj);
+
+	public String getValueId();
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/IReferenceElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/IReferenceElement.java
new file mode 100644
index 0000000..5e121c2
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/IReferenceElement.java
@@ -0,0 +1,19 @@
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement.property;
+
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
+
+/**
+ * Interface for ReferenceElement
+ * @author rajashek
+ *
+*/
+
+public interface IReferenceElement extends IDataElement {
+	
+	
+	public void setValue(IReference ref);
+	
+	public IReference getValue();
+
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/ISingleProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/ISingleProperty.java
similarity index 76%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/ISingleProperty.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/ISingleProperty.java
index b4e8b48..1f2f572 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/ISingleProperty.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/ISingleProperty.java
@@ -1,6 +1,6 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property;
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement.property;
 
-import org.eclipse.basyx.aas.api.exception.ServerException;
+import org.eclipse.basyx.vab.exception.ServerException;
 
 /**
  * Interface for AAS properties that carry a single value
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/PropertyType.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/PropertyType.java
new file mode 100644
index 0000000..08578cf
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/PropertyType.java
@@ -0,0 +1,5 @@
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement.property;
+
+public enum PropertyType {
+	Single, Collection, Map, Container
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/blob/IBlob.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/blob/IBlob.java
similarity index 61%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/blob/IBlob.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/blob/IBlob.java
index 6cfa925..530c85a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/blob/IBlob.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/blob/IBlob.java
@@ -1,6 +1,6 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.blob;
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.blob;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
 
 /**
  * Interface for Blob
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/file/IFile.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/file/IFile.java
similarity index 61%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/file/IFile.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/file/IFile.java
index 6af520c..9051ec2 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/metamodel/aas/submodelelement/property/file/IFile.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/api/submodelelement/property/file/IFile.java
@@ -1,6 +1,6 @@
-package org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.file;
+package org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.file;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
 
 
 /**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/ConnectedElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedElement.java
similarity index 79%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/ConnectedElement.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedElement.java
index 8bb062f..3a9fdf3 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/ConnectedElement.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedElement.java
@@ -1,27 +1,27 @@
-package org.eclipse.basyx.aas.backend.connected;
+package org.eclipse.basyx.submodel.metamodel.connected;
 
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.VABModelMap;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
-import org.eclipse.basyx.vab.IElement;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.api.IElement;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.vab.model.VABModelMap;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 
 /**
  * Conntected Element superclass; Extends HashMap for local caching used for c# proxy
+ * 
  * @author pschorn
  *
  */
 public class ConnectedElement implements IElement {
 
 	private VABElementProxy proxy;
-	
+
 	/*
 	 * Stores element meta-information if retrieved from c# sdk
 	 */
-	private HashMap<String, Object> localInformation = new HashMap<String, Object> ();
-	
+	private HashMap<String, Object> localInformation = new HashMap<String, Object>();
 
 	public VABElementProxy getProxy() {
 		return proxy;
@@ -31,15 +31,15 @@
 		super();
 		this.proxy = proxy;
 	}
-	
+
 	protected void putLocal(String key, Object value) {
 		this.localInformation.put(key, value);
 	}
-	
+
 	public void putAllLocal(Map<String, Object> opNode) {
 		this.localInformation.putAll(opNode);
 	}
-	
+
 	protected Object getLocal(String key) {
 		return this.localInformation.get(key);
 	}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedSubModel.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedSubModel.java
new file mode 100644
index 0000000..ea1e869
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedSubModel.java
@@ -0,0 +1,111 @@
+package org.eclipse.basyx.submodel.metamodel.connected;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IAdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.IProperty;
+import org.eclipse.basyx.submodel.metamodel.connected.facades.ConnectedVABElementContainerFacade;
+import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.property.ConnectedPropertyFactory;
+import org.eclipse.basyx.submodel.metamodel.facade.identifier.IdentifierFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.AdministrativeInformationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.haskind.HasKindFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.reference.ReferenceFacade;
+import org.eclipse.basyx.submodel.metamodel.map.IVABElementContainer;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+
+/**
+ * "Connected" implementation of SubModel
+ * 
+ * @author rajashek
+ *
+ */
+public class ConnectedSubModel extends ConnectedVABModelMap<Object> implements IVABElementContainer, ISubModel {
+
+	ConnectedPropertyFactory factory = new ConnectedPropertyFactory();
+	ConnectedVABElementContainerFacade facade;
+
+	public ConnectedSubModel(VABElementProxy proxy) {
+		super(proxy);
+		facade = new ConnectedVABElementContainerFacade(proxy);
+	}
+
+	@Override
+	public IReference getSemanticId() {
+		return new ReferenceFacade(getElem());
+	}
+
+	@Override
+	public IAdministrativeInformation getAdministration() {
+		return new AdministrativeInformationFacade(getElem());
+	}
+
+	@Override
+	public IIdentifier getIdentification() {
+		return new IdentifierFacade(getElem());
+	}
+
+	@Override
+	public Set<IReference> getDataSpecificationReferences() {
+		return new HasDataSpecificationFacade(getElem()).getDataSpecificationReferences();
+	}
+
+	@Override
+	public String getHasKindReference() {
+		return new HasKindFacade(getElem()).getHasKindReference();
+	}
+
+	@Override
+	public void setProperties(Map<String, IProperty> properties) {
+		throwNotSupportedException();
+	}
+
+	@Override
+	public void setOperations(Map<String, IOperation> operations) {
+		throwNotSupportedException();
+	}
+
+	@Override
+	public String getIdshort() {
+		return (String) getElem().get(Referable.IDSHORT);
+	}
+
+	@Override
+	public String getCategory() {
+		return (String) getElem().get(Referable.CATEGORY);
+	}
+
+	@Override
+	public String getDescription() {
+		return (String) getElem().get(Referable.DESCRIPTION);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public IReference getParent() {
+		return new ReferenceFacade((Map<String, Object>) getElem().getPath(Referable.PARENT));
+	}
+
+	@Override
+	public void addSubModelElement(ISubmodelElement element) {
+		facade.addSubModelElement(element);
+	}
+
+	@Override
+	public Map<String, IDataElement> getDataElements() {
+		return facade.getDataElements();
+	}
+
+	@Override
+	public Map<String, IOperation> getOperations() {
+		return facade.getOperations();
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/ConnectedVABModelMap.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedVABModelMap.java
similarity index 68%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/ConnectedVABModelMap.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedVABModelMap.java
index 56acccf..6d74a29 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/ConnectedVABModelMap.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/ConnectedVABModelMap.java
@@ -1,6 +1,6 @@
-package org.eclipse.basyx.aas.backend.connected;
+package org.eclipse.basyx.submodel.metamodel.connected;
 
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 /**
  * "Connected" implementation of VABModelMap<V extends Object>
  * @author rajashek
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/facades/ConnectedVABElementContainerFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/facades/ConnectedVABElementContainerFacade.java
similarity index 71%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/facades/ConnectedVABElementContainerFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/facades/ConnectedVABElementContainerFacade.java
index 649908f..9dc0e1f 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/facades/ConnectedVABElementContainerFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/facades/ConnectedVABElementContainerFacade.java
@@ -1,20 +1,20 @@
-package org.eclipse.basyx.aas.backend.connected.facades;
+package org.eclipse.basyx.submodel.metamodel.connected.facades;
 
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperation;
-import org.eclipse.basyx.aas.backend.connected.ConnectedVABModelMap;
-import org.eclipse.basyx.aas.backend.connected.aas.submodelelement.operation.ConnectedOperation;
-import org.eclipse.basyx.aas.backend.connected.aas.submodelelement.property.ConnectedPropertyFactory;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.IVABElementContainer;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
+import org.eclipse.basyx.submodel.metamodel.connected.ConnectedVABModelMap;
+import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.operation.ConnectedOperation;
+import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.property.ConnectedPropertyFactory;
+import org.eclipse.basyx.submodel.metamodel.map.IVABElementContainer;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
 
 /**
  * Facade providing access to a remove VABElementContainer
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/ConnectedDataElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedDataElement.java
similarity index 60%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/ConnectedDataElement.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedDataElement.java
index f1717c6..3f2792f 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/ConnectedDataElement.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedDataElement.java
@@ -1,16 +1,16 @@
-package org.eclipse.basyx.aas.backend.connected.aas.submodelelement;
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement;
 
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IConstraint;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasKindFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasSemanticsFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.QualifiableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IConstraint;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasSemanticsFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.haskind.HasKindFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.qualifiable.QualifiableFacade;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 
 /**
  * "Connected" implementation of DataElement
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/ConnectedRelationshipElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedRelationshipElement.java
similarity index 66%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/ConnectedRelationshipElement.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedRelationshipElement.java
index 07cc2bc..c311c45 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/ConnectedRelationshipElement.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedRelationshipElement.java
@@ -1,19 +1,19 @@
-package org.eclipse.basyx.aas.backend.connected.aas.submodelelement;
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement;
 
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IConstraint;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IRelationshipElement;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasKindFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasSemanticsFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.QualifiableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferenceFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.RelationshipElement;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IConstraint;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IRelationshipElement;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasSemanticsFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.haskind.HasKindFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.qualifiable.QualifiableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.reference.ReferenceFacade;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.RelationshipElement;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 
 /**
  * "Connected" implementation of RelationshipElement
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedSubmodelElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedSubmodelElement.java
new file mode 100644
index 0000000..4bae684
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedSubmodelElement.java
@@ -0,0 +1,15 @@
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement;
+
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.connected.ConnectedElement;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+/**
+ * "Connected" implementation of SubmodelElement
+ * @author rajashek
+ *
+ */
+public abstract class ConnectedSubmodelElement extends ConnectedElement implements ISubmodelElement {
+	public ConnectedSubmodelElement(VABElementProxy proxy) {
+		super(proxy);		
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/ConnectedSubmodelElementCollection.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedSubmodelElementCollection.java
similarity index 69%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/ConnectedSubmodelElementCollection.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedSubmodelElementCollection.java
index 9ba2826..68c8b5e 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/ConnectedSubmodelElementCollection.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/ConnectedSubmodelElementCollection.java
@@ -1,22 +1,22 @@
-package org.eclipse.basyx.aas.backend.connected.aas.submodelelement;
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement;
 
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IConstraint;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElementCollection;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasKindFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasSemanticsFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.QualifiableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.SubmodelElementCollection;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IConstraint;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElementCollection;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasSemanticsFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.haskind.HasKindFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.qualifiable.QualifiableFacade;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElementCollection;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 
 /**
  * "Connected" implementation of SubmodelElementCollection
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/operation/ConnectedOperation.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/operation/ConnectedOperation.java
similarity index 71%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/operation/ConnectedOperation.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/operation/ConnectedOperation.java
index a62b324..7882969 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/operation/ConnectedOperation.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/operation/ConnectedOperation.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.backend.connected.aas.submodelelement.operation;
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement.operation;
 
 import java.util.HashMap;
 import java.util.List;
@@ -6,21 +6,21 @@
 import java.util.Set;
 import java.util.function.Function;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IConstraint;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperation;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperationVariable;
-import org.eclipse.basyx.aas.backend.connected.aas.submodelelement.ConnectedSubmodelElement;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasKindFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasSemanticsFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.QualifiableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.operation.Operation;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IConstraint;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperationVariable;
+import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.ConnectedSubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasSemanticsFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.haskind.HasKindFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.qualifiable.QualifiableFacade;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.Operation;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 
 /**
  * "Connected" implementation of IOperation
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedCollectionProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedCollectionProperty.java
similarity index 72%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedCollectionProperty.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedCollectionProperty.java
index 98c0cf2..417bb30 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedCollectionProperty.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedCollectionProperty.java
@@ -1,13 +1,13 @@
-package org.eclipse.basyx.aas.backend.connected.aas.submodelelement.property;
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement.property;
 
 import java.util.Collection;
 
-import org.eclipse.basyx.aas.api.exception.ServerException;
-import org.eclipse.basyx.aas.api.exception.TypeMismatchException;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.ICollectionProperty;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.PropertyType;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.ICollectionProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.PropertyType;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.exception.ServerException;
+import org.eclipse.basyx.vab.exception.TypeMismatchException;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 
 /**
  * Connects to a PropertySingleValued as specified by DAAS containing a
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedContainerProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedContainerProperty.java
new file mode 100644
index 0000000..c308c94
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedContainerProperty.java
@@ -0,0 +1,45 @@
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement.property;
+
+import java.util.Map;
+
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.IContainerProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.PropertyType;
+import org.eclipse.basyx.submodel.metamodel.connected.facades.ConnectedVABElementContainerFacade;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+
+/**
+ * Connects to a ComplexDataProperty as specified by meta model. <br />
+ * Not contained in DAAS meta model
+ * 
+ * @author schnicke
+ *
+ */
+public class ConnectedContainerProperty extends ConnectedProperty implements IContainerProperty {
+
+	ConnectedPropertyFactory factory = new ConnectedPropertyFactory();
+	ConnectedVABElementContainerFacade facade;
+
+	public ConnectedContainerProperty(VABElementProxy proxy) {
+		super(PropertyType.Container, proxy);
+		facade = new ConnectedVABElementContainerFacade(proxy);
+	}
+
+	@Override
+	public void addSubModelElement(ISubmodelElement element) {
+		facade.addSubModelElement(element);
+	}
+
+	@Override
+	public Map<String, IDataElement> getDataElements() {
+		return facade.getDataElements();
+	}
+
+	@Override
+	public Map<String, IOperation> getOperations() {
+		return facade.getOperations();
+	}
+
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedEvent.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedEvent.java
new file mode 100644
index 0000000..1cd9ab8
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedEvent.java
@@ -0,0 +1,9 @@
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement.property;
+
+/**
+ * "Connected" implementation of Event  
+ * @author rajashek
+ *
+ */
+public class ConnectedEvent   {
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedMapProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedMapProperty.java
similarity index 75%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedMapProperty.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedMapProperty.java
index 1d0ff35..ca21bf8 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedMapProperty.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedMapProperty.java
@@ -1,14 +1,14 @@
-package org.eclipse.basyx.aas.backend.connected.aas.submodelelement.property;
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement.property;
 
 import java.util.Collection;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.exception.ServerException;
-import org.eclipse.basyx.aas.api.exception.TypeMismatchException;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.IMapProperty;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.PropertyType;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.IMapProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.PropertyType;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.exception.ServerException;
+import org.eclipse.basyx.vab.exception.TypeMismatchException;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 
 /**
  * Connects to a PropertySingleValued as specified by DAAS containing a map
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedProperty.java
similarity index 63%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedProperty.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedProperty.java
index 0bb05c3..52e6981 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedProperty.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedProperty.java
@@ -1,12 +1,12 @@
-package org.eclipse.basyx.aas.backend.connected.aas.submodelelement.property;
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement.property;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.IProperty;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.PropertyType;
-import org.eclipse.basyx.aas.backend.connected.aas.submodelelement.ConnectedDataElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.IProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.PropertyType;
+import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.ConnectedDataElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 /**
  * "Connected" implementation of IProperty
  * @author rajashek
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedPropertyFactory.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedPropertyFactory.java
similarity index 67%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedPropertyFactory.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedPropertyFactory.java
index 4394df4..ec7c915 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedPropertyFactory.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedPropertyFactory.java
@@ -1,14 +1,14 @@
-package org.eclipse.basyx.aas.backend.connected.aas.submodelelement.property;
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement.property;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.IProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.valuetypedef.PropertyValueTypeDef;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.IProperty;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 
 /**
  * Creates IProperties based on the attached meta data as specified in DAAS
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedReferenceElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedReferenceElement.java
new file mode 100644
index 0000000..d295fa0
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedReferenceElement.java
@@ -0,0 +1,34 @@
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement.property;
+
+import java.util.Map;
+
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.IReferenceElement;
+import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.ConnectedDataElement;
+import org.eclipse.basyx.submodel.metamodel.facade.reference.ReferenceFacade;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+/**
+ * "Connected" implementation of IReferenceElement
+ * @author rajashek
+ *
+ */
+public class ConnectedReferenceElement extends ConnectedDataElement implements IReferenceElement {
+	public ConnectedReferenceElement(VABElementProxy proxy) {
+		super(proxy);		
+	}
+	
+
+	@Override
+	public void setValue(IReference ref) {
+		getProxy().setModelPropertyValue(SingleProperty.VALUE, ref);
+		
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public IReference getValue() {
+		return new ReferenceFacade((Map<String, Object>) getElem().getPath(SingleProperty.VALUE));
+	}
+
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedSingleProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedSingleProperty.java
similarity index 61%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedSingleProperty.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedSingleProperty.java
index 7f2f2ec..351247b 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/ConnectedSingleProperty.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/ConnectedSingleProperty.java
@@ -1,12 +1,12 @@
-package org.eclipse.basyx.aas.backend.connected.aas.submodelelement.property;
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement.property;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.exception.ServerException;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.ISingleProperty;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.PropertyType;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.ISingleProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.PropertyType;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.vab.exception.ServerException;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 
 /**
  * Connects to a PropertySingleValued as specified by DAAS containing a simple
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/blob/ConnectedBlob.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/blob/ConnectedBlob.java
similarity index 68%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/blob/ConnectedBlob.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/blob/ConnectedBlob.java
index 56d07f8..2e619b0 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/connected/aas/submodelelement/property/blob/ConnectedBlob.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/blob/ConnectedBlob.java
@@ -1,12 +1,12 @@
-package org.eclipse.basyx.aas.backend.connected.aas.submodelelement.property.blob;
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement.property.blob;
 
 import java.util.List;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.blob.IBlob;
-import org.eclipse.basyx.aas.backend.connected.aas.submodelelement.ConnectedDataElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.blob.Blob;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.blob.IBlob;
+import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.ConnectedDataElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.blob.Blob;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
 /**
  * "Connected" implementation of IBlob
  * @author rajashek
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/file/ConnectedFile.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/file/ConnectedFile.java
new file mode 100644
index 0000000..b9bd454
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/connected/submodelelement/property/file/ConnectedFile.java
@@ -0,0 +1,40 @@
+package org.eclipse.basyx.submodel.metamodel.connected.submodelelement.property.file;
+
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.file.IFile;
+import org.eclipse.basyx.submodel.metamodel.connected.submodelelement.ConnectedDataElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.blob.Blob;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+/**
+ * "Connected" implementation of IFile
+ * @author rajashek
+ *
+ */
+public class ConnectedFile extends ConnectedDataElement implements IFile {
+	public ConnectedFile(VABElementProxy proxy) {
+		super(proxy);		
+	}
+	
+	@Override
+	public void setValue(String value) {
+		getProxy().setModelPropertyValue(SingleProperty.VALUE, value);
+		
+	}
+
+	@Override
+	public String getValue() {
+		return (String) getProxy().getModelPropertyValue(SingleProperty.VALUE);
+	}
+
+	@Override
+	public void setMimeType(String mimeType) {
+		getProxy().setModelPropertyValue(Blob.MIMETYPE, mimeType);
+		
+	}
+
+	@Override
+	public String getMimeType() {
+		return (String) getProxy().getModelPropertyValue(Blob.MIMETYPE);
+	}
+
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/SubmodelFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/SubmodelFacade.java
similarity index 79%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/SubmodelFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/SubmodelFacade.java
index 83f174b..1b769a6 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/SubmodelFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/SubmodelFacade.java
@@ -1,28 +1,28 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade;
 
 import java.util.Collection;
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.identifier.IIdentifier;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IAdministrativeInformation;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperation;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.IProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.VABModelMap;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.Identifier;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.AdministrativeInformation;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasSemantics;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind.HasKind;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable.Qualifier;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IAdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.IProperty;
+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.AdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind.HasKind;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Qualifier;
+import org.eclipse.basyx.vab.model.VABModelMap;
 
 /**
  * Base class for sub model facades
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/SubmodelFacadeCustomSemantics.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/SubmodelFacadeCustomSemantics.java
similarity index 80%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/SubmodelFacadeCustomSemantics.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/SubmodelFacadeCustomSemantics.java
index 1f32e3a..a97f12b 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/SubmodelFacadeCustomSemantics.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/SubmodelFacadeCustomSemantics.java
@@ -1,20 +1,20 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade;
 
 import java.util.Collection;
 import java.util.Collections;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasSemantics;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind.HasKind;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable.Constraint;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable.Qualifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Key;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.enums.KeyElements;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.enums.KeyType;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind.HasKind;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Constraint;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Qualifiable;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.map.reference.enums.KeyType;
 
 
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/SubmodelFacadeIRDISemantics.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/SubmodelFacadeIRDISemantics.java
similarity index 81%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/SubmodelFacadeIRDISemantics.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/SubmodelFacadeIRDISemantics.java
index 8067f30..a8419f7 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/SubmodelFacadeIRDISemantics.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/SubmodelFacadeIRDISemantics.java
@@ -1,20 +1,20 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade;
 
 import java.util.Collection;
 import java.util.Collections;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasSemantics;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind.HasKind;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable.Constraint;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable.Qualifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Key;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.enums.KeyElements;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.enums.KeyType;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind.HasKind;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Constraint;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Qualifiable;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.reference.enums.KeyElements;
+import org.eclipse.basyx.submodel.metamodel.map.reference.enums.KeyType;
 
 /**
  * Facade class that supports the development and access of sub models using
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/VABElementContainerFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/VABElementContainerFacade.java
similarity index 76%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/VABElementContainerFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/VABElementContainerFacade.java
index f9ef42e..2fd608f 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/VABElementContainerFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/VABElementContainerFacade.java
@@ -1,12 +1,12 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperation;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.IVABElementContainer;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
+import org.eclipse.basyx.submodel.metamodel.map.IVABElementContainer;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
 
 /**
  * Facade providing access to attributes of entities implementing
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/IdentifierFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/identifier/IdentifierFacade.java
similarity index 76%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/IdentifierFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/identifier/IdentifierFacade.java
index 69af56e..4d8aaac 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/IdentifierFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/identifier/IdentifierFacade.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade.identifier;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.identifier.IIdentifier;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.Identifier;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
 
 /**
  * Facade providing access to a map containing the Identifier structure
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/AdministrativeInformationFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/AdministrativeInformationFacade.java
similarity index 75%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/AdministrativeInformationFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/AdministrativeInformationFacade.java
index 49b6380..19399f9 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/AdministrativeInformationFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/AdministrativeInformationFacade.java
@@ -1,12 +1,12 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade.qualifier;
 
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IAdministrativeInformation;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.AdministrativeInformation;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IAdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.AdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
 
 /**
  * Facade providing access to a map containing the AdministrativeInformation
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/HasDataSpecificationFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/HasDataSpecificationFacade.java
similarity index 71%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/HasDataSpecificationFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/HasDataSpecificationFacade.java
index 737f4f6..7daa9ff 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/HasDataSpecificationFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/HasDataSpecificationFacade.java
@@ -1,11 +1,11 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade.qualifier;
 
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IHasDataSpecification;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IHasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
 
 /**
  * Facade providing access to a map containing the DataSpecification structure
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/HasSemanticsFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/HasSemanticsFacade.java
similarity index 66%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/HasSemanticsFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/HasSemanticsFacade.java
index ecdb925..b9d6b0c 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/HasSemanticsFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/HasSemanticsFacade.java
@@ -1,10 +1,10 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade.qualifier;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IHasSemantics;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IHasSemantics;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
 
 /**
  * Facade providing access to a map containing the HasSemantics structure
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/IdentifiableFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/IdentifiableFacade.java
similarity index 70%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/IdentifiableFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/IdentifiableFacade.java
index ff88905..8b56b16 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/IdentifiableFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/IdentifiableFacade.java
@@ -1,15 +1,16 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade.qualifier;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.identifier.IIdentifier;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IAdministrativeInformation;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IIdentifiable;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.Identifier;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.AdministrativeInformation;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IAdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IIdentifiable;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.facade.identifier.IdentifierFacade;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.AdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
 
 /**
  * Facade providing access to a map containing the Identifiable structure
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/ReferableFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/ReferableFacade.java
similarity index 80%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/ReferableFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/ReferableFacade.java
index 576f9d4..6ba0414 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/ReferableFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/ReferableFacade.java
@@ -1,10 +1,10 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade.qualifier;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IReferable;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IReferable;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
 
 /**
  * Facade providing access to a map containing the Referable structure the
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/HasKindFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/haskind/HasKindFacade.java
similarity index 69%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/HasKindFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/haskind/HasKindFacade.java
index 295aee1..33e50d6 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/HasKindFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/haskind/HasKindFacade.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade.qualifier.haskind;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.haskind.IHasKind;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind.HasKind;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.haskind.IHasKind;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind.HasKind;
 
 /**
  * Facade providing access to a map containing the HasKind structure the
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/FormulaFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/qualifiable/FormulaFacade.java
similarity index 64%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/FormulaFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/qualifiable/FormulaFacade.java
index f112ce3..38d7595 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/FormulaFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/qualifiable/FormulaFacade.java
@@ -1,11 +1,11 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade.qualifier.qualifiable;
 
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IFormula;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable.Formula;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IFormula;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Formula;
 
 /**
  * Facade providing access to a map containing the Formula structure
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/QualifiableFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/qualifiable/QualifiableFacade.java
similarity index 64%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/QualifiableFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/qualifiable/QualifiableFacade.java
index 7ea65ed..1ae9d65 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/QualifiableFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/qualifiable/QualifiableFacade.java
@@ -1,11 +1,11 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade.qualifier.qualifiable;
 
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IConstraint;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IQualifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable.Qualifiable;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IConstraint;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IQualifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Qualifiable;
 
 /**
  * Facade providing access to a map containing the Qualifiable structure
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/QualifierFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/qualifiable/QualifierFacade.java
similarity index 74%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/QualifierFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/qualifiable/QualifierFacade.java
index 3bec22b..6d3bad5 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/QualifierFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/qualifier/qualifiable/QualifierFacade.java
@@ -1,11 +1,11 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade.qualifier.qualifiable;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IQualifier;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasSemantics;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable.Qualifier;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IQualifier;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Qualifier;
 
 /**
  * Facade providing access to a map containing the Qualifier structure
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/KeyFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/reference/KeyFacade.java
similarity index 82%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/KeyFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/reference/KeyFacade.java
index 699135d..3c19bc5 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/KeyFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/reference/KeyFacade.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade.reference;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IKey;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Key;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IKey;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
 
 /**
  * Facade providing access to a map containing the Key structure
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/ReferenceFacade.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/reference/ReferenceFacade.java
similarity index 67%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/ReferenceFacade.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/reference/ReferenceFacade.java
index 501c18a..1dba6b3 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/facades/ReferenceFacade.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/facade/reference/ReferenceFacade.java
@@ -1,11 +1,11 @@
-package org.eclipse.basyx.aas.impl.metamodel.facades;
+package org.eclipse.basyx.submodel.metamodel.facade.reference;
 
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IKey;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IKey;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
 
 /**
  * Facade providing access to a map containing the ReferenceFacade structure
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/IVABElementContainer.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/IVABElementContainer.java
new file mode 100644
index 0000000..ba29517
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/IVABElementContainer.java
@@ -0,0 +1,15 @@
+package org.eclipse.basyx.submodel.metamodel.map;
+
+import java.util.Map;
+
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
+
+public interface IVABElementContainer {
+	public void addSubModelElement(ISubmodelElement element);
+
+	public Map<String, IDataElement> getDataElements();
+
+	public Map<String, IOperation> getOperations();
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/SubModel.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/SubModel.java
similarity index 73%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/SubModel.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/SubModel.java
index ac119e3..a98e51f 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/SubModel.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/SubModel.java
@@ -1,30 +1,29 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas;
+package org.eclipse.basyx.submodel.metamodel.map;
 
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.ISubModel;
-import org.eclipse.basyx.aas.api.metamodel.aas.identifier.IIdentifier;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IAdministrativeInformation;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperation;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.IProperty;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasKindFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasSemanticsFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.IdentifiableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.SubmodelFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.IVABElementContainer;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.VABModelMap;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasSemantics;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Identifiable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind.HasKind;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable.Qualifiable;
+import org.eclipse.basyx.submodel.metamodel.api.ISubModel;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IAdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.IProperty;
+import org.eclipse.basyx.submodel.metamodel.facade.SubmodelFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasSemanticsFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.IdentifiableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.haskind.HasKindFacade;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Identifiable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind.HasKind;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Qualifiable;
+import org.eclipse.basyx.vab.model.VABModelMap;
 
 /**
  * Submodel class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/identifier/Identifier.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/identifier/Identifier.java
similarity index 85%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/identifier/Identifier.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/identifier/Identifier.java
index fdd0366..9a8532a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/identifier/Identifier.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/identifier/Identifier.java
@@ -1,10 +1,10 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier;
+package org.eclipse.basyx.submodel.metamodel.map.identifier;
 
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.identifier.IIdentifier;
-import org.eclipse.basyx.aas.impl.metamodel.facades.IdentifierFacade;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.facade.identifier.IdentifierFacade;
 
 /**
  * Identification class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/identifier/IdentifierType.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/identifier/IdentifierType.java
similarity index 83%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/identifier/IdentifierType.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/identifier/IdentifierType.java
index 290f296..8cd2987 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/identifier/IdentifierType.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/identifier/IdentifierType.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier;
+package org.eclipse.basyx.submodel.metamodel.map.identifier;
 
 /**
  * IdentifierType as defined in DAAS document <br/>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/AdministrativeInformation.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/AdministrativeInformation.java
similarity index 79%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/AdministrativeInformation.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/AdministrativeInformation.java
index 239bc08..0afbe5a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/AdministrativeInformation.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/AdministrativeInformation.java
@@ -1,12 +1,12 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier;
+package org.eclipse.basyx.submodel.metamodel.map.qualifier;
 
 import java.util.HashMap;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IAdministrativeInformation;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.facades.AdministrativeInformationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IAdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.AdministrativeInformationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
 
 /**
  * AdministrativeInformation class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/descriptor/Description.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/Description.java
similarity index 87%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/descriptor/Description.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/Description.java
index 384ce51..b73e9e5 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/descriptor/Description.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/Description.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor;
+package org.eclipse.basyx.submodel.metamodel.map.qualifier;
 
 import java.util.HashMap;
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/HasDataSpecification.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/HasDataSpecification.java
similarity index 72%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/HasDataSpecification.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/HasDataSpecification.java
index 64e8eba..6116b74 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/HasDataSpecification.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/HasDataSpecification.java
@@ -1,13 +1,13 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier;
+package org.eclipse.basyx.submodel.metamodel.map.qualifier;
 
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IHasDataSpecification;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IHasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
 
 /**
  * HasDataSpecification class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/HasSemantics.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/HasSemantics.java
similarity index 72%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/HasSemantics.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/HasSemantics.java
index 3ec48f4..3a66111 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/HasSemantics.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/HasSemantics.java
@@ -1,10 +1,10 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier;
+package org.eclipse.basyx.submodel.metamodel.map.qualifier;
 
 import java.util.HashMap;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IHasSemantics;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasSemanticsFacade;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IHasSemantics;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasSemanticsFacade;
 
 /**
  * HasSemantics class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/Identifiable.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/Identifiable.java
similarity index 80%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/Identifiable.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/Identifiable.java
index 6bc1275..d57c41b 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/Identifiable.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/Identifiable.java
@@ -1,10 +1,10 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier;
+package org.eclipse.basyx.submodel.metamodel.map.qualifier;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.identifier.IIdentifier;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IAdministrativeInformation;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IIdentifiable;
-import org.eclipse.basyx.aas.impl.metamodel.facades.IdentifiableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.Identifier;
+import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IAdministrativeInformation;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IIdentifiable;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.IdentifiableFacade;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier;
 
 /**
  * Identifiable class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/Referable.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/Referable.java
similarity index 88%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/Referable.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/Referable.java
index f9fa19a..1bf8a97 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/Referable.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/Referable.java
@@ -1,12 +1,11 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier;
+package org.eclipse.basyx.submodel.metamodel.map.qualifier;
 
 import java.util.HashMap;
 import java.util.HashSet;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.IReferable;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.descriptor.Description;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.IReferable;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
 
 /**
  * Referable class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/haskind/HasKind.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/haskind/HasKind.java
similarity index 72%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/haskind/HasKind.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/haskind/HasKind.java
index 1d18046..6d2bcd2 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/haskind/HasKind.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/haskind/HasKind.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind;
+package org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind;
 
 import java.util.HashMap;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.haskind.IHasKind;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasKindFacade;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.haskind.IHasKind;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.haskind.HasKindFacade;
 
 /**
  * HasKind class
@@ -31,7 +31,7 @@
 
 	/**
 	 * Constructor that takes
-	 * {@link org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind.Kind
+	 * {@link org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind.Kind
 	 * Kind}(either Kind.Instance or Kind.Type)
 	 */
 	public HasKind(String kind) {
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/haskind/Kind.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/haskind/Kind.java
similarity index 75%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/haskind/Kind.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/haskind/Kind.java
index 08bbfc1..288e43a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/haskind/Kind.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/haskind/Kind.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind;
+package org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind;
 
 /**
  * Kind enum as defined by DAAS document<br />
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Constraint.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Constraint.java
new file mode 100644
index 0000000..d6f634e
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Constraint.java
@@ -0,0 +1,10 @@
+package org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable;
+
+import java.util.HashMap;
+
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IConstraint;
+
+public abstract class Constraint extends HashMap<String, Object> implements IConstraint {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/qualifiable/Formula.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Formula.java
similarity index 67%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/qualifiable/Formula.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Formula.java
index 2e1c744..396dc17 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/qualifiable/Formula.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Formula.java
@@ -1,12 +1,12 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable;
+package org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IFormula;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.facades.FormulaFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IFormula;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.qualifiable.FormulaFacade;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
 
 /**
  * Forumla class as defined by DAAS document
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/qualifiable/Qualifiable.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Qualifiable.java
similarity index 80%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/qualifiable/Qualifiable.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Qualifiable.java
index 0f95b02..417bff5 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/qualifiable/Qualifiable.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Qualifiable.java
@@ -1,13 +1,13 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable;
+package org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable;
 
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IConstraint;
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IQualifiable;
-import org.eclipse.basyx.aas.impl.metamodel.facades.QualifiableFacade;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IConstraint;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IQualifiable;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.qualifiable.QualifiableFacade;
 
 /**
  * Qualifiable class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/qualifiable/Qualifier.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Qualifier.java
similarity index 77%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/qualifiable/Qualifier.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Qualifier.java
index 9a7a59f..6b61777 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/qualifier/qualifiable/Qualifier.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/Qualifier.java
@@ -1,11 +1,11 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable;
+package org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IQualifier;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasSemanticsFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.QualifierFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasSemantics;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IQualifier;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasSemanticsFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.qualifiable.QualifierFacade;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
 
 /**
  * Qualifier class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/QualifierType.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/QualifierType.java
new file mode 100644
index 0000000..87fc004
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/qualifier/qualifiable/QualifierType.java
@@ -0,0 +1,5 @@
+package org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable;
+
+public class QualifierType {
+
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/Key.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/Key.java
similarity index 82%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/Key.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/Key.java
index 8f55fa7..8973f6c 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/Key.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/Key.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference;
+package org.eclipse.basyx.submodel.metamodel.map.reference;
 
 import java.util.HashMap;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IKey;
-import org.eclipse.basyx.aas.impl.metamodel.facades.KeyFacade;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IKey;
+import org.eclipse.basyx.submodel.metamodel.facade.reference.KeyFacade;
 
 /**
  * Key as defined in DAAS document <br/>
@@ -25,7 +25,7 @@
 	 * 
 	 * @param type
 	 *            Denote which kind of entity is referenced. See
-	 *            {@link org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.enums.KeyElements
+	 *            {@link org.eclipse.basyx.submodel.metamodel.map.reference.enums.KeyElements
 	 *            KeyElements} and its children for possible values
 	 * @param local
 	 *            Denotes if the key references a model element of the same AAS
@@ -34,7 +34,7 @@
 	 *            The key value, for example an IRDI if the idType=IRDI.
 	 * @param idType
 	 *            Type of the key value. See
-	 *            {@link org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.enums.KeyType
+	 *            {@link org.eclipse.basyx.submodel.metamodel.map.reference.enums.KeyType
 	 *            KeyType} for valid values. In case of idType = idShort local shall
 	 *            be true. In case type=GlobalReference idType shall not be IdShort.
 	 */
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/Reference.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/Reference.java
similarity index 80%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/Reference.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/Reference.java
index e963a32..0c54be0 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/Reference.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/Reference.java
@@ -1,13 +1,13 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference;
+package org.eclipse.basyx.submodel.metamodel.map.reference;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IKey;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferenceFacade;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IKey;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.facade.reference.ReferenceFacade;
 
 /**
  * Reference as described by DAAS document <br/>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/enums/IdentifiableElements.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/enums/IdentifiableElements.java
similarity index 84%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/enums/IdentifiableElements.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/enums/IdentifiableElements.java
index acb76aa..25f1e6b 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/enums/IdentifiableElements.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/enums/IdentifiableElements.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.enums;
+package org.eclipse.basyx.submodel.metamodel.map.reference.enums;
 
 /**
  * IdentifiableElements as defined in DAAS document <br/>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/enums/KeyElements.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/enums/KeyElements.java
similarity index 81%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/enums/KeyElements.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/enums/KeyElements.java
index e254dbc..454579c 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/enums/KeyElements.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/enums/KeyElements.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.enums;
+package org.eclipse.basyx.submodel.metamodel.map.reference.enums;
 
 /**
  * KeyElements as defined in DAAS document <br/>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/enums/KeyType.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/enums/KeyType.java
similarity index 64%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/enums/KeyType.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/enums/KeyType.java
index 8a6b236..3abfbce 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/enums/KeyType.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/enums/KeyType.java
@@ -1,6 +1,6 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.enums;
+package org.eclipse.basyx.submodel.metamodel.map.reference.enums;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.identifier.IdentifierType;
+import org.eclipse.basyx.submodel.metamodel.map.identifier.IdentifierType;
 
 /**
  * IdentifierType as defined in DAAS document <br/>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/enums/LocalKeyType.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/enums/LocalKeyType.java
similarity index 70%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/enums/LocalKeyType.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/enums/LocalKeyType.java
index 4b277d7..3810fbb 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/enums/LocalKeyType.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/enums/LocalKeyType.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.enums;
+package org.eclipse.basyx.submodel.metamodel.map.reference.enums;
 
 /**
  * IdentifiableElements as defined in DAAS document <br/>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/enums/ReferableElements.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/enums/ReferableElements.java
similarity index 92%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/enums/ReferableElements.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/enums/ReferableElements.java
index e1ee746..c464f86 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/reference/enums/ReferableElements.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/reference/enums/ReferableElements.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.enums;
+package org.eclipse.basyx.submodel.metamodel.map.reference.enums;
 
 /**
  * ReferableElements as defined in DAAS document
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/DataElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/DataElement.java
similarity index 68%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/DataElement.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/DataElement.java
index c05c9e4..a40bc28 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/DataElement.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/DataElement.java
@@ -1,8 +1,8 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement;
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IDataElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
 
 public class DataElement extends SubmodelElement implements IDataElement {
 	private static final long serialVersionUID = 1L;
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/ReferenceElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/ReferenceElement.java
similarity index 70%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/ReferenceElement.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/ReferenceElement.java
index cf51555..2fe35dd 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/ReferenceElement.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/ReferenceElement.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement;
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IReferenceElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IReferenceElement;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
 
 /**
  * A ReferenceElement as defined in DAAS document <br/>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/RelationshipElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/RelationshipElement.java
similarity index 79%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/RelationshipElement.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/RelationshipElement.java
index 1777a10..12ffe3a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/RelationshipElement.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/RelationshipElement.java
@@ -1,16 +1,16 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement;
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement;
 
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IConstraint;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.IRelationshipElement;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasKindFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasSemanticsFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.QualifiableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.reference.Reference;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IConstraint;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IRelationshipElement;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasSemanticsFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.haskind.HasKindFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.qualifiable.QualifiableFacade;
+import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
 
 /**
  * RelationshipElement as defined in DAAS document <br/>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/SubmodelElement.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/SubmodelElement.java
similarity index 68%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/SubmodelElement.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/SubmodelElement.java
index 2508816..076cc72 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/SubmodelElement.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/SubmodelElement.java
@@ -1,22 +1,22 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement;
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement;
 
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IConstraint;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasKindFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasSemanticsFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.QualifiableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasSemantics;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind.HasKind;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable.Qualifiable;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IConstraint;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasSemanticsFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.haskind.HasKindFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.qualifiable.QualifiableFacade;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasDataSpecification;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.haskind.HasKind;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Qualifiable;
 
 public class SubmodelElement extends HashMap<String, Object> implements ISubmodelElement {
 	private static final long serialVersionUID = 1L;
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/SubmodelElementCollection.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/SubmodelElementCollection.java
similarity index 81%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/SubmodelElementCollection.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/SubmodelElementCollection.java
index 459cff3..8819895 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/SubmodelElementCollection.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/SubmodelElementCollection.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement;
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -6,17 +6,17 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IConstraint;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElementCollection;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasKindFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasSemanticsFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.QualifiableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IConstraint;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElementCollection;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasSemanticsFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.haskind.HasKindFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.qualifiable.QualifiableFacade;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
 
 /**
  * SubmodelElementCollection as defined by DAAS document <br/>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/operation/Operation.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/operation/Operation.java
similarity index 80%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/operation/Operation.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/operation/Operation.java
index d50cf85..c1698ae 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/operation/Operation.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/operation/Operation.java
@@ -1,21 +1,21 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.operation;
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 import java.util.function.Function;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IConstraint;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperation;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperationVariable;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasKindFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasSemanticsFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.QualifiableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.SubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IConstraint;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperationVariable;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasSemanticsFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.haskind.HasKindFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.qualifiable.QualifiableFacade;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElement;
 
 /**
  * Operation as defined in DAAS document <br/>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/operation/OperationVariable.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/operation/OperationVariable.java
similarity index 72%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/operation/OperationVariable.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/operation/OperationVariable.java
index 5babf3c..cde92ce 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/operation/OperationVariable.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/operation/OperationVariable.java
@@ -1,18 +1,18 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.operation;
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation;
 
 import java.util.Set;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.qualifier.qualifiable.IConstraint;
-import org.eclipse.basyx.aas.api.metamodel.aas.reference.IReference;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.ISubmodelElement;
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.operation.IOperationVariable;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasDataSpecificationFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasKindFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.HasSemanticsFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.QualifiableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.facades.ReferableFacade;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.SubmodelElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.api.qualifier.qualifiable.IConstraint;
+import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperationVariable;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasDataSpecificationFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.HasSemanticsFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.ReferableFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.haskind.HasKindFacade;
+import org.eclipse.basyx.submodel.metamodel.facade.qualifier.qualifiable.QualifiableFacade;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
 
 /**
  * OperationVariable as described by DAAS document An operation variable is a
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/AbstractProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/AbstractProperty.java
new file mode 100644
index 0000000..193d324
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/AbstractProperty.java
@@ -0,0 +1,35 @@
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement.property;
+
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.IProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.PropertyType;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.DataElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
+
+public abstract class AbstractProperty extends DataElement implements IProperty {
+	private static final long serialVersionUID = 1724792579215822224L;
+
+	@Override
+	public PropertyType getPropertyType() {
+		PropertyValueTypeDef type = PropertyValueTypeDefHelper.fromName((String) get(SingleProperty.VALUETYPE));
+		if (type == PropertyValueTypeDef.Collection) {
+			return PropertyType.Collection;
+		} else if (type == PropertyValueTypeDef.Map) {
+			return PropertyType.Map;
+		} else {
+			return PropertyType.Single;
+		}
+	}
+
+	@Override
+	public void setValueId(String obj) {
+		put(SingleProperty.VALUEID, obj);
+
+	}
+
+	@Override
+	public String getValueId() {
+		return (String) get(SingleProperty.VALUEID);
+	}
+
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/ContainerProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/ContainerProperty.java
new file mode 100644
index 0000000..a7e1678
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/ContainerProperty.java
@@ -0,0 +1,50 @@
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement.property;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.IDataElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.ISubmodelElement;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.operation.IOperation;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.IContainerProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.PropertyType;
+import org.eclipse.basyx.submodel.metamodel.facade.VABElementContainerFacade;
+import org.eclipse.basyx.submodel.metamodel.map.IVABElementContainer;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+
+public class ContainerProperty extends AbstractProperty implements IContainerProperty, IVABElementContainer {
+	private static final long serialVersionUID = -8066834863070042378L;
+
+	private VABElementContainerFacade containerFacade;
+
+	
+	public ContainerProperty() {
+		containerFacade = new VABElementContainerFacade(this);
+
+		put(SubModel.SUBMODELELEMENT, new HashMap<>());
+
+		// Helper for operations and properties
+		put(SubModel.PROPERTIES, new HashMap<>());
+		put(SubModel.OPERATIONS, new HashMap<>());
+	}
+
+	@Override
+	public PropertyType getPropertyType() {
+		return PropertyType.Container;
+	}
+
+	@Override
+	public void addSubModelElement(ISubmodelElement element) {
+		containerFacade.addSubModelElement(element);
+	}
+
+	@Override
+	public Map<String, IDataElement> getDataElements() {
+		return containerFacade.getDataElements();
+	}
+
+	@Override
+	public Map<String, IOperation> getOperations() {
+		return containerFacade.getOperations();
+	}
+}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/Event.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/Event.java
similarity index 77%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/Event.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/Event.java
index 5f300b3..680eab1 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/Event.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/Event.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property;
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement.property;
 
 /**
  * Event property class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/SingleProperty.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/SingleProperty.java
similarity index 76%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/SingleProperty.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/SingleProperty.java
index 8de19d0..2d054db 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/SingleProperty.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/SingleProperty.java
@@ -1,13 +1,13 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property;
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement.property;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.ISingleProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasSemantics;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.Referable;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable.Qualifier;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.valuetypedef.PropertyValueTypeDef;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.ISingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.HasSemantics;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.Referable;
+import org.eclipse.basyx.submodel.metamodel.map.qualifier.qualifiable.Qualifier;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.valuetypedef.PropertyValueTypeDef;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
 
 /**
  * Property class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/blob/Blob.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/blob/Blob.java
similarity index 74%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/blob/Blob.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/blob/Blob.java
index 745e761..3adb41c 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/blob/Blob.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/blob/Blob.java
@@ -1,8 +1,8 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.blob;
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.blob;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.blob.IBlob;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.DataElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.blob.IBlob;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.DataElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
 
 /**
  * A blob element as defined in DAAS document <br/>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/file/File.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/file/File.java
similarity index 75%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/file/File.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/file/File.java
index acc823f..803f209 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/file/File.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/file/File.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.file;
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.file;
 
-import org.eclipse.basyx.aas.api.metamodel.aas.submodelelement.property.file.IFile;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.DataElement;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.blob.Blob;
+import org.eclipse.basyx.submodel.metamodel.api.submodelelement.property.file.IFile;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.DataElement;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.blob.Blob;
 
 /**
  * A blob property as defined in DAAS document <br/>
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/valuetypedef/PropertyValueTypeDef.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/valuetypedef/PropertyValueTypeDef.java
similarity index 85%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/valuetypedef/PropertyValueTypeDef.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/valuetypedef/PropertyValueTypeDef.java
index 4780cf9..3d0c1db 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/valuetypedef/PropertyValueTypeDef.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/valuetypedef/PropertyValueTypeDef.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.valuetypedef;
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.valuetypedef;
 
 /**
  * Helper enum to handle anySimpleTypeDef as defined in DAAS document <br />
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/valuetypedef/PropertyValueTypeDefHelper.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/valuetypedef/PropertyValueTypeDefHelper.java
similarity index 93%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/valuetypedef/PropertyValueTypeDefHelper.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/valuetypedef/PropertyValueTypeDefHelper.java
index b8d4d11..c820f0d 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/aas/submodelelement/property/valuetypedef/PropertyValueTypeDefHelper.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/metamodel/map/submodelelement/property/valuetypedef/PropertyValueTypeDefHelper.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.valuetypedef;
+package org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.valuetypedef;
 
 import java.util.Collection;
 import java.util.HashMap;
@@ -6,7 +6,7 @@
 
 /**
  * Provides utility functions for
- * {@link org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.valuetypedef.PropertyValueTypeDef
+ * {@link org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.valuetypedef.PropertyValueTypeDef
  * PropertyValueTypeDef} <br />
  * * Creating a PropertyValueTypeDef from name <br/>
  * * Creating a PropertyValueTypeDef for an object
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/ContainerPropertyProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/ContainerPropertyProvider.java
similarity index 93%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/ContainerPropertyProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/ContainerPropertyProvider.java
index 5133b23..3f9d154 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/ContainerPropertyProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/ContainerPropertyProvider.java
@@ -1,14 +1,14 @@
-package org.eclipse.basyx.aas.backend.provider;
+package org.eclipse.basyx.submodel.restapi;
 
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.SubmodelElement;
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElement;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 /**
  * Provider that handles container properties. Container properties can contain other submodel elements.
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/MetaModelProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/MetaModelProvider.java
similarity index 88%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/MetaModelProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/MetaModelProvider.java
index 74c1ab4..59b3bac 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/MetaModelProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/MetaModelProvider.java
@@ -1,8 +1,8 @@
-package org.eclipse.basyx.aas.backend.provider;
+package org.eclipse.basyx.submodel.restapi;
 
 import java.util.Map;
 
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 /**
  * Abstract class that acts as base for each handler of the AAS meta model
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/OperationProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/OperationProvider.java
similarity index 85%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/OperationProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/OperationProvider.java
index fe3a1ad..edd2278 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/OperationProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/OperationProvider.java
@@ -1,10 +1,10 @@
-package org.eclipse.basyx.aas.backend.provider;
+package org.eclipse.basyx.submodel.restapi;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.operation.Operation;
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.operation.Operation;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 /**
  * Handles operations according to AAS meta model.
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/SinglePropertyProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/SinglePropertyProvider.java
similarity index 85%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/SinglePropertyProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/SinglePropertyProvider.java
index 8068bbe..914e39b 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/SinglePropertyProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/SinglePropertyProvider.java
@@ -1,12 +1,12 @@
-package org.eclipse.basyx.aas.backend.provider;
+package org.eclipse.basyx.submodel.restapi;
 
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.SingleProperty;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.SingleProperty;
+import org.eclipse.basyx.submodel.metamodel.map.submodelelement.property.valuetypedef.PropertyValueTypeDefHelper;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 /**
  * Handles properties according to AAS meta model
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/SubModelProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/SubModelProvider.java
similarity index 90%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/SubModelProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/SubModelProvider.java
index 39028bf..bbfcad2 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/backend/provider/SubModelProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/submodel/restapi/SubModelProvider.java
@@ -1,11 +1,11 @@
-package org.eclipse.basyx.aas.backend.provider;
+package org.eclipse.basyx.submodel.restapi;
 
 import java.util.Map;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.SubModel;
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
-import org.eclipse.basyx.vab.provider.lambda.VABLambdaProvider;
+import org.eclipse.basyx.submodel.metamodel.map.SubModel;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProvider;
 
 /**
  * Additional VAB provider specific for providing submodels together
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/http/HTTPConnectorProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/http/HTTPConnectorProvider.java
deleted file mode 100644
index 6be708b..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/http/HTTPConnectorProvider.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.eclipse.basyx.vab.backend.connector.http;
-
-import org.eclipse.basyx.vab.backend.connector.ConnectorProvider;
-import org.eclipse.basyx.vab.backend.connector.JSONConnector;
-import org.eclipse.basyx.vab.core.IModelProvider;
-
-public class HTTPConnectorProvider extends ConnectorProvider {
-
-	/**
-	 * returns HTTPConnetor wrapped with ConnectedHashmapProvider that handles
-	 * message header information
-	 */
-	@Override
-	protected IModelProvider createProvider(String addr) {
-
-		return new JSONConnector(new HTTPConnector(addr));
-	}
-
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/JSONConnector.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/connector/JSONConnector.java
similarity index 85%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/JSONConnector.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/connector/JSONConnector.java
index 9766c02..773ea15 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/JSONConnector.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/connector/JSONConnector.java
@@ -1,12 +1,15 @@
-package org.eclipse.basyx.vab.backend.connector;
+package org.eclipse.basyx.vab.coder.json.connector;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.basyx.vab.backend.http.tools.GSONTools;
-import org.eclipse.basyx.vab.backend.http.tools.factory.DefaultTypeFactory;
-import org.eclipse.basyx.vab.backend.http.tools.factory.GSONToolsFactory;
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.coder.json.metaprotocol.IMetaProtocolHandler;
+import org.eclipse.basyx.vab.coder.json.metaprotocol.MetaprotocolHandler;
+import org.eclipse.basyx.vab.coder.json.serialization.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONTools;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONToolsFactory;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.protocol.api.IBaSyxConnector;
 
 
 /**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/IMessage.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/IMessage.java
similarity index 77%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/IMessage.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/IMessage.java
index 6867e47..fbcb4ff 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/IMessage.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/IMessage.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.server.utils;
+package org.eclipse.basyx.vab.coder.json.metaprotocol;
 
 /**
  * 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/IMetaProtocolHandler.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/IMetaProtocolHandler.java
similarity index 87%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/IMetaProtocolHandler.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/IMetaProtocolHandler.java
index 74da665..7b7af3b 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/IMetaProtocolHandler.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/IMetaProtocolHandler.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.connector;
+package org.eclipse.basyx.vab.coder.json.metaprotocol;
 
 
 /**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/IResult.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/IResult.java
similarity index 82%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/IResult.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/IResult.java
index c790b8f..ed4b18a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/IResult.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/IResult.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.server.utils;
+package org.eclipse.basyx.vab.coder.json.metaprotocol;
 
 import java.util.List;
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/Message.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/Message.java
similarity index 94%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/Message.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/Message.java
index 1c79c3b..a3c9e39 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/Message.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/Message.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.server.utils;
+package org.eclipse.basyx.vab.coder.json.metaprotocol;
 
 import java.util.HashMap;
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/MessageType.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/MessageType.java
similarity index 91%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/MessageType.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/MessageType.java
index fc51b7a..c27d293 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/MessageType.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/MessageType.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.server.utils;
+package org.eclipse.basyx.vab.coder.json.metaprotocol;
 
 /**
  * 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/MetaprotocolHandler.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/MetaprotocolHandler.java
similarity index 87%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/MetaprotocolHandler.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/MetaprotocolHandler.java
index 12010dd..180d916 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/MetaprotocolHandler.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/MetaprotocolHandler.java
@@ -1,14 +1,12 @@
-package org.eclipse.basyx.vab.backend.connector;
+package org.eclipse.basyx.vab.coder.json.metaprotocol;
 
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.Map;
 
-import org.eclipse.basyx.vab.backend.http.tools.GSONTools;
-import org.eclipse.basyx.vab.backend.http.tools.factory.DefaultTypeFactory;
-import org.eclipse.basyx.vab.backend.http.tools.factory.GSONToolsFactory;
-import org.eclipse.basyx.vab.backend.server.utils.Message;
-import org.eclipse.basyx.vab.backend.server.utils.Result;
+import org.eclipse.basyx.vab.coder.json.serialization.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONTools;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONToolsFactory;
 
 public class MetaprotocolHandler implements IMetaProtocolHandler {
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/Result.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/Result.java
similarity index 97%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/Result.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/Result.java
index f590c62..0432ec5 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/Result.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/metaprotocol/Result.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.server.utils;
+package org.eclipse.basyx.vab.coder.json.metaprotocol;
 
 import java.util.Arrays;
 import java.util.HashMap;
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/JSONProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/provider/JSONProvider.java
similarity index 92%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/JSONProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/provider/JSONProvider.java
index 07cac46..eb7cf40 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/utils/JSONProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/provider/JSONProvider.java
@@ -1,15 +1,18 @@
-package org.eclipse.basyx.vab.backend.server.utils;
+package org.eclipse.basyx.vab.coder.json.provider;
 
 import java.io.PrintWriter;
 import java.util.Collection;
 import java.util.List;
 
-import org.eclipse.basyx.aas.api.exception.LostHTTPRequestParameterException;
-import org.eclipse.basyx.aas.api.exception.ServerException;
-import org.eclipse.basyx.vab.backend.http.tools.GSONTools;
-import org.eclipse.basyx.vab.backend.http.tools.factory.DefaultTypeFactory;
-import org.eclipse.basyx.vab.backend.http.tools.factory.GSONToolsFactory;
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.coder.json.metaprotocol.IMessage;
+import org.eclipse.basyx.vab.coder.json.metaprotocol.IResult;
+import org.eclipse.basyx.vab.coder.json.metaprotocol.Result;
+import org.eclipse.basyx.vab.coder.json.serialization.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONTools;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONToolsFactory;
+import org.eclipse.basyx.vab.exception.LostHTTPRequestParameterException;
+import org.eclipse.basyx.vab.exception.ServerException;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/http/tools/factory/DefaultTypeFactory.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/serialization/DefaultTypeFactory.java
similarity index 90%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/http/tools/factory/DefaultTypeFactory.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/serialization/DefaultTypeFactory.java
index 338e352..919a287 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/http/tools/factory/DefaultTypeFactory.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/serialization/DefaultTypeFactory.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.http.tools.factory;
+package org.eclipse.basyx.vab.coder.json.serialization;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/http/tools/GSONTools.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/serialization/GSONTools.java
similarity index 98%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/http/tools/GSONTools.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/serialization/GSONTools.java
index 4024ec2..37450af 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/http/tools/GSONTools.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/serialization/GSONTools.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.http.tools;
+package org.eclipse.basyx.vab.coder.json.serialization;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -16,8 +16,6 @@
 import java.util.function.Function;
 import java.util.function.Supplier;
 
-import org.eclipse.basyx.vab.backend.http.tools.factory.GSONToolsFactory;
-
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonNull;
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/http/tools/factory/GSONToolsFactory.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/serialization/GSONToolsFactory.java
similarity index 88%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/http/tools/factory/GSONToolsFactory.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/serialization/GSONToolsFactory.java
index 012be91..0cf3788 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/http/tools/factory/GSONToolsFactory.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/serialization/GSONToolsFactory.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.http.tools.factory;
+package org.eclipse.basyx.vab.coder.json.serialization;
 
 import java.util.List;
 import java.util.Map;
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/http/tools/Serializer.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/serialization/Serializer.java
similarity index 85%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/http/tools/Serializer.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/serialization/Serializer.java
index b36f29b..523387f 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/http/tools/Serializer.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/coder/json/serialization/Serializer.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.http.tools;
+package org.eclipse.basyx.vab.coder.json.serialization;
 
 /**
  * A BaSys serializer
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/ref/VABElementRef.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/ref/VABElementRef.java
deleted file mode 100644
index 2263ea2..0000000
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/ref/VABElementRef.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.eclipse.basyx.vab.core.ref;
-
-/**
- * VAB reference to a remote property. This reference also contains RTTI
- * information
- * 
- * @author kuhn
- *
- */
-public class VABElementRef {
-
-	/**
-	 * Store server path to element. This path may contain optimized handles and is
-	 * used internally by the SDK.
-	 */
-	private String path;
-
-	public String getPath() {
-		return path;
-	}
-
-	public void setPath(String path) {
-		this.path = path;
-	}
-
-	public VABElementRef(String path) {
-		super();
-		this.path = path;
-	}
-
-	public VABElementRef() {
-	}
-}
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/directory/IVABDirectoryService.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/directory/api/IVABDirectoryService.java
similarity index 89%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/directory/IVABDirectoryService.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/directory/api/IVABDirectoryService.java
index fa9dfdc..17d51a8 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/directory/IVABDirectoryService.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/directory/api/IVABDirectoryService.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.core.directory;
+package org.eclipse.basyx.vab.directory.api;
 
 /**
  * Directory service SDK interface.
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/directory/VABHTTPDirectoryProxy.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/directory/http/VABHTTPDirectoryProxy.java
similarity index 75%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/directory/VABHTTPDirectoryProxy.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/directory/http/VABHTTPDirectoryProxy.java
index f60d57b..1b7559a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/directory/VABHTTPDirectoryProxy.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/directory/http/VABHTTPDirectoryProxy.java
@@ -1,9 +1,10 @@
-package org.eclipse.basyx.vab.core.directory;
+package org.eclipse.basyx.vab.directory.http;
 
-import org.eclipse.basyx.vab.backend.connector.JSONConnector;
-import org.eclipse.basyx.vab.backend.connector.http.HTTPConnector;
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
+import org.eclipse.basyx.vab.coder.json.connector.JSONConnector;
+import org.eclipse.basyx.vab.directory.api.IVABDirectoryService;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.protocol.http.connector.HTTPConnector;
 
 public class VABHTTPDirectoryProxy implements IVABDirectoryService {
 	/**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/services/PreconfiguredDirectory.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/directory/preconfigured/PreconfiguredDirectory.java
similarity index 90%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/services/PreconfiguredDirectory.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/directory/preconfigured/PreconfiguredDirectory.java
index 791bbc9..507d33e 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/services/PreconfiguredDirectory.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/directory/preconfigured/PreconfiguredDirectory.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.aas.impl.services;
+package org.eclipse.basyx.vab.directory.preconfigured;
 
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.vab.core.directory.IVABDirectoryService;
+import org.eclipse.basyx.vab.directory.api.IVABDirectoryService;
 
 
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/AtomicTransactionFailedException.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/AtomicTransactionFailedException.java
similarity index 91%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/AtomicTransactionFailedException.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/AtomicTransactionFailedException.java
index 0e52821..8e5a003 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/AtomicTransactionFailedException.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/AtomicTransactionFailedException.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.exception;
+package org.eclipse.basyx.vab.exception;
 
 public class AtomicTransactionFailedException extends Exception {
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/FeatureNotImplementedException.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/FeatureNotImplementedException.java
similarity index 86%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/FeatureNotImplementedException.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/FeatureNotImplementedException.java
index e879bbc..27f0dcc 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/FeatureNotImplementedException.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/FeatureNotImplementedException.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.exception;
+package org.eclipse.basyx.vab.exception;
 
 
 /**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/LostHTTPRequestParameterException.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/LostHTTPRequestParameterException.java
similarity index 89%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/LostHTTPRequestParameterException.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/LostHTTPRequestParameterException.java
index b32c7e4..63d1b72 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/LostHTTPRequestParameterException.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/LostHTTPRequestParameterException.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.exception;
+package org.eclipse.basyx.vab.exception;
 
 public class LostHTTPRequestParameterException extends Exception {
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/ReadOnlyException.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/ReadOnlyException.java
similarity index 89%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/ReadOnlyException.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/ReadOnlyException.java
index cf82fbd..498bfca 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/ReadOnlyException.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/ReadOnlyException.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.exception;
+package org.eclipse.basyx.vab.exception;
 
 public class ReadOnlyException extends Exception {
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/ResourceNotFoundException.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/ResourceNotFoundException.java
similarity index 92%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/ResourceNotFoundException.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/ResourceNotFoundException.java
index d1e9b0b..ac79925 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/ResourceNotFoundException.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/ResourceNotFoundException.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.exception;
+package org.eclipse.basyx.vab.exception;
 
 
 /**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/ServerException.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/ServerException.java
similarity index 95%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/ServerException.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/ServerException.java
index e33d5b0..0dca74d 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/ServerException.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/ServerException.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.exception;
+package org.eclipse.basyx.vab.exception;
 
 
 /**
@@ -74,6 +74,7 @@
 	/**
 	 * Create readable exception
 	 */
+	@Override
 	public String toString() {
 		// Only return exception type if no message is set
 		if (message == null) return type+":";
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/TypeMismatchException.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/TypeMismatchException.java
similarity index 90%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/TypeMismatchException.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/TypeMismatchException.java
index aa9c5dd..c9e36da 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/TypeMismatchException.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/TypeMismatchException.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.exception;
+package org.eclipse.basyx.vab.exception;
 
 public class TypeMismatchException extends Exception {
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/UnknownElementTypeException.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/UnknownElementTypeException.java
similarity index 87%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/UnknownElementTypeException.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/UnknownElementTypeException.java
index e5ab520..7114694 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/api/exception/UnknownElementTypeException.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/exception/UnknownElementTypeException.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.aas.api.exception;
+package org.eclipse.basyx.vab.exception;
 
 
 /**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/VABXmlProviderFactory.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/factory/xml/VABXmlProviderFactory.java
similarity index 78%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/VABXmlProviderFactory.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/factory/xml/VABXmlProviderFactory.java
index 957fb36..a3ac23e 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/VABXmlProviderFactory.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/factory/xml/VABXmlProviderFactory.java
@@ -1,6 +1,6 @@
-package org.eclipse.basyx.vab.provider.xml;
+package org.eclipse.basyx.vab.factory.xml;
 
-import org.eclipse.basyx.vab.provider.hashmap.VABHashmapProvider;
+import org.eclipse.basyx.vab.modelprovider.map.VABHashmapProvider;
 
 /**
  * Provides the VAB elements from given xml string.
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/XmlParser.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/factory/xml/XmlParser.java
similarity index 99%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/XmlParser.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/factory/xml/XmlParser.java
index 3249d32..dcb653f 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/xml/XmlParser.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/factory/xml/XmlParser.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.provider.xml;
+package org.eclipse.basyx.vab.factory.xml;
 
 import java.io.IOException;
 import java.io.StringReader;
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/gateway/ConnectorProviderMapper.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/gateway/ConnectorProviderMapper.java
similarity index 87%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/gateway/ConnectorProviderMapper.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/gateway/ConnectorProviderMapper.java
index d34f15b..d90db4a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/gateway/ConnectorProviderMapper.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/gateway/ConnectorProviderMapper.java
@@ -1,10 +1,10 @@
-package org.eclipse.basyx.vab.backend.gateway;
+package org.eclipse.basyx.vab.gateway;
 
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.vab.core.IConnectorProvider;
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.protocol.api.IConnectorProvider;
 
 /**
  * Maps an incoming address to an IConnectorProvider based on the protocol used
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/gateway/DelegatingModelProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/gateway/DelegatingModelProvider.java
similarity index 88%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/gateway/DelegatingModelProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/gateway/DelegatingModelProvider.java
index 643f183..32f7a0f 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/gateway/DelegatingModelProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/gateway/DelegatingModelProvider.java
@@ -1,8 +1,8 @@
-package org.eclipse.basyx.vab.backend.gateway;
+package org.eclipse.basyx.vab.gateway;
 
-import org.eclipse.basyx.vab.core.IConnectorProvider;
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.protocol.api.IConnectorProvider;
 
 /**
  * IModelProvider that delegates all calls to a Connector to enable gateway
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/VABConnectionManager.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/manager/VABConnectionManager.java
similarity index 85%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/VABConnectionManager.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/manager/VABConnectionManager.java
index 6b1c1a4..ad9d13a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/VABConnectionManager.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/manager/VABConnectionManager.java
@@ -1,8 +1,9 @@
-package org.eclipse.basyx.vab.core;
+package org.eclipse.basyx.vab.manager;
 
-import org.eclipse.basyx.vab.core.directory.IVABDirectoryService;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.vab.directory.api.IVABDirectoryService;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.protocol.api.IConnectorProvider;
 
 
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/VABModelMap.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/model/VABModelMap.java
similarity index 83%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/VABModelMap.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/model/VABModelMap.java
index 769a366..f77f8db 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/aas/impl/metamodel/hashmap/VABModelMap.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/model/VABModelMap.java
@@ -1,10 +1,8 @@
-package org.eclipse.basyx.aas.impl.metamodel.hashmap;
+package org.eclipse.basyx.vab.model;
 
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.vab.IElement;
-
 
 /**
  * Base class for all hash maps that contain VAB meta models
@@ -39,26 +37,6 @@
 	public VABModelMap(Map<String, V> wrappedContents) {
 		this.putAll(wrappedContents);
 	}
-
-	
-	/**
-	 * Put a property into the map.
-	 * 
-	 * The property already contains an ID
-	 */
-	public void put(V v) {
-		// Type check
-		if (!(v instanceof IElement)) throw new UndefinedIDException();
-		
-		// Up cast
-		IElement addedElement = (IElement) v;
-		
-		// ID check
-		if (addedElement.getId() == null) throw new UndefinedIDException();
-		
-		// Add element to map
-		this.put(addedElement.getId(), v);
-	}
 	
 	
 	/**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/proxy/VABElementProxy.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/VABElementProxy.java
similarity index 96%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/proxy/VABElementProxy.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/VABElementProxy.java
index d55a77c..b1d1c98 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/proxy/VABElementProxy.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/VABElementProxy.java
@@ -1,7 +1,7 @@
-package org.eclipse.basyx.vab.core.proxy;
+package org.eclipse.basyx.vab.modelprovider;
 
-import org.eclipse.basyx.aas.api.exception.ServerException;
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.exception.ServerException;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 /**
  * Proxy class for a VAB element
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/tools/VABPathTools.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/VABPathTools.java
similarity index 98%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/tools/VABPathTools.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/VABPathTools.java
index 3dc2e0a..030d6b0 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/tools/VABPathTools.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/VABPathTools.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.core.tools;
+package org.eclipse.basyx.vab.modelprovider;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/IModelProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/api/IModelProvider.java
similarity index 96%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/IModelProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/api/IModelProvider.java
index b34ccbd..828baa4 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/IModelProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/api/IModelProvider.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.core;
+package org.eclipse.basyx.vab.modelprovider.api;
 
 /**
  * Basic model provider backend interface
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/provider/ConsistencyProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/consistency/ConsistencyProvider.java
similarity index 92%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/provider/ConsistencyProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/consistency/ConsistencyProvider.java
index 84f9648..962ff15 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/provider/ConsistencyProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/consistency/ConsistencyProvider.java
@@ -1,10 +1,9 @@
-package org.eclipse.basyx.vab.backend.provider;
+package org.eclipse.basyx.vab.modelprovider.consistency;
 
-import org.eclipse.basyx.aas.api.exception.ReadOnlyException;
-import org.eclipse.basyx.aas.api.services.ILocalModelProvider;
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.exception.ReadOnlyException;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
-public class ConsistencyProvider<T extends IModelProvider> implements ILocalModelProvider {
+public class ConsistencyProvider<T extends IModelProvider> implements IModelProvider {
 
 	/**
 	 * Reference to IModelProvider backend
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/FileSystemProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/FileSystemProvider.java
similarity index 96%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/FileSystemProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/FileSystemProvider.java
index 5abc275..2074dc1 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/FileSystemProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/FileSystemProvider.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.provider.filesystem;
+package org.eclipse.basyx.vab.modelprovider.filesystem;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -9,14 +9,14 @@
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.basyx.vab.backend.http.tools.GSONTools;
-import org.eclipse.basyx.vab.backend.http.tools.factory.DefaultTypeFactory;
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
-import org.eclipse.basyx.vab.provider.filesystem.filesystem.File;
-import org.eclipse.basyx.vab.provider.filesystem.filesystem.FileSystem;
-import org.eclipse.basyx.vab.provider.filesystem.filesystem.FileType;
-import org.eclipse.basyx.vab.provider.list.InvalidListReferenceException;
+import org.eclipse.basyx.vab.coder.json.serialization.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONTools;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.filesystem.filesystem.File;
+import org.eclipse.basyx.vab.modelprovider.filesystem.filesystem.FileSystem;
+import org.eclipse.basyx.vab.modelprovider.filesystem.filesystem.FileType;
+import org.eclipse.basyx.vab.modelprovider.list.InvalidListReferenceException;
 
 /**
  * Provides models based on a generic file system
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/TimeProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/TimeProvider.java
similarity index 65%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/TimeProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/TimeProvider.java
index 8615570..2cb1ac9 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/TimeProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/TimeProvider.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.provider.filesystem;
+package org.eclipse.basyx.vab.modelprovider.filesystem;
 
 import java.time.LocalDateTime;
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/filesystem/File.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/filesystem/File.java
similarity index 87%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/filesystem/File.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/filesystem/File.java
index 333f1cb..20792f9 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/filesystem/File.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/filesystem/File.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.provider.filesystem.filesystem;
+package org.eclipse.basyx.vab.modelprovider.filesystem.filesystem;
 
 /**
  * Represents a generic file which is either data or a directory
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/filesystem/FileSystem.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/filesystem/FileSystem.java
similarity index 89%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/filesystem/FileSystem.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/filesystem/FileSystem.java
index 39b242c..5d8a0bf 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/filesystem/FileSystem.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/filesystem/FileSystem.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.provider.filesystem.filesystem;
+package org.eclipse.basyx.vab.modelprovider.filesystem.filesystem;
 
 import java.util.List;
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/filesystem/FileType.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/filesystem/FileType.java
similarity index 67%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/filesystem/FileType.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/filesystem/FileType.java
index 4e33e04..395b3c0 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/filesystem/FileType.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/filesystem/FileType.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.provider.filesystem.filesystem;
+package org.eclipse.basyx.vab.modelprovider.filesystem.filesystem;
 
 /**
  * Represent the type of a file: Either it is data or a directory
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/filesystem/impl/GenericFileSystem.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/filesystem/GenericFileSystem.java
similarity index 91%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/filesystem/impl/GenericFileSystem.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/filesystem/GenericFileSystem.java
index bd0393e..08a6ddf 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/filesystem/filesystem/impl/GenericFileSystem.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/filesystem/filesystem/GenericFileSystem.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.provider.filesystem.filesystem.impl;
+package org.eclipse.basyx.vab.modelprovider.filesystem.filesystem;
 
 import java.io.FileWriter;
 import java.nio.charset.StandardCharsets;
@@ -14,10 +14,6 @@
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import org.eclipse.basyx.vab.provider.filesystem.filesystem.File;
-import org.eclipse.basyx.vab.provider.filesystem.filesystem.FileSystem;
-import org.eclipse.basyx.vab.provider.filesystem.filesystem.FileType;
-
 /**
  * Implements a generic file system
  * 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/IVABElementHandler.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/generic/IVABElementHandler.java
similarity index 89%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/IVABElementHandler.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/generic/IVABElementHandler.java
index 0426ed5..a2db72a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/IVABElementHandler.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/generic/IVABElementHandler.java
@@ -1,6 +1,6 @@
-package org.eclipse.basyx.vab.provider;
+package org.eclipse.basyx.vab.modelprovider.generic;
 
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 /**
  * Interface for a handler, that can handle an object in the VAB. Can process
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/VABModelProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/generic/VABModelProvider.java
similarity index 96%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/VABModelProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/generic/VABModelProvider.java
index 5099b86..4ed934e 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/VABModelProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/generic/VABModelProvider.java
@@ -1,9 +1,9 @@
-package org.eclipse.basyx.vab.provider;
+package org.eclipse.basyx.vab.modelprovider.generic;
 
 import java.util.function.Function;
 
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 /**
  * A generic VAB model provider.
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/VABMultiElementHandler.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/generic/VABMultiElementHandler.java
similarity index 96%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/VABMultiElementHandler.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/generic/VABMultiElementHandler.java
index f48c661..10e6d58 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/VABMultiElementHandler.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/generic/VABMultiElementHandler.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.provider;
+package org.eclipse.basyx.vab.modelprovider.generic;
 
 /**
  * Handler that does not handle objects by itself, but consists of multiple
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/lambda/VABLambdaHandler.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/lambda/VABLambdaHandler.java
similarity index 96%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/lambda/VABLambdaHandler.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/lambda/VABLambdaHandler.java
index af076d9..1a1c7a7 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/lambda/VABLambdaHandler.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/lambda/VABLambdaHandler.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.provider.lambda;
+package org.eclipse.basyx.vab.modelprovider.lambda;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -10,8 +10,8 @@
 import java.util.function.Consumer;
 import java.util.function.Supplier;
 
-import org.eclipse.basyx.vab.provider.IVABElementHandler;
-import org.eclipse.basyx.vab.provider.VABMultiElementHandler;
+import org.eclipse.basyx.vab.modelprovider.generic.IVABElementHandler;
+import org.eclipse.basyx.vab.modelprovider.generic.VABMultiElementHandler;
 
 /**
  * VABHandler that can additionally handle maps with hidden
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/lambda/VABLambdaProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/lambda/VABLambdaProvider.java
similarity index 72%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/lambda/VABLambdaProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/lambda/VABLambdaProvider.java
index 4affc67..92fc215 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/lambda/VABLambdaProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/lambda/VABLambdaProvider.java
@@ -1,10 +1,10 @@
-package org.eclipse.basyx.vab.provider.lambda;
+package org.eclipse.basyx.vab.modelprovider.lambda;
 
 import java.util.Map;
 
-import org.eclipse.basyx.vab.provider.hashmap.VABHashmapProvider;
-import org.eclipse.basyx.vab.provider.hashmap.VABMapHandler;
-import org.eclipse.basyx.vab.provider.list.VABListHandler;
+import org.eclipse.basyx.vab.modelprovider.list.VABListHandler;
+import org.eclipse.basyx.vab.modelprovider.map.VABHashmapProvider;
+import org.eclipse.basyx.vab.modelprovider.map.VABMapHandler;
 
 /**
  * Provider that optionally allows properties to be modifiable by hidden
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/lambda/VABLambdaProviderHelper.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/lambda/VABLambdaProviderHelper.java
similarity index 95%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/lambda/VABLambdaProviderHelper.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/lambda/VABLambdaProviderHelper.java
index 7c3882c..74e75ce 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/lambda/VABLambdaProviderHelper.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/lambda/VABLambdaProviderHelper.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.provider.lambda;
+package org.eclipse.basyx.vab.modelprovider.lambda;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -8,7 +8,7 @@
 
 /**
  * Helper class which allows to easily create properties as processed by the
- * {@link org.eclipse.basyx.vab.provider.lambda.VABLambdaProvider}
+ * {@link org.eclipse.basyx.vab.modelprovider.lambda.VABLambdaProvider}
  * 
  * @author schnicke, espen
  *
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/list/InvalidListReferenceException.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/list/InvalidListReferenceException.java
similarity index 90%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/list/InvalidListReferenceException.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/list/InvalidListReferenceException.java
index be655d6..ad50666 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/list/InvalidListReferenceException.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/list/InvalidListReferenceException.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.provider.list;
+package org.eclipse.basyx.vab.modelprovider.list;
 
 /**
  * Exception that indicates that a list reference has been used, which is not
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/list/ReferencedArrayList.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/list/ReferencedArrayList.java
similarity index 98%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/list/ReferencedArrayList.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/list/ReferencedArrayList.java
index d447ac9..5990c1c 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/list/ReferencedArrayList.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/list/ReferencedArrayList.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.provider.list;
+package org.eclipse.basyx.vab.modelprovider.list;
 
 import java.util.ArrayList;
 import java.util.Collection;
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/list/VABListHandler.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/list/VABListHandler.java
similarity index 97%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/list/VABListHandler.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/list/VABListHandler.java
index 655d1e3..a593848 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/list/VABListHandler.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/list/VABListHandler.java
@@ -1,10 +1,10 @@
-package org.eclipse.basyx.vab.provider.list;
+package org.eclipse.basyx.vab.modelprovider.list;
 
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.basyx.vab.provider.IVABElementHandler;
+import org.eclipse.basyx.vab.modelprovider.generic.IVABElementHandler;
 
 /**
  * A VAB list handler. Handles "List" elements. Elements in lists can not be
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/hashmap/VABHashmapProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/map/VABHashmapProvider.java
similarity index 67%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/hashmap/VABHashmapProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/map/VABHashmapProvider.java
index 4e8c9b0..475e0b2 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/hashmap/VABHashmapProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/map/VABHashmapProvider.java
@@ -1,11 +1,11 @@
-package org.eclipse.basyx.vab.provider.hashmap;
+package org.eclipse.basyx.vab.modelprovider.map;
 
 import java.util.Map;
 
-import org.eclipse.basyx.vab.provider.IVABElementHandler;
-import org.eclipse.basyx.vab.provider.VABModelProvider;
-import org.eclipse.basyx.vab.provider.VABMultiElementHandler;
-import org.eclipse.basyx.vab.provider.list.VABListHandler;
+import org.eclipse.basyx.vab.modelprovider.generic.IVABElementHandler;
+import org.eclipse.basyx.vab.modelprovider.generic.VABModelProvider;
+import org.eclipse.basyx.vab.modelprovider.generic.VABMultiElementHandler;
+import org.eclipse.basyx.vab.modelprovider.list.VABListHandler;
 
 
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/hashmap/VABMapHandler.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/map/VABMapHandler.java
similarity index 91%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/hashmap/VABMapHandler.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/map/VABMapHandler.java
index 20db632..a761cd8 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/provider/hashmap/VABMapHandler.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/modelprovider/map/VABMapHandler.java
@@ -1,8 +1,8 @@
-package org.eclipse.basyx.vab.provider.hashmap;
+package org.eclipse.basyx.vab.modelprovider.map;
 
 import java.util.Map;
 
-import org.eclipse.basyx.vab.provider.IVABElementHandler;
+import org.eclipse.basyx.vab.modelprovider.generic.IVABElementHandler;
 
 /**
  * A VAB map handler. Handles "Map" elements.
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/ConnectorProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/api/ConnectorProvider.java
similarity index 80%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/ConnectorProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/api/ConnectorProvider.java
index bddb7db..769e788 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/ConnectorProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/api/ConnectorProvider.java
@@ -1,10 +1,9 @@
-package org.eclipse.basyx.vab.backend.connector;
+package org.eclipse.basyx.vab.protocol.api;
 
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.basyx.vab.core.IConnectorProvider;
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 /**
  * ConnectorProvider that caches connectors for addresses to save resources
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/IBaSyxConnector.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/api/IBaSyxConnector.java
similarity index 96%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/IBaSyxConnector.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/api/IBaSyxConnector.java
index 5b8000b..2832707 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/IBaSyxConnector.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/api/IBaSyxConnector.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.connector;
+package org.eclipse.basyx.vab.protocol.api;
 
 /**
  * Connector interface for technology specific communication. Returns the
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/IConnectorProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/api/IConnectorProvider.java
similarity index 75%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/IConnectorProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/api/IConnectorProvider.java
index 8063f6a..15007d8 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/core/IConnectorProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/api/IConnectorProvider.java
@@ -1,7 +1,9 @@
 /**
  * 
  */
-package org.eclipse.basyx.vab.core;
+package org.eclipse.basyx.vab.protocol.api;
+
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 /**
  * Base interface for providers that return IModelProviders that connects to
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/basyx/CoderTools.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/CoderTools.java
similarity index 98%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/basyx/CoderTools.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/CoderTools.java
index 3fa15ec..92f676d 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/basyx/CoderTools.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/CoderTools.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.server.basyx;
+package org.eclipse.basyx.vab.protocol.basyx;
 
 import java.nio.charset.StandardCharsets;
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/basyx/BaSyxConnector.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/connector/BaSyxConnector.java
similarity index 95%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/basyx/BaSyxConnector.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/connector/BaSyxConnector.java
index 149cb89..8b3c192 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/basyx/BaSyxConnector.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/connector/BaSyxConnector.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.connector.basyx;
+package org.eclipse.basyx.vab.protocol.basyx.connector;
 
 import java.io.IOException;
 import java.net.InetAddress;
@@ -6,10 +6,10 @@
 import java.nio.ByteBuffer;
 import java.nio.channels.SocketChannel;
 
-import org.eclipse.basyx.aas.api.exception.ServerException;
-import org.eclipse.basyx.vab.backend.connector.IBaSyxConnector;
-import org.eclipse.basyx.vab.backend.server.basyx.CoderTools;
-import org.eclipse.basyx.vab.backend.server.basyx.VABBaSyxTCPInterface;
+import org.eclipse.basyx.vab.exception.ServerException;
+import org.eclipse.basyx.vab.protocol.api.IBaSyxConnector;
+import org.eclipse.basyx.vab.protocol.basyx.CoderTools;
+import org.eclipse.basyx.vab.protocol.basyx.server.VABBaSyxTCPInterface;
 
 
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/basyx/BaSyxConnectorProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/connector/BaSyxConnectorProvider.java
similarity index 71%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/basyx/BaSyxConnectorProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/connector/BaSyxConnectorProvider.java
index b33ac73..ae37d41 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/basyx/BaSyxConnectorProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/connector/BaSyxConnectorProvider.java
@@ -1,10 +1,10 @@
-package org.eclipse.basyx.vab.backend.connector.basyx;
+package org.eclipse.basyx.vab.protocol.basyx.connector;
 
-import org.eclipse.basyx.vab.backend.connector.ConnectorProvider;
-import org.eclipse.basyx.vab.backend.connector.JSONConnector;
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.vab.coder.json.connector.JSONConnector;
+import org.eclipse.basyx.vab.modelprovider.VABElementProxy;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.protocol.api.ConnectorProvider;
 
 
 /**
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/support/backend/servers/AASTCPServer.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/server/AASTCPServer.java
similarity index 85%
rename from sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/support/backend/servers/AASTCPServer.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/server/AASTCPServer.java
index 7bc49df..868e56e 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/support/backend/servers/AASTCPServer.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/server/AASTCPServer.java
@@ -1,10 +1,9 @@
-package org.eclipse.basyx.testsuite.support.backend.servers;
+package org.eclipse.basyx.vab.protocol.basyx.server;
 
 import java.io.IOException;
 
-import org.eclipse.basyx.sdk.api.service.BaSyxService;
-import org.eclipse.basyx.vab.backend.server.basyx.BaSyxTCPServer;
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.service.api.BaSyxService;
 
 /**
  * BaSyx TCP provider test suite server providing a SimpleVABElement vab element
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/basyx/BaSyxTCPServer.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/server/BaSyxTCPServer.java
similarity index 95%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/basyx/BaSyxTCPServer.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/server/BaSyxTCPServer.java
index 22ffac4..f4bc680 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/basyx/BaSyxTCPServer.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/server/BaSyxTCPServer.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.server.basyx;
+package org.eclipse.basyx.vab.protocol.basyx.server;
 
 import java.io.IOException;
 import java.net.InetAddress;
@@ -7,8 +7,8 @@
 import java.nio.channels.ServerSocketChannel;
 import java.nio.channels.SocketChannel;
 
-import org.eclipse.basyx.sdk.api.service.BaSyxService;
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.service.api.BaSyxService;
 
 
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/basyx/VABBaSyxTCPInterface.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/server/VABBaSyxTCPInterface.java
similarity index 96%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/basyx/VABBaSyxTCPInterface.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/server/VABBaSyxTCPInterface.java
index 4371c3b..3f170ff 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/basyx/VABBaSyxTCPInterface.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/basyx/server/VABBaSyxTCPInterface.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.server.basyx;
+package org.eclipse.basyx.vab.protocol.basyx.server;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -6,8 +6,9 @@
 import java.nio.ByteBuffer;
 import java.nio.channels.SocketChannel;
 
-import org.eclipse.basyx.vab.backend.server.utils.JSONProvider;
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.coder.json.provider.JSONProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.protocol.basyx.CoderTools;
 
 
 /**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/http/HTTPConnector.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/connector/HTTPConnector.java
similarity index 96%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/http/HTTPConnector.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/connector/HTTPConnector.java
index 2d4cfbd..4227e7a 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/http/HTTPConnector.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/connector/HTTPConnector.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.connector.http;
+package org.eclipse.basyx.vab.protocol.http.connector;
 
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
@@ -8,9 +8,9 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
-import org.eclipse.basyx.aas.api.exception.ServerException;
-import org.eclipse.basyx.vab.backend.connector.IBaSyxConnector;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.vab.exception.ServerException;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.protocol.api.IBaSyxConnector;
 import org.glassfish.jersey.client.HttpUrlConnectorProvider;
 
 /**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/connector/HTTPConnectorProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/connector/HTTPConnectorProvider.java
new file mode 100644
index 0000000..fb86647
--- /dev/null
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/connector/HTTPConnectorProvider.java
@@ -0,0 +1,19 @@
+package org.eclipse.basyx.vab.protocol.http.connector;
+
+import org.eclipse.basyx.vab.coder.json.connector.JSONConnector;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.protocol.api.ConnectorProvider;
+
+public class HTTPConnectorProvider extends ConnectorProvider {
+
+	/**
+	 * returns HTTPConnetor wrapped with ConnectedHashmapProvider that handles
+	 * message header information
+	 */
+	@Override
+	protected IModelProvider createProvider(String addr) {
+
+		return new JSONConnector(new HTTPConnector(addr));
+	}
+
+}
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/support/backend/servers/AASHTTPServer.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/AASHTTPServer.java
similarity index 97%
rename from sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/support/backend/servers/AASHTTPServer.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/AASHTTPServer.java
index ebb7546..173f18b 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/support/backend/servers/AASHTTPServer.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/AASHTTPServer.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.testsuite.support.backend.servers;
+package org.eclipse.basyx.vab.protocol.http.server;
 
 import java.io.File;
 import java.util.Iterator;
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/support/backend/servers/BaSyxContext.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/BaSyxContext.java
similarity index 95%
rename from sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/support/backend/servers/BaSyxContext.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/BaSyxContext.java
index 3bff73d..9ba9283 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/support/backend/servers/BaSyxContext.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/BaSyxContext.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.testsuite.support.backend.servers;
+package org.eclipse.basyx.vab.protocol.http.server;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -7,7 +7,7 @@
 
 import javax.servlet.http.HttpServlet;
 
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.AssetAdministrationShell;
+import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
 
 
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/http/BasysHTTPServlet.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/BasysHTTPServlet.java
similarity index 86%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/http/BasysHTTPServlet.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/BasysHTTPServlet.java
index 0908f04..fb518fc 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/http/BasysHTTPServlet.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/BasysHTTPServlet.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.server.http;
+package org.eclipse.basyx.vab.protocol.http.server;
 
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -10,10 +10,10 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.eclipse.basyx.vab.backend.http.tools.GSONTools;
-import org.eclipse.basyx.vab.backend.http.tools.factory.DefaultTypeFactory;
-import org.eclipse.basyx.vab.backend.server.utils.IResult;
-import org.eclipse.basyx.vab.backend.server.utils.Result;
+import org.eclipse.basyx.vab.coder.json.metaprotocol.IResult;
+import org.eclipse.basyx.vab.coder.json.metaprotocol.Result;
+import org.eclipse.basyx.vab.coder.json.serialization.DefaultTypeFactory;
+import org.eclipse.basyx.vab.coder.json.serialization.GSONTools;
 
 /**
  * HTTP Servelet superclass to enable HTTP Patch
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/http/VABHTTPInterface.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/VABHTTPInterface.java
similarity index 95%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/http/VABHTTPInterface.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/VABHTTPInterface.java
index 2027978..6e2ff78 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/http/VABHTTPInterface.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/http/server/VABHTTPInterface.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.server.http;
+package org.eclipse.basyx.vab.protocol.http.server;
 
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -9,9 +9,9 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.eclipse.basyx.vab.backend.server.utils.JSONProvider;
-import org.eclipse.basyx.vab.core.IModelProvider;
-import org.eclipse.basyx.vab.core.tools.VABPathTools;
+import org.eclipse.basyx.vab.coder.json.provider.JSONProvider;
+import org.eclipse.basyx.vab.modelprovider.VABPathTools;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
 
 
 /**
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/opcua/OpcUaConnector.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/connector/OpcUaConnector.java
similarity index 97%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/opcua/OpcUaConnector.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/connector/OpcUaConnector.java
index b576579..00225c9 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/opcua/OpcUaConnector.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/connector/OpcUaConnector.java
@@ -1,12 +1,12 @@
-package org.eclipse.basyx.vab.backend.connector.opcua;
+package org.eclipse.basyx.vab.protocol.opcua.connector;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.CompletableFuture;
 
-import org.eclipse.basyx.aas.api.exception.ServerException;
-import org.eclipse.basyx.vab.backend.server.opcua.BaSyxOpcUaClientRunner;
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.exception.ServerException;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.protocol.opcua.server.BaSyxOpcUaClientRunner;
 import org.eclipse.milo.opcua.stack.core.Identifiers;
 import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
 import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/opcua/OpcUaConnectorProvider.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/connector/OpcUaConnectorProvider.java
similarity index 66%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/opcua/OpcUaConnectorProvider.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/connector/OpcUaConnectorProvider.java
index 491249b..450f534 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/connector/opcua/OpcUaConnectorProvider.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/connector/OpcUaConnectorProvider.java
@@ -1,7 +1,7 @@
-package org.eclipse.basyx.vab.backend.connector.opcua;
+package org.eclipse.basyx.vab.protocol.opcua.connector;
 
-import org.eclipse.basyx.vab.backend.connector.ConnectorProvider;
-import org.eclipse.basyx.vab.core.IModelProvider;
+import org.eclipse.basyx.vab.modelprovider.api.IModelProvider;
+import org.eclipse.basyx.vab.protocol.api.ConnectorProvider;
 
 /**
  * OPC UA connector provider class
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/opcua/BaSyxOpcUaClient.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/server/BaSyxOpcUaClient.java
similarity index 81%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/opcua/BaSyxOpcUaClient.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/server/BaSyxOpcUaClient.java
index a64b5f5..14aa223 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/opcua/BaSyxOpcUaClient.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/server/BaSyxOpcUaClient.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.server.opcua;
+package org.eclipse.basyx.vab.protocol.opcua.server;
 
 import java.util.concurrent.CompletableFuture;
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/opcua/BaSyxOpcUaClientRunner.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/server/BaSyxOpcUaClientRunner.java
similarity index 98%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/opcua/BaSyxOpcUaClientRunner.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/server/BaSyxOpcUaClientRunner.java
index 1008a7a..d8fdd76 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/opcua/BaSyxOpcUaClientRunner.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/server/BaSyxOpcUaClientRunner.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.server.opcua;
+package org.eclipse.basyx.vab.protocol.opcua.server;
 
 import static org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.uint;
 
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/opcua/KeyStoreLoaderClient.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/server/KeyStoreLoaderClient.java
similarity index 98%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/opcua/KeyStoreLoaderClient.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/server/KeyStoreLoaderClient.java
index ec4f7f7..4c45abd 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/backend/server/opcua/KeyStoreLoaderClient.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/server/KeyStoreLoaderClient.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.vab.backend.server.opcua;
+package org.eclipse.basyx.vab.protocol.opcua.server;
 
 import java.io.InputStream;
 import java.io.OutputStream;
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/sdk/api/service/BaSyxService.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/service/api/BaSyxService.java
similarity index 91%
rename from sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/sdk/api/service/BaSyxService.java
rename to sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/service/api/BaSyxService.java
index 5dc55bb..bd5dbbe 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/sdk/api/service/BaSyxService.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/service/api/BaSyxService.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.sdk.api.service;
+package org.eclipse.basyx.vab.service.api;
 
 
 
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/facade/submodel/TestSubmodelFacadeClass.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/facade/submodel/TestSubmodelFacadeClass.java
deleted file mode 100644
index 54c2dd6..0000000
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/facade/submodel/TestSubmodelFacadeClass.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.eclipse.basyx.testsuite.regression.aas.facade.submodel;
-
-
-import org.eclipse.basyx.aas.impl.metamodel.facades.SubmodelFacadeCustomSemantics;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.HasDataSpecification;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.haskind.Kind;
-import org.eclipse.basyx.aas.impl.metamodel.hashmap.aas.qualifier.qualifiable.Qualifier;
-import org.junit.Test;
-
-
-
-/**
- * Test class that tests the SubModel facade classes
- * FIXME: Not a real test case
- * @author kuhn
- *
- */
-public class TestSubmodelFacadeClass {
-
-	
-	/**
-	 * Test method
-	 * 
-	 * @throws Exception
-	 */
-	@Test
-	public void testSubmodelFactoryInternalSemantics() throws Exception {
-		// Create a submodel facade
-		SubmodelFacadeCustomSemantics subModel = new SubmodelFacadeCustomSemantics(
-				"", "valIdType",
-					"valId",
-					"valIdShort",
-					"valCategory",
-					"valDescription",
-				new Qualifier(), 
-				new HasDataSpecification(), 
-					Kind.Instance,
-					"valVersion",
-					"valRevision"
-				);
-		
-		// Access values through provider interface
-		System.out.println("2:"+subModel.getIDShort());
-		
-		System.out.println("4:"+subModel.getKind());
-
-	}
-	
-}
diff --git a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/provider/xml/transformers/tests/TestTransformAsset.java b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/factory/xml/TestTransformAsset.java
similarity index 84%
rename from sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/provider/xml/transformers/tests/TestTransformAsset.java
rename to sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/factory/xml/TestTransformAsset.java
index b7af512..d55dce9 100644
--- a/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/vab/provider/xml/transformers/tests/TestTransformAsset.java
+++ b/sdks/java/basys.sdk/src/test/java/org/eclipse/basyx/testsuite/regression/aas/factory/xml/TestTransformAsset.java
@@ -1,4 +1,4 @@
-package org.eclipse.basyx.testsuite.regression.vab.provider.xml.transformers.tests;
+package org.eclipse.basyx.testsuite.regression.aas.factory.xml;