diff --git a/caosdb-webui b/caosdb-webui
index 23307f2950bec8da4a1f64cc552a00093b7b9b41..136582641fb1b675d9630b4eacea54fbf7765eea 160000
--- a/caosdb-webui
+++ b/caosdb-webui
@@ -1 +1 @@
-Subproject commit 23307f2950bec8da4a1f64cc552a00093b7b9b41
+Subproject commit 136582641fb1b675d9630b4eacea54fbf7765eea
diff --git a/src/main/java/caosdb/server/accessControl/UserSources.java b/src/main/java/caosdb/server/accessControl/UserSources.java
index a3f35c11b0f3bcc10e67397bd8c48c6e969fcc7d..7a0298f6ddb7722eecbb1cf8c0cd115bbedb5b7e 100644
--- a/src/main/java/caosdb/server/accessControl/UserSources.java
+++ b/src/main/java/caosdb/server/accessControl/UserSources.java
@@ -1,36 +1,28 @@
 /*
- * ** header v3.0
- * This file is a part of the CaosDB Project.
+ * ** 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
+ * 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 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.
+ * 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/>.
+ * 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 caosdb.server.CaosDBServer;
-import caosdb.server.ServerProperties;
-import caosdb.server.entity.Message;
-import caosdb.server.transaction.RetrieveRoleTransaction;
-import caosdb.server.transaction.RetrieveUserTransaction;
-import caosdb.server.utils.ServerMessages;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Set;
@@ -39,6 +31,12 @@ import org.apache.shiro.config.Ini;
 import org.apache.shiro.subject.PrincipalCollection;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import caosdb.server.CaosDBServer;
+import caosdb.server.ServerProperties;
+import caosdb.server.entity.Message;
+import caosdb.server.transaction.RetrieveRoleTransaction;
+import caosdb.server.transaction.RetrieveUserTransaction;
+import caosdb.server.utils.ServerMessages;
 
 public class UserSources extends HashMap<String, UserSource> {
 
@@ -60,10 +58,8 @@ public class UserSources extends HashMap<String, UserSource> {
   private UserSources() {
     initMap();
     this.put(getInternalRealm());
-    final String[] realms =
-        this.map
-            .getSectionProperty(Ini.DEFAULT_SECTION_NAME, KEY_REALMS)
-            .split("(\\s*,\\s*)|(\\s+)");
+    final String[] realms = this.map.getSectionProperty(Ini.DEFAULT_SECTION_NAME, KEY_REALMS)
+        .split("(\\s*,\\s*)|(\\s+)");
     for (final String realm : realms) {
       if (realm != null && !realm.isEmpty()) {
         final String className = this.map.getSectionProperty(realm, KEY_REALM_CLASS);
@@ -72,12 +68,10 @@ public class UserSources extends HashMap<String, UserSource> {
             @SuppressWarnings("unchecked")
             final Class<? extends UserSource> clazz =
                 (Class<? extends UserSource>) Class.forName(className);
-            this.put(clazz.newInstance());
-          } catch (final ClassNotFoundException e) {
-            logger.error("LOAD_USER_SOURCE", e);
-          } catch (final InstantiationException e) {
-            logger.error("LOAD_USER_SOURCE", e);
-          } catch (final IllegalAccessException e) {
+            this.put(clazz.getDeclaredConstructor().newInstance());
+          } catch (IllegalArgumentException | InvocationTargetException | NoSuchMethodException
+              | SecurityException | ClassNotFoundException | InstantiationException
+              | IllegalAccessException e) {
             logger.error("LOAD_USER_SOURCE", e);
           }
         }
@@ -105,9 +99,8 @@ public class UserSources extends HashMap<String, UserSource> {
   public void initMap() {
     this.map = null;
     try {
-      final FileInputStream f =
-          new FileInputStream(
-              CaosDBServer.getServerProperty(ServerProperties.KEY_USER_SOURCES_INI_FILE));
+      final FileInputStream f = new FileInputStream(
+          CaosDBServer.getServerProperty(ServerProperties.KEY_USER_SOURCES_INI_FILE));
       this.map = new Ini();
       this.map.load(f);
       f.close();
diff --git a/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAllUncheckedFiles.java b/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAllUncheckedFiles.java
index 0e557da58074729b9c3635453dd4b84b657599bb..a7a5c607df280a29c89a947e276bfdb789d11baa 100644
--- a/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAllUncheckedFiles.java
+++ b/src/main/java/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveAllUncheckedFiles.java
@@ -22,14 +22,14 @@
  */
 package caosdb.server.database.backend.implementation.MySQL;
 
