diff --git a/src/caosdb/high_level_api.py b/src/caosdb/high_level_api.py
index e253460a8b4ad05e579f2239be57ffc052a80ed7..fed8b78632a108ec80faefd2ec666686ff95bad1 100644
--- a/src/caosdb/high_level_api.py
+++ b/src/caosdb/high_level_api.py
@@ -36,12 +36,19 @@ import caosdb as db
 
 from .apiutils import get_type_of_entity_with
 
+from typing import Any, Optional
 
 class CaosDBPythonEntity(object):
 
     _last_id = 0
 
     def __init__(self):
+        """
+        Initialize a new CaosDBPythonEntity for the high level python api.
+
+        The new entity is initialized with a new negative ID using _get_id (static).
+        """
+        
         # Save a copy of the dry state
         # of this object in order to be
         # able to detect conflicts.
@@ -63,40 +70,82 @@ class CaosDBPythonEntity(object):
 
     @staticmethod
     def _get_id():
+        """
+        Get a new negative ID for a CaosDB Entity.
+
+        The first ID is -1 and decremented with each call of this function.
+        """
         CaosDBPythonEntity._last_id -= 1
 
         return CaosDBPythonEntity._last_id
 
     def _set_property_from_entity(self, ent: db.Entity):
+        """
+        Set a new property using an entity from the normal python API.
+
+        ent : db.Entity
+              The entity to be set.
+        """
+        
         name = ent.name
         val = ent.value
         pr = ent.datatype
         val, reference = self._type_converted_value(val, pr)
         self.set_property(name, val, reference, datatype=pr)
 
-    def set_property(self, name, value, is_reference=False,
-                     overwrite=False, datatype=None):
+    def set_property(self,
+                     name: str,
+                     value: Any,
+                     is_reference: bool = False,
+                     overwrite: bool = False,
+                     datatype: Optional[str] = None):
         """
-        overwrite: Use this if you definitely only want one property with that name (set to True).
+        Set a property for this entity with a name and a value.
+
+        If this property is already set convert the value into a list and append the value.
+        This behavior can be overwritten using the overwrite flag, which will just overwrite
+        the existing value.
+
+        name: str
+              Name of the property.
+        
+        value: Any
+               Value of the property.
+
+        is_reference: bool
+        
+        overwrite: bool
+                   Use this if you definitely only want one property with
+                   that name (set to True).
+
+        datatype: Optional[str]
         """
+
+        # Store the datatype (if given) in a hidden field
+        # The datatypes will be stored in name, value pairs.
+        # TODO: check whether handling of lists is correct.
         self._datatypes[name] = datatype
 
         if isinstance(name, db.Entity):
+            # TODO: check, whether this is reasonable?
             name = name.name
+            raise NotImplementedError()
 
         if name in self._forbidden:
             raise RuntimeError("Entity cannot be converted to a corresponding "
                                "Python representation. Name of property " +
                                name + " is forbidden!")
+        
         already_exists = (name in dir(self))
 
         if already_exists and not overwrite:
-            # each call to _set_property checks first if it already exists
+            # each call to set_property checks first if it already exists
             #        if yes: Turn the attribute into a list and
             #                place all the elements into that list.
             att = self.__getattribute__(name)
 
             if isinstance(att, list):
+                # just append, see below
                 pass
             else:
                 old_att = self.__getattribute__(name)
@@ -120,7 +169,13 @@ class CaosDBPythonEntity(object):
 
     add_property = set_property
 
-    def set_id(self, idx):
+    def set_id(self, idx: int):
+        """
+        Explicitely set the id of this entity.
+
+        idx: int
+             The new ID for this entity.
+        """
         self._id = idx
 
     def _type_converted_list(self, val, pr):