Minor bugfixes
diff --git a/sdks/dotnet/basyx-components/BaSyx.AAS.Client.Http/AssetAdministrationShellHttpClient.cs b/sdks/dotnet/basyx-components/BaSyx.AAS.Client.Http/AssetAdministrationShellHttpClient.cs
index 13b1946..511bf95 100644
--- a/sdks/dotnet/basyx-components/BaSyx.AAS.Client.Http/AssetAdministrationShellHttpClient.cs
+++ b/sdks/dotnet/basyx-components/BaSyx.AAS.Client.Http/AssetAdministrationShellHttpClient.cs
@@ -9,12 +9,10 @@
 * SPDX-License-Identifier: EPL-2.0
 *******************************************************************************/
 using BaSyx.API.Clients;
-using BaSyx.API.Components;
 using BaSyx.Models.Core.AssetAdministrationShell.Generics;
 using BaSyx.Utils.Client.Http;
 using BaSyx.Utils.ResultHandling;
 using System;
-using System.Collections.Generic;
 using System.Net.Http;
 using BaSyx.Utils.PathHandling;
 using BaSyx.Models.Core.Common;
@@ -24,57 +22,72 @@
 using NLog;
 using BaSyx.Models.Communication;
 using BaSyx.Utils.DependencyInjection;
+using System.Collections.Generic;
+using BaSyx.Models.Core.AssetAdministrationShell.Implementations;
+using Newtonsoft.Json;
+using System.Text;
 
 namespace BaSyx.AAS.Client.Http
 {
-    public class AssetAdministrationShellHttpClient : SimpleHttpClient, IAssetAdministrationShellClient, ISubmodelServiceProviderRegistry
+    public class AssetAdministrationShellHttpClient : SimpleHttpClient, 
+        IAssetAdministrationShellClient, 
+        IAssetAdministrationShellSubmodelClient, 
+        ISubmodelRepositoryClient
     {
         private static readonly ILogger logger = LogManager.GetCurrentClassLogger();
+        
+        public static bool USE_HTTPS = true;
 
         private const string SEPARATOR = "/";
         private const string AAS = "aas";
         private const string SUBMODELS = "submodels";
         private const string SUBMODEL = "submodel";
         private const string SUBMODEL_ELEMENTS = "submodelElements";
-        private const string PROPERTIES = "properties";
-        private const string OPERATIONS = "operations";
-        private const string EVENTS = "events";
         private const string VALUE = "value";
-        private const string ASYNC = "async";
+        private const string INVOKE = "invoke";
+        private const string SYNCHRONOUS = "?async=false";
+        private const string ASYNCHRONOUS = "?async=true";
         private const string INVOCATION_LIST = "invocationList";
 
-        private const string BINDING = "binding";
-        private const string BINDINGS = "bindings";
-
-        private const int REQUEST_TIMEOUT = 30000;
-
         public Uri Endpoint { get; }
+        public int RequestTimeout = DEFAULT_REQUEST_TIMEOUT;
 
-        private AssetAdministrationShellHttpClient()
+        private AssetAdministrationShellHttpClient(HttpClientHandler clientHandler) : base(clientHandler)
         {
             JsonSerializerSettings = new DependencyInjectionJsonSerializerSettings();
         }
 
-        public AssetAdministrationShellHttpClient(Uri endpoint) : this()
+        public AssetAdministrationShellHttpClient(Uri endpoint) : this(endpoint, DEFAULT_HTTP_CLIENT_HANDLER)
+        { }
+        public AssetAdministrationShellHttpClient(Uri endpoint, HttpClientHandler clientHandler) : this (clientHandler)
         {
             endpoint = endpoint ?? throw new ArgumentNullException(nameof(endpoint));
             Endpoint = endpoint;
         }
+        public AssetAdministrationShellHttpClient(IAssetAdministrationShellDescriptor aasDescriptor) : this(aasDescriptor, DEFAULT_HTTP_CLIENT_HANDLER)
+        { }
 
-        public AssetAdministrationShellHttpClient(IAssetAdministrationShellDescriptor aasDescriptor) : this()
+        public AssetAdministrationShellHttpClient(IAssetAdministrationShellDescriptor aasDescriptor, HttpClientHandler clientHandler) : this(clientHandler)
         {
             aasDescriptor = aasDescriptor ?? throw new ArgumentNullException(nameof(aasDescriptor));
-            HttpEndpoint httpEndpoint = aasDescriptor.Endpoints?.OfType<HttpEndpoint>()?.FirstOrDefault();
+            IEnumerable<HttpEndpoint> httpEndpoints = aasDescriptor.Endpoints?.OfType<HttpEndpoint>();
+            HttpEndpoint httpEndpoint = null;
+            if (USE_HTTPS)
+                httpEndpoint = httpEndpoints?.FirstOrDefault(p => p.Type == Uri.UriSchemeHttps);
+            if (httpEndpoint == null)
+                httpEndpoint = httpEndpoints?.FirstOrDefault(p => p.Type == Uri.UriSchemeHttp);
+
             if (httpEndpoint == null || string.IsNullOrEmpty(httpEndpoint.Address))
                 throw new Exception("There is no http endpoint for instantiating a client");
             else
             {
-                if (!httpEndpoint.Address.EndsWith(SEPARATOR + AAS) || !httpEndpoint.Address.EndsWith(SEPARATOR + AAS + SEPARATOR))
+                if (!httpEndpoint.Address.EndsWith(SEPARATOR + AAS) && !httpEndpoint.Address.EndsWith(SEPARATOR + AAS + SEPARATOR))
                     Endpoint = new Uri(httpEndpoint.Address + SEPARATOR + AAS);
                 else
                     Endpoint = new Uri(httpEndpoint.Address);
             }
         }
+        
 
 
         public Uri GetUri(params string[] pathElements)
@@ -87,218 +100,113 @@
         public IResult<IAssetAdministrationShellDescriptor> RetrieveAssetAdministrationShellDescriptor()
         {
             var request = base.CreateRequest(GetUri(), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<IAssetAdministrationShellDescriptor>(response, response.Entity);
         }
 
         public IResult<IAssetAdministrationShell> RetrieveAssetAdministrationShell()
         {
             var request = base.CreateRequest(GetUri(), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<IAssetAdministrationShell>(response, response.Entity);
         }
 
-        public IResult<ISubmodel> CreateSubmodel(ISubmodel submodel)
+        public IResult<ISubmodel> CreateOrUpdateSubmodel(ISubmodel submodel)
         {
-            var request = base.CreateJsonContentRequest(GetUri(SUBMODELS), HttpMethod.Put, submodel);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var request = base.CreateJsonContentRequest(GetUri(SUBMODELS, submodel.IdShort), HttpMethod.Put, submodel);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<ISubmodel>(response, response.Entity);
         }
 
         public IResult<IElementContainer<ISubmodel>> RetrieveSubmodels()
         {
             var request = base.CreateRequest(GetUri(SUBMODELS), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<ElementContainer<ISubmodel>>(response, response.Entity);
         }
 
         public IResult<ISubmodel> RetrieveSubmodel(string submodelId)
         {
             var request = base.CreateRequest(GetUri(SUBMODELS, submodelId), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<ISubmodel>(response, response.Entity);
         }
 
         public IResult DeleteSubmodel(string submodelId)
         {
             var request = base.CreateRequest(GetUri(SUBMODELS, submodelId), HttpMethod.Delete);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse(response, response.Entity);
         }
-
-        public IResult<IOperation> CreateOperation(string submodelId, IOperation operation)
-        {
-            var request = base.CreateJsonContentRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, OPERATIONS), HttpMethod.Put, operation);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse<IOperation>(response, response.Entity);
-        }
-
+      
         public IResult<IElementContainer<ISubmodelElement>> RetrieveSubmodelElements(string submodelId)
         {
             var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, SUBMODEL_ELEMENTS), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<ElementContainer<ISubmodelElement>>(response, response.Entity);
         }
 
-        public IResult<IElementContainer<IOperation>> RetrieveOperations(string submodelId)
+        public IResult<ISubmodelElement> RetrieveSubmodelElement(string submodelId, string seIdShortPath)
         {
-            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, OPERATIONS), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse<ElementContainer<IOperation>>(response, response.Entity);
+            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, SUBMODEL_ELEMENTS, seIdShortPath), HttpMethod.Get);
+            var response = base.SendRequest(request, RequestTimeout);
+            return base.EvaluateResponse<ISubmodelElement>(response, response.Entity);
         }
 
-        public IResult<IOperation> RetrieveOperation(string submodelId, string operationId)
+        public IResult<ISubmodelElement> CreateOrUpdateSubmodelElement(string submodelId, string rootSeIdShortPath, ISubmodelElement submodelElement)
         {
-            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, OPERATIONS, operationId), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse<IOperation>(response, response.Entity);
+            var request = base.CreateJsonContentRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, SUBMODEL_ELEMENTS, rootSeIdShortPath), HttpMethod.Put, submodelElement);
+            var response = base.SendRequest(request, RequestTimeout);
+            return base.EvaluateResponse<ISubmodelElement>(response, response.Entity);
         }
 
-        public IResult DeleteOperation(string submodelId, string operationId)
+        public IResult UpdateSubmodelElementValue(string submodelId, string seIdShortPath, IValue value)
         {
-            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, OPERATIONS, operationId), HttpMethod.Delete);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var request = base.CreateJsonContentRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, SUBMODEL_ELEMENTS, seIdShortPath, VALUE), HttpMethod.Put, value.Value);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse(response, response.Entity);
         }
 
-        public IResult<InvocationResponse> InvokeOperation(string submodelId, string operationId, InvocationRequest invocationRequest)
+        public IResult<IValue> RetrieveSubmodelElementValue(string submodelId, string seIdShortPath)
         {
-            var request = base.CreateJsonContentRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, OPERATIONS, operationId), HttpMethod.Post, invocationRequest);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, SUBMODEL_ELEMENTS, seIdShortPath, VALUE), HttpMethod.Get);
+            var response = base.SendRequest(request, RequestTimeout);
+            IResult result = base.EvaluateResponse(response, response.Entity);
+            if (result.Success && result.Entity != null)
+            {
+                string sValue = Encoding.UTF8.GetString((byte[])result.Entity);
+                object deserializedValue = JsonConvert.DeserializeObject(sValue);
+                return new Result<IValue>(result.Success, new ElementValue(deserializedValue, deserializedValue.GetType()), result.Messages);
+            }                
+            else
+                return new Result<IValue>(result);
+        }
+
+        public IResult DeleteSubmodelElement(string submodelId, string seIdShortPath)
+        {
+            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, SUBMODEL_ELEMENTS, seIdShortPath), HttpMethod.Delete);
+            var response = base.SendRequest(request, RequestTimeout);
+            return base.EvaluateResponse(response, response.Entity);
+        }
+
+        public IResult<InvocationResponse> InvokeOperation(string submodelId, string operationIdShortPath, InvocationRequest invocationRequest)
+        {
+            var request = base.CreateJsonContentRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, SUBMODEL_ELEMENTS, operationIdShortPath, INVOKE + SYNCHRONOUS), HttpMethod.Post, invocationRequest);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<InvocationResponse>(response, response.Entity);
         }
-
-        public IResult<IProperty> CreateProperty(string submodelId, IProperty property)
+        public IResult<CallbackResponse> InvokeOperationAsync(string submodelId, string operationIdShortPath, InvocationRequest invocationRequest)
         {
-            var request = base.CreateJsonContentRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, PROPERTIES), HttpMethod.Put, property);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse<IProperty>(response, response.Entity);
-        }
-
-        public IResult<ISubmodelElement> CreateSubmodelElement(string submodelId, ISubmodelElement submodelElement)
-        {
-            var request = base.CreateJsonContentRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, SUBMODEL_ELEMENTS), HttpMethod.Put, submodelElement);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse<ISubmodelElement>(response, response.Entity);
-        }
-
-        public IResult<IElementContainer<IProperty>> RetrieveProperties(string submodelId)
-        {
-            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, PROPERTIES), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse<ElementContainer<IProperty>>(response, response.Entity);
-        }
-
-        public IResult<IProperty> RetrieveProperty(string submodelId, string propertyId)
-        {
-            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, PROPERTIES, propertyId), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse<IProperty>(response, response.Entity);
-        }
-
-        public IResult<ISubmodelElement> RetrieveSubmodelElement(string submodelId, string submodelElementId)
-        {
-            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, SUBMODEL_ELEMENTS, submodelElementId), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse<ISubmodelElement>(response, response.Entity);
-        }
-
-        public IResult UpdatePropertyValue(string submodelId, string propertyId, IValue value)
-        {
-            var request = base.CreateJsonContentRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, PROPERTIES, propertyId, VALUE), HttpMethod.Put, value);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse(response, response.Entity);
-        }
-
-        public IResult<IValue> RetrievePropertyValue(string submodelId, string propertyId)
-        {
-            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, PROPERTIES, propertyId, VALUE), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse<IValue>(response, response.Entity);
-        }
-
-        public IResult DeleteSubmodelElement(string submodelId, string submodelElementId)
-        {
-            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, SUBMODEL_ELEMENTS, submodelElementId), HttpMethod.Delete);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse(response, response.Entity);
-        }
-
-        public IResult DeleteProperty(string submodelId, string propertyId)
-        {
-            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, PROPERTIES, propertyId), HttpMethod.Delete);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse(response, response.Entity);
-        }
-
-        public IResult<IEvent> CreateEvent(string submodelId, IEvent eventable)
-        {
-            var request = base.CreateJsonContentRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, EVENTS), HttpMethod.Put, eventable);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse<IEvent>(response, response.Entity);
-        }
-
-        public IResult<IElementContainer<IEvent>> RetrieveEvents(string submodelId)
-        {
-            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, EVENTS), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse<ElementContainer<IEvent>>(response, response.Entity);
-        }
-
-        public IResult<IEvent> RetrieveEvent(string submodelId, string eventId)
-        {
-            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, EVENTS, eventId), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse<IEvent>(response, response.Entity);
-        }
-
-        public IResult DeleteEvent(string submodelId, string eventId)
-        {
-            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, EVENTS, eventId), HttpMethod.Delete);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse(response, response.Entity);
-        }
-
-        public IResult<ISubmodelDescriptor> RegisterSubmodelServiceProvider(string id, ISubmodelServiceProvider submodelServiceProvider)
-        {
-            var request = base.CreateJsonContentRequest(GetUri(SUBMODELS, id, BINDING), HttpMethod.Post, submodelServiceProvider.ServiceDescriptor);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse<ISubmodelDescriptor>(response, response.Entity);
-        }
-
-        public IResult UnregisterSubmodelServiceProvider(string id)
-        {
-            var request = base.CreateRequest(GetUri(SUBMODELS, id, BINDING), HttpMethod.Delete);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse(response, response.Entity);
-        }
-
-        public IResult<ISubmodelServiceProvider> GetSubmodelServiceProvider(string id)
-        {
-            var request = base.CreateRequest(GetUri(SUBMODELS, id, BINDING), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse<ISubmodelServiceProvider>(response, response.Entity);
-        }
-
-        public IResult<IEnumerable<ISubmodelServiceProvider>> GetSubmodelServiceProviders()
-        {
-            var request = base.CreateRequest(GetUri(SUBMODELS, BINDINGS), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
-            return base.EvaluateResponse<IEnumerable<ISubmodelServiceProvider>>(response, response.Entity);
-        }
-        public IResult<CallbackResponse> InvokeOperationAsync(string submodelId, string operationId, InvocationRequest invocationRequest)
-        {
-            var request = base.CreateJsonContentRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, OPERATIONS, operationId, ASYNC), HttpMethod.Post, invocationRequest);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var request = base.CreateJsonContentRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, SUBMODEL_ELEMENTS, operationIdShortPath, INVOKE + ASYNCHRONOUS), HttpMethod.Post, invocationRequest);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<CallbackResponse>(response, response.Entity);
         }
 
-        public IResult<InvocationResponse> GetInvocationResult(string submodelId, string operationId, string requestId)
+        public IResult<InvocationResponse> GetInvocationResult(string submodelId, string operationIdShortPath, string requestId)
         {
-            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, OPERATIONS, operationId, INVOCATION_LIST, requestId), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var request = base.CreateRequest(GetUri(SUBMODELS, submodelId, SUBMODEL, SUBMODEL_ELEMENTS, operationIdShortPath, INVOCATION_LIST, requestId), HttpMethod.Get);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<InvocationResponse>(response, response.Entity);
-        }
-
+        }       
     }
 }
diff --git a/sdks/dotnet/basyx-components/BaSyx.AAS.Server.Http/AssetAdministrationShellRepositoryHttpServer.cs b/sdks/dotnet/basyx-components/BaSyx.AAS.Server.Http/AssetAdministrationShellRepositoryHttpServer.cs
index 25b972b..72e24b3 100644
--- a/sdks/dotnet/basyx-components/BaSyx.AAS.Server.Http/AssetAdministrationShellRepositoryHttpServer.cs
+++ b/sdks/dotnet/basyx-components/BaSyx.AAS.Server.Http/AssetAdministrationShellRepositoryHttpServer.cs
@@ -11,20 +11,14 @@
 using BaSyx.API.Components;
 using BaSyx.Components.Common;
 using BaSyx.Utils.Settings.Types;
-using Microsoft.AspNetCore.Builder;
 using Microsoft.AspNetCore.Hosting;