-import caosdb.server.database.access.Access;
-import caosdb.server.database.backend.interfaces.RetrieveAllUncheckedFilesImpl;
-import caosdb.server.database.exceptions.TransactionException;
-import caosdb.server.database.proto.SparseEntity;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.Iterator;
+import caosdb.server.database.access.Access;
+import caosdb.server.database.backend.interfaces.RetrieveAllUncheckedFilesImpl;
+import caosdb.server.database.exceptions.TransactionException;
+import caosdb.server.database.proto.SparseEntity;
 
 public class MySQLRetrieveAllUncheckedFiles extends MySQLTransaction
     implements RetrieveAllUncheckedFilesImpl {
diff --git a/src/main/java/caosdb/server/datatype/AbstractDatatype.java b/src/main/java/caosdb/server/datatype/AbstractDatatype.java
index c14490ef5250d03d9daa53e85ac7062d764cba18..81072a72f2026c8b6fa4dbea65a3e99b85b513e4 100644
--- a/src/main/java/caosdb/server/datatype/AbstractDatatype.java
+++ b/src/main/java/caosdb/server/datatype/AbstractDatatype.java
@@ -22,11 +22,11 @@
  */
 package caosdb.server.datatype;
 
+import java.util.HashMap;
+import org.reflections.Reflections;
 import caosdb.server.entity.EntityInterface;
 import caosdb.server.entity.Message;
 import caosdb.server.entity.container.Container;
-import java.util.HashMap;
-import org.reflections.Reflections;
 
 public abstract class AbstractDatatype {
 
@@ -90,7 +90,7 @@ public abstract class AbstractDatatype {
     for (final Class<? extends AbstractDatatype> c :
         datatypePackage.getSubTypesOf(AbstractDatatype.class)) {
       if (c.isAnnotationPresent(DatatypeDefinition.class)) {
-        final AbstractDatatype dt = c.newInstance();
+        final AbstractDatatype dt = c.getDeclaredConstructor().newInstance();
         final String name = c.getAnnotation(DatatypeDefinition.class).name().toUpperCase();
         dt.name = name;
         instances.put(name, dt);
diff --git a/src/main/java/caosdb/server/jobs/Job.java b/src/main/java/caosdb/server/jobs/Job.java
index b3551b4dd92084e6296a57be4166b341efa68262..fb6b4aeb91e4d3227fb6b773dae26118c115b92a 100644
--- a/src/main/java/caosdb/server/jobs/Job.java
+++ b/src/main/java/caosdb/server/jobs/Job.java
@@ -22,6 +22,16 @@
  */
 package caosdb.server.jobs;
 
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authz.Permission;
+import org.apache.shiro.subject.Subject;
+import org.reflections.Reflections;
 import caosdb.server.CaosDBException;
 import caosdb.server.database.BackendTransaction;
 import caosdb.server.database.backend.transaction.GetIDByName;
@@ -44,15 +54,6 @@ import caosdb.server.utils.EntityStatus;
 import caosdb.server.utils.Observable;
 import caosdb.server.utils.Observer;
 import caosdb.server.utils.ServerMessages;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authz.Permission;
-import org.apache.shiro.subject.Subject;
-import org.reflections.Reflections;
 
 public abstract class Job extends AbstractObservable implements Observer {
   private Transaction<? extends TransactionContainer> transaction = null;
@@ -84,10 +85,10 @@ public abstract class Job extends AbstractObservable implements Observer {
 
   protected ScheduledJob appendJob(final EntityInterface entity, final Class<? extends Job> clazz) {
     try {
-      final Job job = clazz.newInstance();
+      final Job job = clazz.getDeclaredConstructor().newInstance();
       job.init(getMode(), entity, getTransaction());
       return getTransaction().getSchedule().add(job);
-    } catch (InstantiationException | IllegalAccessException e) {
+    } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
       throw new CaosDBException(e);
     }
   }
@@ -326,12 +327,12 @@ public abstract class Job extends AbstractObservable implements Observer {
     try {
 
       if (jobClass != null) {
-        ret = jobClass.newInstance();
+        ret = jobClass.getDeclaredConstructor().newInstance();
         ret.init(mode, entity, transaction);
         return ret;
       }
       return null;
-    } catch (final InstantiationException | IllegalAccessException e) {
+    } catch (final InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
       throw new TransactionException(e);
     }
   }
diff --git a/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanModel.java b/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanModel.java
index 229abc218ba5afd7b43eec31106fbcd5c2080b34..92fdfed58f921db27471e7eb457529628ca7b516 100644
--- a/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanModel.java
+++ b/src/main/java/caosdb/server/jobs/extension/AWIBoxLoanModel.java
@@ -1,5 +1,6 @@
 package caosdb.server.jobs.extension;
 
+import java.util.Objects;
 import caosdb.server.CaosDBServer;
 import caosdb.server.database.exceptions.EntityDoesNotExistException;
 import caosdb.server.entity.EntityInterface;
@@ -7,7 +8,6 @@ import caosdb.server.entity.Role;
 import caosdb.server.entity.wrapper.Property;
 import caosdb.server.jobs.ContainerJob;
 import caosdb.server.utils.Utils;
-import java.util.Objects;
 
 public abstract class AWIBoxLoanModel extends ContainerJob {
 
@@ -63,7 +63,7 @@ public abstract class AWIBoxLoanModel extends ContainerJob {
   Integer getIdOf(String string) {
     String id = CaosDBServer.getServerProperty("EXT_AWI_" + string.toUpperCase() + "_ID");
     if (id != null && Utils.isNonNullInteger(id)) {
-      return new Integer(id);
+      return Integer.parseInt(id);
     }
     String name = CaosDBServer.getServerProperty("EXT_AWI_" + string.toUpperCase() + "_NAME");
     if (name == null || name.isEmpty()) {
diff --git a/src/main/java/caosdb/server/jobs/extension/SQLiteTransaction.java b/src/main/java/caosdb/server/jobs/extension/SQLiteTransaction.java
index 907700ee53423a2d8d0088aaf6beb2e6b175f240..41778ac6ca184d819b42954a80369df813373297 100644
--- a/src/main/java/caosdb/server/jobs/extension/SQLiteTransaction.java
+++ b/src/main/java/caosdb/server/jobs/extension/SQLiteTransaction.java
@@ -22,11 +22,6 @@
  */
 package caosdb.server.jobs.extension;
 
-import caosdb.server.CaosDBException;
-import caosdb.server.entity.FileProperties;
-import caosdb.server.entity.Message;
-import caosdb.server.jobs.EntityJob;
-import caosdb.server.utils.FileUtils;
 import java.io.IOException;
 import java.security.NoSuchAlgorithmException;
 import java.sql.Connection;
@@ -39,10 +34,16 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.concurrent.locks.ReentrantLock;
+import caosdb.server.CaosDBException;
+import caosdb.server.entity.FileProperties;
+import caosdb.server.entity.Message;
+import caosdb.server.jobs.EntityJob;
+import caosdb.server.utils.FileUtils;
 
 public class SQLiteTransaction extends EntityJob {
   private static HashMap<String, ReentrantLock> lockedTables = new HashMap<String, ReentrantLock>();
 
+  @SuppressWarnings("unlikely-arg-type")
   @Override
   public final void run() {
     Connection con = null;
diff --git a/src/main/java/caosdb/server/query/StoredAt.java b/src/main/java/caosdb/server/query/StoredAt.java
index 78a5446db17151f72d9b1a366c819c1a55adceff..243822f740f0410345fe322e472146d4a965039b 100644
--- a/src/main/java/caosdb/server/query/StoredAt.java
+++ b/src/main/java/caosdb/server/query/StoredAt.java
@@ -23,8 +23,6 @@
 package caosdb.server.query;
 
 import static java.sql.Types.VARCHAR;
-
-import caosdb.server.query.Query.QueryException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.sql.CallableStatement;
@@ -32,6 +30,7 @@ import java.sql.SQLException;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import org.jdom2.Element;
+import caosdb.server.query.Query.QueryException;
 
 public class StoredAt implements EntityFilterInterface {
 
@@ -76,14 +75,12 @@ public class StoredAt implements EntityFilterInterface {
    */
   static String convertLikeLocation(String location) {
     final String evenB = "(^|[^b*])(bb)*";
-    final String oddB = evenB + "b";
     final String singleEscapedAst = "b\\*";
     final String findSingleAst =
         (evenB + "(" + singleEscapedAst + ")?" + "\\*([^*]|$)").replace("b", "\\\\");
     final String findMultipleAst =
         (evenB + "(" + singleEscapedAst + ")?" + "\\*{2,}").replace("b", "\\\\");
     java.util.regex.Pattern singlePat = Pattern.compile(findSingleAst);
-    java.util.regex.Pattern multiplePat = Pattern.compile(findMultipleAst);
 
     // Simple SQL escape replacements
     String converted = location.replaceFirst("^/", "").replace("%", "\\%").replace("_", "\\_");
diff --git a/src/main/java/caosdb/server/utils/mail/Mail.java b/src/main/java/caosdb/server/utils/mail/Mail.java
index 06ecc2338a3ec7dc0e057a83bccd538dbb1a74e1..36d5e9332ff33c925c8b04c8ae44d0e4e5120537 100644
--- a/src/main/java/caosdb/server/utils/mail/Mail.java
+++ b/src/main/java/caosdb/server/utils/mail/Mail.java
@@ -22,9 +22,9 @@
  */
 package caosdb.server.utils.mail;
 
+import java.util.Date;
 import caosdb.server.CaosDBServer;
 import caosdb.server.ServerProperties;
-import java.util.Date;
 
 public class Mail {
 
@@ -36,7 +36,7 @@ public class Mail {
       @SuppressWarnings("unchecked")
       Class<? extends MailHandler> mailHandlerClass =
           (Class<? extends MailHandler>) Class.forName(clazz);
-      handler = mailHandlerClass.newInstance();
+      handler = mailHandlerClass.getDeclaredConstructor().newInstance();
     } catch (Exception e) {
       e.printStackTrace();
     }
diff --git a/src/test/java/caosdb/server/query/TestCQL.java b/src/test/java/caosdb/server/query/TestCQL.java
index 54d4339b2fa5b41eb6ad3f4823be0b48e131fd56..ebe1cc8c53b5beaeb3762565f351fe801d20f649 100644
--- a/src/test/java/caosdb/server/query/TestCQL.java
+++ b/src/test/java/caosdb/server/query/TestCQL.java
@@ -28,15 +28,6 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-
-import caosdb.server.CaosDBServer;
-import caosdb.server.database.access.Access;
-import caosdb.server.database.backend.implementation.MySQL.ConnectionException;
-import caosdb.server.database.exceptions.TransactionException;
-import caosdb.server.query.CQLParser.CqContext;
-import caosdb.server.query.Query.Pattern;
-import caosdb.server.query.Query.QueryException;
-import caosdb.server.utils.Initialization;
 import java.io.IOException;
 import java.sql.SQLException;
 import java.util.LinkedList;
@@ -47,6 +38,14 @@ import org.antlr.v4.runtime.Token;
 import org.antlr.v4.runtime.tree.ParseTree;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import caosdb.server.CaosDBServer;
+import caosdb.server.database.access.Access;
+import caosdb.server.database.backend.implementation.MySQL.ConnectionException;
+import caosdb.server.database.exceptions.TransactionException;
+import caosdb.server.query.CQLParser.CqContext;
+import caosdb.server.query.Query.Pattern;
+import caosdb.server.query.Query.QueryException;
+import caosdb.server.utils.Initialization;
 
 public class TestCQL {
 
@@ -5015,7 +5014,7 @@ public class TestCQL {
 
     assertTrue(sfq.filter instanceof StoredAt);
     final StoredAt storedAt = (StoredAt) sfq.filter;
-    assertTrue(storedAt.requiresPatternMatching(storedAt.location));
+    assertTrue(StoredAt.requiresPatternMatching(storedAt.location));
     assertEquals("SAT(%%)", storedAt.toString());
   }
 
@@ -5053,7 +5052,7 @@ public class TestCQL {
 
     assertTrue(sfq.filter instanceof StoredAt);
     final StoredAt storedAt = (StoredAt) sfq.filter;
-    assertTrue(storedAt.requiresPatternMatching(storedAt.location));
+    assertTrue(StoredAt.requiresPatternMatching(storedAt.location));
     assertEquals("SAT(%%/)", storedAt.toString());
   }