diff --git a/pom.xml b/pom.xml
index ada1869cc7d8b3a6a53415f57e9382f6f3accb84..dac908f31c6af688ca5d79f3f5baa544d65cbeb4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,15 +18,12 @@
         <relativePath /> <!-- lookup parent from repository -->
     </parent>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <java.version>1.8</java.version>
-    </properties>
-
 	<profiles>
 		<profile>
 			<id>dev</id>
 			<properties>
+		        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		        <java.version>1.8</java.version>
 				<connection.driver_class>org.h2.Driver</connection.driver_class>
 				<connection.url>jdbc:h2:mem:test</connection.url>
 				<connection.username>root</connection.username>
@@ -38,10 +35,12 @@
 		<profile>
 			<id>prod</id>
 			<properties>
+		        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		        <java.version>1.8</java.version>
 				<connection.driver_class>org.postgresql.Driver</connection.driver_class>
-				<connection.url>jdbc:postgresql://portaldb:5432/postgres</connection.url>
-				<connection.username>postgres</connection.username>
-				<connection.password>test</connection.password>
+				<connection.url>jdbc:postgresql://localhost:5432/postgres</connection.url>
+				<connection.username>root</connection.username>
+				<connection.password>root</connection.password>
 				<hibernate.dialect>org.hibernate.dialect.PostgreSQL82Dialect</hibernate.dialect>
 				<schema.deploy>false</schema.deploy>
 			</properties>
@@ -65,6 +64,10 @@
             <groupId>org.springframework.security.oauth</groupId>
             <artifactId>spring-security-oauth2</artifactId>
         </dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-orm</artifactId>
+		</dependency>
         <dependency>
             <groupId>org.webjars</groupId>
             <artifactId>angularjs</artifactId>
@@ -130,15 +133,27 @@
     	<resources>
     		<resource>
 	    		<directory>src/main/resources</directory>
-	    		<includes><include>**/*.xml</include></includes>
-	    		<filtering>true</filtering>
+	    		<includes><include>**/*.csv</include></includes>
+	    		<excludes><exclude>**/*.xml</exclude></excludes>
     		</resource>
     		<resource>
 	    		<directory>src/main/resources</directory>
-	    		<includes><include>**/*.csv</include></includes>
+	    		<includes><include>**/*.xml</include></includes>
+	    		<excludes><exclude>**/*.csv</exclude></excludes>
+	    		<filtering>true</filtering>
     		</resource>
     	</resources>
+    	
         <plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-resources-plugin</artifactId>
+				<version>2.3</version>
+				<configuration>
+					<!-- specify UTF-8, ISO-8859-1 or any other file encoding -->
+					<encoding>UTF-8</encoding>
+				</configuration>
+			</plugin>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
@@ -150,9 +165,6 @@
                 <executions>
                     <execution>
                         <phase>compile</phase>
-                        <configuration>
-                        	<skip>${schema.deploy}</skip>
-                        </configuration>
                         <goals>
                             <goal>export</goal>
                         </goals>
diff --git a/src/main/java/org/hbp/mip/MIPApplication.java b/src/main/java/org/hbp/mip/MIPApplication.java
index 8d05e4ceec255e45ed776cbf3d8cd26cc78de319..56034f9b899ee83a50140a9e0d6b2ae4eaddff5b 100644
--- a/src/main/java/org/hbp/mip/MIPApplication.java
+++ b/src/main/java/org/hbp/mip/MIPApplication.java
@@ -25,9 +25,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import io.swagger.annotations.Api;
 import org.hbp.mip.model.User;
 import org.hbp.mip.utils.CORSFilter;
-import org.hbp.mip.utils.HibernateUtil;
 import org.hibernate.Query;
 import org.hibernate.Session;
+import org.hibernate.SessionFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -36,6 +36,8 @@ import org.springframework.boot.autoconfigure.security.oauth2.resource.UserInfoT
 import org.springframework.boot.context.embedded.FilterRegistrationBean;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.ImportResource;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
 import org.springframework.security.core.Authentication;
@@ -81,6 +83,8 @@ import java.net.URLEncoder;
 import java.security.Principal;
 
 @SpringBootApplication