-using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.DependencyInjection;
-using System;
 using System.Reflection;
 
 namespace BaSyx.AAS.Server.Http
 {
     public class AssetAdministrationShellRepositoryHttpServer : ServerApplication
     {
-        private string submodelId = string.Empty;
-        private string aasId = string.Empty;
-
         public AssetAdministrationShellRepositoryHttpServer() : this(null, null)
         { }
 
@@ -44,77 +38,6 @@
             {
                 services.AddSingleton<IAssetAdministrationShellRepositoryServiceProvider>(repositoryServiceProvider);
             });
-        }
-
-        protected override void ConfigureServices(IServiceCollection services)
-        {
-            base.ConfigureServices(services);
-
-            //Check whether Asset Administration Shell Service Provider exists and bind it to the AssetAdministrationShell-Services-Controller
-            services.AddTransient<IAssetAdministrationShellServiceProvider>(ctx =>
-            {
-                IAssetAdministrationShellServiceProvider aasServiceProvider = ctx
-                .GetRequiredService<IAssetAdministrationShellRepositoryServiceProvider>()
-                .GetAssetAdministrationShellServiceProvider(aasId);
-
-                return aasServiceProvider;
-            });
-
-            //Check whether Submodel Service Provider exists and bind it to the Submodel-Services-Controller
-            services.AddTransient<ISubmodelServiceProvider>(ctx =>
-            {
-                IAssetAdministrationShellServiceProvider aasServiceProvider = ctx
-               .GetRequiredService<IAssetAdministrationShellRepositoryServiceProvider>()
-               .GetAssetAdministrationShellServiceProvider(aasId);
-
-                var submodelServiceProvider = aasServiceProvider.SubmodelRegistry.GetSubmodelServiceProvider(submodelId);
-                if (!submodelServiceProvider.Success || submodelServiceProvider.Entity == null)
-                {
-                    SubmodelServiceProvider cssp = new SubmodelServiceProvider();
-                    return cssp;
-                }
-                else
-                    return submodelServiceProvider.Entity;
-            });
-        }
-
-        protected override void Configure(IApplicationBuilder app)
-        {
-            base.Configure(app);
-            app.Use((context, next) =>
-            {
-                string[] pathElements = context.Request.Path.ToUriComponent()?.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
-                if (pathElements.Length >= 2)
-                {
-                    aasId = pathElements[1];
-                    if (pathElements.Length == 2)
-                    {
-                        context.Request.Path = new PathString("/shells/" + aasId);
-                    }
-                    else if (pathElements.Length == 3 && pathElements[2] == "aas")
-                    {
-                        context.Request.Path = new PathString("/aas");
-                    }
-                    else if (pathElements.Length == 4 && pathElements[3] == "submodels")
-                    {
-                        context.Request.Path = new PathString("/aas/submodels");
-                    }
-                    else if (pathElements.Length == 5)
-                    {
-                        submodelId = pathElements[4];
-                        context.Request.Path = new PathString("/aas/submodels/" + submodelId);
-                    }
-                    else if (pathElements.Length > 5)
-                    {
-                        submodelId = pathElements[4];
-                        string[] restOfPathArray = new string[pathElements.Length - 5];
-                        Array.Copy(pathElements, 5, restOfPathArray, 0, pathElements.Length - 5);
-                        string restOfPath = string.Join("/", restOfPathArray);
-                        context.Request.Path = new PathString("/" + restOfPath);
-                    }
-                }
-                return next();
-            });
-        }
+        }        
     }
 }
diff --git a/sdks/dotnet/basyx-components/BaSyx.API.Http.Controllers.AASX/BaSyx.API.Http.Controllers.AASX.xml b/sdks/dotnet/basyx-components/BaSyx.API.Http.Controllers.AASX/BaSyx.API.Http.Controllers.AASX.xml
index e4acb5e..14c3414 100644
--- a/sdks/dotnet/basyx-components/BaSyx.API.Http.Controllers.AASX/BaSyx.API.Http.Controllers.AASX.xml
+++ b/sdks/dotnet/basyx-components/BaSyx.API.Http.Controllers.AASX/BaSyx.API.Http.Controllers.AASX.xml
@@ -9,7 +9,7 @@
             The AASX Package Service
             </summary>
         </member>
-        <member name="M:BaSyx.API.Http.Controllers.PackageService.PackageService.#ctor(BaSyx.API.Components.IAssetAdministrationShellServiceProvider,Microsoft.AspNetCore.Hosting.IHostingEnvironment)">
+        <member name="M:BaSyx.API.Http.Controllers.PackageService.PackageService.#ctor(BaSyx.API.Components.IAssetAdministrationShellServiceProvider,Microsoft.AspNetCore.Hosting.IWebHostEnvironment)">
             <summary>
             Constructor for the AASX-Package Services Controller
             </summary>
diff --git a/sdks/dotnet/basyx-components/BaSyx.API.Http.Controllers/AssetAdministrationShell/SubmodelController.cs b/sdks/dotnet/basyx-components/BaSyx.API.Http.Controllers/AssetAdministrationShell/SubmodelController.cs
index 76fabff..547301e 100644
--- a/sdks/dotnet/basyx-components/BaSyx.API.Http.Controllers/AssetAdministrationShell/SubmodelController.cs
+++ b/sdks/dotnet/basyx-components/BaSyx.API.Http.Controllers/AssetAdministrationShell/SubmodelController.cs
@@ -142,7 +142,7 @@
 
             seIdShortPath = HttpUtility.UrlDecode(seIdShortPath);
 
-            var result = serviceProvider.CreateSubmodelElement(seIdShortPath, submodelElement);
+            var result = serviceProvider.CreateOrUpdateSubmodelElement(seIdShortPath, submodelElement);
             return result.CreateActionResult(CrudOperation.Create, "submodel/submodelElements/" + seIdShortPath);
         }
 
diff --git a/sdks/dotnet/basyx-components/BaSyx.Common.UI.Swagger/SwaggerExtensions.cs b/sdks/dotnet/basyx-components/BaSyx.Common.UI.Swagger/SwaggerExtensions.cs
index 6915f09..c28fb73 100644
--- a/sdks/dotnet/basyx-components/BaSyx.Common.UI.Swagger/SwaggerExtensions.cs
+++ b/sdks/dotnet/basyx-components/BaSyx.Common.UI.Swagger/SwaggerExtensions.cs
@@ -21,7 +21,7 @@
 
 namespace BaSyx.Common.UI.Swagger
 {
-    public static class OpenApiInfos
+    internal static class OpenApiInfos
     {
         #region Static OpenApi-Infos
         internal static readonly OpenApiInfo AssetAdministrationShell_OpenApiInfo = new OpenApiInfo
@@ -98,9 +98,9 @@
         All,
         AssetAdministrationShell,
         AssetAdministrationShellRepository,
+        AssetAdministrationShellRegistry,
         Submodel,
-        SubmodelRepository,
-        AssetAdministrationShellRegistry
+        SubmodelRepository,        
     }
     public static class SwaggerExtensions
     {
@@ -114,12 +114,13 @@
                     c.SwaggerDoc("v1", info);
 
                     // Set the comments path for the Swagger JSON and UI.
-                    var xmlFile = $"{serverApp.ControllerAssembly.GetName().Name}.xml";
-                    var xmlPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), xmlFile);
+                    string xmlFile = $"{serverApp.ControllerAssembly.GetName().Name}.xml";
+                    string xmlPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), xmlFile);
                     if (EmbeddedResource.CheckOrWriteRessourceToFile(serverApp.ControllerAssembly, xmlPath))
                         c.IncludeXmlComments(xmlPath, true);
 
-                    c.DocumentFilter<ControllerSelector>(interfaceType);
+                    if(interfaceType != Interface.All)
+                        c.DocumentFilter<ControllerSelector>(interfaceType);
                 });
                 services.AddSwaggerGenNewtonsoftSupport();
             });
