diff --git a/proto/caosdb/entity/v1alpha1/main.proto b/proto/caosdb/entity/v1alpha1/main.proto
index f920154ec81f126bdff8407c93741b78a25051e5..9446eb53e12301bae2942c421aff695b13eb2758 100644
--- a/proto/caosdb/entity/v1alpha1/main.proto
+++ b/proto/caosdb/entity/v1alpha1/main.proto
@@ -137,7 +137,56 @@ message ByIdRequest {
 // Response to a retrieve request
 message RetrieveResponse {
   // Payload of the retrieval
-  Entity entity = 1;
+  oneof query_response {
+    Entity entity = 1;
+    SelectQueryResult select_result = 3;
+    CountResult = 4;
+  }
+}
+
+// Response to single retrieve request
+message SingleRetrieveRequest {
+  // Retrieve by query or by id
+  QueryOrIdRequest retrieve_request = 1;
+}
+
+// CaosDB Query
+message Query {
+  // The string representation of the query, e.g. "FIND Person WITH name = Aisha"
+  string query = 1;
+}
+
+message SelectQueryRows {
+  repeated string cells = 1;
+}
+
+message SelectQueryResult {
+  SelectQueryRows header = 1;
+  repeated SelectQueryRows data_rows = 2;
+}
+
+
+message SingleRetrieveResponse {
+  RetrieveResponse retrieve_response = 1;
+  // Transaction errors.
+  repeated Message transaction_errors = 2;
+  // Transaction warnings.
+  repeated Message transaction_warnings = 3;
+  // Transaction info messages.
+  repeated Message transaction_infos = 4;
+}
+
+message QueryOrIdRequest {
+  oneof wrapped_request {
+    // A single id
+    ByIdRequest by_id = 1;
+    // A query
+    QueryRequest query = 2;
+  }
+}
+
+message SingleDeleteResponse {
+  IdResponse delete_response = 1;
   // Transaction errors.
   repeated Message errors = 2;
   // Transaction warnings.
@@ -146,19 +195,117 @@ message RetrieveResponse {
   repeated Message infos = 4;
 }
 
-// Wrapper for different kinds of retrievals (currently, only by ID). We need
-// this in order to make a repeated field of these different kinds of
-// retrievals.
-message RetrieveRequest {
-  // Wrapped special kind of request.
-  oneof wrapped_request {
-    // A single retrieve
-    ByIdRequest by_id = 1;
+message TransactionResponse {
+  oneof wrapped_response {
+    IdResponse delete_response = 1;
+    IdResponse update_response = 2;
+    RetrieveResponse retrieve_response = 3;
+    IdResponse insert_response = 4;
   }
 }
 
+message SingleTransactionResponse {
+  TransactionResponse response = 1;
+  // Transaction errors.
+  repeated Message transaction_errors = 2;
+  // Transaction warnings.
+  repeated Message transaction_warnings = 3;
+  // Transaction info messages.
+  repeated Message transaction_infos = 4;
+}
+
+message MultiTransactionResponse {
+  repeated TransactionResponse responses = 1;
+  // Transaction errors.
+  repeated Message transaction_errors = 2;
+  // Transaction warnings.
+  repeated Message transaction_warnings = 3;
+  // Transaction info messages.
+  repeated Message transaction_infos = 4;
+}
+
+message IdResponse {
+  string id = 1;
+  // Entity errors.
+  repeated Message entity_errors = 2;
+  // Entity warnings.
+  repeated Message entity_warnings = 3;
+  // Entity info messages.
+  repeated Message entity_infos = 4;
+}
+
+message SingleDeleteRequest {
+  // Delete by query or by id
+  QueryOrIdRequest retrieve_request = 1;
+}
+
+message FullEntityRequest {
+  // Payload of the entity request
+  Entity entity = 1;
+}
+
+message SingleUpdateRequest {
+  FullEntityRequest update_request = 1;
+}
+
+message SingleInsertRequest {
+  FullEntityRequest insert_request = 1;
+}
+
+message SingleInsertResponse {
+  // Reponse contains the id of the new entity.
+  IdResponse insert_response = 1;
+  // Transaction errors.
+  repeated Message transaction_errors = 2;
+  // Transaction warnings.
+  repeated Message transaction_warnings = 3;
+  // Transaction info messages.
+  repeated Message transaction_infos = 4;
+}
+
+message SingleUpdateResponse {
+  // Reponse contains the id of the updated entity.
+  IdResponse update_response = 1;
+  // Transaction errors.
+  repeated Message transaction_errors = 2;
+  // Transaction warnings.
+  repeated Message transaction_warnings = 3;
+  // Transaction info messages.
+  repeated Message transaction_infos = 4;
+}
+
+message MultiRetrieveRequest {
+  // Wrapped retrieve requests
+  repeated QueryOrIdRequest requests = 1;
+}
+
+message MultiRetrieveResponse {
+  repeated RetrieveResponse response = 1;
+  // Transaction errors.
+  repeated Message transaction_errors = 2;
+  // Transaction warnings.
+  repeated Message transaction_warnings = 3;
+  // Transaction info messages.
+  repeated Message transaction_infos = 4;
+}
+
 // Entity Transaction Service
 service EntityTransactionService {
   // Issue a single retrieve request
-  rpc Retrieve(RetrieveRequest) returns (RetrieveResponse);
+  rpc SingleRetrieve(SingleRetrieveRequest) returns (SingleRetrieveResponse);
+  // Issue a single retrieve request
+  rpc SingleInsert(SingleInsertRequest) returns (SingleInsertResponse);
+  // Issue a single delete request
+  rpc SingleDelete(SingleDeleteRequest) returns (SingleDeleteResponse);
+  // Issue a single update request
+  rpc SingleUpdate(SingleUpdateRequest) returns (SingleUpdateResponse);
+
+  // Issue a single retrieve request
+  rpc MultiRetrieve(MultiRetrieveRequest) returns (MultiRetrieveResponse);
+  // Issue a single retrieve request
+  /*rpc Insert(MultiInsertRequest) returns (MultiInsertResponse);*/
+  /*// Issue a single delete request*/
+  /*rpc Delete(MultiDeleteRequest) returns (MultiDeleteResponse);*/
+  /*// Issue a single update request*/
+  /*rpc Update(MultiUpdateRequest) returns (MultiUpdateResponse);*/
 }