diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetIDByName.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetIDByName.java
index c2e28cd39929f71e874fb4a69c38261ed290b18a..611535a946eaaef79c898911b5b5cd67278ca7b0 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetIDByName.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetIDByName.java
@@ -24,6 +24,7 @@ package org.caosdb.server.database.backend.implementation.MySQL;
 
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
+import java.sql.Types;
 import java.util.LinkedList;
 import java.util.List;
 import org.caosdb.server.database.access.Access;
@@ -42,29 +43,24 @@ public class MySQLGetIDByName extends MySQLTransaction implements GetIDByNameImp
    * Therefore {@link #STMT_AND_ROLE}, {@link #STMT_NOT_ROLE}, and {@link #STMT_LIMIT} can as
    * additional conditions.
    */
-  public static final String STMT_GET_ID_BY_NAME =
-      "Select n.entity_id AS id "
-          + "FROM name_data AS n JOIN entities AS e "
-          + "ON (n.domain_id=0 AND n.property_id=20 AND e.id = n.entity_id)"
-          + "WHERE n.value=?";
-
-  public static final String STMT_AND_ROLE = " AND e.role=?";
-  public static final String STMT_NOT_ROLE = " AND e.role!='ROLE'";
-  public static final String STMT_LIMIT = " LIMIT ";
+  public static final String STMT_GET_ID_BY_NAME = "call getIdByName(?, ?, ?)";
 
   @Override
   public List<EntityID> execute(final String name, final String role, final String limit)
       throws TransactionException {
     try {
-      final String stmtStr =
-          STMT_GET_ID_BY_NAME
-              + (role != null ? STMT_AND_ROLE : STMT_NOT_ROLE)
-              + (limit != null ? STMT_LIMIT + limit : "");
-      final PreparedStatement stmt = prepareStatement(stmtStr);
+      final PreparedStatement stmt = prepareStatement(STMT_GET_ID_BY_NAME);
 
       stmt.setString(1, name);
       if (role != null) {
         stmt.setString(2, role);
+      } else {
+        stmt.setNull(2, Types.VARCHAR);
+      }
+      if (limit != null) {
+        stmt.setString(3, limit);
+      } else {
+        stmt.setNull(3, Types.VARCHAR);
       }
       try (ResultSet rs = stmt.executeQuery()) {
         final List<EntityID> ret = new LinkedList<>();
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityDatatype.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityDatatype.java
index c4cb7cf98e5da51f98d71b4c5f6fc91e6961892e..e9ca7fd19a69a23139cd8aed0ea7644b7184d61e 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityDatatype.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityDatatype.java
@@ -19,18 +19,13 @@ public class MySQLInsertEntityDatatype extends MySQLTransaction
    * Inserts atomic data types of properties into the data_type table. Has two parameters, the
    * property_id and the data type name.
    */
-  public static final String STMT_INSERT_ENTITY_DATATYPE =
-      "INSERT INTO data_type (domain_id, entity_id, property_id, datatype) "
-          + "SELECT 0, 0, ?, "
-          + "( SELECT entity_id FROM name_data WHERE domain_id = 0 AND property_id = 20 AND value = ? LIMIT 1);";
+  public static final String STMT_INSERT_ENTITY_DATATYPE = "call insertEntityDataType(?, ?)";
 
   /**
    * Inserts collection data types of properties into the data_type table. Has two parameters, the
    * property_id and the type of collection (e.g. 'LIST').
    */
-  public static final String STMT_INSERT_ENTITY_COLLECTION =
-      "INSERT INTO collection_type (domain_id, entity_id, property_id, collection) "
-          + "SELECT 0, 0, ?, ?;";
+  public static final String STMT_INSERT_ENTITY_COLLECTION = "call insertEntityCollection(?, ?)";
 
   @Override
   public void execute(final SparseEntity entity) {
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java
index 1b945acf566db938f12847f758636dbfddeac3d1..6e4295005a5daeaed1b1efec5adfaebe8b21a34a 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java
@@ -40,8 +40,7 @@ public class MySQLInsertSparseEntity extends MySQLTransaction implements InsertS
   }
 
   public static final String STMT_INSERT_SPARSE_ENTITY = "call insertEntity(?,?,?,?)";
-  public static final String STMT_INSERT_FILE_PROPERTIES =
-      "INSERT INTO files (file_id, hash, size, path) VALUES (?, unhex(?), ?, ?);";
+  public static final String STMT_INSERT_FILE_PROPERTIES = "call insertFile(?, ?, ?, ?)";
 
   @Override
   public void execute(final SparseEntity entity) {
diff --git a/src/main/java/org/caosdb/server/query/Query.java b/src/main/java/org/caosdb/server/query/Query.java
index 7da810c3d8f50ab739dd72a65551b45449b4d183..f7f32deae429487ee8588a2d54a2bfe735453a5a 100644
--- a/src/main/java/org/caosdb/server/query/Query.java
+++ b/src/main/java/org/caosdb/server/query/Query.java
@@ -610,7 +610,7 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac
     if (this.entity != null) {
       return sourceStrategy(initQuery(versioned));
     } else if (this.role == Role.ENTITY && this.filter == null) {
-      return "entities";
+      return "entity_ids";
     } else {
       return targetStrategy(initQuery(versioned));
     }
@@ -629,11 +629,9 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac
    */
   private String generateSelectStatementForResultSet(
       final String resultSetTableName, final boolean versioned) {
-    // TODO remove the entities.role part when
-    // https://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/245 is resolved
-    if (resultSetTableName.equals("entities")) {
+    if (resultSetTableName.equals("entity_ids")) {
       final String baseStatement =
-          "SELECT entities.id, entity_acl.acl FROM entities INNER JOIN entity_acl ON entity_acl.id=entities.acl WHERE entities.role!='DOMAIN'";
+          "SELECT (SELECT id FROM entity_ids WHERE internal_id = entities.id) as id, entity_acl.acl FROM entities INNER JOIN entity_acl ON entity_acl.id=entities.acl WHERE entities.role!='DOMAIN'";
       if (!versioned) {
         return baseStatement + ";";
       }
@@ -643,7 +641,7 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac
           + ") AS tmp JOIN entity_version ON entity_version.entity_id=tmp.id;");
     } else {
       if (!versioned) {
-        return (" SELECT tmp.id, entity_acl.acl FROM "
+        return (" SELECT (SELECT id FROM entity_ids WHERE internal_id = tmp.id) AS id, entity_acl.acl FROM "
                 + " (SELECT results.id AS id, entities.acl AS acl_id FROM `"
                 + resultSetTableName
                 + "` AS results JOIN entities ON results.id=entities.id WHERE entities.role!='DOMAIN') AS tmp"
@@ -651,7 +649,7 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac
             + ";";
       }
       // if versioned, the statement is surrounded with another SELECT and JOIN
-      return ("SELECT tmp2.id, acl, version FROM( SELECT tmp.id, entity_acl.acl, tmp._iversion AS _iversion FROM "
+      return ("SELECT (SELECT id FROM entity_ids WHERE internal_id = tmp2.id) AS id, acl, version FROM (SELECT tmp.id, entity_acl.acl, tmp._iversion AS _iversion FROM "
           + " (SELECT results.id AS id, entities.acl AS acl_id, results._iversion AS _iversion FROM `"
           + resultSetTableName
           + "` AS results JOIN entities ON results.id=entities.id) AS tmp"