@@ -141,10 +142,12 @@
         {
             private readonly Interface _interfaceType;
             private readonly string _interfaceName;
+            private readonly string _controllerName;
             public ControllerSelector(Interface interfaceType)
             {
                 _interfaceType = interfaceType;
                 _interfaceName = Enum.GetName(typeof(Interface), _interfaceType);
+                _controllerName = _interfaceName + "Controller";
             }
 
             public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
@@ -152,7 +155,7 @@
                 foreach (var apiDescription in context.ApiDescriptions)
                 {
                     string name = apiDescription.ActionDescriptor.DisplayName;
-                    if(!name.Contains(_interfaceName + "Controller"))
+                    if(!name.Contains(_controllerName))
                     {
                         string route = "/" + apiDescription.ActionDescriptor.AttributeRouteInfo.Template;
                         swaggerDoc.Paths.Remove(route);                        
@@ -160,7 +163,7 @@
                 }
                 foreach (var tag in swaggerDoc.Tags.ToList())
                 {
-                    if(tag.Name != (_interfaceName + "Controller"))
+                    if(tag.Name != _controllerName)
                     {
                         swaggerDoc.Tags.Remove(tag);
                     }
diff --git a/sdks/dotnet/basyx-components/BaSyx.Common.UI/Pages/Shared/_Layout.cshtml b/sdks/dotnet/basyx-components/BaSyx.Common.UI/Pages/Shared/_Layout.cshtml
index a1c9b3a..1be785a 100644
--- a/sdks/dotnet/basyx-components/BaSyx.Common.UI/Pages/Shared/_Layout.cshtml
+++ b/sdks/dotnet/basyx-components/BaSyx.Common.UI/Pages/Shared/_Layout.cshtml
@@ -36,7 +36,7 @@
                 <div class="navbar-right">
                     @if (!string.IsNullOrEmpty((string)ViewData["CompanyLogo"]))
                     {
-                        <img src="@ViewData["CompanyLogo"]" width="160" height="36" />
+                        <img src="@ViewData["CompanyLogo"]" width="160" />
                     }
                 </div>
             </div>
diff --git a/sdks/dotnet/basyx-components/BaSyx.Common.UI/Pages/Shared/_ModelElementSpecific.cshtml b/sdks/dotnet/basyx-components/BaSyx.Common.UI/Pages/Shared/_ModelElementSpecific.cshtml
index 33e4a54..67edca4 100644
--- a/sdks/dotnet/basyx-components/BaSyx.Common.UI/Pages/Shared/_ModelElementSpecific.cshtml
+++ b/sdks/dotnet/basyx-components/BaSyx.Common.UI/Pages/Shared/_ModelElementSpecific.cshtml
@@ -58,7 +58,15 @@
                 {
                     <li class="list-group-item">
                         <div class="row align-items-center">
-                            <object data="@path" style="height:500px; width:100%"></object>
+                            @if (file.MimeType.StartsWith("image"))
+                            {
+                                <img src="@path" style="display:block; max-width:100%; height:auto" />
+                            }
+                            else
+                            {
+                                <object data="@path" style="min-height:500px; width:100%"></object>
+                            }
+
                         </div>
                     </li>
                 }
diff --git a/sdks/dotnet/basyx-components/BaSyx.Components.Common/DefaultWebHostBuilder.cs b/sdks/dotnet/basyx-components/BaSyx.Components.Common/DefaultWebHostBuilder.cs
index 0e254e5..2eecd84 100644
--- a/sdks/dotnet/basyx-components/BaSyx.Components.Common/DefaultWebHostBuilder.cs
+++ b/sdks/dotnet/basyx-components/BaSyx.Components.Common/DefaultWebHostBuilder.cs
@@ -24,7 +24,7 @@
             if (settings?.ServerConfig.Hosting?.Environment != null)
                 webHostBuilder.UseEnvironment(settings.ServerConfig.Hosting.Environment);
             else
-                webHostBuilder.UseEnvironment(Environments.Production);
+                webHostBuilder.UseEnvironment(Environments.Development);
 
             if (settings?.ServerConfig?.Hosting?.Urls?.Count > 0)
                 webHostBuilder.UseUrls(settings.ServerConfig.Hosting.Urls.ToArray());
diff --git a/sdks/dotnet/basyx-components/BaSyx.Components.Common/ServerApplication.cs b/sdks/dotnet/basyx-components/BaSyx.Components.Common/ServerApplication.cs
index 8e0702b..51941b3 100644
--- a/sdks/dotnet/basyx-components/BaSyx.Components.Common/ServerApplication.cs
+++ b/sdks/dotnet/basyx-components/BaSyx.Components.Common/ServerApplication.cs
@@ -15,7 +15,6 @@
 using Microsoft.AspNetCore.Hosting;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Rewrite;
-using Microsoft.AspNetCore.Routing;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.FileProviders;
 using Microsoft.Extensions.Hosting;
@@ -44,8 +43,8 @@
         private string _webRoot;
         private bool _secure = false;
 
-        private List<Action<IApplicationBuilder>> AppBuilderPipeline;
-        private List<Action<IServiceCollection>> ServiceBuilderPipeline;
+        private readonly List<Action<IApplicationBuilder>> AppBuilderPipeline;
+        private readonly List<Action<IServiceCollection>> ServiceBuilderPipeline;
 
         public const string DEFAULT_CONTENT_ROOT = "Content";
         public const string DEFAULT_WEB_ROOT = "wwwroot";
@@ -87,9 +86,9 @@
             AppBuilderPipeline = new List<Action<IApplicationBuilder>>();
             ServiceBuilderPipeline = new List<Action<IServiceCollection>>();
 
-            WebHostBuilder.ConfigureServices(services =>
+            WebHostBuilder.ConfigureServices( (context, services) =>
             {
-                ConfigureServices(services);
+                ConfigureServices(context, services);
             });
 
             WebHostBuilder.Configure(app =>
@@ -276,14 +275,15 @@
             });
         }
 
-        protected virtual void ConfigureServices(IServiceCollection services)
+        protected virtual void ConfigureServices(WebHostBuilderContext context, IServiceCollection services)
         {
             services.AddSingleton(typeof(ServerSettings), Settings);
             services.AddSingleton<IServerApplicationLifetime>(this);
 
+            
             var urls = Settings.ServerConfig.Hosting.Urls;
             var secureUrl = urls.Find(s => s.StartsWith("https"));
-            if (!string.IsNullOrEmpty(secureUrl))
+            if (!string.IsNullOrEmpty(secureUrl) && !context.HostingEnvironment.IsDevelopment())
             {
                 secureUrl = secureUrl.Replace("+", "0.0.0.0");
                 Uri secureUri = new Uri(secureUrl);
@@ -330,7 +330,7 @@
                 app.UseHsts();
             }
 
-            if(_secure)
+            if(_secure && !env.IsDevelopment())
                 app.UseHttpsRedirection();
 
             app.UseStaticFiles();
diff --git a/sdks/dotnet/basyx-components/BaSyx.Components.Tests/AssetAdministrationShellClientServerTest.cs b/sdks/dotnet/basyx-components/BaSyx.Components.Tests/AssetAdministrationShellClientServerTest.cs
new file mode 100644
index 0000000..35a2429
--- /dev/null
+++ b/sdks/dotnet/basyx-components/BaSyx.Components.Tests/AssetAdministrationShellClientServerTest.cs
@@ -0,0 +1,188 @@
+using BaSyx.AAS.Client.Http;
+using BaSyx.AAS.Server.Http;
+using BaSyx.API.AssetAdministrationShell.Extensions;
+using BaSyx.API.Clients;
+using BaSyx.API.Components;
+using BaSyx.Models.Communication;
+using BaSyx.Models.Connectivity;
+using BaSyx.Models.Connectivity.Descriptors;
+using BaSyx.Models.Core.AssetAdministrationShell;
+using BaSyx.Models.Core.AssetAdministrationShell.Generics;
+using BaSyx.Models.Core.AssetAdministrationShell.Identification;
+using BaSyx.Models.Core.AssetAdministrationShell.Implementations;
+using BaSyx.Models.Core.AssetAdministrationShell.References;
+using BaSyx.Models.Core.Common;
+using BaSyx.Models.Extensions;
+using BaSyx.Registry.Client.Http;
+using BaSyx.Registry.ReferenceImpl.FileBased;
+using BaSyx.Registry.Server.Http;
+using BaSyx.Utils.ResultHandling;
+using BaSyx.Utils.Settings.Types;
+using FluentAssertions;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+
+namespace BaSyx.Components.Tests
+{
+    [TestClass]
+    public class AssetAdministrationShellClientServerTest : IAssetAdministrationShellClient, IAssetAdministrationShellSubmodelClient
+    {
+        private static AssetAdministrationShellHttpServer server;
+        private static AssetAdministrationShellHttpClient client;
+
+        private static IAssetAdministrationShell aas;
+        private static ISubmodel submodel;
+        private static IAssetAdministrationShellDescriptor aasDescriptor;
+
+        static AssetAdministrationShellClientServerTest()
+        {
+            ServerSettings aasServerSettings = ServerSettings.CreateSettings();
+            aasServerSettings.ServerConfig.Hosting.ContentPath = "Content";
+            aasServerSettings.ServerConfig.Hosting.Environment = "Development";
+            aasServerSettings.ServerConfig.Hosting.Urls.Add("http://localhost:5080");
+            aasServerSettings.ServerConfig.Hosting.Urls.Add("https://localhost:5443");
+
+            aas = TestAssetAdministrationShell.GetAssetAdministrationShell();
+            submodel = TestAssetAdministrationShell.GetTestSubmodel();
+            var serviceProvider = aas.CreateServiceProvider(true);
+            serviceProvider.UseAutoEndpointRegistration(aasServerSettings.ServerConfig);
+            aasDescriptor = serviceProvider.ServiceDescriptor;
+
+            server = new AssetAdministrationShellHttpServer(aasServerSettings);
+            server.SetServiceProvider(serviceProvider);
+            _ = server.RunAsync();
+
+            client = new AssetAdministrationShellHttpClient(aasDescriptor);
+        }
+
+        [TestMethod]
+        public void Test1_RetrieveAssetAdministrationShell()
+        {
+            var retrieved = RetrieveAssetAdministrationShell();
+            retrieved.Success.Should().BeTrue();
+        }
+
+        public IResult<IAssetAdministrationShell> RetrieveAssetAdministrationShell()
+        {
+            return client.RetrieveAssetAdministrationShell();
+        }
+
+        [TestMethod]
+        public void Test2_RetrieveSubmodel()
+        {
+            var retrieved = RetrieveSubmodel(submodel.IdShort);
+            retrieved.Success.Should().BeTrue();
+        }
+        public IResult<ISubmodel> RetrieveSubmodel(string submodelId)
+        {
+            return client.RetrieveSubmodel(submodelId);
+        }
+
+        [TestMethod]
+        public void Test31_CreateOrUpdateSubmodelElement_FirstLevelHierarchy()
+        {
+            Property testProperty = new Property("TestIntegerProperty", typeof(int), 8);
+            var created = CreateOrUpdateSubmodelElement(submodel.IdShort, testProperty.IdShort, testProperty);
+            created.Success.Should().BeTrue();
+            created.Entity.Should().BeEquivalentTo(testProperty, opts => opts
+            .Excluding(p => p.Get)
+            .Excluding(p => p.Set)
+            .Excluding(p => p.EmbeddedDataSpecifications)
+            .Excluding(p => p.Parent));
+
+            submodel.SubmodelElements.Add(testProperty);
+        }
+        public IResult<ISubmodelElement> CreateOrUpdateSubmodelElement(string submodelId, string rootSeIdShortPath, ISubmodelElement submodelElement)
+        {
+            return client.CreateOrUpdateSubmodelElement(submodelId, rootSeIdShortPath, submodelElement);
+        }
+
+        [TestMethod]
+        public void Test41_RetrieveSubmodelElements()
+        {
+            var retrieved = RetrieveSubmodelElements(submodel.IdShort);
+            retrieved.Success.Should().BeTrue();
+            retrieved.Entity.Count.Should().Be(submodel.SubmodelElements.Count);
+        }
+        public IResult<IElementContainer<ISubmodelElement>> RetrieveSubmodelElements(string submodelId)
+        {
+            return client.RetrieveSubmodelElements(submodelId);
+        }
+
+        [TestMethod]
+        public void Test51_RetrieveSubmodelElement_FirstLevelHierarchy()
+        {
+            var retrieved = RetrieveSubmodelElement(submodel.IdShort, "TestIntegerProperty");
+            retrieved.Success.Should().BeTrue();
+            retrieved.Entity.Should().BeEquivalentTo(submodel.SubmodelElements["TestIntegerProperty"].Cast<Property>(), opts => opts
+            .Excluding(p => p.Get)
+            .Excluding(p => p.Set)
+            .Excluding(p => p.EmbeddedDataSpecifications)
+            .Excluding(p => p.Parent));
+        }
+        public IResult<ISubmodelElement> RetrieveSubmodelElement(string submodelId, string seIdShortPath)
+        {
+            return client.RetrieveSubmodelElement(submodelId, seIdShortPath);
+        }
+
+        [TestMethod]
+        public void Test61_RetrieveSubmodelElementValue_FirstLevelHierarchy()
+        {
+            var retrieved = RetrieveSubmodelElementValue(submodel.IdShort, "TestIntegerProperty");
+            retrieved.Success.Should().BeTrue();
+            retrieved.Entity.Value.Should().BeEquivalentTo(8);
+        }
+        public IResult<IValue> RetrieveSubmodelElementValue(string submodelId, string seIdShortPath)
+        {
+            return client.RetrieveSubmodelElementValue(submodelId, seIdShortPath);
+        }
+
+        [TestMethod]
+        public void Test71_UpdateSubmodelElementValue_FirstLevelHierarchy()
+        {
+            var updated = UpdateSubmodelElementValue(submodel.IdShort, "TestIntegerProperty", new ElementValue(5, typeof(int)));
+            updated.Success.Should().BeTrue();
+        }
+        [TestMethod]
+        public void Test72_RetrieveSubmodelElementValue_FirstLevelHierarchy_AfterUpdate()
+        {
+            var retrieved = RetrieveSubmodelElementValue(submodel.IdShort, "TestIntegerProperty");
+            retrieved.Success.Should().BeTrue();
+            retrieved.Entity.Value.Should().BeEquivalentTo(5);
+        }
+
+        public IResult UpdateSubmodelElementValue(string submodelId, string seIdShortPath, IValue value)
+        {
+            return client.UpdateSubmodelElementValue(submodelId, seIdShortPath, value);
+        }
+
+        [TestMethod]
+        public void Test81_DeleteSubmodelElement_FirstLevelHierarchy()
+        {
+            var deleted = DeleteSubmodelElement(submodel.IdShort, "TestIntegerProperty");
+            deleted.Success.Should().BeTrue();
+        }
+
+        public IResult DeleteSubmodelElement(string submodelId, string seIdShortPath)
+        {
+            return client.DeleteSubmodelElement(submodelId, seIdShortPath);
+        }
+
+        public IResult<InvocationResponse> InvokeOperation(string submodelId, string operationIdShortPath, InvocationRequest invocationRequest)
+        {
+            return client.InvokeOperation(submodelId, operationIdShortPath, invocationRequest);
+        }
+
+        public IResult<CallbackResponse> InvokeOperationAsync(string submodelId, string operationIdShortPath, InvocationRequest invocationRequest)
+        {
+            return client.InvokeOperationAsync(submodelId, operationIdShortPath, invocationRequest);
+        }
+
+        public IResult<InvocationResponse> GetInvocationResult(string submodelId, string operationIdShortPath, string requestId)
+        {
+            return client.GetInvocationResult(submodelId, operationIdShortPath, requestId);
+        }
+    }
+}
diff --git a/sdks/dotnet/basyx-components/BaSyx.Components.Tests/BaSyx.Components.Tests.csproj b/sdks/dotnet/basyx-components/BaSyx.Components.Tests/BaSyx.Components.Tests.csproj
index 3778999..b81cfe2 100644
--- a/sdks/dotnet/basyx-components/BaSyx.Components.Tests/BaSyx.Components.Tests.csproj
+++ b/sdks/dotnet/basyx-components/BaSyx.Components.Tests/BaSyx.Components.Tests.csproj
@@ -30,6 +30,8 @@
   </ItemGroup>
 
   <ItemGroup>
+    <ProjectReference Include="..\BaSyx.AAS.Client.Http\BaSyx.AAS.Client.Http.csproj" />
+    <ProjectReference Include="..\BaSyx.AAS.Server.Http\BaSyx.AAS.Server.Http.csproj" />
     <ProjectReference Include="..\BaSyx.Registry.Client.Http\BaSyx.Registry.Client.Http.csproj" />
     <ProjectReference Include="..\BaSyx.Registry.ReferenceImpl.FileBased\BaSyx.Registry.ReferenceImpl.FileBased.csproj" />
     <ProjectReference Include="..\BaSyx.Registry.Server.Http\BaSyx.Registry.Server.Http.csproj" />
diff --git a/sdks/dotnet/basyx-components/BaSyx.Components.Tests/RegistryTest.cs b/sdks/dotnet/basyx-components/BaSyx.Components.Tests/RegistryTest.cs
index f9ce150..424beef 100644
--- a/sdks/dotnet/basyx-components/BaSyx.Components.Tests/RegistryTest.cs
+++ b/sdks/dotnet/basyx-components/BaSyx.Components.Tests/RegistryTest.cs
@@ -11,6 +11,8 @@
 using BaSyx.Registry.ReferenceImpl.FileBased;
 using BaSyx.Registry.Server.Http;
 using BaSyx.Utils.ResultHandling;
+using BaSyx.Utils.Settings.Sections;
+using BaSyx.Utils.Settings.Types;
 using FluentAssertions;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using System;
@@ -27,7 +29,19 @@
 
         static RegistryTest()
         {
-            registryHttpServer = new RegistryHttpServer();
+            ServerSettings registrySettings = ServerSettings.CreateSettings();
+            registrySettings.ServerConfig.Hosting = new HostingConfiguration()
+            {
+                Urls = new List<string>()
+                {
+                    "http://localhost:4999",
+                    "https://localhost:4499"
+                },
+                Environment = "Development",
+                ContentPath = "Content"
+            };
+
+            registryHttpServer = new RegistryHttpServer(registrySettings);
             registryHttpServer.SetRegistryProvider(new FileBasedRegistry());
             _ = registryHttpServer.RunAsync();
 
diff --git a/sdks/dotnet/basyx-components/BaSyx.Components.Tests/TestAssetAdministrationShell.cs b/sdks/dotnet/basyx-components/BaSyx.Components.Tests/TestAssetAdministrationShell.cs
new file mode 100644
index 0000000..7e9c517
--- /dev/null
+++ b/sdks/dotnet/basyx-components/BaSyx.Components.Tests/TestAssetAdministrationShell.cs
@@ -0,0 +1,195 @@
+/*******************************************************************************
+* Copyright (c) 2020 Robert Bosch GmbH
+* Author: Constantin Ziesche (constantin.ziesche@bosch.com)
+*
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Distribution License 1.0 which is available at
+* https://www.eclipse.org/org/documents/edl-v10.html
+*
+* 
+*******************************************************************************/
+using BaSyx.Models.Core.AssetAdministrationShell;
+using BaSyx.Models.Core.AssetAdministrationShell.Generics;
+using BaSyx.Models.Core.AssetAdministrationShell.Identification;
+using BaSyx.Models.Core.AssetAdministrationShell.Implementations;
+using BaSyx.Models.Core.AssetAdministrationShell.References;
+using BaSyx.Models.Core.Common;
+using BaSyx.Models.Extensions;
+using BaSyx.Utils.ResultHandling;
+using System;
+using System.Threading.Tasks;
+
+namespace BaSyx.Components.Tests
+{
+    public static class TestAssetAdministrationShell
+    {
+        public static AssetAdministrationShell GetAssetAdministrationShell()
+        {
+            AssetAdministrationShell aas = new AssetAdministrationShell("TestAAS", new Identifier("http://basys40.de/shells/SimpleAAS/" + Guid.NewGuid().ToString(), KeyType.IRI))
+            {
+                Description = new LangStringSet()
+                {
+                   new LangString("de-DE", "Einfache VWS"),
+                   new LangString("en-US", "Simple AAS")
+                },
+                Administration = new AdministrativeInformation()
+                {
+                    Version = "1.0",
+                    Revision = "120"
+                },
+                Asset = new Asset("TestAsset", new Identifier("http://basys40.de/assets/SimpleAsset/" + Guid.NewGuid().ToString(), KeyType.IRI))
+                {
+                    Kind = AssetKind.Instance,
+                    Description = new LangStringSet()
+                    {
+                          new LangString("de-DE", "Einfaches Asset"),
+                          new LangString("en-US", "Simple Asset")
+                    }
+                }
+            };
+
+            Submodel testSubmodel = GetTestSubmodel();
+
+            aas.Submodels.Add(testSubmodel);
+
+            return aas;
+        }
+
+        public static Submodel GetTestSubmodel()
+        {
+            string propertyValue = "TestFromInside";
+            int i = 0;
+            double y = 2.0;
+
+            Submodel testSubmodel = new Submodel("TestSubmodel", new Identifier(Guid.NewGuid().ToString(), KeyType.Custom))
+            {
+                SubmodelElements =
+                {
+                    new Property<string>("TestProperty1")
+                    {
+                        Set = (prop, val) => propertyValue = val,
+                        Get = prop => { return propertyValue + "_" + i++; }
+                    },
+                    new Property<string>("TestProperty2")
+                    {
+                        Set = (prop, val) => propertyValue = val,
+                        Get = prop => { return propertyValue + "_" + i++; }
+                    },
+                    new Property<int>("TestProperty3")
+                    {
+                        Set = (prop, val) => i = val,
+                        Get = prop => { return i++; }
+                    },
+                    new Property<double>("TestProperty4")
+                    {
+                        Set = (prop, val) => y = val,
+                        Get = prop => { return Math.Pow(y, i); }
+                    },
+                    new SubmodelElementCollection("TestSubmodelElementCollection")
+                    {
+                        Value =
+                        {
+                            new Property<string>("TestSubProperty1")
+                            {
+                                Set = (prop, val) => propertyValue = val,
+                                Get = prop => { return propertyValue + "_" + i--; }
+                            },
+                            new Property<string>("TestSubProperty2")
+                            {
+                                Set = (prop, val) => propertyValue = val,
+                                Get = prop => { return propertyValue + "_" + i--; }
+                            },
+                            new Property<int>("TestSubProperty3")
+                            {
+                                Set = (prop, val) => i = val,
+                                Get = prop => { return i--; }
+                            },
+                            new Property<double>("TestSubProperty4")
+                            {
+                                Set = (prop, val) => y = val,
+                                Get = prop => { return Math.Pow(y, i); }
+                            }
+                        }
+                    },
+                    new Operation("GetTime")
+                    {
+                        OutputVariables = new OperationVariableSet()
+                        {
+                            new Property<string>("Date"),
+                            new Property<string>("Time"),
+                            new Property<string>("Ticks")
+                        },
+                        OnMethodCalled = (op, inArgs, inOutArgs, outArgs, cancellationToken) =>
+                        {
+                            outArgs.Add(new Property<string>("Date") { Value = "Heute ist der " + DateTime.Now.Date.ToString() });
+                            outArgs.Add(new Property<string>("Time") { Value = "Es ist " + DateTime.Now.TimeOfDay.ToString() + " Uhr" });
+                            outArgs.Add(new Property<string>("Ticks") { Value = "Ticks: " + DateTime.Now.Ticks.ToString() });
+                            return new OperationResult(true);
+                        }
+                    },
+                    new Operation("Calculate")
+                    {
+                        Description = new LangStringSet()
+                        {
+                            new LangString("DE", "Taschenrechner mit simulierter langer Rechenzeit zum Testen von asynchronen Aufrufen"),
+                            new LangString("EN", "Calculator with simulated long-running computing time for testing asynchronous calls")
+                        },
+                        InputVariables = new OperationVariableSet()
+                        {
+                            new Property<string>("Expression")
+                            {
+                                Description = new LangStringSet()
+                                {
+                                    new LangString("DE", "Ein mathematischer Ausdruck (z.B. 5*9)"),
+                                    new LangString("EN", "A mathematical expression (e.g. 5*9)")
+                                }
+                            },
+                            new Property<int>("ComputingTime")
+                            {
+                                Description = new LangStringSet()
+                                {
+                                    new LangString("DE", "Die Bearbeitungszeit in Millisekunden"),
+                                    new LangString("EN", "The computation time in milliseconds")
+                                }
+                            }
+                        },
+                       OutputVariables = new OperationVariableSet()
+                       {
+                           new Property<double>("Result")
+                       },
+                       OnMethodCalled = async (op, inArgs, inOutArgs, outArgs, cancellationToken) =>
+                       {
+                           string expression = inArgs["Expression"]?.GetValue<string>();
+                           int? computingTime = inArgs["ComputingTime"]?.GetValue<int>();
+
+                           inOutArgs["HierRein"]?.SetValue("DaWiederRaus");
+
+                           if(computingTime.HasValue)
+                            await Task.Delay(computingTime.Value, cancellationToken);
+                     
+                           if(cancellationToken.IsCancellationRequested)
+                               return new OperationResult(false, new Message(MessageType.Information, "Cancellation was requested"));
+
+                           double value = CalulcateExpression(expression);
+
+                           outArgs.Add(new Property<double>("Result", value));
+                           return new OperationResult(true);
+                       }
+                    }
+
+                }
+            };
+            return testSubmodel;
+        }
+
+        public static double CalulcateExpression(string expression)
+        {
+            string columnName = "Evaluation";
+            System.Data.DataTable dataTable = new System.Data.DataTable();
+            System.Data.DataColumn dataColumn = new System.Data.DataColumn(columnName, typeof(double), expression);
+            dataTable.Columns.Add(dataColumn);
+            dataTable.Rows.Add(0);
+            return (double)(dataTable.Rows[0][columnName]);
+        }
+    }
+}
diff --git a/sdks/dotnet/basyx-components/BaSyx.Discovery.mDNS/BaSyx.Discovery.mDNS.csproj b/sdks/dotnet/basyx-components/BaSyx.Discovery.mDNS/BaSyx.Discovery.mDNS.csproj
index 2e0eaf4..5d87197 100644
--- a/sdks/dotnet/basyx-components/BaSyx.Discovery.mDNS/BaSyx.Discovery.mDNS.csproj
+++ b/sdks/dotnet/basyx-components/BaSyx.Discovery.mDNS/BaSyx.Discovery.mDNS.csproj
@@ -16,7 +16,6 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="BaSyx.AAS.Client.Http" Version="1.0.0" />
     <PackageReference Include="BaSyx.API" Version="1.0.0" />
     <PackageReference Include="Makaretu.Dns" Version="2.0.1" />
     <PackageReference Include="Makaretu.Dns.Multicast" Version="0.27.0" />
@@ -30,6 +29,10 @@
     </None>
   </ItemGroup>
 
+  <ItemGroup>
+    <ProjectReference Include="..\BaSyx.AAS.Client.Http\BaSyx.AAS.Client.Http.csproj" />
+  </ItemGroup>
+
   <Target Name="PostBuild" AfterTargets="PostBuildEvent">
     <Exec Command="IF EXIST %25BASYX_REPO%25 ( dotnet pack &quot;$(ProjectPath)&quot; --no-build --include-source --include-symbols --output &quot;%25BASYX_REPO%25&quot; ) ELSE ( ECHO BASYX_REPO Environment Variable not found)" />
   </Target>
diff --git a/sdks/dotnet/basyx-components/BaSyx.Discovery.mDNS/DiscoveryExtensions.cs b/sdks/dotnet/basyx-components/BaSyx.Discovery.mDNS/DiscoveryExtensions.cs
index 06d1ebb..a5c0aa9 100644
--- a/sdks/dotnet/basyx-components/BaSyx.Discovery.mDNS/DiscoveryExtensions.cs
+++ b/sdks/dotnet/basyx-components/BaSyx.Discovery.mDNS/DiscoveryExtensions.cs
@@ -19,6 +19,8 @@
 using System.Linq;
 using System.Net;
 using BaSyx.Utils.Logging;
+using System.Net.Http;
+using BaSyx.Utils.Client.Http;
 
 namespace BaSyx.Discovery.mDNS
 {
@@ -108,8 +110,10 @@
 
         private static void AssemblyDescriptor(ref IAssetAdministrationShellDescriptor aasDescriptor, Uri aasEndpoint)
         {
-            AssetAdministrationShellHttpClient client = new AssetAdministrationShellHttpClient(aasEndpoint);
-            IResult<IAssetAdministrationShellDescriptor> retrieveDescriptor = client.RetrieveAssetAdministrationShellDescriptor();
+            IResult<IAssetAdministrationShellDescriptor> retrieveDescriptor;
+            using (var client = new AssetAdministrationShellHttpClient(aasEndpoint, SimpleHttpClient.DEFAULT_HTTP_CLIENT_HANDLER))
+                retrieveDescriptor = client.RetrieveAssetAdministrationShellDescriptor();
+
             if (retrieveDescriptor.Success && retrieveDescriptor.Entity != null)
             {
                 retrieveDescriptor.LogResult(logger, LogLevel.Info, "Successfully retrieved AAS descriptor");
diff --git a/sdks/dotnet/basyx-components/BaSyx.Registry.Client.Http/RegistryHttpClient.cs b/sdks/dotnet/basyx-components/BaSyx.Registry.Client.Http/RegistryHttpClient.cs
index 050c4be..61f5097 100644
--- a/sdks/dotnet/basyx-components/BaSyx.Registry.Client.Http/RegistryHttpClient.cs
+++ b/sdks/dotnet/basyx-components/BaSyx.Registry.Client.Http/RegistryHttpClient.cs
@@ -36,9 +36,9 @@
 
         private int RepeatRegistrationInterval = -1;
         private string baseUrl = null;
-        private int Timeout = -1;
-        private CancellationTokenSource RepeatRegistrationCancellationToken = null;
         
+        private CancellationTokenSource RepeatRegistrationCancellationToken = null;
+        public int RequestTimeout = DEFAULT_REQUEST_TIMEOUT;
 
         public void LoadSettings(RegistryClientSettings settings)
         {
@@ -48,25 +48,30 @@
                 RepeatRegistrationInterval = settings.RegistryConfig.RepeatRegistration.Value;
 
             if (settings.ClientConfig.RequestConfig.RequestTimeout.HasValue)
-                Timeout = settings.ClientConfig.RequestConfig.RequestTimeout.Value;
+                RequestTimeout = settings.ClientConfig.RequestConfig.RequestTimeout.Value;
             else
-                Timeout = DEFAULT_REQUEST_TIMEOUT;
+                RequestTimeout = DEFAULT_REQUEST_TIMEOUT;
 
             baseUrl = settings.RegistryConfig.RegistryUrl.TrimEnd('/') + PATH_SEPERATOR + REGISTRY_BASE_PATH;
         }
 
-        public RegistryHttpClient() : this(null)
-        { }
-
-        public RegistryHttpClient(RegistryClientSettings registryClientSettings)
+        private RegistryHttpClient(HttpClientHandler clientHandler, RegistryClientSettings registryClientSettings) : base(clientHandler) 
         {
+            JsonSerializerSettings = new DependencyInjectionJsonSerializerSettings();
+
             Settings = registryClientSettings ?? RegistryClientSettings.LoadSettings();
             Settings = Settings ?? throw new NullReferenceException("Settings is null");
 
             LoadSettings(Settings);
-            JsonSerializerSettings = new DependencyInjectionJsonSerializerSettings();
         }
 
+        public RegistryHttpClient() : this (DEFAULT_HTTP_CLIENT_HANDLER, null)
+        { }
+        public RegistryHttpClient(RegistryClientSettings registryClientSettings) : this(DEFAULT_HTTP_CLIENT_HANDLER, registryClientSettings)
+        { }
+        public RegistryHttpClient(RegistryClientSettings registryClientSettings, HttpClientHandler clientHandler) : this(clientHandler, registryClientSettings)
+        { }
+
         public Uri GetUri(params string[] pathElements)
         {
             string path = baseUrl;
@@ -107,7 +112,7 @@
                 return new Result<IAssetAdministrationShellDescriptor>(new ArgumentNullException(nameof(aasDescriptor)));
 
             var request = base.CreateJsonContentRequest(GetUri(aasId), HttpMethod.Put, aasDescriptor);
-            var response = base.SendRequest(request, Timeout);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<IAssetAdministrationShellDescriptor>(response, response.Entity);
         }
 
@@ -117,7 +122,7 @@
                 return new Result<IAssetAdministrationShellDescriptor>(new ArgumentNullException(nameof(aasId)));
 
             var request = base.CreateRequest(GetUri(aasId), HttpMethod.Get);
-            var response = base.SendRequest(request, Timeout);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<IAssetAdministrationShellDescriptor>(response, response.Entity);
         }
 
@@ -127,7 +132,7 @@
                 return new Result<IQueryableElementContainer<IAssetAdministrationShellDescriptor>>(new ArgumentNullException(nameof(predicate)));
 
             var request = base.CreateRequest(GetUri(), HttpMethod.Get);
-            var response = base.SendRequest(request, Timeout);
+            var response = base.SendRequest(request, RequestTimeout);
             var result = base.EvaluateResponse<IEnumerable<IAssetAdministrationShellDescriptor>>(response, response.Entity);
 
             if (!result.Success || result.Entity == null)
@@ -142,7 +147,7 @@
         public IResult<IQueryableElementContainer<IAssetAdministrationShellDescriptor>> RetrieveAllAssetAdministrationShellRegistrations()
         {
             var request = base.CreateRequest(GetUri(), HttpMethod.Get);
-            var response = base.SendRequest(request, Timeout);
+            var response = base.SendRequest(request, RequestTimeout);
             var result = base.EvaluateResponse<IEnumerable<IAssetAdministrationShellDescriptor>>(response, response.Entity);
             return new Result<IQueryableElementContainer<IAssetAdministrationShellDescriptor>>(result.Success, result.Entity?.AsQueryableElementContainer(), result.Messages);
         }
@@ -156,7 +161,7 @@
                 RepeatRegistrationCancellationToken?.Cancel();
 
             var request = base.CreateRequest(GetUri(aasId), HttpMethod.Delete);
-            var response = base.SendRequest(request, Timeout);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse(response, response.Entity);
         }
 
@@ -170,7 +175,7 @@
                 return new Result<ISubmodelDescriptor>(new ArgumentNullException(nameof(submodelDescriptor)));
 
             var request = base.CreateJsonContentRequest(GetUri(aasId, SUBMODEL_PATH, submodelId), HttpMethod.Put, submodelDescriptor);
-            var response = base.SendRequest(request, Timeout);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<ISubmodelDescriptor>(response, response.Entity);
         }
 
@@ -182,7 +187,7 @@
                 return new Result<IQueryableElementContainer<ISubmodelDescriptor>>(new ArgumentNullException(nameof(predicate)));
 
             var request = base.CreateRequest(GetUri(aasId, SUBMODEL_PATH), HttpMethod.Get);
-            var response = base.SendRequest(request, Timeout);
+            var response = base.SendRequest(request, RequestTimeout);
             var result = base.EvaluateResponse<IEnumerable<ISubmodelDescriptor>>(response, response.Entity);
 
             if (!result.Success || result.Entity == null)
@@ -200,7 +205,7 @@
                 return new Result<IQueryableElementContainer<ISubmodelDescriptor>>(new ArgumentNullException(nameof(aasId)));
 
             var request = base.CreateRequest(GetUri(aasId, SUBMODEL_PATH), HttpMethod.Get);
-            var response = base.SendRequest(request, Timeout);
+            var response = base.SendRequest(request, RequestTimeout);
             var result = base.EvaluateResponse<IEnumerable<ISubmodelDescriptor>>(response, response.Entity);
 
             return new Result<IQueryableElementContainer<ISubmodelDescriptor>>(result.Success, result.Entity?.AsQueryableElementContainer(), result.Messages);
@@ -214,7 +219,7 @@
                 return new Result<ISubmodelDescriptor>(new ArgumentNullException(nameof(submodelId)));
 
             var request = base.CreateRequest(GetUri(aasId, SUBMODEL_PATH, submodelId), HttpMethod.Get);
-            var response = base.SendRequest(request, Timeout);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<ISubmodelDescriptor>(response, response.Entity);
         }
 
@@ -226,7 +231,7 @@
                 return new Result(new ArgumentNullException(nameof(submodelId)));
 
             var request = base.CreateRequest(GetUri(aasId, SUBMODEL_PATH, submodelId), HttpMethod.Delete);
-            var response = base.SendRequest(request, Timeout);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse(response, response.Entity);
         }   
     }
diff --git a/sdks/dotnet/basyx-components/BaSyx.Registry.Server.Http.Component/BaSyx.Registry.Server.Http.Component.csproj b/sdks/dotnet/basyx-components/BaSyx.Registry.Server.Http.Component/BaSyx.Registry.Server.Http.Component.csproj
index a72643d..1592552 100644
--- a/sdks/dotnet/basyx-components/BaSyx.Registry.Server.Http.Component/BaSyx.Registry.Server.Http.Component.csproj
+++ b/sdks/dotnet/basyx-components/BaSyx.Registry.Server.Http.Component/BaSyx.Registry.Server.Http.Component.csproj
@@ -1,7 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk.Web">
 
   <PropertyGroup>
-    <OutputType>Exe</OutputType>
     <TargetFramework>netcoreapp3.1</TargetFramework>
     <Configurations>Debug;Release</Configurations>
     <Authors>Constantin Ziesche</Authors>
diff --git a/sdks/dotnet/basyx-components/BaSyx.Registry.Server.Http.Component/DependencySettings.xml b/sdks/dotnet/basyx-components/BaSyx.Registry.Server.Http.Component/DependencySettings.xml
new file mode 100644
index 0000000..972139d
--- /dev/null
+++ b/sdks/dotnet/basyx-components/BaSyx.Registry.Server.Http.Component/DependencySettings.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<DependencySettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <DependencyCollection>
+    <Dependencies>
+      <Dependency>
+        <DllPath>BaSyx.Registry.ReferenceImpl.FileBased.dll</DllPath>
+        <InterfaceType>BaSyx.API.Platform.IAssetAdministrationShellRegistry</InterfaceType>
+        <ImplementationType>BaSyx.Registry.ReferenceImpl.FileBased.FileBasedRegistry</ImplementationType>
+        <ServiceLifetime>Singleton</ServiceLifetime>
+      </Dependency>
+    </Dependencies>
+  </DependencyCollection>
+  <Miscellaneous/>
+</DependencySettings>
diff --git a/sdks/dotnet/basyx-components/BaSyx.Registry.Server.Http.Component/FileBasedRegistrySettings.xml b/sdks/dotnet/basyx-components/BaSyx.Registry.Server.Http.Component/FileBasedRegistrySettings.xml
new file mode 100644
index 0000000..ded4bda
--- /dev/null
+++ b/sdks/dotnet/basyx-components/BaSyx.Registry.Server.Http.Component/FileBasedRegistrySettings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FileBasedRegistrySettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Miscellaneous>
+    <FolderPath>RegistryDatabase</FolderPath>
+  </Miscellaneous>
+</FileBasedRegistrySettings>
diff --git a/sdks/dotnet/basyx-components/BaSyx.Registry.Server.Http/ServerSettings.xml b/sdks/dotnet/basyx-components/BaSyx.Registry.Server.Http/ServerSettings.xml
index 2327275..a7ef657 100644
--- a/sdks/dotnet/basyx-components/BaSyx.Registry.Server.Http/ServerSettings.xml
+++ b/sdks/dotnet/basyx-components/BaSyx.Registry.Server.Http/ServerSettings.xml
@@ -6,8 +6,12 @@
       <ContentPath>Content</ContentPath>
       <Urls>
         <Url>http://+:4999</Url>
+        <Url>https://+:4499</Url>
       </Urls>
     </Hosting>
     <DefaultRoute/>
   </ServerConfig>
+  <Miscellaneous>
+    <CompanyLogo>/images/Bosch.gif</CompanyLogo>
+  </Miscellaneous>
 </ServerSettings>
diff --git a/sdks/dotnet/basyx-components/BaSyx.Submodel.Client.Http/SubmodelHttpClient.cs b/sdks/dotnet/basyx-components/BaSyx.Submodel.Client.Http/SubmodelHttpClient.cs
index 533407f..150d2fd 100644
--- a/sdks/dotnet/basyx-components/BaSyx.Submodel.Client.Http/SubmodelHttpClient.cs
+++ b/sdks/dotnet/basyx-components/BaSyx.Submodel.Client.Http/SubmodelHttpClient.cs
@@ -21,11 +21,17 @@
 using BaSyx.Models.Connectivity;
 using System.Linq;
 using BaSyx.Utils.DependencyInjection;
+using NLog;
+using System.Collections.Generic;
 
 namespace BaSyx.Submodel.Client.Http
 {
     public class SubmodelHttpClient : SimpleHttpClient, ISubmodelClient
     {
+        private static readonly ILogger logger = LogManager.GetCurrentClassLogger();
+
+        public static bool USE_HTTPS = true;
+
         private const string SEPARATOR = "/";
         private const string SUBMODEL = "submodel";
         private const string PROPERTIES = "properties";
@@ -36,35 +42,43 @@
         private const string ASYNC = "async";
         private const string INVOCATION_LIST = "invocationList";
 
-        private const int REQUEST_TIMEOUT = 30000;
-
         public Uri Endpoint { get; }
+        public int RequestTimeout = DEFAULT_REQUEST_TIMEOUT;
 
-        private SubmodelHttpClient()
+        private SubmodelHttpClient(HttpClientHandler clientHandler) : base(clientHandler)
         {
             JsonSerializerSettings = new DependencyInjectionJsonSerializerSettings();
         }
 
-        public SubmodelHttpClient(Uri endpoint) : this()
+        public SubmodelHttpClient(Uri endpoint) : this(endpoint, DEFAULT_HTTP_CLIENT_HANDLER)
+        { }
+        public SubmodelHttpClient(Uri endpoint, HttpClientHandler clientHandler) : this(clientHandler)
         {
             endpoint = endpoint ?? throw new ArgumentNullException(nameof(endpoint));
             Endpoint = endpoint;
         }
+        public SubmodelHttpClient(ISubmodelDescriptor submodelDescriptor) : this(submodelDescriptor, DEFAULT_HTTP_CLIENT_HANDLER)
+        { }
 
-        public SubmodelHttpClient(ISubmodelDescriptor submodelDescriptor) : this()
+        public SubmodelHttpClient(ISubmodelDescriptor submodelDescriptor, HttpClientHandler clientHandler) : this(clientHandler)
         {
             submodelDescriptor = submodelDescriptor ?? throw new ArgumentNullException(nameof(submodelDescriptor));
-            HttpEndpoint httpEndpoint = submodelDescriptor.Endpoints?.OfType<HttpEndpoint>()?.FirstOrDefault();
+            IEnumerable<HttpEndpoint> httpEndpoints = submodelDescriptor.Endpoints?.OfType<HttpEndpoint>();
+            HttpEndpoint httpEndpoint = null;
+            if (USE_HTTPS)
+                httpEndpoint = httpEndpoints?.FirstOrDefault(p => p.Type == Uri.UriSchemeHttps);
+            if (httpEndpoint == null)
+                httpEndpoint = httpEndpoints?.FirstOrDefault(p => p.Type == Uri.UriSchemeHttp);
+
             if (httpEndpoint == null || string.IsNullOrEmpty(httpEndpoint.Address))
                 throw new Exception("There is no http endpoint for instantiating a client");
             else
             {
-                if(!httpEndpoint.Address.EndsWith(SEPARATOR + SUBMODEL) || !httpEndpoint.Address.EndsWith(SEPARATOR + SUBMODEL + SEPARATOR))
+                if (!httpEndpoint.Address.EndsWith(SEPARATOR + SUBMODEL) && !httpEndpoint.Address.EndsWith(SEPARATOR + SUBMODEL + SEPARATOR))
                     Endpoint = new Uri(httpEndpoint.Address + SEPARATOR + SUBMODEL);
                 else
                     Endpoint = new Uri(httpEndpoint.Address);
             }
-                
         }
 
         public Uri GetUri(params string[] pathElements)
@@ -77,175 +91,175 @@
         public IResult<ISubmodel> RetrieveSubmodel()
         {
             var request = base.CreateRequest(GetUri(), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<ISubmodel>(response, response.Entity);
         }
 
         public IResult<IProperty> CreateProperty(IProperty property)
         {
             var request = base.CreateJsonContentRequest(GetUri(PROPERTIES), HttpMethod.Put, property);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<IProperty>(response, response.Entity);
         }
 
         public IResult<IEvent> CreateEvent(IEvent eventable)
         {
             var request = base.CreateJsonContentRequest(GetUri(EVENTS), HttpMethod.Put, eventable);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<IEvent>(response, response.Entity);
         }
 
         public IResult<IOperation> CreateOperation(IOperation operation)
         {
             var request = base.CreateJsonContentRequest(GetUri(OPERATIONS), HttpMethod.Put, operation);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<IOperation>(response, response.Entity);
         }
 
         public IResult DeleteProperty(string propertyId)
         {
             var request = base.CreateRequest(GetUri(PROPERTIES, propertyId), HttpMethod.Delete);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse(response, response.Entity);
         }
 
         public IResult DeleteEvent(string eventId)
         {
             var request = base.CreateRequest(GetUri(EVENTS, eventId), HttpMethod.Delete);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse(response, response.Entity);
         }
 
         public IResult DeleteOperation(string operationId)
         {
             var request = base.CreateRequest(GetUri(OPERATIONS, operationId), HttpMethod.Delete);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse(response, response.Entity);
         }
 
         public IResult<InvocationResponse> InvokeOperation(string operationId, InvocationRequest invocationRequest)
         {
             var request = base.CreateJsonContentRequest(GetUri(OPERATIONS, operationId), HttpMethod.Post, invocationRequest);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<InvocationResponse>(response, response.Entity);
         }
 
         public IResult<IProperty> RetrieveProperty(string propertyId)
         {
             var request = base.CreateRequest(GetUri(PROPERTIES, propertyId), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<IProperty>(response, response.Entity);
         }
 
         public IResult<IElementContainer<IProperty>> RetrieveProperties()
         {
             var request = base.CreateRequest(GetUri(PROPERTIES), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<ElementContainer<IProperty>>(response, response.Entity);
         }
 
         public IResult<IValue> RetrievePropertyValue(string propertyId)
         {
             var request = base.CreateRequest(GetUri(PROPERTIES, propertyId, VALUE), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<IValue>(response, response.Entity);
         }
 
         public IResult<IEvent> RetrieveEvent(string eventId)
         {
             var request = base.CreateRequest(GetUri(EVENTS, eventId), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<IEvent>(response, response.Entity);
         }
 
         public IResult<IElementContainer<IEvent>> RetrieveEvents()
         {
             var request = base.CreateRequest(GetUri(EVENTS), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<IElementContainer<IEvent>>(response, response.Entity);
         }
 
         public IResult<IOperation> RetrieveOperation(string operationId)
         {
             var request = base.CreateRequest(GetUri(OPERATIONS, operationId), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<IOperation>(response, response.Entity);
         }
 
         public IResult<IElementContainer<IOperation>> RetrieveOperations()
         {
             var request = base.CreateRequest(GetUri(OPERATIONS), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<ElementContainer<IOperation>>(response, response.Entity);
         }
 
         public IResult UpdatePropertyValue(string propertyId, IValue value)
         {
             var request = base.CreateJsonContentRequest(GetUri(PROPERTIES, propertyId, VALUE), HttpMethod.Put, value);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse(response, response.Entity);
         }
 
-        public IResult<ISubmodelElement> CreateSubmodelElement(string rootSubmodelElementIdShort, ISubmodelElement submodelElement)
+        public IResult<ISubmodelElement> CreateOrUpdateSubmodelElement(string rootSubmodelElementIdShort, ISubmodelElement submodelElement)
         {
             var request = base.CreateJsonContentRequest(GetUri(SUBMODELELEMENTS), HttpMethod.Put, submodelElement);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<ISubmodelElement>(response, response.Entity);
         }
 
         public IResult<IElementContainer<ISubmodelElement>> RetrieveSubmodelElements()
         {
             var request = base.CreateRequest(GetUri(SUBMODELELEMENTS), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<IElementContainer<ISubmodelElement>>(response, response.Entity);
         }
 
         public IResult<ISubmodelElement> RetrieveSubmodelElement(string submodelElementId)
         {
             var request = base.CreateRequest(GetUri(SUBMODELELEMENTS, submodelElementId), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<ISubmodelElement>(response, response.Entity);
         }
 
         public IResult<IValue> RetrieveSubmodelElementValue(string submodelElementId)
         {
             var request = base.CreateRequest(GetUri(SUBMODELELEMENTS, submodelElementId, VALUE), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<IValue>(response, response.Entity);
         }
 
         public IResult UpdateSubmodelElement(string submodelElementId, ISubmodelElement submodelElement)
         {
             var request = base.CreateJsonContentRequest(GetUri(SUBMODELELEMENTS, submodelElementId), HttpMethod.Put, submodelElement);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse(response, response.Entity);
         }
 
         public IResult DeleteSubmodelElement(string submodelElementId)
         {
             var request = base.CreateRequest(GetUri(SUBMODELELEMENTS, submodelElementId), HttpMethod.Delete);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse(response, response.Entity);
         }
 
         public IResult<CallbackResponse> InvokeOperationAsync(string operationId, InvocationRequest invocationRequest)
         {
             var request = base.CreateJsonContentRequest(GetUri(OPERATIONS, operationId, ASYNC), HttpMethod.Post, invocationRequest);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<CallbackResponse>(response, response.Entity);
         }
 
         public IResult<InvocationResponse> GetInvocationResult(string operationId, string requestId)
         {
             var request = base.CreateRequest(GetUri(OPERATIONS, operationId, INVOCATION_LIST, requestId), HttpMethod.Get);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse<InvocationResponse>(response, response.Entity);
         }
 
         public IResult UpdateSubmodelElementValue(string submodelElementId, IValue value)
         {
             var request = base.CreateJsonContentRequest(GetUri(SUBMODELELEMENTS, submodelElementId, VALUE), HttpMethod.Put, value);
-            var response = base.SendRequest(request, REQUEST_TIMEOUT);
+            var response = base.SendRequest(request, RequestTimeout);
             return base.EvaluateResponse(response, response.Entity);
         }
     }
diff --git a/sdks/dotnet/basyx-components/BaSyx.Submodel.Server.Http/SubmodelRepositoryHttpServer.cs b/sdks/dotnet/basyx-components/BaSyx.Submodel.Server.Http/SubmodelRepositoryHttpServer.cs
index 5d8cd69..7043fc7 100644
--- a/sdks/dotnet/basyx-components/BaSyx.Submodel.Server.Http/SubmodelRepositoryHttpServer.cs
+++ b/sdks/dotnet/basyx-components/BaSyx.Submodel.Server.Http/SubmodelRepositoryHttpServer.cs
@@ -19,8 +19,6 @@
 {
     public class SubmodelRepositoryHttpServer : ServerApplication
     {
-        private string submodelId = string.Empty;
-
         public SubmodelRepositoryHttpServer() : this(null, null)
         { }
 
@@ -40,21 +38,6 @@
             {
                 services.AddSingleton<ISubmodelRepositoryServiceProvider>(submodelRepositoryServiceProvider);
             });
-        }
-
-        protected override void ConfigureServices(IServiceCollection services)
-        {
-            base.ConfigureServices(services);
-
-            //Check whether Submodel Service Provider exists and bind it to the Submodel-Services-Controller
-            services.AddTransient<ISubmodelServiceProvider>(ctx =>
-            {
-                ISubmodelServiceProvider submodelServiceProvider = ctx
-                .GetRequiredService<ISubmodelRepositoryServiceProvider>()
-                .GetSubmodelServiceProvider(submodelId);
-
-                return submodelServiceProvider;
-            });
-        }
+        }       
     }
 }
diff --git a/sdks/dotnet/basyx-core/BaSyx.API/Clients/IAssetAdministrationShellClient.cs b/sdks/dotnet/basyx-core/BaSyx.API/Clients/IAssetAdministrationShellClient.cs
index 943d7fe..14be1ab 100644
--- a/sdks/dotnet/basyx-core/BaSyx.API/Clients/IAssetAdministrationShellClient.cs
+++ b/sdks/dotnet/basyx-core/BaSyx.API/Clients/IAssetAdministrationShellClient.cs
@@ -9,7 +9,6 @@
 * SPDX-License-Identifier: EPL-2.0
 *******************************************************************************/
 using BaSyx.Models.Core.AssetAdministrationShell.Generics;
-using BaSyx.Models.Core.Common;
 using BaSyx.Utils.ResultHandling;
 
 namespace BaSyx.API.Clients
@@ -17,17 +16,5 @@
     public interface IAssetAdministrationShellClient
     {
         IResult<IAssetAdministrationShell> RetrieveAssetAdministrationShell();
-
-        #region Submodel - CRUD-Operations
-
-        IResult<ISubmodel> CreateSubmodel(ISubmodel submodel);
-
-        IResult<IElementContainer<ISubmodel>> RetrieveSubmodels();
-
-        IResult<ISubmodel> RetrieveSubmodel(string submodelId);
-
-        IResult DeleteSubmodel(string submodelId);
-
-        #endregion
     }
 }
diff --git a/sdks/dotnet/basyx-core/BaSyx.API/Clients/IAssetAdministrationShellSubmodelClient.cs b/sdks/dotnet/basyx-core/BaSyx.API/Clients/IAssetAdministrationShellSubmodelClient.cs
new file mode 100644
index 0000000..13072e2
--- /dev/null
+++ b/sdks/dotnet/basyx-core/BaSyx.API/Clients/IAssetAdministrationShellSubmodelClient.cs
@@ -0,0 +1,58 @@
+/*******************************************************************************
+* Copyright (c) 2020 Robert Bosch GmbH
+* Author: Constantin Ziesche (constantin.ziesche@bosch.com)
+*
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License 2.0 which is available at
+* http://www.eclipse.org/legal/epl-2.0
+*
+* SPDX-License-Identifier: EPL-2.0
+*******************************************************************************/
+using BaSyx.Models.Core.AssetAdministrationShell.Generics;
+using BaSyx.Utils.ResultHandling;
+using BaSyx.Models.Core.Common;
+using BaSyx.Models.Communication;
+
+namespace BaSyx.API.Clients
+{
+    public interface IAssetAdministrationShellSubmodelClient
+    {
+        IResult<ISubmodel> RetrieveSubmodel(string submodelId);
+
+        IResult<ISubmodelElement> CreateOrUpdateSubmodelElement(string submodelId, string rootSeIdShortPath, ISubmodelElement submodelElement);
+
+        IResult<IElementContainer<ISubmodelElement>> RetrieveSubmodelElements(string submodelId);
+
+        IResult<ISubmodelElement> RetrieveSubmodelElement(string submodelId, string seIdShortPath);
+
+        IResult<IValue> RetrieveSubmodelElementValue(string submodelId, string seIdShortPath);
+
+        IResult UpdateSubmodelElementValue(string submodelId, string seIdShortPath, IValue value);
+
+        IResult DeleteSubmodelElement(string submodelId, string seIdShortPath);
+
+        /// <summary>
+        /// Invokes a specific Operation synchronously
+        /// </summary>
+        /// <param name="operationIdShortPath">IdShort-Path to the Operation</param>
+        /// <param name="invocationRequest">Request-Parameters for the invocation</param>
+        /// <returns></returns>
+        IResult<InvocationResponse> InvokeOperation(string submodelId, string operationIdShortPath, InvocationRequest invocationRequest);
+
+        /// <summary>
+        /// Invokes a specific Operation asynchronously
+        /// </summary>
+        /// <param name="operationIdShortPath">IdShort-Path to the Operation</param>
+        /// <param name="invocationRequest">Request-Parameters for the invocation</param>
+        /// <returns></returns>
+        IResult<CallbackResponse> InvokeOperationAsync(string submodelId, string operationIdShortPath, InvocationRequest invocationRequest);
+
+        /// <summary>
+        /// Returns the Invocation Result of specific Operation
+        /// </summary>
+        /// <param name="operationIdShortPath">IdShort-Path to the Operation</param>
+        /// <param name="requestId">Request-Id</param>
+        /// <returns></returns>
+        IResult<InvocationResponse> GetInvocationResult(string submodelId, string operationIdShortPath, string requestId);
+    }
+}
diff --git a/sdks/dotnet/basyx-core/BaSyx.API/Clients/ISubmodelClient.cs b/sdks/dotnet/basyx-core/BaSyx.API/Clients/ISubmodelClient.cs
index 1a57f48..78f7014 100644
--- a/sdks/dotnet/basyx-core/BaSyx.API/Clients/ISubmodelClient.cs
+++ b/sdks/dotnet/basyx-core/BaSyx.API/Clients/ISubmodelClient.cs
@@ -19,42 +19,40 @@
     {
         IResult<ISubmodel> RetrieveSubmodel();
 
-        IResult<ISubmodelElement> CreateSubmodelElement(string rootSubmodelElementPath, ISubmodelElement submodelElement);
+        IResult<ISubmodelElement> CreateOrUpdateSubmodelElement(string rootSeIdShortPath, ISubmodelElement submodelElement);
 
         IResult<IElementContainer<ISubmodelElement>> RetrieveSubmodelElements();
 
-        IResult<ISubmodelElement> RetrieveSubmodelElement(string pathToSubmodelElement);
+        IResult<ISubmodelElement> RetrieveSubmodelElement(string seIdShortPath);
 
-        IResult<IValue> RetrieveSubmodelElementValue(string pathToSubmodelElement);
+        IResult<IValue> RetrieveSubmodelElementValue(string seIdShortPath);
 
-        IResult UpdateSubmodelElementValue(string pathToSubmodelElement, IValue value);
+        IResult UpdateSubmodelElementValue(string seIdShortPath, IValue value);
 
-        IResult UpdateSubmodelElement(string pathToSubmodelElement, ISubmodelElement submodelElement);
-
-        IResult DeleteSubmodelElement(string pathToSubmodelElement);
+        IResult DeleteSubmodelElement(string seIdShortPath);
 
         /// <summary>
         /// Invokes a specific Operation synchronously
         /// </summary>
-        /// <param name="pathToOperation">IdShort-Path to the Operation</param>
+        /// <param name="operationIdShortPath">IdShort-Path to the Operation</param>
         /// <param name="invocationRequest">Request-Parameters for the invocation</param>
         /// <returns></returns>
-        IResult<InvocationResponse> InvokeOperation(string pathToOperation, InvocationRequest invocationRequest);
+        IResult<InvocationResponse> InvokeOperation(string operationIdShortPath, InvocationRequest invocationRequest);
 
         /// <summary>
         /// Invokes a specific Operation asynchronously
         /// </summary>
-        /// <param name="pathToOperation">IdShort-Path to the Operation</param>
+        /// <param name="operationIdShortPath">IdShort-Path to the Operation</param>
         /// <param name="invocationRequest">Request-Parameters for the invocation</param>
         /// <returns></returns>
-        IResult<CallbackResponse> InvokeOperationAsync(string pathToOperation, InvocationRequest invocationRequest);
+        IResult<CallbackResponse> InvokeOperationAsync(string operationIdShortPath, InvocationRequest invocationRequest);
 
         /// <summary>
         /// Returns the Invocation Result of specific Operation
         /// </summary>
-        /// <param name="pathToOperation">IdShort-Path to the Operation</param>
+        /// <param name="operationIdShortPath">IdShort-Path to the Operation</param>
         /// <param name="requestId">Request-Id</param>
         /// <returns></returns>
-        IResult<InvocationResponse> GetInvocationResult(string pathToOperation, string requestId);
+        IResult<InvocationResponse> GetInvocationResult(string operationIdShortPath, string requestId);
     }
 }
diff --git a/sdks/dotnet/basyx-core/BaSyx.API/Clients/ISubmodelRepositoryClient.cs b/sdks/dotnet/basyx-core/BaSyx.API/Clients/ISubmodelRepositoryClient.cs
new file mode 100644
index 0000000..fb258d0
--- /dev/null
+++ b/sdks/dotnet/basyx-core/BaSyx.API/Clients/ISubmodelRepositoryClient.cs
@@ -0,0 +1,27 @@
+/*******************************************************************************
+* Copyright (c) 2020 Robert Bosch GmbH
+* Author: Constantin Ziesche (constantin.ziesche@bosch.com)
+*
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License 2.0 which is available at
+* http://www.eclipse.org/legal/epl-2.0
+*
+* SPDX-License-Identifier: EPL-2.0
+*******************************************************************************/
+using BaSyx.Models.Core.AssetAdministrationShell.Generics;
+using BaSyx.Models.Core.Common;
+using BaSyx.Utils.ResultHandling;
+
+namespace BaSyx.API.Clients
+{
+    public interface ISubmodelRepositoryClient
+    {
+        IResult<ISubmodel> CreateOrUpdateSubmodel(ISubmodel submodel);
+
+        IResult<IElementContainer<ISubmodel>> RetrieveSubmodels();
+
+        IResult<ISubmodel> RetrieveSubmodel(string submodelId);
+
+        IResult DeleteSubmodel(string submodelId);
+    }
+}
diff --git a/sdks/dotnet/basyx-core/BaSyx.API/Components/DistributedSubmodelServiceProvider.cs b/sdks/dotnet/basyx-core/BaSyx.API/Components/DistributedSubmodelServiceProvider.cs
index 93975da..bd7b492 100644
--- a/sdks/dotnet/basyx-core/BaSyx.API/Components/DistributedSubmodelServiceProvider.cs
+++ b/sdks/dotnet/basyx-core/BaSyx.API/Components/DistributedSubmodelServiceProvider.cs
@@ -26,7 +26,7 @@
 
         public ISubmodelDescriptor ServiceDescriptor { get; }
 
-        private ISubmodelClient submodelClient;
+        private readonly ISubmodelClient submodelClient;
 
         public DistributedSubmodelServiceProvider(ISubmodelClientFactory submodelClientFactory, ISubmodelDescriptor serviceDescriptor)
         {
@@ -117,9 +117,9 @@
             throw new NotImplementedException();
         }
 
-        public IResult<ISubmodelElement> CreateSubmodelElement(string rootSubmodelElementPath, ISubmodelElement submodelElement)
+        public IResult<ISubmodelElement> CreateOrUpdateSubmodelElement(string rootSubmodelElementPath, ISubmodelElement submodelElement)
         {
-            return submodelClient.CreateSubmodelElement(rootSubmodelElementPath, submodelElement);
+            return submodelClient.CreateOrUpdateSubmodelElement(rootSubmodelElementPath, submodelElement);
         }
 
         public IResult<IElementContainer<ISubmodelElement>> RetrieveSubmodelElements()
@@ -137,11 +137,6 @@
             return submodelClient.RetrieveSubmodelElementValue(submodelElementId);
         }
 
-        public IResult UpdateSubmodelElement(string submodelElementId, ISubmodelElement submodelElement)
-        {
-            return submodelClient.UpdateSubmodelElement(submodelElementId, submodelElement);
-        }
-
         public IResult DeleteSubmodelElement(string submodelElementId)
         {
             return submodelClient.DeleteSubmodelElement(submodelElementId);
diff --git a/sdks/dotnet/basyx-core/BaSyx.API/Components/SubmodelServiceProvider.cs b/sdks/dotnet/basyx-core/BaSyx.API/Components/SubmodelServiceProvider.cs
index 3ea1ef9..20d5cce 100644
--- a/sdks/dotnet/basyx-core/BaSyx.API/Components/SubmodelServiceProvider.cs
+++ b/sdks/dotnet/basyx-core/BaSyx.API/Components/SubmodelServiceProvider.cs
@@ -200,7 +200,13 @@
             else
                 submodelElementHandler[pathToElement] = elementHandler;
         }
-        
+
+        public void UnregisterSubmodelElementHandler(string pathToElement)
+        {
+            if (submodelElementHandler.ContainsKey(pathToElement))
+                submodelElementHandler.Remove(pathToElement);
+        }
+
         public void RegisterMethodCalledHandler(string pathToOperation, MethodCalledHandler handler)
         {
             if (!methodCalledHandler.ContainsKey(pathToOperation))
@@ -208,7 +214,7 @@
             else
                 methodCalledHandler[pathToOperation] = handler;
         }
-          
+
         public void RegisterEventDelegate(string pathToEvent, EventDelegate eventDelegate)
         {
             if (!eventDelegates.ContainsKey(pathToEvent))
@@ -407,12 +413,15 @@
             return new Result<ISubmodel>(_submodel != null, _submodel);
         }
 
-        public IResult<ISubmodelElement> CreateSubmodelElement(string pathToSubmodelElement, ISubmodelElement submodelElement)
+        public IResult<ISubmodelElement> CreateOrUpdateSubmodelElement(string pathToSubmodelElement, ISubmodelElement submodelElement)
         {
             if (_submodel == null)
                 return new Result<ISubmodelElement>(false, new NotFoundMessage("Submodel"));
 
-            return _submodel.SubmodelElements.Create(submodelElement);
+            var created = _submodel.SubmodelElements.CreateOrUpdate(pathToSubmodelElement, submodelElement);
+            if(created.Success && created.Entity != null)
+                RegisterSubmodelElementHandler(pathToSubmodelElement, new SubmodelElementHandler(submodelElement.Get, submodelElement.Set));
+            return created;
         }
 
         public IResult<IElementContainer<ISubmodelElement>> RetrieveSubmodelElements()
@@ -447,22 +456,11 @@
                     return new Result<IValue>(true, elementHandler.GetValueHandler.Invoke(submodelElement.Entity));
                 else
                     return new Result<IValue>(false, new Message(MessageType.Error, "SubmodelElement not found"));
-            }
+            }            
             else
                 return new Result<IValue>(false, new Message(MessageType.Error, "SubmodelElementHandler not found"));
         }
 
-        public IResult UpdateSubmodelElement(string submodelElementId, ISubmodelElement submodelElement)
-        {
-            if (_submodel == null)
-                return new Result(false, new NotFoundMessage("Submodel"));
-
-            if (_submodel.SubmodelElements == null)
-                return new Result(false, new NotFoundMessage(submodelElementId));
-
-            return _submodel.SubmodelElements.Update(submodelElementId, submodelElement);
-        }
-
         public IResult UpdateSubmodelElementValue(string submodelElementId, IValue value)
         {
             if (_submodel == null)
@@ -491,7 +489,10 @@
             if (_submodel.SubmodelElements == null)
                 return new Result(false, new NotFoundMessage(submodelElementId));
 
-            return _submodel.SubmodelElements.Delete(submodelElementId);
+            var deleted = _submodel.SubmodelElements.Delete(submodelElementId);
+            if (deleted.Success)
+                UnregisterSubmodelElementHandler(submodelElementId);
+            return deleted;
         }        
     }
 }
diff --git a/sdks/dotnet/basyx-core/BaSyx.Models/Connectivity/Endpoints/HttpEndpoint.cs b/sdks/dotnet/basyx-core/BaSyx.Models/Connectivity/Endpoints/HttpEndpoint.cs
index 63b4e86..d471775 100644
--- a/sdks/dotnet/basyx-core/BaSyx.Models/Connectivity/Endpoints/HttpEndpoint.cs
+++ b/sdks/dotnet/basyx-core/BaSyx.Models/Connectivity/Endpoints/HttpEndpoint.cs
@@ -21,7 +21,7 @@
         [IgnoreDataMember]
         public Uri Url { get; }
 
-        public string Type => EndpointType.HTTP;
+        public string Type { get; }
 
         public IEndpointSecurity Security { get; set;}
 
@@ -30,6 +30,7 @@
         {
             address = address ?? throw new ArgumentNullException(nameof(address));
             Url = new Uri(address);
+            Type = Url.Scheme;
             Address = Url.ToString();
         }
 
diff --git a/sdks/dotnet/basyx-core/BaSyx.Models/Core/AssetAdministrationShell/Implementations/SubmodelElementTypes/SubmodelElementCollection.cs b/sdks/dotnet/basyx-core/BaSyx.Models/Core/AssetAdministrationShell/Implementations/SubmodelElementTypes/SubmodelElementCollection.cs
index 99c42bb..f5d93d9 100644
--- a/sdks/dotnet/basyx-core/BaSyx.Models/Core/AssetAdministrationShell/Implementations/SubmodelElementTypes/SubmodelElementCollection.cs
+++ b/sdks/dotnet/basyx-core/BaSyx.Models/Core/AssetAdministrationShell/Implementations/SubmodelElementTypes/SubmodelElementCollection.cs
@@ -107,7 +107,7 @@
             Value.AddRange(elements);
         }
 
-        IResult<T> ICrudContainer<string, ISubmodelElement>.Create<T>(T element)
+        public IResult<ISubmodelElement> Create(ISubmodelElement element)
         {
             return Value.Create(element);
         }
diff --git a/sdks/dotnet/basyx-core/BaSyx.Models/Core/Common/ElementContainer.cs b/sdks/dotnet/basyx-core/BaSyx.Models/Core/Common/ElementContainer.cs
index 74bbdf9..2429e24 100644
--- a/sdks/dotnet/basyx-core/BaSyx.Models/Core/Common/ElementContainer.cs
+++ b/sdks/dotnet/basyx-core/BaSyx.Models/Core/Common/ElementContainer.cs
@@ -378,15 +378,24 @@
                 return new Result<TElement>(new ArgumentNullException(nameof(idShortPath)));
             if (element == null)
                 return new Result<TElement>(new ArgumentNullException(nameof(element)));
-
+            
             var child = GetChild(idShortPath);
             if (child != null)
             {
                 child.Value = element;
                 return new Result<TElement>(true, element);
             }
+            else if (idShortPath.Contains(PATH_SEPERATOR))
+            {
+                string parentPath = idShortPath.Substring(0, idShortPath.LastIndexOf('/'));
+                var parent = GetChild(parentPath);
+                if (parent != null)
+                    return parent.Create(element);
+                else
+                    return new Result<TElement>(false, new NotFoundMessage($"Parent element {parentPath} not found"));
+            }
             else
-                return Create(element);
+                return this.Create(element);
         }
 
 
