diff --git a/caosdb-proto b/caosdb-proto
index f2588df914386beeeaacca4ea566516d23dc4baa..4845aa8e479b85b50a130530bbc96a0cab4f8688 160000
--- a/caosdb-proto
+++ b/caosdb-proto
@@ -1 +1 @@
-Subproject commit f2588df914386beeeaacca4ea566516d23dc4baa
+Subproject commit 4845aa8e479b85b50a130530bbc96a0cab4f8688
diff --git a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
index c45a011d6f39f47e9b9732b1090194128bc75589..b92974c53a90e12d20637cb602f40fd0fbd94e89 100644
--- a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
+++ b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
@@ -10,6 +10,7 @@ import org.caosdb.api.entity.v1alpha1.ByIdRequest;
 import org.caosdb.api.entity.v1alpha1.Entity;
 import org.caosdb.api.entity.v1alpha1.Entity.Builder;
 import org.caosdb.api.entity.v1alpha1.EntityTransactionServiceGrpc.EntityTransactionServiceImplBase;
+import org.caosdb.api.entity.v1alpha1.MessageCode;
 import org.caosdb.api.entity.v1alpha1.Parent;
 import org.caosdb.api.entity.v1alpha1.RetrieveRequest;
 import org.caosdb.api.entity.v1alpha1.RetrieveResponse;
@@ -24,6 +25,7 @@ import org.caosdb.server.entity.container.RetrieveContainer;
 import org.caosdb.server.entity.wrapper.Property;
 import org.caosdb.server.transaction.Retrieve;
 import org.caosdb.server.utils.EntityStatus;
+import org.caosdb.server.utils.ServerMessages;
 
 public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBase {
 
@@ -92,11 +94,20 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
   private org.caosdb.api.entity.v1alpha1.Message convert(final Message m) {
     final org.caosdb.api.entity.v1alpha1.Message.Builder builder =
         org.caosdb.api.entity.v1alpha1.Message.newBuilder();
-    builder.setCode(m.getCode());
+    final MessageCode code = getMessageCode(m);
+    builder.setCode(code.getNumber());
     builder.setDescription(m.getDescription());
     return builder.build();
   }
 
+  private MessageCode getMessageCode(final Message m) {
+    // TODO move to Message class.
+    if (m.equals(ServerMessages.ENTITY_DOES_NOT_EXIST)) {
+      return MessageCode.MESSAGE_CODE_ENTITY_DOES_NOT_EXIST;
+    }
+    throw new UnsupportedOperationException("Unkown message code: " + m.toString());
+  }
+
   public Version convert(final org.caosdb.server.entity.Version from) {
     final org.caosdb.api.entity.v1alpha1.Version.Builder builder = Version.newBuilder();
 
@@ -184,16 +195,35 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
     return Integer.parseInt(request.getId());
   }
 
-  public Entity retrieve(final RetrieveRequest request) throws Exception {
+  public RetrieveResponse retrieve(final RetrieveRequest request) throws Exception {
 
+    Entity responseEntity = null;
+    final org.caosdb.api.entity.v1alpha1.RetrieveResponse.Builder builder =
+        RetrieveResponse.newBuilder();
     final RetrieveContainer container =
         new RetrieveContainer(SecurityUtils.getSubject(), getTimestamp(), getSRID(), null);
-    final RetrieveEntity entity = new RetrieveEntity(getId(request.getById()));
-    container.add(entity);
+    try {
+      final RetrieveEntity entity = new RetrieveEntity(getId(request.getById()));
+      container.add(entity);
+
+      final Retrieve transaction = new Retrieve(container);
+      transaction.execute();
+      responseEntity = convert(transaction.getContainer().get(0));
+    } catch (final NumberFormatException e) {
+      // ID wasn't an integer - the server doesn't support string id's yet, so that entity cannot
+      // exist.
+      responseEntity = entityDoesNotExist(request.getById().getId());
+    }
+
+    builder.setEntity(responseEntity);
+    return builder.build();
+  }
 
-    final Retrieve transaction = new Retrieve(container);
-    transaction.execute();
-    return convert(transaction.getContainer().get(0));
+  private Entity entityDoesNotExist(final String id) {
+    return Entity.newBuilder()
+        .addErrors(convert(ServerMessages.ENTITY_DOES_NOT_EXIST))
+        .setId(id)
+        .build();
   }
 
   private String getSRID() {
@@ -208,8 +238,7 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
   public void retrieve(
       final RetrieveRequest request, final StreamObserver<RetrieveResponse> responseObserver) {
     try {
-      final Entity entity = retrieve(request);
-      final RetrieveResponse response = RetrieveResponse.newBuilder().setEntity(entity).build();
+      final RetrieveResponse response = retrieve(request);
       responseObserver.onNext(response);
       responseObserver.onCompleted();