diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index 1d24297ed36ea5281519e7b6e6a33b628c37d4df..0000000000000000000000000000000000000000
--- a/Dockerfile
+++ /dev/null
@@ -1,14 +0,0 @@
-# This Dockerfile encapsulate the MIP portal backend application for development purposes.
-# We use it to bootstrap the generation of the Hibernate mapping file and the application jar.
-
-FROM maven:3-jdk-8
-
-COPY ./src/docker/init/build-in-docker.sh /build-in-docker.sh
-
-CMD mkdir /opt/portal/
-
-VOLUME /opt/portal/
-
-WORKDIR /opt/portal/
-
-CMD ["/build-in-docker.sh"]
diff --git a/README.md b/README.md
index ce9c373c3c20a5b07e8620e7c0d2079dad7ca5f3..3cdb8c03e91eddfaa183f9b2f12b27ed93283846 100644
--- a/README.md
+++ b/README.md
@@ -1,32 +1,15 @@
 ## Introduction
 
-This is the MIP implementation.
+This is the MIP backend.
 
 ## Usage
 
-Build the project with `./build` and run it with `./run`.
+* Build the project: `./build.sh`
+* Run the project: `./run.sh`
+* Show live logs: `./log.sh` (CTRL+C to quit)
+* Stop and remove the running container: `./halt.sh`
 
-## API Documentation using Swagger (Springfox)
+## Generate PDF API documentation on build
 