@@ -415,6 +424,7 @@
             if (child != null)
             {
                 child.ParentContainer.Remove(child.IdShort);
+                return new Result(true);
             }
             return new Result(false, new NotFoundMessage());
         }
diff --git a/sdks/dotnet/basyx-core/BaSyx.Models/Core/Common/ElementPath.cs b/sdks/dotnet/basyx-core/BaSyx.Models/Core/Common/ElementPath.cs
new file mode 100644
index 0000000..7ed2789
--- /dev/null
+++ b/sdks/dotnet/basyx-core/BaSyx.Models/Core/Common/ElementPath.cs
@@ -0,0 +1,111 @@
+/*******************************************************************************
+* Copyright (c) 2020 Robert Bosch GmbH
+* Author: Constantin Ziesche (constantin.ziesche@bosch.com)
+*
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License 2.0 which is available at
+* http://www.eclipse.org/legal/epl-2.0
+*
+* SPDX-License-Identifier: EPL-2.0
+*******************************************************************************/
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace BaSyx.Models.Core.Common
+{
+    public class ElementPath : IEquatable<ElementPath>, IEnumerable<string>
+    {
+        public string Path { get; }
+        public List<string> PathComponents => Path?.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries)?.ToList();
+
+        public ElementPath Parent
+        {
+            get
+            {
+                if (PathComponents?.Count > 0)
+                {
+                    ElementPath parentPath = new ElementPath("/");
+                    foreach (var pathComponent in PathComponents)
+                    {
+                        parentPath.Add(new ElementPath(pathComponent));
+                    }
+                    return parentPath;
+                }
+                else
+                    return this;
+            }
+        }
+
+        public ElementPath(string path)
+        {
+            Path = path ?? throw new ArgumentNullException(nameof(path));
+
+            if (Path[0] != '/')
+                Path = "/" + Path;
+        }
+
+        public ElementPath Add(ElementPath otherPath)
+        {
+            return new ElementPath(Path + otherPath.Path);
+        }
+
+        public bool Equals(ElementPath otherPath)
+        {
+            return string.Equals(Path, otherPath.Path, StringComparison.OrdinalIgnoreCase);
+        }
+
+        public bool Equals(ElementPath otherPath, StringComparison stringComparison)
+        {
+            return string.Equals(Path, otherPath.Path, stringComparison);
+        }
+
+        public override bool Equals(object obj)
+        {
+            if (ReferenceEquals(null, obj))
+                return false;
+            return obj is ElementPath && Equals((ElementPath)obj, StringComparison.OrdinalIgnoreCase);
+        }
+
+        public override int GetHashCode()
+        {
+            return (Path != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(Path) : 0);
+        }       
+
+        public static bool operator ==(ElementPath left, ElementPath right)
+        {
+            return left.Equals(right, StringComparison.OrdinalIgnoreCase);
+        }
+
+        public static bool operator !=(ElementPath left, ElementPath right)
+        {
+            return !left.Equals(right, StringComparison.OrdinalIgnoreCase);
+        }
+
+        public static ElementPath operator +(ElementPath left, ElementPath right)
+        {
+            return left.Add(right);
+        }
+
+        public static implicit operator string(ElementPath path)
+        {
+            return path.Path;
+        }
+
+        public static implicit operator ElementPath(string path)
+        {
+            return new ElementPath(path);
+        }
+
+        public IEnumerator<string> GetEnumerator()
+        {
+            return PathComponents.GetEnumerator();
+        }
+
+        IEnumerator IEnumerable.GetEnumerator()
+        {
+            return PathComponents.GetEnumerator();
+        }
+    }
+}
diff --git a/sdks/dotnet/basyx-core/BaSyx.Models/Core/Common/ElementTree.cs b/sdks/dotnet/basyx-core/BaSyx.Models/Core/Common/ElementTree.cs
index 68ed40f..82363cc 100644
--- a/sdks/dotnet/basyx-core/BaSyx.Models/Core/Common/ElementTree.cs
+++ b/sdks/dotnet/basyx-core/BaSyx.Models/Core/Common/ElementTree.cs
@@ -1,4 +1,14 @@
-using BaSyx.Models.Core.AssetAdministrationShell.Identification;
+/*******************************************************************************
+* Copyright (c) 2020 Robert Bosch GmbH
+* Author: Constantin Ziesche (constantin.ziesche@bosch.com)
+*
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License 2.0 which is available at
+* http://www.eclipse.org/legal/epl-2.0
+*
+* SPDX-License-Identifier: EPL-2.0
+*******************************************************************************/
+using BaSyx.Models.Core.AssetAdministrationShell.Identification;
 using BaSyx.Utils.ModelHandling;
 
 namespace BaSyx.Models.Core.Common