+@Configuration
+@ImportResource("classpath:spring/application-context.xml")
 @RestController
 @EnableOAuth2Client
 @EnableSwagger2
@@ -90,25 +94,35 @@ public class MIPApplication extends WebSecurityConfigurerAdapter {
     @Autowired
     OAuth2ClientContext oauth2ClientContext;
 
-    public static void main(String[] args) {
+    @Autowired
+	SessionFactory sessionFactoryBean;
+
+    @Autowired
+    HttpSessionCsrfTokenRepository httpSessionCsrfTokenRepository;
+    
+    @Autowired
+    OAuth2ClientAuthenticationProcessingFilter hbpFilter;
+
+
+public static void main(String[] args) {
         SpringApplication.run(MIPApplication.class, args);
     }
 
-    public static String getUserInfos() {
+    public String getUserInfos() {
         OAuth2Authentication oAuth2Authentication = (OAuth2Authentication) SecurityContextHolder.getContext().getAuthentication();
         Authentication userAuthentication = oAuth2Authentication.getUserAuthentication();
         return userAuthentication.getDetails().toString();
     }
 
-    public static User getUser(Principal principal) {
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+    public User getUser(Principal principal) {
+        Session session = sessionFactoryBean.getCurrentSession();
         session.beginTransaction();
         Query query = session.createQuery("from User where username= :username");
         query.setString("username", principal.getName());
         User user = (User) query.uniqueResult();
         session.getTransaction().commit();
         if (user == null) {
-            session = HibernateUtil.getSessionFactory().getCurrentSession();
+            session = sessionFactoryBean.getCurrentSession();
             session.beginTransaction();
             user = new User(getUserInfos());
             user.setTeam("CHUV");
@@ -172,7 +186,7 @@ public class MIPApplication extends WebSecurityConfigurerAdapter {
                 .and().logout().logoutSuccessUrl("/login/hbp").permitAll()
                 .and().csrf().csrfTokenRepository(csrfTokenRepository())
                 .and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)
-                .addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class);
+                .addFilterBefore(hbpFilter, BasicAuthenticationFilter.class);
     }
 
     @Bean
@@ -184,22 +198,24 @@ public class MIPApplication extends WebSecurityConfigurerAdapter {
         return registration;
     }
 
+/*
     private Filter ssoFilter() {
-        OAuth2ClientAuthenticationProcessingFilter hbpFilter = new OAuth2ClientAuthenticationProcessingFilter("/login/hbp");
+    	OAuth2ClientAuthenticationProcessingFilter hbpFilter = new OAuth2ClientAuthenticationProcessingFilter("/login/hbp");
         OAuth2RestTemplate hbpTemplate = new OAuth2RestTemplate(hbp(), oauth2ClientContext);
         hbpFilter.setAuthenticationSuccessHandler(new SimpleUrlAuthenticationSuccessHandler("http://frontend/#/home"));
         hbpFilter.setRestTemplate(hbpTemplate);
         hbpFilter.setTokenServices(new UserInfoTokenServices(hbpResource().getUserInfoUri(), hbp().getClientId()));
         return hbpFilter;
     }
+*/
 
-    @Bean
+    @Bean(name="hbp")
     @ConfigurationProperties("hbp.client")
     OAuth2ProtectedResourceDetails hbp() {
         return new AuthorizationCodeResourceDetails();
     }
 
-    @Bean
+    @Bean(name="hbpResource")
     @ConfigurationProperties("hbp.resource")
     ResourceServerProperties hbpResource() {
         return new ResourceServerProperties();
@@ -226,8 +242,7 @@ public class MIPApplication extends WebSecurityConfigurerAdapter {
     }
 
     private CsrfTokenRepository csrfTokenRepository() {
-        HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
-        repository.setHeaderName("X-XSRF-TOKEN");
+        HttpSessionCsrfTokenRepository repository = httpSessionCsrfTokenRepository;
         return repository;
     }
 
diff --git a/src/main/java/org/hbp/mip/controllers/ArticlesApi.java b/src/main/java/org/hbp/mip/controllers/ArticlesApi.java
index 4bee0ec61f144e9af569b2ae83baa4943cac9142..53ba7f8d06c4e9dc47d42d80088860baf21da694 100644
--- a/src/main/java/org/hbp/mip/controllers/ArticlesApi.java
+++ b/src/main/java/org/hbp/mip/controllers/ArticlesApi.java
@@ -9,9 +9,11 @@ import io.swagger.annotations.*;
 import org.hbp.mip.MIPApplication;
 import org.hbp.mip.model.Article;
 import org.hbp.mip.model.User;
-import org.hbp.mip.utils.HibernateUtil;
 import org.hibernate.Query;
 import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
@@ -28,8 +30,13 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 @Api(value = "/articles", description = "the articles API")
 public class ArticlesApi {
 
+	@Autowired
+	MIPApplication mipApplication;
 
-    @ApiOperation(value = "Get articles", response = Article.class, responseContainer = "List")
+    @Autowired
+	SessionFactory sessionFactoryBean;
+
+	@ApiOperation(value = "Get articles", response = Article.class, responseContainer = "List")
     @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(method = RequestMethod.GET)
     public ResponseEntity<List<Article>> getArticles(
@@ -40,7 +47,7 @@ public class ArticlesApi {
     ) {
 
         // Get current user
-        User user = MIPApplication.getUser(principal);
+        User user = mipApplication.getUser(principal);
 
         // Prepare HQL query using Article and User tables
         String queryString = "SELECT a FROM Article a, User u where a.createdBy=u.id";
@@ -61,7 +68,7 @@ public class ArticlesApi {
             }
         }
 
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         List<Article> articles = new LinkedList<>();
         // Query DB
         try{
@@ -105,7 +112,7 @@ public class ArticlesApi {
     ) {
 
         // Get current user
-        User user = MIPApplication.getUser(principal);
+        User user = mipApplication.getUser(principal);
 
         // Set up article to save
         article.setCreatedAt(new Date());
@@ -116,7 +123,7 @@ public class ArticlesApi {
         article.setCreatedBy(user);
 
         // Save article into DB
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         try{
             session.beginTransaction();
             session.save(article);
@@ -140,7 +147,7 @@ public class ArticlesApi {
     ) {
 
         // Query DB
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         Article article = null;
         try{
             session.beginTransaction();
@@ -169,10 +176,10 @@ public class ArticlesApi {
     ) {
 
         // Get current user
-        User user = MIPApplication.getUser(principal);
+        User user = mipApplication.getUser(principal);
 
         // Query DB
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         try{
             session.beginTransaction();
             session.update(article);
diff --git a/src/main/java/org/hbp/mip/controllers/DatasetsApi.java b/src/main/java/org/hbp/mip/controllers/DatasetsApi.java
index 7f6b3ceda7e85a3c40a5e8f7dec94487c121c808..481d43c8cc71ea02236ba52b3c39f7892bf66712 100644
--- a/src/main/java/org/hbp/mip/controllers/DatasetsApi.java
+++ b/src/main/java/org/hbp/mip/controllers/DatasetsApi.java
@@ -7,9 +7,10 @@ package org.hbp.mip.controllers;
 
 import io.swagger.annotations.*;
 import org.hbp.mip.model.Dataset;
-import org.hbp.mip.utils.HibernateUtil;
 import org.hibernate.Query;
 import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -23,7 +24,9 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 @RequestMapping(value = "/datasets", produces = {APPLICATION_JSON_VALUE})
 @Api(value = "/datasets", description = "the datasets API")
 public class DatasetsApi {
-
+	
+    @Autowired
+	SessionFactory sessionFactoryBean;
 
     @ApiOperation(value = "Get a dataset", response = Dataset.class)
     @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
@@ -33,7 +36,7 @@ public class DatasetsApi {
     )  {
 
         // Query DB
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         Dataset dataset = null;
         try{
             session.beginTransaction();
diff --git a/src/main/java/org/hbp/mip/controllers/GroupsApi.java b/src/main/java/org/hbp/mip/controllers/GroupsApi.java
index 0ba437d444019a1de02252d414378b5ad8f8c8bb..063ba59926d0fe16f4f9d6e52c3d8cfb38c0fab4 100644
--- a/src/main/java/org/hbp/mip/controllers/GroupsApi.java
+++ b/src/main/java/org/hbp/mip/controllers/GroupsApi.java
@@ -6,8 +6,9 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
 import org.hbp.mip.model.Group;
-import org.hbp.mip.utils.HibernateUtil;
 import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -22,6 +23,9 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 public class GroupsApi {
 
 
+    @Autowired
+	SessionFactory sessionFactoryBean;
+
     @ApiOperation(value = "Get the root group (containing all subgroups)", response = Group.class)
     @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
     @RequestMapping(method = RequestMethod.GET)
@@ -31,7 +35,7 @@ public class GroupsApi {
         String rootCode = "root";
 
         // Query DB
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         Group group = null;
         try{
             session.beginTransaction();
diff --git a/src/main/java/org/hbp/mip/controllers/ModelsApi.java b/src/main/java/org/hbp/mip/controllers/ModelsApi.java
index 102661c22db18b6fbb0ea7a51b78d1da7faac02a..6f52bc2b236f1f373b34b29956a97ea11ff6d346 100644
--- a/src/main/java/org/hbp/mip/controllers/ModelsApi.java
+++ b/src/main/java/org/hbp/mip/controllers/ModelsApi.java
@@ -9,9 +9,10 @@ import io.swagger.annotations.*;
 import org.hbp.mip.MIPApplication;
 import org.hbp.mip.model.*;
 import org.hbp.mip.utils.CSVUtil;
-import org.hbp.mip.utils.HibernateUtil;
 import org.hibernate.Query;
 import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
@@ -30,7 +31,13 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 @javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-07T07:38:20.227Z")
 public class ModelsApi {
 
-    private static final String DATA_FILE = "data/values.csv";
+	@Autowired
+	MIPApplication mipApplication;
+
+    @Autowired
+	SessionFactory sessionFactoryBean;
+
+	private static final String DATA_FILE = "data/values.csv";
 
     @ApiOperation(value = "Get models", response = Model.class, responseContainer = "List")
     @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
@@ -43,7 +50,7 @@ public class ModelsApi {
     )  {
 
         // Get current user
-        User user = MIPApplication.getUser(principal);
+        User user = mipApplication.getUser(principal);
 
         // Prepare HQL query from Model and User tables
         String queryString = "select m from Model m, User u where m.createdBy=u.id";
@@ -60,7 +67,7 @@ public class ModelsApi {
         }
 
         // Query DB
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         List<Model> models = new LinkedList<>();
         try{
             session.beginTransaction();
@@ -102,7 +109,7 @@ public class ModelsApi {
     )  {
 
         // Get current user
-        User user = MIPApplication.getUser(principal);
+        User user = mipApplication.getUser(principal);
 
         // Set up model
         model.setSlug(model.getTitle().toLowerCase());
@@ -111,7 +118,7 @@ public class ModelsApi {
         model.setCreatedAt(new Date());
 
         // Save model into DB
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         try{
             session.beginTransaction();
             session.save(model);
@@ -134,7 +141,7 @@ public class ModelsApi {
     )  {
 
         // Query DB
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         Model model = null;
         try{
             session.beginTransaction();
@@ -160,7 +167,7 @@ public class ModelsApi {
     )  {
 
         // Query DB
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         session.beginTransaction();
         org.hibernate.Query query = session.createQuery("from Model where slug= :slug");
         query.setString("slug", slug);
@@ -168,7 +175,7 @@ public class ModelsApi {
         session.getTransaction().commit();
 
         if(model != null) {
-            session = HibernateUtil.getSessionFactory().getCurrentSession();
+            session = sessionFactoryBean.getCurrentSession();
             try{
                 session.beginTransaction();
                 query = session.createQuery("from Query where id= :id");
@@ -240,10 +247,10 @@ public class ModelsApi {
     )  {
 
         // Get current user
-        User user = MIPApplication.getUser(principal);
+        User user = mipApplication.getUser(principal);
 
         // Query DB
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         try{
             session.beginTransaction();
             session.update(model);
@@ -267,7 +274,7 @@ public class ModelsApi {
             Principal principal
     )  {
         // Get current user
-        User user = MIPApplication.getUser(principal);
+        User user = mipApplication.getUser(principal);
 
         // Set slug
         String originalSlug = model.getSlug();
@@ -278,7 +285,7 @@ public class ModelsApi {
         model.setSlug(copySlug);
 
         // Save model into DB
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         try{
             session.beginTransaction();
             session.save(model);
diff --git a/src/main/java/org/hbp/mip/controllers/StatsApi.java b/src/main/java/org/hbp/mip/controllers/StatsApi.java
index e19a548a9b0ea300c8c7872a41f403a806282785..b468260d605626fbe67688a6d90bc70914819daa 100644
--- a/src/main/java/org/hbp/mip/controllers/StatsApi.java
+++ b/src/main/java/org/hbp/mip/controllers/StatsApi.java
@@ -3,9 +3,10 @@ package org.hbp.mip.controllers;
 import io.swagger.annotations.*;
 import org.hbp.mip.model.GeneralStats;
 import org.hbp.mip.model.Statistics;
-import org.hbp.mip.utils.HibernateUtil;
 import org.hibernate.Query;
 import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -22,6 +23,9 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 @Api(value = "/stats", description = "the stats API")
 public class StatsApi {
 
+    @Autowired
+	SessionFactory sessionFactoryBean;
+
     @ApiOperation(value = "Get general statistics", response = GeneralStats.class)
     @ApiResponses(value = {@ApiResponse(code = 200, message = "Found"), @ApiResponse(code = 404, message = "Not found") })
     @RequestMapping(method = RequestMethod.GET)
@@ -29,7 +33,7 @@ public class StatsApi {
         GeneralStats stats = new GeneralStats();
 
 
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         Long nbUsers = 0L;
         Long nbArticles = 0L;
         Long nbVariables = 0L;
diff --git a/src/main/java/org/hbp/mip/controllers/UsersApi.java b/src/main/java/org/hbp/mip/controllers/UsersApi.java
index c57bf39ee90a2ab3feb6132b25ba0eb563f824bc..ddc02821124da96664c5a9d47a64dc3f86d72283 100644
--- a/src/main/java/org/hbp/mip/controllers/UsersApi.java
+++ b/src/main/java/org/hbp/mip/controllers/UsersApi.java
@@ -2,8 +2,9 @@ package org.hbp.mip.controllers;
 
 import io.swagger.annotations.*;
 import org.hbp.mip.model.User;
-import org.hbp.mip.utils.HibernateUtil;
 import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -22,6 +23,9 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 @Api(value = "/users", description = "the users API")
 public class UsersApi {
 
+    @Autowired
+	SessionFactory sessionFactoryBean;
+
     @ApiOperation(value = "Get a user", response = User.class)
     @ApiResponses(value = { @ApiResponse(code = 200, message = "Found"), @ApiResponse(code = 404, message = "Not found") })
     @RequestMapping(value = "/{username}", method = RequestMethod.GET)
@@ -30,7 +34,7 @@ public class UsersApi {
     )  {
 
         // Query DB
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         User user = null;
         try{
             session.beginTransaction();
diff --git a/src/main/java/org/hbp/mip/controllers/VariablesApi.java b/src/main/java/org/hbp/mip/controllers/VariablesApi.java
index e42f75144a21264df7f080abd4de64747e3013c9..bf64e31079a6503ba9cb5e694278d2e58c0f0ef5 100644
--- a/src/main/java/org/hbp/mip/controllers/VariablesApi.java
+++ b/src/main/java/org/hbp/mip/controllers/VariablesApi.java
@@ -8,8 +8,9 @@ package org.hbp.mip.controllers;
 import io.swagger.annotations.*;
 import org.hbp.mip.model.Value;
 import org.hbp.mip.model.Variable;
-import org.hbp.mip.utils.HibernateUtil;
 import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
@@ -24,6 +25,8 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 @Api(value = "/variables", description = "the variables API")
 public class VariablesApi {
 
+    @Autowired
+	SessionFactory sessionFactoryBean;
 
     @ApiOperation(value = "Get variables", response = Variable.class, responseContainer = "List")
     @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
@@ -38,7 +41,7 @@ public class VariablesApi {
     )  {
 
         // Get variables from DB
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         List<Variable> variables = new LinkedList<>();
         try{
             session.beginTransaction();
@@ -62,7 +65,7 @@ public class VariablesApi {
     )  {
 
         // Query DB
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         Variable variable = null;
         try{
             session.beginTransaction();
@@ -91,7 +94,7 @@ public class VariablesApi {
     )  {
 
         // Query DB
-        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Session session = sessionFactoryBean.getCurrentSession();
         List<Value> values = new LinkedList<>();
         try{
             session.beginTransaction();
diff --git a/src/main/resources/spring/application-context.xml b/src/main/resources/spring/application-context.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f2a04f23188a55a321a26149302d0a225c411390
--- /dev/null
+++ b/src/main/resources/spring/application-context.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:context="http://www.springframework.org/schema/context"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
+	
+	<context:component-scan base-package="org.hbp.mip" />
+
+	<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
+<!-- 
+		<property name="dataSource">
+			<bean id="idDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
+				<property name="driverClassName" value="${connection.driver_class}" />
+				<property name="url" value="${connection.url}" />
+				<property name="username" value="${connection.username}" />
+				<property name="password" value="${connection.password}" />
+			</bean>
+
+		</property>
+ -->
+		
+		<property name="packagesToScan">
+ 			<list>
+ 				<value>org.hbp.mip.model</value>
+ 			</list>
+		</property>
+		
+		<property name="configLocation" value="classpath:hibernate.cfg.xml" />
+	</bean>
+
+	<bean id="httpSessionCsrfTokenRepository" class="org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository">
+		<property name="headerName" value="X-XSRF-TOKEN" />
+	</bean>
+	
+	<bean id="hbpFilter" class="org.springframework.security.oauth2.client.filter.OAuth2ClientAuthenticationProcessingFilter">
+		<constructor-arg value="/login/hbp"></constructor-arg>
+		<property name="authenticationSuccessHandler">
+			<bean class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">
+				<property name="defaultTargetUrl" value="http://frontend/#/home" />
+			</bean>
+		</property>
+		<property name="restTemplate">
+			<bean class="org.springframework.security.oauth2.client.OAuth2RestTemplate">
+				<constructor-arg name="resource" ref="hbp" />
+				<constructor-arg name="context" ref="oauth2ClientContext" />
+			</bean>
+		</property>
+		<property name="tokenServices">
+			<bean class="org.springframework.boot.autoconfigure.security.oauth2.resource.UserInfoTokenServices">
+				<constructor-arg name="clientId" value="996f97c5-a3ca-460e-b18b-00df3e2be89a" />
+				<constructor-arg name="userInfoEndpointUrl" value="https://services.humanbrainproject.eu/oidc/v0/api/user/me" />
+			</bean>
+		</property>
+	</bean>
+	
+
+</beans>
diff --git a/src/test/java/org/hbp/mip/MIPApplicationTests.java b/src/test/java/org/hbp/mip/MIPApplicationTests.java
index 5a885f6853c28558210622526b4690c095ad59dd..b6f5a5a80fc6a6362eb4ee18863e629e09eb5a75 100644
--- a/src/test/java/org/hbp/mip/MIPApplicationTests.java
+++ b/src/test/java/org/hbp/mip/MIPApplicationTests.java
@@ -15,19 +15,30 @@
  */
 package org.hbp.mip;
 
+import static org.junit.Assert.*;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 @RunWith(SpringJUnit4ClassRunner.class)
-@SpringApplicationConfiguration(classes = MIPApplication.class)
 @WebAppConfiguration
+@SpringApplicationConfiguration(classes=MIPApplication.class, locations={"classpath:spring/application-context.xml"})
 public class MIPApplicationTests {
 
+	@Autowired
+	LocalSessionFactoryBean sessionFactoryBean;
+	
 	@Test
 	public void contextLoads() {
 	}
 
+	@Test
+	public void testMainApp() {
+		assertNotNull(sessionFactoryBean);
+	}
+
 }