diff --git a/src/main/java/org/caosdb/server/database/BackendTransaction.java b/src/main/java/org/caosdb/server/database/BackendTransaction.java
index 3ab09fd1bd908a8a6e1545b94818b647d675cf04..270839af40d40668ca3079abcc3e09eb6caaf8ae 100644
--- a/src/main/java/org/caosdb/server/database/BackendTransaction.java
+++ b/src/main/java/org/caosdb/server/database/BackendTransaction.java
@@ -108,10 +108,10 @@ import org.caosdb.server.database.backend.interfaces.ListUsersImpl;
 import org.caosdb.server.database.backend.interfaces.LogUserVisitImpl;
 import org.caosdb.server.database.backend.interfaces.RetrieveAllImpl;
 import org.caosdb.server.database.backend.interfaces.RetrieveAllUncheckedFilesImpl;
+import org.caosdb.server.database.backend.interfaces.RetrieveCurrentMaxIdImpl;
 import org.caosdb.server.database.backend.interfaces.RetrieveDatatypesImpl;
 import org.caosdb.server.database.backend.interfaces.RetrieveEntityACLImpl;
 import org.caosdb.server.database.backend.interfaces.RetrieveLogRecordImpl;
-import org.caosdb.server.database.backend.interfaces.RetrieveCurrentMaxIdImpl;
 import org.caosdb.server.database.backend.interfaces.RetrieveParentsImpl;
 import org.caosdb.server.database.backend.interfaces.RetrievePasswordValidatorImpl;
 import org.caosdb.server.database.backend.interfaces.RetrievePermissionRulesImpl;
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 9b147d289b337f63dd359ce604719d9e00a149be..16d84002b50a2e7b5847eb98cac07a190d2994c3 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
@@ -37,7 +37,7 @@ public class MySQLGetFileRecordByPath extends MySQLTransaction implements GetFil
   }
 
   public static final String STMT_GET_ID_BY_PATH =