diff --git a/sdks/dotnet/basyx-core/BaSyx.Models/Core/Common/IElementContainer.cs b/sdks/dotnet/basyx-core/BaSyx.Models/Core/Common/IElementContainer.cs
index acf4b3d..556aa7d 100644
--- a/sdks/dotnet/basyx-core/BaSyx.Models/Core/Common/IElementContainer.cs
+++ b/sdks/dotnet/basyx-core/BaSyx.Models/Core/Common/IElementContainer.cs
@@ -19,8 +19,6 @@
 {
     public interface ICrudContainer<TIdentifier, TElement> : ICollection<TElement> where TElement : IReferable, IModelElement
     {
-        IResult<T> Create<T>(T element) where T : class, TElement;
-
         IResult<TElement> Retrieve(TIdentifier id);
 
         IResult<T> Retrieve<T>(TIdentifier id) where T : class, TElement;
@@ -31,10 +29,11 @@
 
         IResult<TElement> CreateOrUpdate(TIdentifier id, TElement element);
 
+        IResult<TElement> Create(TElement element);
+
         IResult<TElement> Update(TIdentifier id, TElement element);
 
         IResult Delete(TIdentifier id);
-       
     }
 
     [JsonConverter(typeof(ElementContainerConverter))]
diff --git a/sdks/dotnet/basyx-core/BaSyx.Utils/Client/Http/SimpleHttpClient.cs b/sdks/dotnet/basyx-core/BaSyx.Utils/Client/Http/SimpleHttpClient.cs
index 0752cf3..196b666 100644
--- a/sdks/dotnet/basyx-core/BaSyx.Utils/Client/Http/SimpleHttpClient.cs
+++ b/sdks/dotnet/basyx-core/BaSyx.Utils/Client/Http/SimpleHttpClient.cs
@@ -16,23 +16,47 @@
 using System.Collections.Generic;
 using System.Net;
 using System.Net.Http;
+using System.Net.Security;
+using System.Security.Cryptography.X509Certificates;
 using System.Text;
 using System.Threading.Tasks;
 
 namespace BaSyx.Utils.Client.Http
 {
-    public abstract class SimpleHttpClient
+    public abstract class SimpleHttpClient : IDisposable
     {
         public HttpClient HttpClient { get; }
         public HttpClientHandler HttpClientHandler { get; }
         public JsonSerializerSettings JsonSerializerSettings { get; protected set; }
 
-        public const int DEFAULT_REQUEST_TIMEOUT = 20000;
+        public const int DEFAULT_REQUEST_TIMEOUT = 30000;
 
-        protected SimpleHttpClient()
+        public static HttpClientHandler DEFAULT_HTTP_CLIENT_HANDLER
         {
-            HttpClientHandler = new HttpClientHandler() { MaxConnectionsPerServer = 100, UseProxy = false };
-            HttpClient = new HttpClient(HttpClientHandler);
+            get
+            {
+                return new HttpClientHandler()
+                {
+                    MaxConnectionsPerServer = 100,
+                    AllowAutoRedirect = true,
+                    UseProxy = false,
+                    ServerCertificateCustomValidationCallback = Validate
+                };
+            }
+        }
+
+        private static bool Validate(HttpRequestMessage message, X509Certificate2 cert, X509Chain chain, SslPolicyErrors policyErrors)
+        {
+            return true;
+        }
+
+        protected SimpleHttpClient(HttpClientHandler clientHandler)
+        {
+            if (clientHandler == null)
+                clientHandler = DEFAULT_HTTP_CLIENT_HANDLER;
+
+            HttpClientHandler = clientHandler;
+            HttpClient = new HttpClient(HttpClientHandler, true);
 
             JsonSerializerSettings = new DefaultJsonSerializerSettings();
         }
@@ -130,19 +154,23 @@
 
         protected virtual IResult EvaluateResponse(IResult result, HttpResponseMessage response)
         {
-            var messageList = new List<IMessage>();
+            List<IMessage> messageList = new List<IMessage>();
             messageList.AddRange(result.Messages);
 
             if (response != null)
             {
-                var responseString = response.Content.ReadAsStringAsync().Result;
+                byte[] responseByteArray = response.Content.ReadAsByteArrayAsync().Result;
                 if (response.IsSuccessStatusCode)
                 {
                     messageList.Add(new Message(MessageType.Information, response.ReasonPhrase, ((int)response.StatusCode).ToString()));
-                    return new Result(true, messageList);
+                    return new Result(true, responseByteArray, typeof(byte[]), messageList);
                 }
                 else
                 {
+                    string responseString = string.Empty;
+                    if(responseByteArray?.Length > 0)
+                        responseString = Encoding.UTF8.GetString(responseByteArray);
+
                     messageList.Add(new Message(MessageType.Error, response.ReasonPhrase + " | " + responseString, ((int)response.StatusCode).ToString()));
                     return new Result(false, messageList);
                 }
@@ -153,12 +181,12 @@
 
         protected virtual IResult<T> EvaluateResponse<T>(IResult result, HttpResponseMessage response)
         {
-            var messageList = new List<IMessage>();
+            List<IMessage> messageList = new List<IMessage>();
             messageList.AddRange(result.Messages);
 
             if (response != null)
             {
-                var responseString = response.Content.ReadAsStringAsync().Result;
+                string responseString = response.Content.ReadAsStringAsync().Result;
                 if (response.IsSuccessStatusCode)
                 {
                     try
@@ -183,5 +211,28 @@
             messageList.Add(new Message(MessageType.Error, "Evaluation of response failed - Response from host is null", null));
             return new Result<T>(false, messageList);
         }
+
+        #region IDisposable Support
+        private bool disposedValue = false;
+
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!disposedValue)
+            {
+                if (disposing)
+                {
+                    HttpClient.Dispose();
+                }
+                disposedValue = true;
+            }
+        }
+
+        public void Dispose()
+        {
+            Dispose(true);
+        }
+        #endregion
+
+
     }
 }
diff --git a/sdks/dotnet/basyx-examples/SimpleAssetAdministrationShell/Program.cs b/sdks/dotnet/basyx-examples/SimpleAssetAdministrationShell/Program.cs
index 8a4603b..b53acfa 100644
--- a/sdks/dotnet/basyx-examples/SimpleAssetAdministrationShell/Program.cs
+++ b/sdks/dotnet/basyx-examples/SimpleAssetAdministrationShell/Program.cs
@@ -33,8 +33,8 @@
             ServerSettings submodelServerSettings = ServerSettings.CreateSettings();
             submodelServerSettings.ServerConfig.Hosting.ContentPath = "Content";
             submodelServerSettings.ServerConfig.Hosting.Environment = "Development";
-            submodelServerSettings.ServerConfig.Hosting.Urls.Add("http://localhost:5040");
-            submodelServerSettings.ServerConfig.Hosting.Urls.Add("https://localhost:5440");
+            submodelServerSettings.ServerConfig.Hosting.Urls.Add("http://+:5040");
+            submodelServerSettings.ServerConfig.Hosting.Urls.Add("https://+:5440");
 
             SubmodelHttpServer submodelServer = new SubmodelHttpServer(submodelServerSettings);
             ISubmodelServiceProvider submodelServiceProvider = testSubmodel.CreateServiceProvider();
@@ -47,8 +47,8 @@
             ServerSettings aasServerSettings = ServerSettings.CreateSettings();
             aasServerSettings.ServerConfig.Hosting.ContentPath = "Content";
             aasServerSettings.ServerConfig.Hosting.Environment = "Development";
-            aasServerSettings.ServerConfig.Hosting.Urls.Add("http://localhost:5080");
-            aasServerSettings.ServerConfig.Hosting.Urls.Add("https://localhost:5443");
+            aasServerSettings.ServerConfig.Hosting.Urls.Add("http://+:5080");
+            aasServerSettings.ServerConfig.Hosting.Urls.Add("https://+:5443");
 
             IAssetAdministrationShellServiceProvider serviceProvider = aas.CreateServiceProvider(true);
             serviceProvider.SubmodelRegistry.RegisterSubmodelServiceProvider(testSubmodel.IdShort, submodelServiceProvider);
diff --git a/sdks/dotnet/basyx-openapi/BaSyx.Submodel.OpenApi.json b/sdks/dotnet/basyx-openapi/BaSyx.Submodel.OpenApi.json
index 28707dd..1b7a5ef 100644
--- a/sdks/dotnet/basyx-openapi/BaSyx.Submodel.OpenApi.json
+++ b/sdks/dotnet/basyx-openapi/BaSyx.Submodel.OpenApi.json
@@ -2,7 +2,7 @@
   "openapi": "3.0.1",
   "info": {
     "title": "BaSyx Submodel HTTP REST-API",
-    "description": "The full OpenAPI 3.0.1 specification of the BaSyx Submodel HTTP REST-API",
+    "description": "The full description of the generic BaSyx Submodel HTTP REST-API",
     "contact": {
       "name": "Constantin Ziesche",
       "url": "https://www.bosch.com/de/",
@@ -15,10 +15,65 @@
     "version": "v1"
   },
   "paths": {
+    "/submodel": {
+      "get": {
+        "tags": [
+          "Submodel"
+        ],
+        "summary": "Retrieves the entire Submodel",
+        "operationId": "GetSubmodel",
+        "responses": {
+          "200": {
+            "description": "Success",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Submodel"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Submodel not found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Result"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/submodel/values": {
+      "get": {
+        "tags": [
+          "Submodel"
+        ],
+        "summary": "Retrieves the minimized version of a Submodel, i.e. only the values of SubmodelElements are serialized and returned",
+        "operationId": "GetSubmodelValues",
+        "responses": {
+          "404": {
+            "description": "Submodel not found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Result"
+                }
+              }
+            }
+          },
+          "200": {
+            "description": "Success"
+          }
+        }
+      }
+    },
     "/submodel/table": {
       "get": {
         "tags": [
-          "SubmodelServices"
+          "Submodel"
         ],
         "summary": "Retrieves a customizable table version of a Submodel",
         "operationId": "GetSubmodelAsTable",
@@ -38,20 +93,10 @@
           "404": {
             "description": "Submodel not found",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
               "application/json": {
                 "schema": {
                   "$ref": "#/components/schemas/Result"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
               }
             }
           },
@@ -61,95 +106,10 @@
         }
       }
     },
-    "/submodel/values": {
-      "get": {
-        "tags": [
-          "SubmodelServices"
-        ],
-        "summary": "Retrieves the minimized version of a Submodel, i.e. only the values of SubmodelElements are serialized and returned",
-        "operationId": "GetSubmodelValues",
-        "responses": {
-          "404": {
-            "description": "Submodel not found",
-            "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              }
-            }
-          },
-          "200": {
-            "description": "Success"
-          }
-        }
-      }
-    },
-    "/submodel": {
-      "get": {
-        "tags": [
-          "SubmodelServices"
-        ],
-        "summary": "Retrieves the entire Submodel",
-        "operationId": "GetSubmodel",
-        "responses": {
-          "200": {
-            "description": "Success",
-            "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Submodel"
-                }
-              },
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Submodel"
-                }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Submodel"
-                }
-              }
-            }
-          },
-          "404": {
-            "description": "Submodel not found",
-            "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              }
-            }
-          }
-        }
-      }
-    },
     "/submodel/submodelElements": {
       "get": {
         "tags": [
-          "SubmodelServices"
+          "Submodel"
         ],
         "summary": "Retrieves all Submodel-Elements from the Submodel",
         "operationId": "GetSubmodelElements",
@@ -157,14 +117,6 @@
           "200": {
             "description": "Returns a list of found Submodel-Elements",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "type": "array",
-                  "items": {
-                    "$ref": "#/components/schemas/SubmodelElement"
-                  }
-                }
-              },
               "application/json": {
                 "schema": {
                   "type": "array",
@@ -172,67 +124,49 @@
                     "$ref": "#/components/schemas/SubmodelElement"
                   }
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "type": "array",
-                  "items": {
-                    "$ref": "#/components/schemas/SubmodelElement"
-                  }
-                }
               }
             }
           },
           "404": {
             "description": "Submodel not found",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
               "application/json": {
                 "schema": {
                   "$ref": "#/components/schemas/Result"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
               }
             }
           }
         }
