diff --git a/pom.xml b/pom.xml
index 0474d444d9a004fed909b8462a9cd91d0536a1d5..b617ba7083ab1504913172e36079034c455af8c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,8 +31,8 @@
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <project.build.testSourceDirectory>src/test/java</project.build.testSourceDirectory>
-	<protobuf.version>3.14.0</protobuf.version>
-	<grpc.version>1.35.0</grpc.version>
+    <protobuf.version>3.14.0</protobuf.version>
+    <grpc.version>1.35.0</grpc.version>
   </properties>
   <repositories>
     <repository>
@@ -59,7 +59,7 @@
     <dependency>
       <groupId>org.quartz-scheduler</groupId>
       <artifactId>quartz</artifactId>
-      <version>2.3.2</version> 
+      <version>2.3.2</version>
     </dependency>
     <dependency>
       <groupId>com.fasterxml.jackson.dataformat</groupId>
@@ -102,7 +102,7 @@
     <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
-       <version>8.0.19</version>
+      <version>8.0.19</version>
     </dependency>
     <dependency>
       <groupId>org.xerial</groupId>
@@ -184,32 +184,31 @@
       <artifactId>log4j-core</artifactId>
       <version>2.11.1</version>
     </dependency>
-	<dependency>
-	  <groupId>io.grpc</groupId>
-	  <artifactId>grpc-netty</artifactId>
-	  <version>${grpc.version}</version>
-	</dependency>
-	<dependency>
-		<groupId>io.grpc</groupId>
-		<artifactId>grpc-protobuf</artifactId>
-		<version>${grpc.version}</version>
-	</dependency>
-	<dependency>
-		<groupId>io.grpc</groupId>
-		<artifactId>grpc-stub</artifactId>
-		<version>${grpc.version}</version>
-	</dependency>
-	<dependency>
-		<groupId>javax.annotation</groupId>
-		<artifactId>javax.annotation-api</artifactId>
-		<version>1.3.2</version>
-	</dependency>
-	<dependency>
-    <groupId>com.google.protobuf</groupId>
-    <artifactId>protobuf-java</artifactId>
-    <version>${protobuf.version}</version>
-</dependency>
-	
+    <dependency>
+      <groupId>io.grpc</groupId>
+      <artifactId>grpc-netty</artifactId>
+      <version>${grpc.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>io.grpc</groupId>
+      <artifactId>grpc-protobuf</artifactId>
+      <version>${grpc.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>io.grpc</groupId>
+      <artifactId>grpc-stub</artifactId>
+      <version>${grpc.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>javax.annotation</groupId>
+      <artifactId>javax.annotation-api</artifactId>
+      <version>1.3.2</version>
+    </dependency>
+    <dependency>
+      <groupId>com.google.protobuf</groupId>
+      <artifactId>protobuf-java</artifactId>
+      <version>${protobuf.version}</version>
+    </dependency>
   </dependencies>
   <build>
     <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
@@ -353,41 +352,38 @@
           <excludeArtifactIds>easy-units</excludeArtifactIds>
         </configuration>
       </plugin>
-
-     <plugin>
-      <groupId>kr.motd.maven</groupId>
-      <artifactId>os-maven-plugin</artifactId>
-      <version>1.6.2</version>
-      <executions>
-        <execution>
-          <phase>initialize</phase>
-          <goals>
-            <goal>detect</goal>
-          </goals>
-        </execution>
-      </executions>
-    </plugin> 
-    
+      <plugin>
+        <groupId>kr.motd.maven</groupId>
+        <artifactId>os-maven-plugin</artifactId>
+        <version>1.6.2</version>
+        <executions>
+          <execution>
+            <phase>initialize</phase>
+            <goals>
+              <goal>detect</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
       <!-- code generation protobuf/grpc -->
-      			<plugin>
-				<groupId>org.xolstice.maven.plugins</groupId>
-				<artifactId>protobuf-maven-plugin</artifactId>
-				<version>0.6.1</version>
-				<configuration>
-					<protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact>
-					<pluginId>grpc-java</pluginId>
-					<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
-				</configuration>
-				<executions>
-					<execution>
-						<goals>
-							<goal>compile</goal>
-							<goal>compile-custom</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-      
+      <plugin>
+        <groupId>org.xolstice.maven.plugins</groupId>
+        <artifactId>protobuf-maven-plugin</artifactId>
+        <version>0.6.1</version>
+        <configuration>
+          <protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact>
+          <pluginId>grpc-java</pluginId>
+          <pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
+        </configuration>
+        <executions>
+          <execution>
+            <goals>
+              <goal>compile</goal>
+              <goal>compile-custom</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
   <url>caosdb.org</url>
diff --git a/src/main/python/grpc-prototype-client/EntityService.proto b/src/main/python/grpc-prototype-client/EntityService.proto
new file mode 120000
index 0000000000000000000000000000000000000000..30fe4bcdacf7e4f2a7a7ccf3a845da7d87d7c4a4
--- /dev/null
+++ b/src/main/python/grpc-prototype-client/EntityService.proto
@@ -0,0 +1 @@
+../../proto/EntityService.proto
\ No newline at end of file
diff --git a/src/main/python/grpc-prototype-client/EntityService_pb2.py b/src/main/python/grpc-prototype-client/EntityService_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..e74166ce5a132bb2ec34b4d7f5266fb44fab027a
--- /dev/null
+++ b/src/main/python/grpc-prototype-client/EntityService_pb2.py
@@ -0,0 +1,111 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: EntityService.proto
+
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  name='EntityService.proto',
+  package='org.caosdb.grpc',
+  syntax='proto3',
+  serialized_options=b'P\001',
+  create_key=_descriptor._internal_create_key,
+  serialized_pb=b'\n\x13\x45ntityService.proto\x12\x0forg.caosdb.grpc\"8\n\x06\x45ntity\x12\x0b\n\x03\x65id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t2X\n\x18\x45ntityTransactionService\x12<\n\x08retrieve\x12\x17.org.caosdb.grpc.Entity\x1a\x17.org.caosdb.grpc.EntityB\x02P\x01\x62\x06proto3'
+)
+
+
+
+
+_ENTITY = _descriptor.Descriptor(
+  name='Entity',
+  full_name='org.caosdb.grpc.Entity',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='eid', full_name='org.caosdb.grpc.Entity.eid', index=0,
+      number=1, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='name', full_name='org.caosdb.grpc.Entity.name', index=1,
+      number=2, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='description', full_name='org.caosdb.grpc.Entity.description', index=2,
+      number=3, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=40,
+  serialized_end=96,
+)
+
+DESCRIPTOR.message_types_by_name['Entity'] = _ENTITY
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+Entity = _reflection.GeneratedProtocolMessageType('Entity', (_message.Message,), {
+  'DESCRIPTOR' : _ENTITY,
+  '__module__' : 'EntityService_pb2'
+  # @@protoc_insertion_point(class_scope:org.caosdb.grpc.Entity)
+  })
+_sym_db.RegisterMessage(Entity)
+
+
+DESCRIPTOR._options = None
+
+_ENTITYTRANSACTIONSERVICE = _descriptor.ServiceDescriptor(
+  name='EntityTransactionService',
+  full_name='org.caosdb.grpc.EntityTransactionService',
+  file=DESCRIPTOR,
+  index=0,
+  serialized_options=None,
+  create_key=_descriptor._internal_create_key,
+  serialized_start=98,
+  serialized_end=186,
+  methods=[
+  _descriptor.MethodDescriptor(
+    name='retrieve',
+    full_name='org.caosdb.grpc.EntityTransactionService.retrieve',
+    index=0,
+    containing_service=None,
+    input_type=_ENTITY,
+    output_type=_ENTITY,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+  ),
+])
+_sym_db.RegisterServiceDescriptor(_ENTITYTRANSACTIONSERVICE)
+
+DESCRIPTOR.services_by_name['EntityTransactionService'] = _ENTITYTRANSACTIONSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/src/main/python/grpc-prototype-client/EntityService_pb2_grpc.py b/src/main/python/grpc-prototype-client/EntityService_pb2_grpc.py
new file mode 100644
index 0000000000000000000000000000000000000000..ca5986d694d67f33179a765c309adf477ad58b24
--- /dev/null
+++ b/src/main/python/grpc-prototype-client/EntityService_pb2_grpc.py
@@ -0,0 +1,65 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
+import EntityService_pb2 as EntityService__pb2
+
+
+class EntityTransactionServiceStub(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.retrieve = channel.unary_unary(
+                '/org.caosdb.grpc.EntityTransactionService/retrieve',
+                request_serializer=EntityService__pb2.Entity.SerializeToString,
+                response_deserializer=EntityService__pb2.Entity.FromString,
+                )
+
+
+class EntityTransactionServiceServicer(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def retrieve(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+
+def add_EntityTransactionServiceServicer_to_server(servicer, server):
+    rpc_method_handlers = {
+            'retrieve': grpc.unary_unary_rpc_method_handler(
+                    servicer.retrieve,
+                    request_deserializer=EntityService__pb2.Entity.FromString,
+                    response_serializer=EntityService__pb2.Entity.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'org.caosdb.grpc.EntityTransactionService', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class EntityTransactionService(object):
+    """Missing associated documentation comment in .proto file."""
+
+    @staticmethod
+    def retrieve(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.caosdb.grpc.EntityTransactionService/retrieve',
+            EntityService__pb2.Entity.SerializeToString,
+            EntityService__pb2.Entity.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/src/main/python/grpc-prototype-client/minimal_client.py b/src/main/python/grpc-prototype-client/minimal_client.py
new file mode 100644
index 0000000000000000000000000000000000000000..b5dbcd772f07ac084d20f97023b620f8004ec7db
--- /dev/null
+++ b/src/main/python/grpc-prototype-client/minimal_client.py
@@ -0,0 +1,26 @@
+import grpc
+import EntityService_pb2_grpc as pb2_grpc
+import EntityService_pb2 as pb2
+
+
+class Client():
+
+    def __init__(self):
+        self.host = 'localhost'
+        self.port = 8080
+
+        # instantiate a channel
+        self.channel = grpc.insecure_channel(f'{self.host}:{self.port}')
+
+        # bind the client and the server
+        self.stub = pb2_grpc.EntityTransactionServiceStub(self.channel)
+
+    def get(self, entity_id):
+        message = pb2.Entity(eid=entity_id)
+        print(f'{message}')
+        return self.stub.retrieve(message)
+
+if __name__ == '__main__':
+    client = Client()
+    result = client.get("25")
+    print(f'{result}')