-The API documentation is available at `<BASE URL>/swagger-ui.html`. A JSON version is available at `<BASE URL>/v2/api-docs`
-
-## TODO
-
-* Implement SoapUI tests;
-* Clean code (both back-end front-end);
-* Sync with original Swagger description;
-* Externalize configuration (DB parameters, security enabled/disabled, ...);
-* Make user tests with multiple users;
-* Fix bugs.
-
-## BUGS
-
-* Export PDF does not work;
-
-### Maintenance
-
-* To keep an updated API documentation, the developers should keep synchronized both the auto-generated swagger file (from Java annotations) with the hand written one. You can follow this method to get a YAML description from the Java-annotated code:
-  * Add annotations to the Java code;
-  * Get JSON from `<BASE URL>/v2/api-docs`;
-  * Convert JSON to YAML on [http://jsontoyaml.com](http://jsontoyaml.com).
-  
\ No newline at end of file
+Uncomment the following line in src/docker/build/build-in-docker.sh :
+`mvn swagger2markup:convertSwagger2markup asciidoctor:process-asciidoc`
diff --git a/build.sh b/build.sh
index 748d7fb5c3af2af5940511f0c5df9206f5f57c4f..9430442030af1418d15b607eb7aec43ef166be09 100755
--- a/build.sh
+++ b/build.sh
@@ -1,13 +1,5 @@
-#!/bin/bash -e
+#!/usr/bin/env bash
 
-if groups $USER | grep &>/dev/null '\bdocker\b'; then
-  DOCKER_COMPOSE="docker-compose"
-else
-  DOCKER_COMPOSE="sudo docker-compose"
-fi
-
-# TODO: Cannot clean otherwise the build fails because of Hibernate schema generation
-mvn package
-cp target/mip.jar src/docker/build/
-
-$DOCKER_COMPOSE build
+./halt.sh
+docker-compose -f ./docker-compose_build.yml build
+docker-compose -f ./docker-compose_build.yml up
diff --git a/docker-compose.init.yml b/docker-compose.init.yml
deleted file mode 100644
index e5828d70bd0765e4ea7b22decc6685d3a6551456..0000000000000000000000000000000000000000
--- a/docker-compose.init.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-# Build the application and regenerate the Hibernate mapping
-
-portaldb:
-  image: postgres:9.5.3
-  container_name: portaldb
-  ports:
-    - "55432:5432"
-  volumes:
-    - ./src/test/db/sql:/docker-entrypoint-initdb.d/
-  environment:
-    POSTGRES_PASSWORD: test
-
-portal-backend:
-  build: .
-  volumes:
-    - ./:/portal/
-    - ./.m2/:/root/.m2/
-  links:
-    - portaldb
-  ports:
-    - "8080:8080"
diff --git a/docker-compose.yml b/docker-compose.yml
index ad6a91c77c771a297d969a83a5cd6f464c14735e..3902ae28d99a031ce64bb3d938e24bc5f48926a0 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,20 +1,10 @@
+version: '2'
 
-portaldb:
-  image: postgres:9.5.3
-  container_name: portaldb
-  ports:
-    - "55432:5432"
-  volumes:
-    - ./src/test/db/sql:/docker-entrypoint-initdb.d/
-  environment:
-    POSTGRES_PASSWORD: test
-
-portal-backend:
-  build: ./src/docker/build
-  volumes:
-    - ./src/test/docker/:/opt/portal/config/
-    - ./target/:/opt/portal/lib/
-  links:
-    - portaldb
-  ports:
-    - "8080:8080"
+services:
+  backend:
+    container_name: backend
+    build:
+      context: .
+      dockerfile: ./src/docker/run/Dockerfile
+    ports:
+      - "8080:8080"
diff --git a/docker-compose_build.yml b/docker-compose_build.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b29bf59ecd0f6a068269bcc0fed3f0498bb9505d
--- /dev/null
+++ b/docker-compose_build.yml
@@ -0,0 +1,11 @@
+version: '2'
+
+services:
+  backend_build:
+    container_name: backend_build
+    build: ./src/docker/build/
+    volumes:
+      - ./:/opt/portal/
+      - .m2:/root/.m2/
+    ports:
+      - "8080:8080"
diff --git a/halt.sh b/halt.sh
new file mode 100755
index 0000000000000000000000000000000000000000..7b9c9e76afdaad93310047eeef58c64326caffb9
--- /dev/null
+++ b/halt.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+
+docker-compose kill
+docker-compose rm -f
diff --git a/log.sh b/log.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f1cd4924d74ad499aef9188c070880d2be956cf2
--- /dev/null
+++ b/log.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+
+docker-compose logs -f backend
diff --git a/pom.xml b/pom.xml
index a9cb39f28e7cf809c411420afed6756ec9965b9e..f568cd0128ea345536e5df38c17c1eeb25ea59d8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
 
     <groupId>org.hbp.mip</groupId>
     <artifactId>backend-services</artifactId>
-    <version>0.1.0</version>
+    <version>DOCKER_BUILD</version>
     <packaging>jar</packaging>
 
     <name>backend-services</name>
diff --git a/run.sh b/run.sh
index 3483bbcfcb1c7446b56537d6792375c48896efe9..4dc85dc16cce4068bda87ac0f34f4701adff2e31 100755
--- a/run.sh
+++ b/run.sh
@@ -1,20 +1,4 @@
-#!/bin/bash -e
+#!/usr/bin/env bash
 
-# Run the backend in a Docker container and start the database.
-# The current project is compiler inside the Docker container
-
-if groups $USER | grep &>/dev/null '\bdocker\b'; then
-  DOCKER_COMPOSE="docker-compose"
-else
-  DOCKER_COMPOSE="sudo docker-compose"
-fi
-
-# Create a symlink to the local Maven repository
-[ -L .m2 ] || ln -s -t . ~/.m2
-
-$DOCKER_COMPOSE --file=docker-compose.init.yml --project-name=portal-backend-init up
-
-echo "Need to set the current user as owner of the files generated in target directory..."
-sudo chown -R $USER:$USER ./target
-
-echo "Done"
+docker-compose build
+docker-compose up -d
diff --git a/src/docker/build/.gitignore b/src/docker/build/.gitignore
deleted file mode 100644
index d392f0e82c4ac6dd2e7bb17eb9253e1b30d07105..0000000000000000000000000000000000000000
--- a/src/docker/build/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.jar
diff --git a/src/docker/build/Dockerfile b/src/docker/build/Dockerfile
index 1369edf76009678d08db82e5e5ce87ef7b829f85..b4318d788f65cf01d672e59aab38c69b6e4aa17f 100644
--- a/src/docker/build/Dockerfile
+++ b/src/docker/build/Dockerfile
@@ -1,19 +1,8 @@
-# This Dockerfile encapsulate the MIP portal  backend application for development purposes.
-
 FROM maven:3-jdk-8
 
-RUN apt-get update && apt-get install -y wget
-RUN wget https://github.com/jwilder/dockerize/releases/download/v0.2.0/dockerize-linux-amd64-v0.2.0.tar.gz
-RUN tar -C /usr/local/bin -xzvf dockerize-linux-amd64-v0.2.0.tar.gz
-
-COPY mip.sh /opt/portal/
-COPY mip.jar /opt/portal/lib/
-RUN chmod +x /opt/portal/mip.sh
-EXPOSE 8080
-
-VOLUME /opt/portal/config/
-VOLUME /opt/portal/lib/
+COPY ./build-in-docker.sh /build-in-docker.sh
 
+VOLUME /opt/portal/
 WORKDIR /opt/portal/
 
-CMD ["/usr/local/bin/dockerize", "-timeout", "240s", "-wait", "tcp://portaldb:5432", "/opt/portal/mip.sh"]
+CMD ["bash", "/build-in-docker.sh"]
diff --git a/src/docker/build/build-in-docker.sh b/src/docker/build/build-in-docker.sh
new file mode 100644
index 0000000000000000000000000000000000000000..1c389dc33511fa5626e5b7faa425ea81e6850ea9
--- /dev/null
+++ b/src/docker/build/build-in-docker.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+rm -r target/
+mvn package -DskipTests -P dev
+
+# Uncomment to generate a PDF API documentation
+# mvn swagger2markup:convertSwagger2markup asciidoctor:process-asciidoc
diff --git a/src/docker/build/mip.sh b/src/docker/build/mip.sh
deleted file mode 100644
index cfae68474c42a1e66b80edb0ea849911ddd8eef4..0000000000000000000000000000000000000000
--- a/src/docker/build/mip.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env bash
-
-/usr/bin/java -DconfigFile=/opt/portal/config/application.yml -jar /opt/portal/lib/mip.jar
diff --git a/src/docker/init/build-in-docker.sh b/src/docker/init/build-in-docker.sh
deleted file mode 100644
index aff4c2e6c8eaabb623c62b16339b0dde606ead82..0000000000000000000000000000000000000000
--- a/src/docker/init/build-in-docker.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh -e
-
-echo ">>> Building inside Docker"
-cd /portal
-
-mvn package
-
-echo ">>> Press Ctrl+C to stop, build is complete"
diff --git a/src/docker/run/Dockerfile b/src/docker/run/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..61e0c7ee2580f256bfa049f91bb65d31f40350af
--- /dev/null
+++ b/src/docker/run/Dockerfile
@@ -0,0 +1,4 @@
+FROM frolvlad/alpine-oraclejdk8:slim
+
+COPY ./target/backend-services-DOCKER_BUILD.jar backend.jar
+CMD ["java", "-jar", "backend.jar"]
diff --git a/src/main/java/org/hbp/mip/utils/CustomLoginUrlAuthenticationEntryPoint.java b/src/main/java/org/hbp/mip/utils/CustomLoginUrlAuthenticationEntryPoint.java
new file mode 100644
index 0000000000000000000000000000000000000000..437052aa882be5f901a312cd269b58578c2b4d0b
--- /dev/null
+++ b/src/main/java/org/hbp/mip/utils/CustomLoginUrlAuthenticationEntryPoint.java
@@ -0,0 +1,21 @@
+package org.hbp.mip.utils;
+
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class CustomLoginUrlAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {
+
+    public CustomLoginUrlAuthenticationEntryPoint(String url) {
+        super(url);
+    }
+
+    @Override
+    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
+        response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
+    }
+}
diff --git a/start.bat b/start.bat
deleted file mode 100644
index af12a1b5207ddf687faaa0fd0f34405c1f966ed3..0000000000000000000000000000000000000000
--- a/start.bat
+++ /dev/null
@@ -1 +0,0 @@
-start java -jar target\backend-services-0.0.1-SNAPSHOT.jar  --spring.config.location=config\application.yml
\ No newline at end of file
diff --git a/stop.sh b/stop.sh
deleted file mode 100755
index 3bc6146acfc2c199f78ff4ceb66ae10aaf91ab51..0000000000000000000000000000000000000000
--- a/stop.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-if groups $USER | grep &>/dev/null '\bdocker\b'; then
-  DOCKER_COMPOSE="docker-compose"
-else
-  DOCKER_COMPOSE="sudo docker-compose"
-fi
-
-$DOCKER_COMPOSE rm -f