-      },
+      }
+    },
+    "/submodel/submodelElements/{seIdShortPath}": {
       "put": {
         "tags": [
-          "SubmodelServices"
+          "Submodel"
         ],
-        "summary": "Adds a new Submodel-Element to the Submodel",
+        "summary": "Creates or updates a Submodel-Element at the Submodel",
         "operationId": "PutSubmodelElement",
+        "parameters": [
+          {
+            "name": "seIdShortPath",
+            "in": "path",
+            "description": "The Submodel-Element's IdShort-Path",
+            "required": true,
+            "schema": {
+              "type": "string",
+              "description": "The Submodel-Element's IdShort-Path",
+              "nullable": true
+            }
+          }
+        ],
         "requestBody": {
           "description": "The Submodel-Element object",
           "content": {
-            "application/json-patch+json": {
-              "schema": {
-                "$ref": "#/components/schemas/ISubmodelElement"
-              }
-            },
             "application/json": {
               "schema": {
                 "$ref": "#/components/schemas/ISubmodelElement"
               }
-            },
-            "text/json": {
-              "schema": {
-                "$ref": "#/components/schemas/ISubmodelElement"
-              }
-            },
-            "application/*+json": {
-              "schema": {
-                "$ref": "#/components/schemas/ISubmodelElement"
-              }
             }
           }
         },
@@ -240,82 +174,50 @@
           "201": {
             "description": "Submodel-Element created successfully",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/SubmodelElement"
-                }
-              },
               "application/json": {
                 "schema": {
                   "$ref": "#/components/schemas/SubmodelElement"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/SubmodelElement"
-                }
               }
             }
           },
           "400": {
             "description": "Bad Request",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
               "application/json": {
                 "schema": {
                   "$ref": "#/components/schemas/Result"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
               }
             }
           },
           "404": {
-            "description": "Submodel not found",
+            "description": "Not Found",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
               "application/json": {
                 "schema": {
                   "$ref": "#/components/schemas/Result"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
               }
             }
           }
         }
