diff --git a/src/caosdb/high_level_api.py b/src/caosdb/high_level_api.py
index 345f02d6a490c6a20beb27e8d3250aef6fa22e5d..534c01d127649d98f0362570cfc1620074dd5f82 100644
--- a/src/caosdb/high_level_api.py
+++ b/src/caosdb/high_level_api.py
@@ -625,30 +625,30 @@ def _single_convert_to_python_object(robj: CaosDBPythonEntity,
         robj.add_parent(CaosDBPythonUnresolvedParent(id=parent.id,
                                                      name=parent.name))
 
-    # Resolve so far unresolved references also using the provided references container:
-    # TODO
-
     return robj
 
 
 def _single_convert_to_entity(entity: db.Entity,
-                              robj: CaosDBPythonEntity,
-                              recursive_depth, **kwargs):
+                              robj: CaosDBPythonEntity):
     """
-    recursive_depth: disabled if 0
+    Convert a CaosDBPythonEntity to an entity in standard pylib format.
+
+    entity: db.Entity
+            An empty entity.
+
+    robj: CaosDBPythonEntity
+          The CaosDBPythonEntity that is supposed to be converted to the entity.
     """
 
-    for base_attribute in BASE_ATTRIBUTES:
-        modified_base_attribute = base_attribute
-        if base_attribute in ("file", "path"):
-            modified_base_attribute = "_" + modified_base_attribute
+    # for base_attribute in BASE_ATTRIBUTES:
+    #     modified_base_attribute = base_attribute
+    #     if base_attribute in ("file", "path"):
+    #         modified_base_attribute = "_" + modified_base_attribute
             
-        entity.__setattr__(modified_base_attribute,
-                           robj.__getattribute__(base_attribute))
-
-    children = []
+    #     entity.__setattr__(modified_base_attribute,
+    #                        robj.__getattribute__(base_attribute))
 
-    for parent in robj._parents:
+    for parent in robj.get_parents():
         if isinstance(parent, CaosDBPythonUnresolvedParent):
             entity.add_parent(name=parent.name, id=parent.id)
         elif isinstance(parent, CaosDBPythonRecordType):
@@ -656,8 +656,27 @@ def _single_convert_to_entity(entity: db.Entity,
         else:
             raise RuntimeError("Incompatible class used as parent.")
 
-    # TODO: implementation incomplete
-    raise NotImplementedError()
+    for prop in robj.get_properties():
+        propval = robj.__getattribute__(prop)
+        metadata = robj.get_property_metadata(prop)
+
+        if isinstance(propval, CaosDBPythonUnresolvedReference):
+            propval = propval.id
+        elif isinstance(propval, CaosDBPythonEntity):
+            propval = _single_convert_to_entity(db.Record(), propval)
+        elif isinstance(propval, list):
+            raise NotImplementedError()
+        
+        entity.add_property(
+            name=prop,
+            value=propval,
+            unit=metadata.unit,
+            importance=metadata.importance,
+            datatype=metadata.datatype,
+            description=metadata.description,
+            id=metadata.id)
+
+    return entity
 
     def add_property(entity, prop, name, _recursive=False, datatype=None):
         if datatype is None:
@@ -730,22 +749,21 @@ def _single_convert_to_entity(entity: db.Entity,
     return [entity] + children
 
 
-def convert_to_entity(python_object, **kwargs):
-    raise NotImplementedError()
+def convert_to_entity(python_object):
     if isinstance(python_object, db.Container):
         # Create a list of objects:
 
-        return [convert_to_python_object(i, **kwargs) for i in python_object]
+        return [convert_to_entity(i) for i in python_object]
     elif isinstance(python_object, CaosDBPythonRecord):
-        return _single_convert_to_entity(db.Record(), python_object, **kwargs)
+        return _single_convert_to_entity(db.Record(), python_object)
     elif isinstance(python_object, CaosDBPythonFile):
-        return _single_convert_to_entity(db.File(), python_object, **kwargs)
+        return _single_convert_to_entity(db.File(), python_object)
     elif isinstance(python_object, CaosDBPythonRecordType):
-        return _single_convert_to_entity(db.RecordType(), python_object, **kwargs)
+        return _single_convert_to_entity(db.RecordType(), python_object)
     elif isinstance(python_object, CaosDBPythonProperty):
-        return _single_convert_to_entity(db.Property(), python_object, **kwargs)
+        return _single_convert_to_entity(db.Property(), python_object)
     elif isinstance(python_object, CaosDBPythonEntity):
-        return _single_convert_to_entity(db.Entity(), python_object, **kwargs)
+        return _single_convert_to_entity(db.Entity(), python_object)
     else:
         raise ValueError("Cannot convert an object of this type.")
 
diff --git a/unittests/test_high_level_api.py b/unittests/test_high_level_api.py
index a5a123107f65c4a77e5cb3270ffbee60e738ffee..73b2d89a1db1a101ac27ac6aa2ae5d2b0557264c 100644
--- a/unittests/test_high_level_api.py
+++ b/unittests/test_high_level_api.py
@@ -29,6 +29,8 @@ from caosdb.high_level_api import (convert_to_entity, convert_to_python_object)
 from caosdb.high_level_api import (CaosDBPythonUnresolvedParent,
                                    CaosDBPythonUnresolvedReference,
                                    CaosDBPythonRecord)
+from caosdb.apiutils import compare_entities
+
 import pytest
 from lxml import etree
 import os
@@ -225,4 +227,36 @@ def test_resolve_references():
     obj = convert_to_python_object(r)
     obj.resolve_references(True, references)
     assert obj.ref.ref.ref == obj.ref
+
+def equal_entities(r1, r2):
+    res = compare_entities(r1, r2)
+    if len(res) != 2:
+        return False
+    for i in range(2):
+        if len(res[i]["parents"]) != 0 or len(res[i]["properties"]) != 0:
+            return False
+    return True
     
+def test_conversion_to_entity():
+    r = db.Record()
+    r.add_parent("bla")
+    r.add_property(name="a", value=42)
+    r.add_property(name="b", value="test")
+    obj = convert_to_python_object(r)
+    rconv = convert_to_entity(obj)
+    assert equal_entities(r, rconv)
+
+
+    # With datatype:
+    r_ref = db.Record()
+    r_ref.add_parent("bla")
+    r_ref.add_property(name="a", value=42)
+    
+    r = db.Record()
+    r.add_property(name="ref", value=r_ref)
+    obj = convert_to_python_object(r)
+    rconv = convert_to_entity(obj)
+    assert (rconv.get_property("ref").value.get_property("a").value
+            == r.get_property("ref").value.get_property("a").value)
+    assert len(rconv.properties) == len(r.properties)
+    assert len(rconv.parents) == len(r.parents)