-      "SELECT file_id, size, hex(hash) AS file_hash, checked_timestamp FROM files WHERE path=?";
+      "SELECT (Select id from entity_ids WHERE internal_id = files.file_id) as entity_id, size, hex(hash) AS file_hash, checked_timestamp FROM files WHERE path=?";
 
   @Override
   public SparseEntity execute(final String path) throws TransactionException {
@@ -49,7 +49,7 @@ public class MySQLGetFileRecordByPath extends MySQLTransaction implements GetFil
       try {
         if (rs.next()) {
           final SparseEntity ret = new SparseEntity();
-          ret.id = rs.getInt("file_id");
+          ret.id = rs.getInt("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/MySQLGetUpdateableChecksums.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetUpdateableChecksums.java
index 28c55032e0ae6b6c2fcfb779339a72b96c703ba0..dd6c87760c18702b4e69dd5ec46996f0dbd15a63 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetUpdateableChecksums.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLGetUpdateableChecksums.java
@@ -34,7 +34,7 @@ public class MySQLGetUpdateableChecksums extends MySQLTransaction
     implements GetUpdateableChecksumsImpl {
 
   private final String GET_UPDATEABLE_CHECKSUMS =
-      "SELECT file_id FROM files WHERE hash IS NULL LIMIT 1";
+      "SELECT (SELECT id FROM entity_ids WHERE internal_id = files.file_id) AS entity_id FROM files WHERE hash IS NULL LIMIT 1";
 
   public MySQLGetUpdateableChecksums(final Access access) {
     super(access);
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 51ecddc7eab98ac704e7b0e0fcf3723c19cf28bf..62237d3e9f4731878ff6b4c1439f4a3b188e74e1 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
@@ -38,7 +38,7 @@ public class MySQLInsertSparseEntity extends MySQLTransaction implements InsertS
     super(access);
   }
 
-  public static final String STMT_INSERT_SPARSE_ENTITY = "call insertEntity(?,?,?,?)";
+  public static final String STMT_INSERT_SPARSE_ENTITY = "call insertEntity(?,?,?,?,?)";
   public static final String STMT_INSERT_FILE_PROPERTIES = "call insertFile(?, ?, ?, ?)";
 
   @Override
@@ -57,7 +57,7 @@ public class MySQLInsertSparseEntity extends MySQLTransaction implements InsertS
         if (rs.next()) {
           entity.versionId = DatabaseUtils.bytes2UTF8(rs.getBytes("Version"));
         } else {
-          throw new TransactionException("Didn't get new EntityID back.");
+          throw new TransactionException("Didn't get the version id back.");
         }
       }
 
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveCurrentMaxId.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveCurrentMaxId.java
index ff4e917584694c4dc733cfdcd5f9bd7cc8335a02..18cf01f159d10aac470bdeb919df185b09d6c7fa 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveCurrentMaxId.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveCurrentMaxId.java
@@ -3,37 +3,34 @@ package org.caosdb.server.database.backend.implementation.MySQL;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
-
 import org.caosdb.server.database.access.Access;
 import org.caosdb.server.database.backend.interfaces.RetrieveCurrentMaxIdImpl;
 import org.caosdb.server.database.exceptions.TransactionException;
 
-public class MySQLRetrieveCurrentMaxId extends MySQLTransaction implements RetrieveCurrentMaxIdImpl {
+public class MySQLRetrieveCurrentMaxId extends MySQLTransaction
+    implements RetrieveCurrentMaxIdImpl {
 
-	public MySQLRetrieveCurrentMaxId(Access access) {
-		super(access);
-	}
-	
-	public static final String STMT = "SELECT max(entity_id) AS max_id FROM transaction_log";
+  public MySQLRetrieveCurrentMaxId(Access access) {
+    super(access);
+  }
 
-	@Override
-	public Integer execute() {
-try {
-	try (
-			PreparedStatement stmt = prepareStatement(STMT)
-			) {		
-	
-	try (ResultSet rs = stmt.executeQuery()) {
-		if(rs.next()) {
-			return rs.getInt("max_id");
-		} else {
-			return 100;
-		}
-	}
-	}
-} catch (SQLException | ConnectionException e) {
-throw new TransactionException(e);
-}
-	}
+  public static final String STMT = "SELECT max(entity_id) AS max_id FROM transaction_log";
+
+  @Override
+  public Integer execute() {
+    try {
+      try (PreparedStatement stmt = prepareStatement(STMT)) {
 
+        try (ResultSet rs = stmt.executeQuery()) {
+          if (rs.next()) {
+            return rs.getInt("max_id");
+          } else {
+            return 100;
+          }
+        }
+      }
+    } catch (SQLException | ConnectionException e) {
+      throw new TransactionException(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 fb6d4188c835fbc895ed4d5e427bb1b2bbc0bb4c..c9b51f7ada8aa9a9ee90a6505c85ff55e8ef4141 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
@@ -19,7 +19,7 @@ public class MySQLSetFileChecksum extends MySQLTransaction implements SetFileChe
   }
 
   public static final String STMT_SET_CHECKSUM =
-      "UPDATE files SET hash = unhex(?) WHERE file_id = ?";
+      "UPDATE files SET hash = unhex(?) WHERE EXISTS (SELECT 1 FROM entity_ids AS eids WHERE eids.id = ? AND eids.internal_id = files.file_id)";
 
   @Override
   public void execute(final EntityID id, final String checksum) {
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 f3ded949383c7d250d4ad58e6ae964aa9f96324c..02ebdd361d7293bafa2f61aa7557bfb180e0dd8f 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
@@ -37,7 +37,7 @@ public class MySQLSetQueryTemplateDefinition extends MySQLTransaction
   }
 
   public static final String STMT_INSERT_QUERY_TEMPLATE_DEF =
-      "INSERT INTO query_template_def (id, definition) VALUES (?,?) ON DUPLICATE KEY UPDATE definition=?;";
+      "INSERT INTO query_template_def (id, definition) VALUES ((SELECT internal_id FROM entity_ids WHERE entity_ids.id = ?),?) ON DUPLICATE KEY UPDATE definition=?;";
 
   @Override
   public void insert(final EntityID id, final String definition) {
diff --git a/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveCurrentMaxIdImpl.java b/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveCurrentMaxIdImpl.java
index 6d7b2d3ff03a69c54f924f5d1b3c4c1a482ba73e..2a3ce327bef98501c53fae26ce053071cb5a3f99 100644
--- a/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveCurrentMaxIdImpl.java
+++ b/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveCurrentMaxIdImpl.java
@@ -2,6 +2,5 @@ package org.caosdb.server.database.backend.interfaces;
 
 public interface RetrieveCurrentMaxIdImpl extends BackendTransactionImpl {
 
-	public Integer execute();
-
+  public Integer execute();
 }
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveCurrentMaxId.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveCurrentMaxId.java
index 0efc4f8c7b3d3babd79afa012f17e573ca9bb734..a3b9f6d96eddf4583e60a329dec971830dcee72a 100644
--- a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveCurrentMaxId.java
+++ b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveCurrentMaxId.java
@@ -5,16 +5,15 @@ import org.caosdb.server.database.backend.interfaces.RetrieveCurrentMaxIdImpl;
 
 public class RetrieveCurrentMaxId extends BackendTransaction {
 
-	private Integer maxId;
+  private Integer maxId;
 
-	@Override
-	protected void execute() {
-		RetrieveCurrentMaxIdImpl t = getImplementation(RetrieveCurrentMaxIdImpl.class);
-		this.maxId = t.execute();
-	}
-
-	public Integer getCurrentMaxId() {
-		return this.maxId;
-	}
+  @Override
+  protected void execute() {
+    RetrieveCurrentMaxIdImpl t = getImplementation(RetrieveCurrentMaxIdImpl.class);
+    this.maxId = t.execute();
+  }
 
+  public Integer getCurrentMaxId() {
+    return this.maxId;
+  }
 }
diff --git a/src/main/java/org/caosdb/server/entity/Entity.java b/src/main/java/org/caosdb/server/entity/Entity.java
index 614397c50526606176fc50b06e2f07e76cbfb9ff..f271e627d46ab61d027a7bbe9094611864506689 100644
--- a/src/main/java/org/caosdb/server/entity/Entity.java
+++ b/src/main/java/org/caosdb/server/entity/Entity.java
@@ -647,7 +647,7 @@ 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 {
-        setId(new EntityID(Integer.parseInt(element.getAttributeValue("id"))));
+        this.getId().setId(Integer.parseInt(element.getAttributeValue("id")));
       } catch (final NumberFormatException e) {
         addInfo("Id was " + element.getAttributeValue("id") + ".");
         addError(ServerMessages.PARSING_FAILED);
@@ -727,6 +727,9 @@ public abstract class Entity extends AbstractObservable implements EntityInterfa
         // record.
 
         final Property property = new Property(new WritableEntity(pe, Role.Property));
+
+        // Ignore parents of properties
+        property.getParents().clear();
         property.setPIdx(pidx++);
         addProperty(property);
       } else if (pe.getName().equalsIgnoreCase("Parent")) {
diff --git a/src/main/java/org/caosdb/server/entity/EntityID.java b/src/main/java/org/caosdb/server/entity/EntityID.java
index a8867152d9914cb5b9414f018fee91eabdd8c920..6a2d2ca368088e54c2f3c77ae669c6feda07bb4e 100644
--- a/src/main/java/org/caosdb/server/entity/EntityID.java
+++ b/src/main/java/org/caosdb/server/entity/EntityID.java
@@ -77,5 +77,4 @@ public class EntityID implements Serializable {
   public static boolean isReserved(final EntityID id) {
     return id.toInteger() < 100;
   }
-
 }
diff --git a/src/main/java/org/caosdb/server/entity/EntityIdRegistry.java b/src/main/java/org/caosdb/server/entity/EntityIdRegistry.java
index b3b99498dcb8bb324aa80728d22ded5b2a8972a4..ba0e8dc9e413a2487d839bdf6c65302c0f8b351c 100644
--- a/src/main/java/org/caosdb/server/entity/EntityIdRegistry.java
+++ b/src/main/java/org/caosdb/server/entity/EntityIdRegistry.java
@@ -1,53 +1,47 @@
-
 package org.caosdb.server.entity;
 
 import org.caosdb.server.database.backend.transaction.RetrieveCurrentMaxId;
 import org.caosdb.server.transaction.Transaction;
 
 /**
- * <p>
  * Aufgaben:
  *
  * <ul>
- * <li>Ids generieren
- * <ul>
- * <li>Pattern (positive Integer, uuid)
- * </ul>
- * <li>
+ *   <li>Ids generieren
+ *       <ul>
+ *         <li>Pattern (positive Integer, uuid)
+ *       </ul>
+ *   <li>
  * </ul>
  *
  * @author tf
  */
-
 public class EntityIdRegistry {
-	
-	private boolean isInit;
-	private Integer currentMaxId;
-	private Transaction<?> transaction;
-
-	public EntityIdRegistry(Transaction<?> t) {
-		this.transaction = t;
-		this.isInit = false;
-	}
-	
-	public void init() {
-		isInit = true;
-		initCurrentMaxId();
-	}
-
-	private void initCurrentMaxId() {
-		this.currentMaxId = transaction.execute(new RetrieveCurrentMaxId(), transaction.getAccess()).getCurrentMaxId();
-	}
-
-	public Integer generate() {
-		if(!isInit) {
-			init();
-		}
-		return ++currentMaxId;
-	}
-
 
-	public boolean isUnused(Integer i) { 
-		return i>currentMaxId;
- }
+  private boolean isInit;
+  private Integer currentMaxId;
+  private Transaction<?> transaction;
+
+  public EntityIdRegistry(Transaction<?> t) {
+    this.transaction = t;
+    this.isInit = false;
+  }
+
+  public void init() {
+    isInit = true;
+    initCurrentMaxId();
+  }
+
+  private void initCurrentMaxId() {
+    this.currentMaxId =
+        transaction.execute(new RetrieveCurrentMaxId(), transaction.getAccess()).getCurrentMaxId();
+  }
+
+  public Integer generate() {
+    if (!isInit) {
+      init();
+    }
+    ++currentMaxId;
+    return ++currentMaxId;
+  }
 }
diff --git a/src/main/java/org/caosdb/server/entity/container/TransactionContainer.java b/src/main/java/org/caosdb/server/entity/container/TransactionContainer.java
index 47a0452b9382223795e63b965a676e140e35245b..3e5ec4d55f086061e2d0766c9f700ef61fbe809f 100644
--- a/src/main/java/org/caosdb/server/entity/container/TransactionContainer.java
+++ b/src/main/java/org/caosdb/server/entity/container/TransactionContainer.java
@@ -122,7 +122,7 @@ public class TransactionContainer extends Container<EntityInterface>
 
   private TransactionBenchmark benchmark;
   private Query query;
-private Integer currentMaxId =null;
+  private Integer currentMaxId = null;
 
   public void setFiles(final HashMap<String, FileProperties> files) {
     this.files = files;
@@ -194,6 +194,4 @@ private Integer currentMaxId =null;
   public Query getQuery() {
     return query;
   }
-
-
 }
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 e8740107926072e4938658eb13c118727914a405..d555bf95e2720e1e54b7fd23d95d01445846b457 100644
--- a/src/main/java/org/caosdb/server/jobs/core/EntityIdHandler.java
+++ b/src/main/java/org/caosdb/server/jobs/core/EntityIdHandler.java
@@ -1,4 +1,3 @@
-
 package org.caosdb.server.jobs.core;
 
 import org.caosdb.server.entity.EntityInterface;
@@ -8,17 +7,19 @@ import org.caosdb.server.jobs.EntityJob;
 import org.caosdb.server.jobs.JobAnnotation;
 import org.caosdb.server.jobs.TransactionStage;
 import org.caosdb.server.transaction.WriteTransactionInterface;
+import org.caosdb.server.utils.EntityStatus;
 
 @JobAnnotation(stage = TransactionStage.PRE_TRANSACTION)
 public class EntityIdHandler extends EntityJob {
 
-	@Override
-	protected void run() throws Message {
-		EntityInterface entity = getEntity();
-		if(entity instanceof InsertEntity && getTransaction() instanceof WriteTransactionInterface) {
-			Integer id = ((WriteTransactionInterface) getTransaction()).generateId();
-			entity.getId().setId(id);
-		}
-	}
+  @Override
+  protected void run() throws Message {
+    EntityInterface entity = getEntity();
+    if (entity instanceof InsertEntity
+        && getTransaction() instanceof WriteTransactionInterface
+        && entity.getEntityStatus() == EntityStatus.QUALIFIED) {
+      Integer id = ((WriteTransactionInterface) getTransaction()).generateId();
+      entity.getId().setId(id);
+    }
+  }
 }
-
diff --git a/src/main/java/org/caosdb/server/jobs/core/ProcessNameProperties.java b/src/main/java/org/caosdb/server/jobs/core/ProcessNameProperties.java
index 7196f04edc99cf1269603e820975a96703639965..cbcf738ee99716f58e2ca9a9526497e7b9113029 100644
--- a/src/main/java/org/caosdb/server/jobs/core/ProcessNameProperties.java
+++ b/src/main/java/org/caosdb/server/jobs/core/ProcessNameProperties.java
@@ -24,9 +24,9 @@ package org.caosdb.server.jobs.core;
 
 import static org.caosdb.server.entity.MagicTypes.NAME;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.LinkedList;
 import java.util.Set;
 import org.caosdb.server.datatype.AbstractDatatype;
 import org.caosdb.server.entity.EntityID;
@@ -133,19 +133,19 @@ public class ProcessNameProperties extends EntityJob {
   }
 
   private Collection<Object> getNearestValidParents(final Property prop) {
-    if (prop.hasId() && !prop.getId().isTemporary()) {
-      final ArrayList<Object> ret = new ArrayList<Object>();
-      if (prop.hasParents()) {
-        for (final Parent par : prop.getParents()) {
+    if (prop.hasParents()) {
+      final Collection<Object> ret = new LinkedList<Object>();
+      for (final Parent par : prop.getParents()) {
+        if (par.hasId()) {
           ret.add(par.getId());
         }
-      } else {
-        ret.add(prop.getId());
       }
       return ret;
     } else if (prop.hasId()) {
-      // property is new -> get valid parents of any depth
-      final EntityInterface propertyEntity = getEntityById(prop.getId());
+      EntityInterface propertyEntity = getEntityById(prop.getId());
+      if (propertyEntity == null) {
+        propertyEntity = retrieveValidEntity(prop.getId());
+      }
       if (propertyEntity != null) {
         return getNearestValidParents(propertyEntity);
       }
diff --git a/src/main/java/org/caosdb/server/query/Query.java b/src/main/java/org/caosdb/server/query/Query.java
index a437c7146017acd43fc104826303afabb3a69330..5966a135e1709bbcd20b5c2f7fefdce1a8f5019d 100644
--- a/src/main/java/org/caosdb/server/query/Query.java
+++ b/src/main/java/org/caosdb/server/query/Query.java
@@ -412,7 +412,14 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac
       final Map<EntityID, String> queryTemplates = getQueryTemplates(query, resultSet);
 
       final PreparedStatement removeQTStmt =
-          query.getConnection().prepareStatement("DELETE FROM `" + resultSet + "` WHERE id=?");
+          query
+              .getConnection()
+              .prepareStatement(
+                  "DELETE FROM `"
+                      + resultSet
+                      + "` WHERE EXISTS (SELECT 1 FROM entity_ids AS eids WHERE eids.id=? AND eids.internal_id=`"
+                      + resultSet
+                      + "`.id)");
 
       // Run thru all QTs found...
       for (final Entry<EntityID, String> q : queryTemplates.entrySet()) {
@@ -468,7 +475,7 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac
           query
               .getConnection()
               .prepareCall(
-                  "SELECT q.id, q.definition FROM query_template_def AS q INNER JOIN `"
+                  "SELECT (SELECT eids.id FROM entity_ids AS eids WHERE eids.internal_id = q.id) as id, q.definition FROM query_template_def AS q INNER JOIN `"
                       + resultSet
                       + "` AS r ON (r.id=q.id);");
       rs = stmt.executeQuery();
@@ -645,15 +652,16 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac
   private String generateSelectStatementForResultSet(
       final String resultSetTableName, final boolean versioned) {
     if (resultSetTableName.equals("entity_ids")) {
+      // TODO remove "DOMAIN"
       final String baseStatement =
-          "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'";
+          "SELECT entities.id AS internal_id, (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 + ";";
       }
       // if versioned, the statement is surrounded with another SELECT and JOIN
       return ("SELECT id, acl, version FROM ("
           + baseStatement
-          + ") AS tmp JOIN entity_version ON entity_version.entity_id=tmp.id;");
+          + ") AS tmp JOIN entity_version ON entity_version.entity_id=tmp.internal_id;");
     } else {
       if (!versioned) {
         return (" SELECT (SELECT id FROM entity_ids WHERE internal_id = tmp.id) AS id, entity_acl.acl FROM "
diff --git a/src/main/java/org/caosdb/server/transaction/UpdateACL.java b/src/main/java/org/caosdb/server/transaction/UpdateACL.java
index 89640addc023ea93bb1b09b8fce3b5423f96b29c..3da0b572b764936dcd94be0edad701d9775f2e20 100644
--- a/src/main/java/org/caosdb/server/transaction/UpdateACL.java
+++ b/src/main/java/org/caosdb/server/transaction/UpdateACL.java
@@ -143,9 +143,10 @@ public class UpdateACL extends Transaction<TransactionContainer>
   public String getSRID() {
     return getContainer().getRequestId();
   }
-  
+
   @Override
-	public Integer generateId() {
-		throw new UnsupportedOperationException("This is not implemented on purpose. This exception indicates a usage error of this UpdateACL class.");
-	}
+  public Integer 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 b1b1153aa380ef04517d47739377d87e2f943697..0bc4f4e3f4fbc6e2c3892bf9209aa4adaf6822d2 100644
--- a/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
+++ b/src/main/java/org/caosdb/server/transaction/WriteTransaction.java
@@ -74,7 +74,7 @@ public class WriteTransaction extends Transaction<WritableContainer>
     implements WriteTransactionInterface {
 
   private boolean noIdIsError = true;
-private EntityIdRegistry idRegistry;
+  private EntityIdRegistry idRegistry;
 
   public WriteTransaction(final WritableContainer container) {
     super(container);
@@ -596,12 +596,12 @@ private EntityIdRegistry idRegistry;
     return getContainer().getRequestId();
   }
 
-@Override
-public Integer generateId() {
-	if (this.idRegistry == null) {
-		this.idRegistry = new EntityIdRegistry(getAccess());
-	}
+  @Override
+  public Integer generateId() {
+    if (this.idRegistry == null) {
+      this.idRegistry = new EntityIdRegistry(this);
+    }
 
-	return this.idRegistry.generate();
-}
+    return this.idRegistry.generate();
+  }
 }
diff --git a/src/main/java/org/caosdb/server/transaction/WriteTransactionInterface.java b/src/main/java/org/caosdb/server/transaction/WriteTransactionInterface.java
index ccc6a83bbadd695a94a8f24cba52098542e33c50..e635c0c581f4c00d5241f17304f777cf0ac5a420 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 Integer generateId();
 }