-      }
-    },
-    "/submodel/submodelElements/{submodelElementIdShort}": {
+      },
       "get": {
         "tags": [
-          "SubmodelServices"
+          "Submodel"
         ],
         "summary": "Retrieves a specific Submodel-Element from the Submodel",
         "operationId": "GetSubmodelElementByIdShort",
         "parameters": [
           {
-            "name": "submodelElementIdShort",
+            "name": "seIdShortPath",
             "in": "path",
-            "description": "The Submodel-Element's short id",
+            "description": "The Submodel-Element's IdShort-Path",
             "required": true,
             "schema": {
               "type": "string",
-              "description": "The Submodel-Element's short id",
+              "description": "The Submodel-Element's IdShort-Path",
               "nullable": true
             }
           }
@@ -324,150 +226,40 @@
           "200": {
             "description": "Returns the requested Submodel-Element",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/SubmodelElement"
-                }
-              },
               "application/json": {
                 "schema": {
                   "$ref": "#/components/schemas/SubmodelElement"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/SubmodelElement"
-                }
               }
             }
           },
           "404": {
-            "description": "Submodel / Submodel Element not found",
+            "description": "Submodel Element not found",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
               "application/json": {
                 "schema": {
                   "$ref": "#/components/schemas/Result"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
               }
             }
           }
         }
       },
-      "put": {
-        "tags": [
-          "SubmodelServices"
-        ],
-        "summary": "Updates the Asset Administration Shell's Submodel's Submodel-Element",
-        "operationId": "PutSubmodelElementValueByIdShort",
-        "parameters": [
-          {
-            "name": "submodelElementIdShort",
-            "in": "path",
-            "description": "The Submodel-Element's short id",
-            "required": true,
-            "schema": {
-              "type": "string",
-              "description": "The Submodel-Element's short id",
-              "nullable": true
-            }
-          }
-        ],
-        "requestBody": {
-          "description": "The new value",
-          "content": {
-            "application/json-patch+json": {
-              "schema": {
-                "$ref": "#/components/schemas/ElementValue"
-              }
-            },
-            "application/json": {
-              "schema": {
-                "$ref": "#/components/schemas/ElementValue"
-              }
-            },
-            "text/json": {
-              "schema": {
-                "$ref": "#/components/schemas/ElementValue"
-              }
-            },
-            "application/*+json": {
-              "schema": {
-                "$ref": "#/components/schemas/ElementValue"
-              }
-            }
-          }
-        },
-        "responses": {
-          "200": {
-            "description": "Submodel-Element's value changed successfully",
-            "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/ElementValue"
-                }
-              },
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/ElementValue"
-                }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/ElementValue"
-                }
-              }
-            }
-          },
-          "404": {
-            "description": "Submodel / Submodel-Element not found",
-            "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              }
-            }
-          },
-          "405": {
-            "description": "Method not allowed"
-          }
-        }
-      },
       "delete": {
         "tags": [
-          "SubmodelServices"
+          "Submodel"
         ],
         "summary": "Deletes a specific Submodel-Element from the Submodel",
         "operationId": "DeleteSubmodelElementByIdShort",
         "parameters": [
           {
-            "name": "submodelElementIdShort",
+            "name": "seIdShortPath",
             "in": "path",
-            "description": "The Submodel-Element's short id",
+            "description": "The Submodel-Element's IdShort-Path",
             "required": true,
             "schema": {
               "type": "string",
-              "description": "The Submodel-Element's short id",
+              "description": "The Submodel-Element's IdShort-Path",
               "nullable": true
             }
           }
@@ -476,20 +268,10 @@
           "200": {
             "description": "Success",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
               "application/json": {
                 "schema": {
                   "$ref": "#/components/schemas/Result"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
               }
             }
           },
@@ -497,27 +279,27 @@
             "description": "Submodel-Element deleted successfully"
           },
           "404": {
-            "description": "Submodel / Submodel-Element not found"
+            "description": "Submodel-Element not found"
           }
         }
       }
     },
-    "/submodel/submodelElements/{submodelElementIdShort}/value": {
+    "/submodel/submodelElements/{seIdShortPath}/value": {
       "get": {
         "tags": [
-          "SubmodelServices"
+          "Submodel"
         ],
         "summary": "Retrieves the value of a specific Submodel-Element from the Submodel",
         "operationId": "GetSubmodelElementValueByIdShort",
         "parameters": [
           {
-            "name": "submodelElementIdShort",
+            "name": "seIdShortPath",
             "in": "path",
-            "description": "The Submodel-Element's short id",
+            "description": "The Submodel-Element's IdShort-Path",
             "required": true,
             "schema": {
               "type": "string",
-              "description": "The Submodel-Element's short id",
+              "description": "The Submodel-Element's IdShort-Path",
               "nullable": true
             }
           }
@@ -526,82 +308,109 @@
           "200": {
             "description": "Returns the value of a specific Submodel-Element",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "type": "object"
-                }
-              },
               "application/json": {
                 "schema": {
                   "type": "object"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "type": "object"
-                }
               }
             }
           },
           "404": {
             "description": "Submodel / Submodel-Element not found",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
               "application/json": {
                 "schema": {
                   "$ref": "#/components/schemas/Result"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
               }
             }
           },
           "405": {
             "description": "Method not allowed",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
               "application/json": {
                 "schema": {
                   "$ref": "#/components/schemas/Result"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
               }
             }
           }
         }
+      },
+      "put": {
+        "tags": [
+          "Submodel"
+        ],
+        "summary": "Updates the Submodel-Element's value",
+        "operationId": "PutSubmodelElementValueByIdShort",
+        "parameters": [
+          {
+            "name": "seIdShortPath",
+            "in": "path",
+            "description": "The Submodel-Element's IdShort-Path",
+            "required": true,
+            "schema": {
+              "type": "string",
+              "description": "The Submodel-Element's IdShort-Path",
+              "nullable": true
+            }
+          }
+        ],
+        "requestBody": {
+          "description": "The new value",
+          "content": {
+            "application/json": {
+              "schema": {
+                "type": "object",
+                "description": "The new value",
+                "nullable": true
+              }
+            }
+          }
+        },
+        "responses": {
+          "200": {
+            "description": "Submodel-Element's value changed successfully",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/ElementValue"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Submodel-Element not found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Result"
+                }
+              }
+            }
+          },
+          "405": {
+            "description": "Method not allowed"
+          }
+        }
       }
     },
