diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/DatabaseUtils.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/DatabaseUtils.java
index c87ef79ac858bf8dec81176aa1131f32f4055795..e7b684e6699c77b6fa1380aac0d33d13f4a6057d 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/DatabaseUtils.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/DatabaseUtils.java
@@ -152,10 +152,10 @@ public class DatabaseUtils {
   public static void parseOverrides(final List<ProtoProperty> properties, final ResultSet rs)
       throws SQLException {
     while (rs.next()) {
-      int property_id = rs.getInt("property_id");
-      if (rs.wasNull()) property_id = rs.getInt("InternalPropertyID");
+      String property_id = rs.getString("property_id");
+      if (rs.wasNull()) property_id = rs.getString("InternalPropertyID");
       for (final FlatProperty p : properties) {
-        if (p.id == property_id) {
+        if (p.id.equals(property_id)) {
           final String name = bytes2UTF8(rs.getBytes("name_override"));
           if (name != null) {
             p.name = name;
@@ -181,9 +181,9 @@ public class DatabaseUtils {
     final List<ProtoProperty> ret = new LinkedList<>();
     while (rs.next()) {
       ProtoProperty pp = new ProtoProperty();
-      pp.id = rs.getInt("PropertyID");
+      pp.id = rs.getString("PropertyID");
       if (rs.wasNull()) {
-        pp.id = rs.getInt("InternalPropertyID");
+        pp.id = rs.getString("InternalPropertyID");
       }
       pp.value = bytes2UTF8(rs.getBytes("PropertyValue"));
       pp.status = bytes2UTF8(rs.getBytes("PropertyStatus"));
@@ -219,7 +219,7 @@ public class DatabaseUtils {
    */
   public static SparseEntity parseEntityResultSet(final ResultSet rs) throws SQLException {
     final SparseEntity ret = parseNameRoleACL(rs);
-    ret.id = rs.getInt("EntityID");
+    ret.id = rs.getString("EntityID");
     ret.description = bytes2UTF8(rs.getBytes("EntityDesc"));
     ret.datatype = bytes2UTF8(rs.getBytes("Datatype"));
     ret.collection = bytes2UTF8(rs.getBytes("Collection"));
@@ -237,7 +237,7 @@ public class DatabaseUtils {
     final LinkedList<VerySparseEntity> ret = new LinkedList<>();
     while (rs.next()) {
       final VerySparseEntity vsp = new VerySparseEntity();
-      vsp.id = rs.getInt("ParentID");
+      vsp.id = rs.getString("ParentID");
       vsp.name = bytes2UTF8(rs.getBytes("ParentName"));
       vsp.description = bytes2UTF8(rs.getBytes("ParentDescription"));
       vsp.role = bytes2UTF8(rs.getBytes("ParentRole"));
@@ -251,7 +251,7 @@ public class DatabaseUtils {
       EntityInterface entity, List<ProtoProperty> protos) {
     final ArrayList<Property> ret = new ArrayList<Property>();
     for (final ProtoProperty pp : protos) {
-      if (pp.id.equals(entity.getId().toInteger())) {
+      if (pp.id.equals(entity.getId().toString())) {
         if (pp.value != null) {
           entity.setValue(new GenericValue(pp.value));
         }
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLDeleteEntityProperties.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLDeleteEntityProperties.java
index f8cba7d4c9734c1e6e12b72498ceaa6c57ed1a17..615adca41a021003700ae73fc6943a9ee795521b 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLDeleteEntityProperties.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLDeleteEntityProperties.java
@@ -44,7 +44,7 @@ public class MySQLDeleteEntityProperties extends MySQLTransaction
     try {
       final PreparedStatement stmt = prepareStatement(STMT_DELETE_ENTITY_PROPERTIES);
 
-      stmt.setInt(1, id.toInteger());
+      stmt.setString(1, id.toString());
       stmt.execute();
     } catch (final SQLIntegrityConstraintViolationException exc) {
       throw new IntegrityException(exc);
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLDeleteSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLDeleteSparseEntity.java
index 7fe8ac303b53ec26dc947c1e4a84e648d7b6517d..b634864656ce601cb59915f9b6fd92cf3f6c428a 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLDeleteSparseEntity.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLDeleteSparseEntity.java
@@ -44,7 +44,7 @@ public class MySQLDeleteSparseEntity extends MySQLTransaction implements DeleteS
     try {
       final PreparedStatement stmt = prepareStatement(STMT_DELETE_SPARSE_ENTITY);
 
-      stmt.setInt(1, id.toInteger());
+      stmt.setString(1, id.toString());
       stmt.execute();
     } catch (final SQLIntegrityConstraintViolationException exc) {
       throw new IntegrityException(exc);
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetChildren.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetChildren.java
index 649639415184e65129957c065246743a5e963dee..3d3662c6961828436597ee17651adba457ec5fc1 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetChildren.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetChildren.java
@@ -44,7 +44,7 @@ public class MySQLGetChildren extends MySQLTransaction implements GetChildrenImp
     try {
       final PreparedStatement stmt = prepareStatement(STMT_GET_CHILDREN);
 
-      stmt.setInt(1, entity.toInteger());
+      stmt.setString(1, entity.toString());
 
       ResultSet rs = null;
       try {
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetDependentEntities.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetDependentEntities.java
index 9384c8a04861a01f1e56236b0ab42433d87990f5..fabe5233d48cbda8b57fe4af10797aa0bd8ad8c5 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetDependentEntities.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetDependentEntities.java
@@ -45,7 +45,7 @@ public class MySQLGetDependentEntities extends MySQLTransaction
     try {
       final PreparedStatement stmt = prepareStatement(STMT_GET_DEPENDENT_ENTITIES);
 
-      stmt.setInt(1, entity.toInteger());
+      stmt.setString(1, entity.toString());
 
       final ResultSet rs = stmt.executeQuery();
       try {
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetFileRecordByPath.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetFileRecordByPath.java
index 16d84002b50a2e7b5847eb98cac07a190d2994c3..922c2b6b9814a4431604a91687f41948ef715ccf 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetFileRecordByPath.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetFileRecordByPath.java
@@ -49,7 +49,7 @@ public class MySQLGetFileRecordByPath extends MySQLTransaction implements GetFil
       try {
         if (rs.next()) {
           final SparseEntity ret = new SparseEntity();
-          ret.id = rs.getInt("entity_id");
+          ret.id = rs.getString("entity_id");
           ret.fileHash = rs.getString("file_hash");
           ret.fileSize = rs.getLong("size");
           ret.fileChecked = rs.getLong("checked_timestamp");
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 e9ca7fd19a69a23139cd8aed0ea7644b7184d61e..7aa692e4dc61db462573d55e39f1eb376ec7416e 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
@@ -33,7 +33,7 @@ public class MySQLInsertEntityDatatype extends MySQLTransaction
       final PreparedStatement insertEntityDatatypeStmt =
           prepareStatement(STMT_INSERT_ENTITY_DATATYPE);
 
-      insertEntityDatatypeStmt.setInt(1, entity.id);
+      insertEntityDatatypeStmt.setString(1, entity.id);
       insertEntityDatatypeStmt.setString(2, entity.datatype);
 
       insertEntityDatatypeStmt.execute();
@@ -42,7 +42,7 @@ public class MySQLInsertEntityDatatype extends MySQLTransaction
         final PreparedStatement insertEntityCollectionStmt =
             prepareStatement(STMT_INSERT_ENTITY_COLLECTION);
 
-        insertEntityCollectionStmt.setInt(1, entity.id);
+        insertEntityCollectionStmt.setString(1, entity.id);
         insertEntityCollectionStmt.setString(2, entity.collection);
 
         insertEntityCollectionStmt.execute();
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityProperties.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityProperties.java
index becb56a2397fffa323f005507463a586bdecc0cf..8d70660486b571f7f81e125df200b2be0fce89e0 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityProperties.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityProperties.java
@@ -89,9 +89,9 @@ public class MySQLInsertEntityProperties extends MySQLTransaction
     try {
       final PreparedStatement stmt = prepareStatement(STMT_INSERT_ENTITY_PROPERTY);
 
-      stmt.setInt(1, domain.toInteger());
-      stmt.setInt(2, entity.toInteger());
-      stmt.setInt(3, fp.id);
+      stmt.setString(1, domain.toString());
+      stmt.setString(2, entity.toString());
+      stmt.setString(3, fp.id);
       stmt.setString(4, table.toString());
 
       stmt.setString(5, fp.value);
@@ -124,7 +124,7 @@ public class MySQLInsertEntityProperties extends MySQLTransaction
       final FlatProperty fp = new FlatProperty();
       Table table = Table.null_data;
       Long unit_sig = null;
-      fp.id = property.getId().toInteger();
+      fp.id = property.getId().toString();
       fp.idx = property.getPIdx();
       fp.status = property.getStatementStatus().name();
 
@@ -140,7 +140,7 @@ public class MySQLInsertEntityProperties extends MySQLTransaction
         fp.value = fp.id.toString();
 
         // id is to be the replacement id (an internally used/private id)
-        fp.id = ((ReferenceValue) property.getValue()).getId().toInteger();
+        fp.id = ((ReferenceValue) property.getValue()).getId().toString();
         table = Table.reference_data;
       } else {
 
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertParents.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertParents.java
index 61a5e8c48cdc85098e1b0a2f5531c358d6c6058d..0e44c687b05d4184d81f05eeb8640a15b1e88662 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertParents.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertParents.java
@@ -40,8 +40,8 @@ public class MySQLInsertParents extends MySQLTransaction implements InsertParent
   public void execute(final EntityID entity, final EntityID parent) throws TransactionException {
     try {
       final PreparedStatement stmt = prepareStatement(STMT_INSERT_ISA);
-      stmt.setInt(1, entity.toInteger());
-      stmt.setInt(2, parent.toInteger());
+      stmt.setString(1, entity.toString());
+      stmt.setString(2, parent.toString());
       stmt.execute();
     } catch (final Exception e) {
       throw new TransactionException(e);
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 62237d3e9f4731878ff6b4c1439f4a3b188e74e1..459244032cac8128dc6b72679279eb05e8f940c5 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
@@ -47,7 +47,7 @@ public class MySQLInsertSparseEntity extends MySQLTransaction implements InsertS
       final PreparedStatement insertEntityStmt = prepareStatement(STMT_INSERT_SPARSE_ENTITY);
       final PreparedStatement insertFilePropsStmt = prepareStatement(STMT_INSERT_FILE_PROPERTIES);
 
-      insertEntityStmt.setInt(1, entity.id);
+      insertEntityStmt.setString(1, entity.id);
       insertEntityStmt.setString(2, entity.name);
       insertEntityStmt.setString(3, entity.description);
       insertEntityStmt.setString(4, entity.role);
@@ -62,7 +62,7 @@ public class MySQLInsertSparseEntity extends MySQLTransaction implements InsertS
       }
 
       if (entity.filePath != null) {
-        insertFilePropsStmt.setInt(1, entity.id);
+        insertFilePropsStmt.setString(1, entity.id);
         if (entity.fileHash != null) {
           insertFilePropsStmt.setString(2, entity.fileHash);
         } else {
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertTransactionHistory.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertTransactionHistory.java
index 0832790a0b56446570fbd7b9c3a4383390c443a7..155cb2d0b8c8db4948b4a2970785eecb636dcf9b 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertTransactionHistory.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLInsertTransactionHistory.java
@@ -56,7 +56,7 @@ public class MySQLInsertTransactionHistory extends MySQLTransaction
       logStmt.setString(3, user);
       logStmt.setLong(4, seconds);
       logStmt.setInt(5, nanos);
-      logStmt.setInt(6, entity.toInteger());
+      logStmt.setString(6, entity.toString());
       logStmt.execute();
     } catch (final Exception e) {
       throw new TransactionException(e);
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLIsSubType.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLIsSubType.java
index f6c2daf8d4a0bf4defcaa550cf715032d57cd9cd..0d469a79482069d1f19de3931433e90faf5c667a 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLIsSubType.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLIsSubType.java
@@ -43,8 +43,8 @@ public class MySQLIsSubType extends MySQLTransaction implements IsSubTypeImpl {
     try {
       final PreparedStatement isSubtypeStmt = prepareStatement(STMT_IS_SUBTYPE);
 
-      isSubtypeStmt.setInt(1, child.toInteger());
-      isSubtypeStmt.setInt(2, parent.toInteger());
+      isSubtypeStmt.setString(1, child.toString());
+      isSubtypeStmt.setString(2, parent.toString());
 
       final ResultSet rs = isSubtypeStmt.executeQuery();
       try {
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAllUncheckedFiles.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAllUncheckedFiles.java
index 09a4e7c2edabea49617224fdb9159116f2cd742b..cfbf2281b920382b30be10f2ff9e8a0ab16728ab 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAllUncheckedFiles.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAllUncheckedFiles.java
@@ -51,7 +51,7 @@ public class MySQLRetrieveAllUncheckedFiles extends MySQLTransaction
       final ResultSet rs = stmt.executeQuery();
       if (rs.next()) {
         final SparseEntity first = new SparseEntity();
-        first.id = rs.getInt("file_id");
+        first.id = rs.getString("file_id");
         first.filePath = rs.getString("path");
         first.fileHash = rs.getString("file_hash");
         first.fileSize = rs.getLong("size");
@@ -71,7 +71,7 @@ public class MySQLRetrieveAllUncheckedFiles extends MySQLTransaction
             try {
               if (rs.next()) {
                 this.next = new SparseEntity();
-                this.next.id = rs.getInt("file_id");
+                this.next.id = rs.getString("file_id");
                 this.next.filePath = rs.getString("path");
                 this.next.fileHash = rs.getString("file_hash");
                 this.next.fileSize = rs.getLong("size");
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveEntityACL.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveEntityACL.java
index 5db8ed7597b1c0d357273848fb7c36febdcfed13..716b7ff65814d1464ccac39ef64af275996e096d 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveEntityACL.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveEntityACL.java
@@ -39,9 +39,9 @@ public class MySQLRetrieveEntityACL extends MySQLTransaction implements Retrieve
       "SELECT a.acl FROM entities AS e LEFT JOIN entity_acl AS a ON (a.id = e.acl) WHERE e.id = ? LIMIT 1";
 
   @Override
-  public VerySparseEntity execute(Integer id) {
+  public VerySparseEntity execute(String id) {
     try (PreparedStatement stmt = prepareStatement(STMT)) {
-      stmt.setInt(1, id);
+      stmt.setString(1, id);
       ResultSet rs = stmt.executeQuery();
       if (rs.next()) {
         VerySparseEntity result = new VerySparseEntity();
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveParents.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveParents.java
index 1e2a6621d2fb85a5a5260b1a607670e970f54701..6f48e755537b7cd891d0254c9f2255f537a1d10a 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveParents.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveParents.java
@@ -49,7 +49,7 @@ public class MySQLRetrieveParents extends MySQLTransaction implements RetrievePa
       try {
         final PreparedStatement prepareStatement = prepareStatement(stmtStr);
 
-        prepareStatement.setInt(1, id.toInteger());
+        prepareStatement.setString(1, id.toString());
         if (version == null) {
           prepareStatement.setNull(2, Types.VARBINARY);
         } else {
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveProperties.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveProperties.java
index 100df4ce72ebae75d3022866b345bacc9752ad91..546b5675cb5e1b0d51398230155f61b1e11f2ebb 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveProperties.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveProperties.java
@@ -50,12 +50,12 @@ public class MySQLRetrieveProperties extends MySQLTransaction implements Retriev
       final PreparedStatement prepareStatement = prepareStatement(stmtStr);
 
       final List<ProtoProperty> propsStage1 =
-          retrieveFlatPropertiesStage1(0, entity.toInteger(), version, prepareStatement);
+          retrieveFlatPropertiesStage1("0", entity.toString(), version, prepareStatement);
 
       for (final ProtoProperty p : propsStage1) {
 
         p.subProperties =
-            retrieveFlatPropertiesStage1(entity.toInteger(), p.id, version, prepareStatement);
+            retrieveFlatPropertiesStage1(entity.toString(), p.id, version, prepareStatement);
       }
       return DatabaseUtils.transformToDeepPropertyTree(propsStage1, isHead);
     } catch (final SQLException e) {
@@ -66,18 +66,11 @@ public class MySQLRetrieveProperties extends MySQLTransaction implements Retriev
   }
 
   private List<ProtoProperty> retrieveFlatPropertiesStage1(
-      final Integer domain,
-      final Integer entity,
-      final String version,
-      final PreparedStatement stmt)
+      final String domain, final String entity, final String version, final PreparedStatement stmt)
       throws SQLException, ConnectionException {
-    if (domain != null && domain >= 0) {
-      stmt.setInt(1, domain);
-    } else {
-      stmt.setInt(1, 0);
-    }
 
-    stmt.setInt(2, entity);
+    stmt.setString(1, domain);
+    stmt.setString(2, entity);
     if (version == null) {
       stmt.setNull(3, Types.VARBINARY);
     } else {
@@ -94,15 +87,17 @@ public class MySQLRetrieveProperties extends MySQLTransaction implements Retriev
 
       final PreparedStatement retrieveOverrides = prepareStatement(stmtStr2);
 
-      retrieveOverrides(domain, entity, version, retrieveOverrides, properties);
+      if (properties != null & !properties.isEmpty()) {
+        retrieveOverrides(domain, entity, version, retrieveOverrides, properties);
+      }
 
       return properties;
     }
   }
 
   private void retrieveOverrides(
-      final Integer domain,
-      final Integer entity,
+      final String domain,
+      final String entity,
       final String version,
       final PreparedStatement retrieveOverrides,
       final List<ProtoProperty> props)
@@ -110,8 +105,8 @@ public class MySQLRetrieveProperties extends MySQLTransaction implements Retriev
 
     ResultSet rs = null;
     try {
-      retrieveOverrides.setInt(1, domain);
-      retrieveOverrides.setInt(2, entity);
+      retrieveOverrides.setString(1, domain);
+      retrieveOverrides.setString(2, entity);
       if (version == null) {
         retrieveOverrides.setNull(3, Types.VARBINARY);
       } else {
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveQueryTemplateDefinition.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveQueryTemplateDefinition.java
index 1ab95ae7afc756742475ff2f3c79eddfd632aae9..5e96353af089d469faef2ef5c970fb4de725fab0 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveQueryTemplateDefinition.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveQueryTemplateDefinition.java
@@ -46,7 +46,7 @@ public class MySQLRetrieveQueryTemplateDefinition extends MySQLTransaction
     try {
 
       final PreparedStatement stmt = prepareStatement(STMT_RETRIEVE_QUERY_TEMPLATE_DEF);
-      stmt.setInt(1, id.toInteger());
+      stmt.setString(1, id.toString());
       if (version == null) {
         stmt.setNull(2, Types.VARBINARY);
       } else {
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveSparseEntity.java
index 48cd84b3869262ba7f1d8129fdde2335bed6cd8e..c4a9b6262a7506c38b8dff6215682014203da1c1 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveSparseEntity.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveSparseEntity.java
@@ -51,7 +51,7 @@ public class MySQLRetrieveSparseEntity extends MySQLTransaction
     try {
       final PreparedStatement preparedStatement = prepareStatement(stmtStr);
 
-      preparedStatement.setInt(1, id.toInteger());
+      preparedStatement.setString(1, id.toString());
       if (version == null) {
         preparedStatement.setNull(2, Types.VARBINARY);
       } else {
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveVersionHistory.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveVersionHistory.java
index 6c4c2629a5effee25128f478bef20f5558a027ba..9493b382ec61f11953f1ba045f5c914b7502f690 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveVersionHistory.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveVersionHistory.java
@@ -53,7 +53,7 @@ public class MySQLRetrieveVersionHistory extends MySQLTransaction
     final HashMap<String, VersionHistoryItem> result = new HashMap<>();
     try {
       final PreparedStatement s = prepareStatement(VERSION_HISTORY_STMT);
-      s.setInt(1, entityId.toInteger());
+      s.setString(1, entityId.toString());
       final ResultSet rs = s.executeQuery();
 
       while (rs.next()) {
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLSetFileCheckedTimestampImpl.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLSetFileCheckedTimestampImpl.java
index 18d7d9b7f510f5cb24e1fe844ac4caac86ff4913..b08d05170dbc45168f597181389c18a1454ee103 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLSetFileCheckedTimestampImpl.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLSetFileCheckedTimestampImpl.java
@@ -43,7 +43,7 @@ public class MySQLSetFileCheckedTimestampImpl extends MySQLTransaction
     try {
       final PreparedStatement stmt = getMySQLHelper().prepareStatement(STMT_SET_TS);
       stmt.setLong(1, ts);
-      stmt.setInt(2, id.toInteger());
+      stmt.setString(2, id.toString());
     } catch (final SQLException e) {
       throw new TransactionException(e);
     } catch (final ConnectionException e) {
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLSetFileChecksum.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLSetFileChecksum.java
index c9b51f7ada8aa9a9ee90a6505c85ff55e8ef4141..69ecfba5089e96176766db402b9e07eade354df3 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLSetFileChecksum.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLSetFileChecksum.java
@@ -25,7 +25,7 @@ public class MySQLSetFileChecksum extends MySQLTransaction implements SetFileChe
   public void execute(final EntityID id, final String checksum) {
     try {
       final PreparedStatement stmt = prepareStatement(STMT_SET_CHECKSUM);
-      stmt.setInt(2, id.toInteger());
+      stmt.setString(2, id.toString());
       stmt.setString(1, checksum);
       stmt.execute();
     } catch (SQLException | ConnectionException e) {
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLSetQueryTemplateDefinition.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLSetQueryTemplateDefinition.java
index 02ebdd361d7293bafa2f61aa7557bfb180e0dd8f..b03630f56f571e21533b8a5a932ea5259c07309e 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLSetQueryTemplateDefinition.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLSetQueryTemplateDefinition.java
@@ -43,7 +43,7 @@ public class MySQLSetQueryTemplateDefinition extends MySQLTransaction
   public void insert(final EntityID id, final String definition) {
     try {
       final PreparedStatement stmt = prepareStatement(STMT_INSERT_QUERY_TEMPLATE_DEF);
-      stmt.setInt(1, id.toInteger());
+      stmt.setString(1, id.toString());
       stmt.setString(2, definition);
       stmt.setString(3, definition);
       stmt.execute();
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java
index b2d0fb9e3b7615e7e95243a2a7bde2fa99e98ca2..8d2af662f32d2f5a788d6470cf6cd526e15d0976 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLUpdateSparseEntity.java
@@ -47,7 +47,7 @@ public class MySQLUpdateSparseEntity extends MySQLTransaction implements UpdateS
     try {
       // file properties;
       final PreparedStatement updateFilePropsStmt = prepareStatement(STMT_UPDATE_FILE_PROPS);
-      updateFilePropsStmt.setInt(1, spe.id);
+      updateFilePropsStmt.setString(1, spe.id);
       if (spe.filePath != null) {
         updateFilePropsStmt.setString(2, spe.filePath);
         updateFilePropsStmt.setLong(3, spe.fileSize);
@@ -65,7 +65,7 @@ public class MySQLUpdateSparseEntity extends MySQLTransaction implements UpdateS
 
       // very sparse entity
       final PreparedStatement updateEntityStmt = prepareStatement(STMT_UPDATE_ENTITY);
-      updateEntityStmt.setInt(1, spe.id);
+      updateEntityStmt.setString(1, spe.id);
       updateEntityStmt.setString(2, spe.name);
       updateEntityStmt.setString(3, spe.description);
       updateEntityStmt.setString(4, spe.role);
diff --git a/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveEntityACLImpl.java b/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveEntityACLImpl.java
index 230d4d34103603d5499532a7dc1a941cf82068e7..cc61461996dc46ae5ea4a997bd0938587959cd24 100644
--- a/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveEntityACLImpl.java
+++ b/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveEntityACLImpl.java
@@ -25,5 +25,5 @@ import org.caosdb.server.database.proto.VerySparseEntity;
 
 public interface RetrieveEntityACLImpl extends BackendTransactionImpl {
 
-  public VerySparseEntity execute(Integer id);
+  public VerySparseEntity execute(String id);
 }
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveEntityACLTransaction.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveEntityACLTransaction.java
index 8ef143b44e292e5b100ff30ca023e91c0adb190e..00f8c51026278d3c3660c798b5b0854aff5900eb 100644
--- a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveEntityACLTransaction.java
+++ b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveEntityACLTransaction.java
@@ -43,7 +43,7 @@ public class RetrieveEntityACLTransaction
   @Override
   public VerySparseEntity executeNoCache() throws TransactionException {
     RetrieveEntityACLImpl t = getImplementation(RetrieveEntityACLImpl.class);
-    return t.execute(getKey().toInteger());
+    return t.execute(getKey().toString());
   }
 
   @Override
diff --git a/src/main/java/org/caosdb/server/database/proto/FlatProperty.java b/src/main/java/org/caosdb/server/database/proto/FlatProperty.java
index b92d3def38d26f0f5f6cd6a0455d472b8f4f3ccb..b2123ce206ce01acee3ef70b1c22151b94f59bd9 100644
--- a/src/main/java/org/caosdb/server/database/proto/FlatProperty.java
+++ b/src/main/java/org/caosdb/server/database/proto/FlatProperty.java
@@ -27,7 +27,7 @@ import java.io.Serializable;
 public class FlatProperty implements Serializable {
 
   private static final long serialVersionUID = 6039288034435124195L;
-  public Integer id = null;
+  public String id = null;
   public String value = null;
   public String status = null;
   public Integer idx = null;
diff --git a/src/main/java/org/caosdb/server/database/proto/VerySparseEntity.java b/src/main/java/org/caosdb/server/database/proto/VerySparseEntity.java
index 8f32bf52038a00275568688b016b830b19fba5f0..5ceca456abc58d945599cc978987eca783637f95 100644
--- a/src/main/java/org/caosdb/server/database/proto/VerySparseEntity.java
+++ b/src/main/java/org/caosdb/server/database/proto/VerySparseEntity.java
@@ -35,7 +35,7 @@ public class VerySparseEntity implements Serializable {
 
   private static final long serialVersionUID = 7370925076064714740L;
 
-  public Integer id = null;
+  public String id = null;
   public String name = null;
   public String description = null;
   public String role = null;
diff --git a/src/main/java/org/caosdb/server/entity/Entity.java b/src/main/java/org/caosdb/server/entity/Entity.java
index f271e627d46ab61d027a7bbe9094611864506689..19934568c93a421af5dab35635686de61052bc93 100644
--- a/src/main/java/org/caosdb/server/entity/Entity.java
+++ b/src/main/java/org/caosdb/server/entity/Entity.java
@@ -349,7 +349,7 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa
   @Override
   public SparseEntity getSparseEntity() {
     final SparseEntity ret = new SparseEntity();
-    ret.id = getId().toInteger();
+    ret.id = getId().toString();
     ret.name = getName();
     ret.description = getDescription();
     ret.acl = getEntityACL().serialize();
@@ -647,7 +647,9 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa
     // Parse ID. Generate error if it isn't an integer.
     if (element.getAttribute("id") != null && !element.getAttributeValue("id").equals("")) {
       try {
-        this.getId().setId(Integer.parseInt(element.getAttributeValue("id")));
+        // check is integer compatible
+        Integer.parseInt(element.getAttributeValue("id"));
+        this.getId().setId(element.getAttributeValue("id"));
       } catch (final NumberFormatException e) {
         addInfo("Id was " + element.getAttributeValue("id") + ".");
         addError(ServerMessages.PARSING_FAILED);
diff --git a/src/main/java/org/caosdb/server/entity/EntityID.java b/src/main/java/org/caosdb/server/entity/EntityID.java
index 6a2d2ca368088e54c2f3c77ae669c6feda07bb4e..f1a13769140e856d62e197108c9cc8e1c298de11 100644
--- a/src/main/java/org/caosdb/server/entity/EntityID.java
+++ b/src/main/java/org/caosdb/server/entity/EntityID.java
@@ -14,36 +14,36 @@ import java.util.Objects;
  */
 public class EntityID implements Serializable {
 
-  private static final long serialVersionUID = -9092133023135548179L;
+  private static final long serialVersionUID = -9062285447437546105L;
 
-  public static final EntityID DEFAULT_DOMAIN = new EntityID(0);
-  private Integer i = null;
+  public static final EntityID DEFAULT_DOMAIN = new EntityID("0");
+  private String id = null;
   private EntityID link = null;
 
   public EntityID() {}
 
-  public EntityID(final Integer id) {
-    this.i = id;
+  public EntityID(final int id) {
+    this(Integer.toString(id));
   }
 
-  public void setId(final Integer i) {
-    this.i = i;
+  public EntityID(final String id) {
+    this.id = id.toString();
   }
 
-  public Integer toInteger() {
-    if (this.link != null) {
-      return this.link.toInteger();
-    }
-    return this.i;
+  public void setId(final String id) {
+    this.id = id;
   }
 
   @Override
   public String toString() {
-    return toInteger().toString();
+    if (this.link != null) {
+      return this.link.toString();
+    }
+    return this.id;
   }
 
   boolean hasId() {
-    return this.i != null || this.link != null && this.link.hasId();
+    return this.id != null || this.link != null && this.link.hasId();
   }
 
   public void link(final EntityInterface entity) {
@@ -57,7 +57,7 @@ public class EntityID implements Serializable {
   @Override
   public boolean equals(final Object obj) {
     if (obj instanceof EntityID) {
-      return Objects.equals(((EntityID) obj).toInteger(), this.toInteger());
+      return Objects.equals(((EntityID) obj).toString(), this.toString());
     }
     return false;
   }
@@ -65,16 +65,20 @@ public class EntityID implements Serializable {
   @Override
   public int hashCode() {
     if (this.hasId()) {
-      return toInteger();
+      return toString().hashCode();
     }
     return super.hashCode();
   }
 
   public boolean isTemporary() {
-    return toInteger() < 0;
+    return toString().startsWith("-");
   }
 
   public static boolean isReserved(final EntityID id) {
-    return id.toInteger() < 100;
+    try {
+      return id.hasId() && Integer.parseInt(id.toString()) < 100;
+    } catch (NumberFormatException e) {
+      return false;
+    }
   }
 }
diff --git a/src/main/java/org/caosdb/server/entity/EntityIdRegistry.java b/src/main/java/org/caosdb/server/entity/EntityIdRegistry.java
index a870f03cc300b0a5dc3621b366d642b7dca2f81d..6ab18d156225fc683e73128c1d92381cfe87892d 100644
--- a/src/main/java/org/caosdb/server/entity/EntityIdRegistry.java
+++ b/src/main/java/org/caosdb/server/entity/EntityIdRegistry.java
@@ -41,11 +41,11 @@ public class EntityIdRegistry {
                 .getCurrentMaxId());
   }
 
-  public Integer generate() {
+  public String generate() {
     if (!isInit) {
       init();
     }
     ++currentMaxId;
-    return ++currentMaxId;
+    return Integer.toString(++currentMaxId);
   }
 }
diff --git a/src/main/java/org/caosdb/server/entity/MagicTypes.java b/src/main/java/org/caosdb/server/entity/MagicTypes.java
index 39556385235e6b72736bed8dff67a178cfe60aff..e132ddc00c2aeac2630c0aabfc5a93a07ce504dc 100644
--- a/src/main/java/org/caosdb/server/entity/MagicTypes.java
+++ b/src/main/java/org/caosdb/server/entity/MagicTypes.java
@@ -51,12 +51,12 @@ public enum MagicTypes {
   }
 
   public static MagicTypes getType(final EntityID id) {
-    switch (id.toInteger()) {
-      case 21:
+    switch (id.toString()) {
+      case "21":
         return UNIT;
-      case 20:
+      case "20":
         return NAME;
-      case 24:
+      case "24":
         return DESCRIPTION;
       default:
         return null;
diff --git a/src/main/java/org/caosdb/server/jobs/core/EntityIdHandler.java b/src/main/java/org/caosdb/server/jobs/core/EntityIdHandler.java
index d555bf95e2720e1e54b7fd23d95d01445846b457..bd4d4b807cfeb283a784cee1b62df6d259ff2332 100644
--- a/src/main/java/org/caosdb/server/jobs/core/EntityIdHandler.java
+++ b/src/main/java/org/caosdb/server/jobs/core/EntityIdHandler.java
@@ -18,7 +18,7 @@ public class EntityIdHandler extends EntityJob {
     if (entity instanceof InsertEntity
         && getTransaction() instanceof WriteTransactionInterface
         && entity.getEntityStatus() == EntityStatus.QUALIFIED) {
-      Integer id = ((WriteTransactionInterface) getTransaction()).generateId();
+      String id = ((WriteTransactionInterface) getTransaction()).generateId();
       entity.getId().setId(id);
     }
   }
diff --git a/src/main/java/org/caosdb/server/query/Query.java b/src/main/java/org/caosdb/server/query/Query.java
index 5966a135e1709bbcd20b5c2f7fefdce1a8f5019d..ad3fb778c67c1390973fab1d8ed6391a0f5b7317 100644
--- a/src/main/java/org/caosdb/server/query/Query.java
+++ b/src/main/java/org/caosdb/server/query/Query.java
@@ -424,7 +424,7 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac
       // Run thru all QTs found...
       for (final Entry<EntityID, String> q : queryTemplates.entrySet()) {
         // ... remove the QT from resultSet...
-        removeQTStmt.setInt(1, q.getKey().toInteger());
+        removeQTStmt.setString(1, q.getKey().toString());
         removeQTStmt.execute();
 
         // ... check for RETRIEVE:ENTITY permission...
diff --git a/src/main/java/org/caosdb/server/transaction/UpdateACL.java b/src/main/java/org/caosdb/server/transaction/UpdateACL.java
index 3da0b572b764936dcd94be0edad701d9775f2e20..289b5d53a14c642b4ac85bd9c02dd5c69484fa91 100644
--- a/src/main/java/org/caosdb/server/transaction/UpdateACL.java
+++ b/src/main/java/org/caosdb/server/transaction/UpdateACL.java
@@ -145,7 +145,7 @@ public class UpdateACL extends Transaction<TransactionContainer>
   }
 
   @Override
-  public Integer generateId() {
+  public String generateId() {
     throw new UnsupportedOperationException(
         "This is not implemented on purpose. This exception indicates a usage error of this UpdateACL class.");
   }
diff --git a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
index 0bc4f4e3f4fbc6e2c3892bf9209aa4adaf6822d2..87d299477119dcc20b6f730d1bb014b253a49497 100644
--- a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
+++ b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
@@ -597,7 +597,7 @@ public class WriteTransaction extends Transaction<WritableContainer>
   }
 
   @Override
-  public Integer generateId() {
+  public String generateId() {
     if (this.idRegistry == null) {
       this.idRegistry = new EntityIdRegistry(this);
     }
diff --git a/src/main/java/org/caosdb/server/transaction/WriteTransactionInterface.java b/src/main/java/org/caosdb/server/transaction/WriteTransactionInterface.java
index e635c0c581f4c00d5241f17304f777cf0ac5a420..c39d2c14a7dc625b1aa8bf0529feaeec2c4ca8b3 100644
--- a/src/main/java/org/caosdb/server/transaction/WriteTransactionInterface.java
+++ b/src/main/java/org/caosdb/server/transaction/WriteTransactionInterface.java
@@ -11,5 +11,5 @@ public interface WriteTransactionInterface extends TransactionInterface {
 
   public String getSRID();
 
-  public Integer generateId();
+  public String generateId();
 }
diff --git a/src/test/java/org/caosdb/server/database/backend/implementation/MySQL/InsertTest.java b/src/test/java/org/caosdb/server/database/backend/implementation/MySQL/InsertTest.java
index 03bd185c8884822f89f8ff323a1c32125b66f88b..94febb12a91bc4db8f8878bb5a670f856b17edf5 100644
--- a/src/test/java/org/caosdb/server/database/backend/implementation/MySQL/InsertTest.java
+++ b/src/test/java/org/caosdb/server/database/backend/implementation/MySQL/InsertTest.java
@@ -143,31 +143,31 @@ public class InsertTest {
 
     assertEquals(7, stage1Inserts.size());
     assertFalse(stage1Inserts.get(0) instanceof Replacement);
-    assertEquals(1, stage1Inserts.get(0).getId().toInteger());
+    assertEquals("1", stage1Inserts.get(0).getId().toString());
     assertEquals("V1", ((SingleValue) stage1Inserts.get(0).getValue()).toDatabaseString());
 
     assertFalse(stage1Inserts.get(1) instanceof Replacement);
-    assertEquals(2, stage1Inserts.get(1).getId().toInteger());
+    assertEquals("2", stage1Inserts.get(1).getId().toString());
     assertEquals("V2", ((SingleValue) stage1Inserts.get(1).getValue()).toDatabaseString());
 
     assertFalse(stage1Inserts.get(2) instanceof Replacement);
-    assertEquals(4, stage1Inserts.get(2).getId().toInteger());
+    assertEquals("4", stage1Inserts.get(2).getId().toString());
     assertEquals("V4", ((SingleValue) stage1Inserts.get(2).getValue()).toDatabaseString());
 
     assertTrue(stage1Inserts.get(3) instanceof Replacement);
-    assertEquals(-1, stage1Inserts.get(3).getId().toInteger());
+    assertEquals("-1", stage1Inserts.get(3).getId().toString());
     assertEquals("V5", ((SingleValue) stage1Inserts.get(3).getValue()).toDatabaseString());
 
     assertFalse(stage1Inserts.get(4) instanceof Replacement);
-    assertEquals(7, stage1Inserts.get(4).getId().toInteger());
+    assertEquals("7", stage1Inserts.get(4).getId().toString());
     assertEquals("V7", ((SingleValue) stage1Inserts.get(4).getValue()).toDatabaseString());
 
     assertTrue(stage1Inserts.get(5) instanceof Replacement);
-    assertEquals(-2, stage1Inserts.get(5).getId().toInteger());
+    assertEquals("-2", stage1Inserts.get(5).getId().toString());
     assertEquals("V8", ((SingleValue) stage1Inserts.get(5).getValue()).toDatabaseString());
 
     assertTrue(stage1Inserts.get(6) instanceof Replacement);
-    assertEquals(-3, stage1Inserts.get(6).getId().toInteger());
+    assertEquals("-3", stage1Inserts.get(6).getId().toString());
     assertEquals("V9", ((SingleValue) stage1Inserts.get(6).getValue()).toDatabaseString());
 
     assertEquals(6, stage2Inserts.size());
@@ -300,7 +300,7 @@ public class InsertTest {
 
     assertFalse(stage1Inserts.get(1) instanceof Replacement);
     assertEquals(new EntityID(-1), stage1Inserts.get(1).getId());
-    assertEquals(1, ((ReferenceValue) stage1Inserts.get(1).getValue()).getId().toInteger());
+    assertEquals("1", ((ReferenceValue) stage1Inserts.get(1).getValue()).getId().toString());
 
     assertFalse(stage1Inserts.get(2) instanceof Replacement);
     assertEquals(new EntityID(1), stage1Inserts.get(2).getId());
@@ -368,7 +368,7 @@ public class InsertTest {
 
     assertFalse(stage1Inserts.get(2) instanceof Replacement);
     assertEquals(new EntityID(-1), stage1Inserts.get(2).getId());
-    assertEquals(2, ((ReferenceValue) stage1Inserts.get(2).getValue()).getId().toInteger());
+    assertEquals("2", ((ReferenceValue) stage1Inserts.get(2).getValue()).getId().toString());
 
     assertFalse(stage1Inserts.get(3) instanceof Replacement);
     assertEquals(new EntityID(3), stage1Inserts.get(3).getId());