diff --git a/docker/config/application.tmpl b/docker/config/application.tmpl
index 9a56dad4cd7bcdc5d78db3b07473f28521149358..fcdc4ec92f27f0876f4bbd9d9d24c4f157fc1e4e 100644
--- a/docker/config/application.tmpl
+++ b/docker/config/application.tmpl
@@ -21,6 +21,10 @@ spring:
       username: {{ default .Env.FEATURES_DB_USER "postgres" }}
       password: {{ .Env.FEATURES_DB_PASSWORD }}
       driver-class-name: org.postgresql.Driver
+  data:
+    jpa:
+      repositories:
+        bootstrap-mode: default
   jpa:
     hibernate:
       dialect: org.hibernate.dialect.PostgreSQL9Dialect
diff --git a/pom.xml b/pom.xml
index 4963d1dbd4b1c951bd22f9b18397df92b98a7929..911818e6e2848f3a3208eebbdf832bba1ceed7af 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,7 +27,7 @@
         <asciidoctor.maven.plugin.version>1.5.5</asciidoctor.maven.plugin.version>
         <asciidoctorj.pdf.version>1.5.0-alpha.15</asciidoctorj.pdf.version>
         <asciidoctorj.version>1.5.5</asciidoctorj.version>
-        <spring-data-commons.version>1.13.17.RELEASE</spring-data-commons.version>
+        <spring-data-commons.version>1.12.11.RELEASE</spring-data-commons.version>
         <angularjs.version>1.5.7</angularjs.version>
         <jquery.version>3.0.0</jquery.version>
         <bootstrap.version>3.3.7</bootstrap.version>
diff --git a/src/main/java/eu/hbp/mip/MIPApplication.java b/src/main/java/eu/hbp/mip/MIPApplication.java
index df70ba78a5ba397676f1ad1533895e86a67c4f89..b3f8648cdf599b97bc2965426532f4f21156d612 100644
--- a/src/main/java/eu/hbp/mip/MIPApplication.java
+++ b/src/main/java/eu/hbp/mip/MIPApplication.java
@@ -4,10 +4,19 @@
 
 package eu.hbp.mip;
 
+import eu.hbp.mip.configuration.*;
 import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
 
-@SpringBootApplication
+
+@Configuration
+@EnableAutoConfiguration(exclude = { ValidationAutoConfiguration.class })
+@Import({ AkkaConfiguration.class, BugsnagConfiguration.class,
+        CacheConfiguration.class, PersistenceConfiguration.class,
+        SecurityConfiguration.class, WebConfiguration.class})
 public class MIPApplication {
 
     public static void main(String[] args) {
diff --git a/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java b/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java
index d85bf5d3afbee20d3f03c4b37b864636c0892ff5..6e679f6716228ccbb392ed131c1c3f3386d83205 100644
--- a/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java
+++ b/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java
@@ -27,7 +27,7 @@ import static eu.hbp.mip.akka.SpringExtension.SPRING_EXTENSION_PROVIDER;
 
 @Configuration
 @ComponentScan
-class AkkaConfiguration {
+public class AkkaConfiguration {
 
     protected final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
 
diff --git a/src/main/java/eu/hbp/mip/configuration/BugsnagConfig.java b/src/main/java/eu/hbp/mip/configuration/BugsnagConfiguration.java
similarity index 92%
rename from src/main/java/eu/hbp/mip/configuration/BugsnagConfig.java
rename to src/main/java/eu/hbp/mip/configuration/BugsnagConfiguration.java
index 4bc042fe8368cbe1ff127a349ac8dbb1b3e1be16..b02b1e6a1001ad3cbdff4cfa03a469086b0c08d2 100644
--- a/src/main/java/eu/hbp/mip/configuration/BugsnagConfig.java
+++ b/src/main/java/eu/hbp/mip/configuration/BugsnagConfiguration.java
@@ -8,7 +8,7 @@ import org.springframework.context.annotation.Import;
 
 @Configuration
 @Import(BugsnagSpringConfiguration.class)
-public class BugsnagConfig {
+public class BugsnagConfiguration {
     @Bean
     public Bugsnag bugsnag() {
         return new Bugsnag("dff301aa15eb795a6d8b22b600586f77");
diff --git a/src/main/java/eu/hbp/mip/configuration/PersistenceConfiguration.java b/src/main/java/eu/hbp/mip/configuration/PersistenceConfiguration.java
index 069f6552579626529ef21e11c743ec5d7fa34f90..d1a57c65458bc836e55d7c7115ebfed0af1d0ee3 100644
--- a/src/main/java/eu/hbp/mip/configuration/PersistenceConfiguration.java
+++ b/src/main/java/eu/hbp/mip/configuration/PersistenceConfiguration.java
@@ -11,9 +11,12 @@ import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.context.annotation.*;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.orm.jpa.JpaTransactionManager;
 import org.springframework.orm.jpa.JpaVendorAdapter;
 import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
 import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 import javax.sql.DataSource;
 
@@ -22,7 +25,8 @@ import javax.sql.DataSource;
  */
 
 @Configuration
-@EnableJpaRepositories(value = "eu.hbp.mip.repositories")
+@EnableJpaRepositories("eu.hbp.mip.repositories")
+@EnableTransactionManagement
 @EntityScan(basePackages = "eu.hbp.mip.model")
 public class PersistenceConfiguration {
 
@@ -67,11 +71,20 @@ public class PersistenceConfiguration {
     public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
         LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
         em.setDataSource(portalDataSource());
+        em.setPackagesToScan("eu.hbp.mip.model");
+        em.setPersistenceUnitName("portal");
         JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
         em.setJpaVendorAdapter(vendorAdapter);
         return em;
     }
 
+    @Bean
+    public PlatformTransactionManager transactionManager() {
+        JpaTransactionManager txManager = new JpaTransactionManager();
+        txManager.setEntityManagerFactory(entityManagerFactory().getNativeEntityManagerFactory());
+        return txManager;
+    }
+
     @Bean(name = "flyway", initMethod = "migrate")
     public Flyway migrations() {
         Flyway flyway = new Flyway();
diff --git a/src/main/java/eu/hbp/mip/model/Article.java b/src/main/java/eu/hbp/mip/model/Article.java
index 220839623d0c63f32d3cb30f28436513ae59ea2b..4fdfc40b88da0e7661a00271ab9875c3ae20ff25 100644
--- a/src/main/java/eu/hbp/mip/model/Article.java
+++ b/src/main/java/eu/hbp/mip/model/Article.java
@@ -7,6 +7,7 @@ package eu.hbp.mip.model;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.annotations.ApiModel;
+import org.springframework.validation.annotation.Validated;
 
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;
@@ -19,6 +20,7 @@ import java.util.List;
 @Table(name = "`article`")
 @ApiModel
 @JsonInclude(JsonInclude.Include.NON_NULL)
+@Validated
 public class Article {
 
     @Id