diff --git a/pom.xml b/pom.xml
index 1aa8a6b4c519d703d36421c85883d25d13a7c7de..5a2e9f9d60a8083b99ee61f2cefed59bde473da9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.caosdb</groupId>
   <artifactId>caosdb-server</artifactId>
-  <version>0.5.0-GRPC0.0.17</version>
+  <version>0.5.0-GRPC0.0.19</version>
   <packaging>jar</packaging>
   <name>CaosDB Server</name>
   <scm>
diff --git a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
index d0c659679390fa0dbf2ff3f939b7062c38a63f90..ceb69a007dd29f3022b39f45637ef7ed91947dbb 100644
--- a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
+++ b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
@@ -15,7 +15,6 @@ import org.caosdb.api.entity.v1alpha1.DeleteRequest;
 import org.caosdb.api.entity.v1alpha1.DeleteResponse;
 import org.caosdb.api.entity.v1alpha1.Entity;
 import org.caosdb.api.entity.v1alpha1.Entity.Builder;
-import org.caosdb.api.entity.v1alpha1.EntityRequest;
 import org.caosdb.api.entity.v1alpha1.EntityResponse;
 import org.caosdb.api.entity.v1alpha1.EntityRole;
 import org.caosdb.api.entity.v1alpha1.EntityTransactionServiceGrpc.EntityTransactionServiceImplBase;
@@ -427,7 +426,7 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
 
   private org.caosdb.api.entity.v1alpha1.ReferenceDataType.Builder convertReferenceDatatype(
       final ReferenceDatatype datatype) {
-    return ReferenceDataType.newBuilder().setName(datatype.toString());
+    return ReferenceDataType.newBuilder().setName(datatype.getName());
   }
 
   public Iterable<? extends org.caosdb.api.entity.v1alpha1.Property> convert(
@@ -575,45 +574,82 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
     switch (requestCase) {
       case RETRIEVE_REQUEST:
         return retrieve(request);
-      case DELETE_REQUEST:
-        return delete(request);
       default:
-        return MultiTransactionResponse.newBuilder()
-            .addResponses(singleTransaction(request.getRequests(0)))
-            .build();
+        return write(request);
     }
   }
 
