Minor bugfixes
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;
         }        
     }
 }