diff --git a/src/main/java/caosdb/server/ServerProperties.java b/src/main/java/caosdb/server/ServerProperties.java
index 65eff4ffbde6a2b73d7aaf4f9ea7407990b3c8b9..a4f93ec1c1207e21b0d282974fbf23c1a028053e 100644
--- a/src/main/java/caosdb/server/ServerProperties.java
+++ b/src/main/java/caosdb/server/ServerProperties.java
@@ -145,7 +145,7 @@ public class ServerProperties extends Properties {
     serverProperties.setProperty(KEY_MYSQL_USER_NAME, "CaosDB");
     serverProperties.setProperty(KEY_MYSQL_USER_PASSWORD, "CaosDB");
 
-    serverProperties.setProperty(KEY_MYSQL_SCHEMA_VERSION, "v2.0.31");
+    serverProperties.setProperty(KEY_MYSQL_SCHEMA_VERSION, "v2.1.0");
 
     serverProperties.setProperty(KEY_BASE_PATH, basepath);
     serverProperties.setProperty(KEY_CONTEXT_ROOT, "");
diff --git a/src/main/java/caosdb/server/accessControl/AnonymousAuthenticationToken.java b/src/main/java/caosdb/server/accessControl/AnonymousAuthenticationToken.java
index a7d9338223a2b4b03a5f2ac761e14891122c0bca..cd3f86f61eb66759b3eb7d0c91c29dc23637000b 100644
--- a/src/main/java/caosdb/server/accessControl/AnonymousAuthenticationToken.java
+++ b/src/main/java/caosdb/server/accessControl/AnonymousAuthenticationToken.java
@@ -1,3 +1,25 @@
+/*
+ * ** header v3.0
+ * This file is a part of the CaosDB Project.
+ *
+ * Copyright (C) 2018 Research Group Biomedical Physics,
+ * Max-Planck-Institute for Dynamics and Self-Organization Göttingen
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * ** end header
+ */
 package caosdb.server.accessControl;
 
 import org.apache.shiro.authc.AuthenticationToken;
diff --git a/src/main/java/caosdb/server/accessControl/AnonymousRealm.java b/src/main/java/caosdb/server/accessControl/AnonymousRealm.java
index a2ddab00ae9b80df1b9ff7dc4dc5310c3cad6078..831d45a727c95277c9d64624e136b2a2e120b3b4 100644
--- a/src/main/java/caosdb/server/accessControl/AnonymousRealm.java
+++ b/src/main/java/caosdb/server/accessControl/AnonymousRealm.java
@@ -1,3 +1,25 @@
+/*
+ * ** header v3.0
+ * This file is a part of the CaosDB Project.
+ *
+ * Copyright (C) 2018 Research Group Biomedical Physics,
+ * Max-Planck-Institute for Dynamics and Self-Organization Göttingen
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * ** end header
+ */
 package caosdb.server.accessControl;
 
 import org.apache.shiro.authc.AuthenticationInfo;
diff --git a/src/main/java/caosdb/server/database/BackendTransaction.java b/src/main/java/caosdb/server/database/BackendTransaction.java
index a551d5b184ef9c35045697f6f36196665cf648c0..1d5d5c2e68274e664c392a24a901aa4bcd65623b 100644
--- a/src/main/java/caosdb/server/database/BackendTransaction.java
+++ b/src/main/java/caosdb/server/database/BackendTransaction.java
@@ -34,6 +34,7 @@ import caosdb.server.database.backend.implementation.MySQL.MySQLGetFileRecordByP
 import caosdb.server.database.backend.implementation.MySQL.MySQLGetIDByName;
 import caosdb.server.database.backend.implementation.MySQL.MySQLGetInfo;
 import caosdb.server.database.backend.implementation.MySQL.MySQLGetUpdateableChecksums;
+import caosdb.server.database.backend.implementation.MySQL.MySQLInsertEntityDatatype;
 import caosdb.server.database.backend.implementation.MySQL.MySQLInsertEntityProperties;
 import caosdb.server.database.backend.implementation.MySQL.MySQLInsertLinCon;
 import caosdb.server.database.backend.implementation.MySQL.MySQLInsertLogRecord;
@@ -87,6 +88,7 @@ import caosdb.server.database.backend.interfaces.GetFileRecordByPathImpl;
 import caosdb.server.database.backend.interfaces.GetIDByNameImpl;
 import caosdb.server.database.backend.interfaces.GetInfoImpl;
 import caosdb.server.database.backend.interfaces.GetUpdateableChecksumsImpl;
+import caosdb.server.database.backend.interfaces.InsertEntityDatatypeImpl;
 import caosdb.server.database.backend.interfaces.InsertEntityPropertiesImpl;
 import caosdb.server.database.backend.interfaces.InsertLinConImpl;
 import caosdb.server.database.backend.interfaces.InsertLogRecordImpl;
@@ -131,13 +133,11 @@ public abstract class BackendTransaction implements Undoable {
   BackendTransaction parent = null;
   private static HashMap<
           Class<? extends BackendTransactionImpl>, Class<? extends BackendTransactionImpl>>
-      impl =
-          new HashMap<
-              Class<? extends BackendTransactionImpl>, Class<? extends BackendTransactionImpl>>();
+      impl = new HashMap<>();
 
-  protected abstract void execute() throws TransactionException;
+  protected abstract void execute();
 
-  final void executeTransaction() throws TransactionException {
+  final void executeTransaction() {
     final long t1 = System.currentTimeMillis();
     execute();
     final long t2 = System.currentTimeMillis();
@@ -194,10 +194,11 @@ public abstract class BackendTransaction implements Undoable {
       setImpl(SetQueryTemplateDefinitionImpl.class, MySQLSetQueryTemplateDefinition.class);
       setImpl(
           RetrieveQueryTemplateDefinitionImpl.class, MySQLRetrieveQueryTemplateDefinition.class);
+      setImpl(InsertEntityDatatypeImpl.class, MySQLInsertEntityDatatype.class);
     }
   }
 
-  protected <K extends BackendTransaction> K execute(final K t) throws TransactionException {
+  protected <K extends BackendTransaction> K execute(final K t) {
     assert t != this;
     this.undoHandler.append(t);
     t.setAccess(this.access);
@@ -219,8 +220,7 @@ public abstract class BackendTransaction implements Undoable {
   }
 
   @SuppressWarnings("unchecked")
-  protected <T extends BackendTransactionImpl> T getImplementation(final Class<T> clz)
-      throws TransactionException {
+  protected <T extends BackendTransactionImpl> T getImplementation(final Class<T> clz) {
     init();
     try {
       final T ret = (T) impl.get(clz).getConstructor(Access.class).newInstance(this.access);
diff --git a/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityDatatype.java b/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityDatatype.java
new file mode 100644
index 0000000000000000000000000000000000000000..a2682e80b1997b53496e3ac2f8e6147726fb77c9
--- /dev/null
+++ b/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLInsertEntityDatatype.java
@@ -0,0 +1,52 @@
+package caosdb.server.database.backend.implementation.MySQL;
+
+import caosdb.server.database.access.Access;
+import caosdb.server.database.backend.interfaces.InsertEntityDatatypeImpl;
+import caosdb.server.database.exceptions.IntegrityException;
+import caosdb.server.database.exceptions.TransactionException;
+import caosdb.server.database.proto.SparseEntity;
+import java.sql.PreparedStatement;
+import java.sql.SQLIntegrityConstraintViolationException;
+
+public class MySQLInsertEntityDatatype extends MySQLTransaction
+    implements InsertEntityDatatypeImpl {
+
+  public MySQLInsertEntityDatatype(Access access) {
+    super(access);
+  }
+
+  public static final String STMT_INSERT_ENTITY_DATATYPE =
+      "INSERT INTO data_type (domain_id, entity_id, property_id, datatype) SELECT 0, 0, ?, ( SELECT id from entities where name = ? LIMIT 1);";
+  public static final String STMT_INSERT_ENTITY_COLLECTION =
+      "INSERT INTO collection_type (domain_id, entity_id, property_id, collection) SELECT 0, 0, ?, ?;";
+
+  @Override
+  public void execute(final SparseEntity entity) {
+    try {
+      final PreparedStatement insertEntityDatatypeStmt =
+          prepareStatement(STMT_INSERT_ENTITY_DATATYPE);
+
+      insertEntityDatatypeStmt.setInt(1, entity.id);
+      insertEntityDatatypeStmt.setString(2, entity.datatype);
+
+      insertEntityDatatypeStmt.execute();
+
+      if (entity.collection != null) {
+        final PreparedStatement insertEntityCollectionStmt =
+            prepareStatement(STMT_INSERT_ENTITY_COLLECTION);
+
+        insertEntityCollectionStmt.setInt(1, entity.id);
+        insertEntityCollectionStmt.setString(2, entity.collection);
+
+        insertEntityCollectionStmt.execute();
+      }
+
+    } catch (final SQLIntegrityConstraintViolationException exc) {
+      throw new IntegrityException(exc);
+    } catch (final TransactionException exc) {
+      throw exc;
+    } catch (final Exception exc) {
+      throw new TransactionException(exc);
+    }
+  }
+}
diff --git a/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java b/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java
index dbe3893945ae09cadfda0657f9d22d02bd6a9371..4ad9f5b6a3cc3e51c05bc83bbc9332807b79484d 100644
--- a/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java
+++ b/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLInsertSparseEntity.java
@@ -38,12 +38,12 @@ 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 =
       "INSERT INTO files (file_id, hash, size, path) VALUES (?, unhex(?), ?, ?);";
 
   @Override
-  public void execute(final SparseEntity entity) throws TransactionException {
+  public void execute(final SparseEntity entity) {
     try {
       final PreparedStatement insertEntityStmt = prepareStatement(STMT_INSERT_SPARSE_ENTITY);
       final PreparedStatement insertFilePropsStmt = prepareStatement(STMT_INSERT_FILE_PROPERTIES);
@@ -51,15 +51,14 @@ public class MySQLInsertSparseEntity extends MySQLTransaction implements InsertS
       insertEntityStmt.setString(1, entity.name);
       insertEntityStmt.setString(2, entity.description);
       insertEntityStmt.setString(3, entity.role);
-      insertEntityStmt.setString(4, entity.datatype);
-      insertEntityStmt.setString(5, entity.collection);
-      insertEntityStmt.setString(6, entity.acl);
+      insertEntityStmt.setString(4, entity.acl);
 
-      final ResultSet rs = insertEntityStmt.executeQuery();
-      if (rs.next()) {
-        entity.id = rs.getInt("EntityID");
-      } else {
-        throw new TransactionException("Didn't get new EntityID back.");
+      try (final ResultSet rs = insertEntityStmt.executeQuery()) {
+        if (rs.next()) {
+          entity.id = rs.getInt("EntityID");
+        } else {
+          throw new TransactionException("Didn't get new EntityID back.");
+        }
       }
 
       if (entity.filePath != null) {
diff --git a/src/main/java/caosdb/server/database/backend/interfaces/InsertEntityDatatypeImpl.java b/src/main/java/caosdb/server/database/backend/interfaces/InsertEntityDatatypeImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..2f6f7c859281344997e1c781e9a56aafa5d03fc4
--- /dev/null
+++ b/src/main/java/caosdb/server/database/backend/interfaces/InsertEntityDatatypeImpl.java
@@ -0,0 +1,8 @@
+package caosdb.server.database.backend.interfaces;
+
+import caosdb.server.database.proto.SparseEntity;
+import caosdb.server.utils.Undoable;
+
+public interface InsertEntityDatatypeImpl extends BackendTransactionImpl, Undoable {
+  public abstract void execute(SparseEntity entity);
+}
diff --git a/src/main/java/caosdb/server/database/backend/interfaces/InsertSparseEntityImpl.java b/src/main/java/caosdb/server/database/backend/interfaces/InsertSparseEntityImpl.java
index 7ba147058b8c4675d58b66a5c11b7dd66311cabf..8ad9a9f7ac0608c4e1e51ba4783a985d0e20d985 100644
--- a/src/main/java/caosdb/server/database/backend/interfaces/InsertSparseEntityImpl.java
+++ b/src/main/java/caosdb/server/database/backend/interfaces/InsertSparseEntityImpl.java
@@ -22,11 +22,10 @@
  */
 package caosdb.server.database.backend.interfaces;
 
-import caosdb.server.database.exceptions.TransactionException;
 import caosdb.server.database.proto.SparseEntity;
 import caosdb.server.utils.Undoable;
 
 public interface InsertSparseEntityImpl extends BackendTransactionImpl, Undoable {
 
-  public abstract void execute(SparseEntity entity) throws TransactionException;
+  public abstract void execute(SparseEntity entity);
 }
diff --git a/src/main/java/caosdb/server/database/backend/transaction/InsertEntity.java b/src/main/java/caosdb/server/database/backend/transaction/InsertEntity.java
index 65611a4193e8bb494666fb91c3a07a59b4aabd99..e258504908b44c8054a56315fa26e8dacae8b023 100644
--- a/src/main/java/caosdb/server/database/backend/transaction/InsertEntity.java
+++ b/src/main/java/caosdb/server/database/backend/transaction/InsertEntity.java
@@ -23,7 +23,6 @@
 package caosdb.server.database.backend.transaction;
 
 import caosdb.server.database.BackendTransaction;
-import caosdb.server.database.exceptions.TransactionException;
 import caosdb.server.entity.EntityInterface;
 import caosdb.server.entity.container.TransactionContainer;
 import caosdb.server.utils.EntityStatus;
@@ -37,12 +36,17 @@ public class InsertEntity extends BackendTransaction {
   }
 
   @Override
-  public void execute() throws TransactionException {
+  public void execute() {
     for (final EntityInterface newEntity : this.container) {
       if (newEntity.getEntityStatus() == EntityStatus.QUALIFIED) {
         execute(new InsertSparseEntity(newEntity));
       }
     }
+    for (final EntityInterface newEntity : this.container) {
+      if (newEntity.getEntityStatus() == EntityStatus.QUALIFIED && newEntity.hasDatatype()) {
+        execute(new InsertEntityDatatype(newEntity));
+      }
+    }
     for (final EntityInterface newEntity : this.container) {
       if (newEntity.getEntityStatus() == EntityStatus.QUALIFIED) {
         if (newEntity.getQueryTemplateDefinition() != null) {
@@ -51,7 +55,6 @@ public class InsertEntity extends BackendTransaction {
         if (newEntity.hasFileProperties()) {
           execute(new InsertFile(newEntity));
         }
-        // execute(new InsertEntityValue(newEntity));
         execute(new InsertEntityProperties(newEntity));
         execute(new InsertParents(newEntity));
 
diff --git a/src/main/java/caosdb/server/database/backend/transaction/InsertEntityDatatype.java b/src/main/java/caosdb/server/database/backend/transaction/InsertEntityDatatype.java
new file mode 100644
index 0000000000000000000000000000000000000000..39c46583cc277eb81128d9fae22d97e296d8bbc1
--- /dev/null
+++ b/src/main/java/caosdb/server/database/backend/transaction/InsertEntityDatatype.java
@@ -0,0 +1,36 @@
+package caosdb.server.database.backend.transaction;
+
+import static caosdb.server.transaction.Transaction.ERROR_INTEGRITY_VIOLATION;
+
+import caosdb.server.database.BackendTransaction;
+import caosdb.server.database.backend.interfaces.InsertEntityDatatypeImpl;
+import caosdb.server.database.exceptions.IntegrityException;
+import caosdb.server.database.proto.SparseEntity;
+import caosdb.server.entity.EntityInterface;
+import caosdb.server.utils.EntityStatus;
+
+public class InsertEntityDatatype extends BackendTransaction {
+
+  private final EntityInterface entity;
+
+  public InsertEntityDatatype(final EntityInterface entity) {
+    this.entity = entity;
+  }
+
+  @Override
+  public void execute() {
+    final InsertEntityDatatypeImpl t = getImplementation(InsertEntityDatatypeImpl.class);
+
+    final SparseEntity e = this.entity.getSparseEntity();
+
+    try {
+      t.execute(e);
+    } catch (final IntegrityException exc) {
+      this.entity.addError(ERROR_INTEGRITY_VIOLATION);
+      this.entity.setEntityStatus(EntityStatus.CORRUPT);
+      throw exc;
+    }
+
+    this.entity.setId(e.id);
+  }
+}
diff --git a/src/main/java/caosdb/server/scripting/CallerSerializer.java b/src/main/java/caosdb/server/scripting/CallerSerializer.java
index 1bd265650bed0d5de865cc91b29db3327b56174b..1ab96ca0ab1a3f2dfefa14175d8423fea9bd4109 100644
--- a/src/main/java/caosdb/server/scripting/CallerSerializer.java
+++ b/src/main/java/caosdb/server/scripting/CallerSerializer.java
@@ -1,3 +1,25 @@
+/*
+ * ** header v3.0
+ * This file is a part of the CaosDB Project.
+ *
+ * Copyright (C) 2018 Research Group Biomedical Physics,
+ * Max-Planck-Institute for Dynamics and Self-Organization Göttingen
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * ** end header
+ */
 package caosdb.server.scripting;
 
 import caosdb.server.CaosDBException;
diff --git a/src/main/java/caosdb/server/utils/Serializer.java b/src/main/java/caosdb/server/utils/Serializer.java
index 5508e99388a9e4191fd524ccbfc3e30007f6759a..26cd970c54d2bc4efcb7742ab9405a717e3ef112 100644
--- a/src/main/java/caosdb/server/utils/Serializer.java
+++ b/src/main/java/caosdb/server/utils/Serializer.java
@@ -1,3 +1,25 @@
+/*
+ * ** header v3.0
+ * This file is a part of the CaosDB Project.
+ *
+ * Copyright (C) 2018 Research Group Biomedical Physics,
+ * Max-Planck-Institute for Dynamics and Self-Organization Göttingen
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * ** end header
+ */
 package caosdb.server.utils;
 
 public interface Serializer<T, S> {