-  public TransactionResponse singleTransaction(final TransactionRequest request) throws Exception {
-    final WrappedRequestsCase requestCase = request.getWrappedRequestsCase();
-    switch (requestCase) {
-      case INSERT_REQUEST:
-        return TransactionResponse.newBuilder()
-            .setInsertResponse(insert(request.getInsertRequest()))
-            .build();
-      case UPDATE_REQUEST:
-        return TransactionResponse.newBuilder()
-            .setUpdateResponse(update(request.getUpdateRequest()))
-            .build();
-      default:
-        throw new UnsupportedOperationException("Not implemented");
-    }
-  }
-
-  private MultiTransactionResponse delete(final MultiTransactionRequest requests) throws Exception {
+  private MultiTransactionResponse write(final MultiTransactionRequest requests) throws Exception {
     final MultiTransactionResponse.Builder builder = MultiTransactionResponse.newBuilder();
     final WritableContainer container =
         new WritableContainer(
             SecurityUtils.getSubject(), getTimestamp(), getSRID(), new HashMap<String, String>());
     for (final TransactionRequest request : requests.getRequestsList()) {
-      final DeleteRequest deleteRequest = request.getDeleteRequest();
-      final String id = deleteRequest.getId();
-      try {
-        final DeleteEntity entity = new DeleteEntity(getId(id));
-        container.add(entity);
+      switch (request.getWrappedRequestsCase()) {
+        case INSERT_REQUEST:
+          final InsertRequest insertRequest = request.getInsertRequest();
+          final Entity insertEntity = insertRequest.getEntityRequest().getEntity();
+
+          try {
+            final InsertEntity entity =
+                new InsertEntity(
+                    insertEntity.getName().isEmpty() ? null : insertEntity.getName(),
+                    convert(insertEntity.getRole()));
+            entity.setName(insertEntity.getName().isEmpty() ? null : insertEntity.getName());
+            convert(insertEntity, entity);
+            if (insertRequest.getEntityRequest().hasUploadId()) {
+              final FileProperties uploadFile =
+                  fileTransmissionService.getUploadFile(
+                      insertRequest.getEntityRequest().getUploadId());
+              if (uploadFile == null) {
+                entity.addError(ServerMessages.FILE_HAS_NOT_BEEN_UPLOAED);
+              } else {
+                container.addFile(uploadFile.getTmpIdentifyer(), uploadFile);
+                entity.getFileProperties().setTmpIdentifyer(uploadFile.getTmpIdentifyer());
+              }
+            }
+            container.add(entity);
+          } catch (final NumberFormatException e) {
+            // ID wasn't an integer -  we handle this below.
+          }
+          break;
+        case UPDATE_REQUEST:
+          final UpdateRequest updateRequest = request.getUpdateRequest();
+          final Entity updateEntity = updateRequest.getEntityRequest().getEntity();
+
+          try {
+            final UpdateEntity entity =
+                new UpdateEntity(getId(updateEntity.getId()), convert(updateEntity.getRole()));
+            entity.setName(updateEntity.getName().isEmpty() ? null : updateEntity.getName());
+            convert(updateEntity, entity);
+            if (updateRequest.getEntityRequest().hasUploadId()) {
+              final FileProperties uploadFile =
+                  fileTransmissionService.getUploadFile(
+                      updateRequest.getEntityRequest().getUploadId());
+              if (uploadFile == null) {
+                entity.addError(ServerMessages.FILE_HAS_NOT_BEEN_UPLOAED);
+              } else {
+                container.addFile(uploadFile.getTmpIdentifyer(), uploadFile);
+                entity.getFileProperties().setTmpIdentifyer(uploadFile.getTmpIdentifyer());
+              }
+            }
+            container.add(entity);
+          } catch (final NumberFormatException e) {
+            // ID wasn't an integer -  we handle this below.
+          }
+          break;
+        case DELETE_REQUEST:
+          final DeleteRequest deleteRequest = request.getDeleteRequest();
+          try {
+            final DeleteEntity entity = new DeleteEntity(getId(deleteRequest.getId()));
+            container.add(entity);
 
-      } catch (final NumberFormatException e) {
-        // ID wasn't an integer - we handle this below
+          } catch (final NumberFormatException e) {
+            // ID wasn't an integer - we handle this below
+          }
+          break;
+        default:
+          throw new UnsupportedOperationException("Not implemented");
       }
     }
 
@@ -621,18 +657,56 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
     transaction.execute();
 
     for (final EntityInterface entity : container) {
-      final IdResponse.Builder idResponse =
-          IdResponse.newBuilder().setId(entity.getId().toString());
+      final IdResponse.Builder idResponse = IdResponse.newBuilder();
+      if (entity.getId() != null) {
+        idResponse.setId(entity.getId().toString());
+      }
       appendMessages(entity, idResponse);
 
-      builder
-          .addResponsesBuilder()
-          .setDeleteResponse(DeleteResponse.newBuilder().setIdResponse(idResponse));
+      if (entity instanceof InsertEntity) {
+        builder
+            .addResponsesBuilder()
+            .setInsertResponse(InsertResponse.newBuilder().setIdResponse(idResponse));
+      } else if (entity instanceof UpdateEntity) {
+
+        builder
+            .addResponsesBuilder()
+            .setUpdateResponse(UpdateResponse.newBuilder().setIdResponse(idResponse));
+      } else {
+        builder
+            .addResponsesBuilder()
+            .setDeleteResponse(DeleteResponse.newBuilder().setIdResponse(idResponse));
+      }
     }
 
-    // Add those entities which have not been retrieved because the have a string id
-    for (final TransactionRequest sub_request : requests.getRequestsList()) {
-      final String id = sub_request.getRetrieveRequest().getId();
+    // Add those entities which have not been processed because the have a string id
+    for (final TransactionRequest request : requests.getRequestsList()) {
+      final String id = "";
+      switch (request.getWrappedRequestsCase()) {
+        case UPDATE_REQUEST:
+          final UpdateRequest updateRequest = request.getUpdateRequest();
+          final Entity updateEntity = updateRequest.getEntityRequest().getEntity();
+
+          try {
+            final UpdateEntity entity =
+                new UpdateEntity(getId(updateEntity.getId()), convert(updateEntity.getRole()));
+            entity.setName(updateEntity.getName().isEmpty() ? null : updateEntity.getName());
+            container.add(entity);
+          } catch (final NumberFormatException e) {
+            // ID wasn't an integer -  we handle this below.
+          }
+        case DELETE_REQUEST:
+          final DeleteRequest deleteRequest = request.getDeleteRequest();
+          try {
+            final DeleteEntity entity = new DeleteEntity(getId(deleteRequest.getId()));
+            container.add(entity);
+
+          } catch (final NumberFormatException e) {
+            // ID wasn't an integer - we handle this below
+          }
+        default:
+          break;
+      }
       if (!id.isBlank()) {
         try {
           getId(id);
@@ -650,19 +724,6 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
     return builder.build();
   }
 
-  private InsertResponse insert(final InsertRequest insertRequest) throws Exception {
-    final EntityRequest entityRequest = insertRequest.getEntityRequest();
-    final Entity insertEntity = entityRequest.getEntity();
-    final InsertEntity entity =
-        new InsertEntity(
-            insertEntity.getName().isEmpty() ? null : insertEntity.getName(),
-            convert(insertEntity.getRole()));
-
-    return InsertResponse.newBuilder()
-        .setIdResponse(write(convert(insertEntity, entity), entityRequest))
-        .build();
-  }
-
   private Role convert(final EntityRole role) {
     switch (role) {
       case ENTITY_ROLE_FILE:
@@ -678,57 +739,6 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa
     }
   }
 
-  private UpdateResponse update(final UpdateRequest updateRequest) throws Exception {
-    final EntityRequest entityRequest = updateRequest.getEntityRequest();
-    final Entity updateEntity = entityRequest.getEntity();
-    final String id = updateEntity.getId();
-    try {
-      final UpdateEntity entity = new UpdateEntity(getId(id), convert(updateEntity.getRole()));
-      entity.setName(updateEntity.getName().isEmpty() ? null : updateEntity.getName());
-
-      return UpdateResponse.newBuilder()
-          .setIdResponse(write(convert(updateEntity, entity), entityRequest))
-          .build();
-    } catch (final NumberFormatException e) {
-      // ID wasn't an integer - the server doesn't support string id's yet, so that entity cannot
-      // exist.
-      return UpdateResponse.newBuilder()
-          .setIdResponse(
-              IdResponse.newBuilder()
-                  .setId(id)
-                  .addErrors(convert(ServerMessages.ENTITY_DOES_NOT_EXIST)))
-          .build();
-    }
-  }
-
-  private IdResponse write(final EntityInterface entity, final EntityRequest entityRequest)
-      throws Exception {
-
-    final org.caosdb.api.entity.v1alpha1.IdResponse.Builder builder = IdResponse.newBuilder();
-    final WritableContainer container =
-        new WritableContainer(
-            SecurityUtils.getSubject(), getTimestamp(), getSRID(), new HashMap<>());
-    container.add(entity);
-    if (entityRequest.hasUploadId()) {
-      final FileProperties uploadFile =
-          fileTransmissionService.getUploadFile(entityRequest.getUploadId());
-      if (uploadFile == null) {
-        entity.addError(ServerMessages.FILE_HAS_NOT_BEEN_UPLOAED);
-      } else {
-        container.addFile(uploadFile.getTmpIdentifyer(), uploadFile);
-        entity.getFileProperties().setTmpIdentifyer(uploadFile.getTmpIdentifyer());
-      }
-    }
-    final WriteTransaction transaction = new WriteTransaction(container);
-    transaction.execute();
-    if (entity.hasId()) {
-      builder.setId(Integer.toString(entity.getId()));
-    }
-    appendMessages(entity, builder);
-
-    return builder.build();
-  }
-
   private void appendMessages(
       final EntityInterface from,
       final org.caosdb.api.entity.v1alpha1.EntityResponse.Builder builder) {
diff --git a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
index 62a9beea1921f34dd3646bcc78ed9086d05e6098..7a9a0519efc908e549a53f560af10a0ceffb3b27 100644
--- a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
+++ b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
@@ -288,7 +288,7 @@ public class WriteTransaction extends Transaction<WritableContainer>
         entity.setEntityStatus(EntityStatus.UNQUALIFIED);
         entity.addError(ServerMessages.AUTHORIZATION_ERROR);
         entity.addInfo(exc.getMessage());
-      } catch (ClassCastException exc) {
+      } catch (final ClassCastException exc) {
         // not an update entity. ignore.
       }
 
@@ -308,10 +308,10 @@ public class WriteTransaction extends Transaction<WritableContainer>
 
       // split up the TransactionContainer into three containers, one for each
       // type of writing transaction.
-      TransactionContainer inserts = new TransactionContainer();
-      TransactionContainer updates = new TransactionContainer();
-      TransactionContainer deletes = new TransactionContainer();
-      for (EntityInterface entity : getContainer()) {
+      final TransactionContainer inserts = new TransactionContainer();
+      final TransactionContainer updates = new TransactionContainer();
+      final TransactionContainer deletes = new TransactionContainer();
+      for (final EntityInterface entity : getContainer()) {
         if (entity instanceof InsertEntity) {
           inserts.add(entity);
         } else if (entity instanceof UpdateEntity) {
@@ -492,7 +492,7 @@ public class WriteTransaction extends Transaction<WritableContainer>
       } else {
         newProperty.setEntityStatus(EntityStatus.UNQUALIFIED);
         newProperty.addError(ServerMessages.ENTITY_HAS_NO_ID);
-        newProperty.addInfo("On updates, allways specify the id not just the name.");
+        newProperty.addInfo("On updates, always specify the id not just the name.");
         newEntity.addError(ServerMessages.ENTITY_HAS_UNQUALIFIED_PROPERTIES);
         newEntity.setEntityStatus(EntityStatus.UNQUALIFIED);
         return needPermissions;
@@ -526,7 +526,7 @@ public class WriteTransaction extends Transaction<WritableContainer>
       } else {
         newParent.setEntityStatus(EntityStatus.UNQUALIFIED);
         newParent.addError(ServerMessages.ENTITY_HAS_NO_ID);
-        newParent.addInfo("On updates, allways specify the id not just the name.");
+        newParent.addInfo("On updates, always specify the id not just the name.");
         newEntity.addError(ServerMessages.ENTITY_HAS_UNQUALIFIED_PROPERTIES);
         newEntity.setEntityStatus(EntityStatus.UNQUALIFIED);
         return needPermissions;