-    "/submodel/submodelElements/{operationIdShort}/invoke/{async}": {
+    "/submodel/submodelElements/{idShortPathToOperation}/invoke": {
       "post": {
         "tags": [
-          "SubmodelServices"
+          "Submodel"
         ],
         "summary": "Invokes a specific operation from the Submodel synchronously or asynchronously",
         "operationId": "InvokeOperationByIdShortAsync",
         "parameters": [
           {
-            "name": "operationIdShort",
+            "name": "idShortPathToOperation",
             "in": "path",
-            "description": "The Operation's short id",
+            "description": "The IdShort path to the Operation",
             "required": true,
             "schema": {
               "type": "string",
-              "description": "The Operation's short id",
+              "description": "The IdShort path to the Operation",
               "nullable": true
             }
           },
@@ -613,38 +422,15 @@
               "type": "boolean",
               "description": "Determines whether the execution of the operation is asynchronous (true) or not (false)"
             }
-          },
-          {
-            "name": "async",
-            "in": "path",
-            "required": true,
-            "schema": {
-              "type": "string"
-            }
           }
         ],
         "requestBody": {
           "description": "The parameterized request object for the invocation",
           "content": {
-            "application/json-patch+json": {
-              "schema": {
-                "$ref": "#/components/schemas/InvocationRequest"
-              }
-            },
             "application/json": {
               "schema": {
                 "$ref": "#/components/schemas/InvocationRequest"
               }
-            },
-            "text/json": {
-              "schema": {
-                "$ref": "#/components/schemas/InvocationRequest"
-              }
-            },
-            "application/*+json": {
-              "schema": {
-                "$ref": "#/components/schemas/InvocationRequest"
-              }
             }
           }
         },
@@ -652,40 +438,20 @@
           "400": {
             "description": "Bad Request",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
               "application/json": {
                 "schema": {
                   "$ref": "#/components/schemas/Result"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
               }
             }
           },
           "404": {
-            "description": "Submodel / Method handler not found",
+            "description": "Method handler not found",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
               "application/json": {
                 "schema": {
                   "$ref": "#/components/schemas/Result"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
               }
             }
           },
@@ -695,22 +461,22 @@
         }
       }
     },
-    "/submodel/submodelElements/{operationIdShort}/invocationList/{requestId}": {
+    "/submodel/submodelElements/{idShortPathToOperation}/invocationList/{requestId}": {
       "get": {
         "tags": [
-          "SubmodelServices"
+          "Submodel"
         ],
         "summary": "Retrieves the result of an asynchronously started operation",
         "operationId": "GetInvocationResultByIdShort",
         "parameters": [
           {
-            "name": "operationIdShort",
+            "name": "idShortPathToOperation",
             "in": "path",
-            "description": "The Operation's short id",
+            "description": "The IdShort path to the Operation",
             "required": true,
             "schema": {
               "type": "string",
-              "description": "The Operation's short id",
+              "description": "The IdShort path to the Operation",
               "nullable": true
             }
           },
@@ -730,60 +496,30 @@
           "200": {
             "description": "Result found",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/InvocationResponse"
-                }
-              },
               "application/json": {
                 "schema": {
                   "$ref": "#/components/schemas/InvocationResponse"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/InvocationResponse"
-                }
               }
             }
           },
           "400": {
             "description": "Bad Request",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
               "application/json": {
                 "schema": {
                   "$ref": "#/components/schemas/Result"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
               }
             }
           },
           "404": {
-            "description": "Submodel / Operation / Request not found",
+            "description": "Operation / Request not found",
             "content": {
-              "text/plain": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
-              },
               "application/json": {
                 "schema": {
                   "$ref": "#/components/schemas/Result"
                 }
-              },
-              "text/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Result"
-                }
               }
             }
           }
@@ -1109,62 +845,6 @@
           }
         }
       },
-      "MessageType": {
-        "enum": [
-          "Unspecified",
-          "Debug",
-          "Information",
-          "Warning",
-          "Error",
-          "Fatal",
-          "Exception"
-        ],
-        "type": "string"
-      },
-      "Message": {
-        "type": "object",
-        "properties": {
-          "messageType": {
-            "$ref": "#/components/schemas/MessageType"
-          },
-          "text": {
-            "type": "string",
-            "nullable": true
-          },
-          "code": {
-            "type": "string",
-            "nullable": true
-          }
-        }
-      },
-      "Result": {
-        "type": "object",
-        "properties": {
-          "success": {
-            "type": "boolean"
-          },
-          "isException": {
-            "type": "boolean",
-            "nullable": true,
-            "readOnly": true
-          },
-          "entity": {
-            "type": "object",
-            "nullable": true
-          },
-          "entityType": {
-            "type": "string",
-            "nullable": true
-          },
-          "messages": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Message"
-            },
-            "nullable": true
-          }
-        }
-      },
       "ModelingKind": {
         "enum": [
           "Instance",
@@ -1284,159 +964,57 @@
           }
         }
       },
-      "AssetAdministrationShellReference": {
+      "MessageType": {
+        "enum": [
+          "Unspecified",
+          "Debug",
+          "Information",
+          "Warning",
+          "Error",
+          "Fatal",
+          "Exception"
+        ],
+        "type": "string"
+      },
+      "Message": {
         "type": "object",
         "properties": {
-          "keys": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Key"
-            },
+          "messageType": {
+            "$ref": "#/components/schemas/MessageType"
+          },
+          "text": {
+            "type": "string",
+            "nullable": true
+          },
+          "code": {
+            "type": "string",
             "nullable": true
           }
         }
       },
-      "View": {
+      "Result": {
         "type": "object",
         "properties": {
-          "idShort": {
-            "type": "string",
-            "nullable": true
+          "success": {
+            "type": "boolean"
           },
-          "containedElements": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Reference"
-            },
-            "nullable": true
-          },
-          "semanticId": {
-            "$ref": "#/components/schemas/Reference"
-          },
-          "category": {
-            "type": "string",
-            "nullable": true
-          },
-          "description": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/LangString"
-            },
-            "nullable": true
-          },
-          "modelType": {
-            "$ref": "#/components/schemas/ModelType"
-          }
-        }
-      },
-      "ConceptDescriptionReference": {
-        "type": "object",
-        "properties": {
-          "keys": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Key"
-            },
-            "nullable": true
-          }
-        }
-      },
-      "ConceptDictionary": {
-        "type": "object",
-        "properties": {
-          "idShort": {
-            "type": "string",
-            "nullable": true
-          },
-          "category": {
-            "type": "string",
-            "nullable": true
-          },
-          "description": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/LangString"
-            },
-            "nullable": true
-          },
-          "metaData": {
-            "type": "object",
-            "additionalProperties": {
-              "type": "string"
-            },
-            "nullable": true
-          },
-          "conceptDescriptions": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/ConceptDescriptionReference"
-            },
-            "nullable": true
-          },
-          "modelType": {
-            "$ref": "#/components/schemas/ModelType"
-          }
-        }
-      },
-      "AssetAdministrationShell": {
-        "type": "object",
-        "properties": {
-          "idShort": {
-            "type": "string",
-            "nullable": true
-          },
-          "asset": {
-            "$ref": "#/components/schemas/Asset"
-          },
-          "submodels": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Submodel"
-            },
-            "nullable": true
-          },
-          "derivedFrom": {
-            "$ref": "#/components/schemas/AssetAdministrationShellReference"
-          },
-          "views": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/View"
-            },
-            "nullable": true
-          },
-          "modelType": {
-            "$ref": "#/components/schemas/ModelType"
-          },
-          "embeddedDataSpecifications": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/IEmbeddedDataSpecification"
-            },
+          "isException": {
+            "type": "boolean",
             "nullable": true,
             "readOnly": true
           },
-          "conceptDictionaries": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/ConceptDictionary"
-            },
+          "entity": {
+            "type": "object",
             "nullable": true
           },
-          "identification": {
-            "$ref": "#/components/schemas/Identifier"
-          },
-          "administration": {
-            "$ref": "#/components/schemas/AdministrativeInformation"
-          },
-          "category": {
+          "entityType": {
             "type": "string",
             "nullable": true
           },
-          "description": {
+          "messages": {
             "type": "array",
             "items": {
-              "$ref": "#/components/schemas/LangString"
+              "$ref": "#/components/schemas/Message"
             },
             "nullable": true
           }
@@ -1600,13 +1178,165 @@
             "$ref": "#/components/schemas/ExecutionState"
           }
         }
+      },
+      "AssetAdministrationShellReference": {
+        "type": "object",
+        "properties": {
+          "keys": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Key"
+            },
+            "nullable": true
+          }
+        }
+      },
+      "View": {
+        "type": "object",
+        "properties": {
+          "idShort": {
+            "type": "string",
+            "nullable": true
+          },
+          "containedElements": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Reference"
+            },
+            "nullable": true
+          },
+          "semanticId": {
+            "$ref": "#/components/schemas/Reference"
+          },
+          "category": {
+            "type": "string",
+            "nullable": true
+          },
+          "description": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/LangString"
+            },
+            "nullable": true
+          },
+          "modelType": {
+            "$ref": "#/components/schemas/ModelType"
+          }
+        }
+      },
+      "ConceptDescriptionReference": {
+        "type": "object",
+        "properties": {
+          "keys": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Key"
+            },
+            "nullable": true
+          }
+        }
+      },
+      "ConceptDictionary": {
+        "type": "object",
+        "properties": {
+          "idShort": {
+            "type": "string",
+            "nullable": true
+          },
+          "category": {
+            "type": "string",
+            "nullable": true
+          },
+          "description": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/LangString"
+            },
+            "nullable": true
+          },
+          "metaData": {
+            "type": "object",
+            "additionalProperties": {
+              "type": "string"
+            },
+            "nullable": true
+          },
+          "conceptDescriptions": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ConceptDescriptionReference"
+            },
+            "nullable": true
+          },
+          "modelType": {
+            "$ref": "#/components/schemas/ModelType"
+          }
+        }
+      },
+      "AssetAdministrationShell": {
+        "type": "object",
+        "properties": {
+          "idShort": {
+            "type": "string",
+            "nullable": true
+          },
+          "asset": {
+            "$ref": "#/components/schemas/Asset"
+          },
+          "submodels": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Submodel"
+            },
+            "nullable": true
+          },
+          "derivedFrom": {
+            "$ref": "#/components/schemas/AssetAdministrationShellReference"
+          },
+          "views": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/View"
+            },
+            "nullable": true
+          },
+          "modelType": {
+            "$ref": "#/components/schemas/ModelType"
+          },
+          "embeddedDataSpecifications": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/IEmbeddedDataSpecification"
+            },
+            "nullable": true,
+            "readOnly": true
+          },
+          "conceptDictionaries": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ConceptDictionary"
+            },
+            "nullable": true
+          },
+          "identification": {
+            "$ref": "#/components/schemas/Identifier"
+          },
+          "administration": {
+            "$ref": "#/components/schemas/AdministrativeInformation"
+          },
+          "category": {
+            "type": "string",
+            "nullable": true
+          },
+          "description": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/LangString"
+            },
+            "nullable": true
+          }
+        }
       }
     }
-  },
-  "tags": [
-    {
-      "name": "SubmodelServices",
-      "description": "All Submodel Services provided by the component"
-    }
-  ]
+  }
 }
\ No newline at end of file
diff --git a/sdks/dotnet/basyx-packages/BaSyx.AAS.Client.Http.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.AAS.Client.Http.1.0.0.nupkg
index 2d86d5b..b9f84e5 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.AAS.Client.Http.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.AAS.Client.Http.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.AAS.Client.Http.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.AAS.Client.Http.1.0.0.symbols.nupkg
index b805af2..eab83a6 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.AAS.Client.Http.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.AAS.Client.Http.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.AAS.Server.Http.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.AAS.Server.Http.1.0.0.nupkg
index ceb709a..dfac4d7 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.AAS.Server.Http.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.AAS.Server.Http.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.AAS.Server.Http.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.AAS.Server.Http.1.0.0.symbols.nupkg
index 4cdd80e..38d847d 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.AAS.Server.Http.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.AAS.Server.Http.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.API.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.API.1.0.0.nupkg
index 8f27bc2..31f7b20 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.API.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.API.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.API.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.API.1.0.0.symbols.nupkg
index c4edc54..48068f4 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.API.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.API.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.1.0.0.nupkg
index 415d991..6b9fd7c 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.1.0.0.symbols.nupkg
index 74edf28..8cdf464 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.AASX.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.AASX.1.0.0.nupkg
index 005f581..d26c926 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.AASX.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.AASX.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.AASX.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.AASX.1.0.0.symbols.nupkg
index 55909e9..2404720 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.AASX.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.API.Http.Controllers.AASX.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Common.UI.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Common.UI.1.0.0.nupkg
index 0fbd587..1759bdf 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Common.UI.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Common.UI.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Common.UI.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Common.UI.1.0.0.symbols.nupkg
index 9bce189..c7865d1 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Common.UI.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Common.UI.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Common.UI.Swagger.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Common.UI.Swagger.1.0.0.nupkg
index fd85bb0..ab1768c 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Common.UI.Swagger.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Common.UI.Swagger.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Common.UI.Swagger.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Common.UI.Swagger.1.0.0.symbols.nupkg
index 231342b..0f75fb0 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Common.UI.Swagger.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Common.UI.Swagger.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Components.Common.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Components.Common.1.0.0.nupkg
index 188ed51..2f8b802 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Components.Common.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Components.Common.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Components.Common.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Components.Common.1.0.0.symbols.nupkg
index 15c1086..a51f71d 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Components.Common.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Components.Common.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Discovery.mDNS.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Discovery.mDNS.1.0.0.nupkg
index 7b8358b..96f1f7b 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Discovery.mDNS.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Discovery.mDNS.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Discovery.mDNS.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Discovery.mDNS.1.0.0.symbols.nupkg
index 183e912..4ccd1eb 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Discovery.mDNS.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Discovery.mDNS.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Models.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Models.1.0.0.nupkg
index 9980c69..ce36bc0 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Models.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Models.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Models.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Models.1.0.0.symbols.nupkg
index b1be932..f12dbfc 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Models.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Models.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Models.Export.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Models.Export.1.0.0.nupkg
index 32663b1..319007e 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Models.Export.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Models.Export.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Models.Export.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Models.Export.1.0.0.symbols.nupkg
index 07a2f07..75a9c69 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Models.Export.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Models.Export.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Registry.Client.Http.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Registry.Client.Http.1.0.0.nupkg
index d174114..f055853 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Registry.Client.Http.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Registry.Client.Http.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Registry.Client.Http.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Registry.Client.Http.1.0.0.symbols.nupkg
index 5f2785b..9320ed3 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Registry.Client.Http.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Registry.Client.Http.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Registry.ReferenceImpl.FileBased.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Registry.ReferenceImpl.FileBased.1.0.0.nupkg
index 5ceecb7..ff890bd 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Registry.ReferenceImpl.FileBased.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Registry.ReferenceImpl.FileBased.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Registry.ReferenceImpl.FileBased.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Registry.ReferenceImpl.FileBased.1.0.0.symbols.nupkg
index eefde99..f37a8e8 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Registry.ReferenceImpl.FileBased.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Registry.ReferenceImpl.FileBased.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Registry.Server.Http.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Registry.Server.Http.1.0.0.nupkg
index 8f7cf46..74e3c6e 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Registry.Server.Http.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Registry.Server.Http.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Registry.Server.Http.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Registry.Server.Http.1.0.0.symbols.nupkg
index b4f0157..f84bb52 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Registry.Server.Http.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Registry.Server.Http.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Submodel.Client.Http.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Submodel.Client.Http.1.0.0.nupkg
index bbb22db..b13f0b4 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Submodel.Client.Http.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Submodel.Client.Http.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Submodel.Client.Http.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Submodel.Client.Http.1.0.0.symbols.nupkg
index 64c4fa1..1ee04bb 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Submodel.Client.Http.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Submodel.Client.Http.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Submodel.Server.Http.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Submodel.Server.Http.1.0.0.nupkg
index 7b3b2a8..dc8fb29 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Submodel.Server.Http.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Submodel.Server.Http.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Submodel.Server.Http.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Submodel.Server.Http.1.0.0.symbols.nupkg
index e3b654d..14b9494 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Submodel.Server.Http.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Submodel.Server.Http.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Utils.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Utils.1.0.0.nupkg
index 6b580a0..322d824 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Utils.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Utils.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Utils.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Utils.1.0.0.symbols.nupkg
index 2848004..1690999 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Utils.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Utils.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Utils.Client.Mqtt.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Utils.Client.Mqtt.1.0.0.nupkg
index 87dd50a..b779e39 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Utils.Client.Mqtt.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Utils.Client.Mqtt.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Utils.Client.Mqtt.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Utils.Client.Mqtt.1.0.0.symbols.nupkg
index fbd96c4..30af330 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Utils.Client.Mqtt.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Utils.Client.Mqtt.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.1.0.0.nupkg
index 1b39c57..d902242 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.1.0.0.symbols.nupkg
index e18234b..7e77439 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.1.0.0.symbols.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.Abstractions.1.0.0.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.Abstractions.1.0.0.nupkg
index b6ecc8d..2a22b39 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.Abstractions.1.0.0.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.Abstractions.1.0.0.nupkg
Binary files differ
diff --git a/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.Abstractions.1.0.0.symbols.nupkg b/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.Abstractions.1.0.0.symbols.nupkg
index 015546d..bd273f7 100644
--- a/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.Abstractions.1.0.0.symbols.nupkg
+++ b/sdks/dotnet/basyx-packages/BaSyx.Utils.DependencyInjection.Abstractions.1.0.0.symbols.nupkg
Binary files differ