diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cf595361fbb93f04f57921f72baa737a1dfffa4d..9d3eedbc7147478fa4ee52500b71790ede88aa2c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -35,10 +35,11 @@ variables:
   DEP_ROOT: $CI_REGISTRY_IMAGE/dep
   BASE_IMAGE: $CI_REGISTRY_IMAGE/dep/base:latest
   SSUSER_IMAGE: $CI_REGISTRY_IMAGE/dep/ssuser:latest
-  CONTAINER_TEST_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
-  CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
-  CONTAINER_TEST_ISB401_IMAGE: $CI_REGISTRY_IMAGE:isb401_$CI_COMMIT_REF_SLUG
-  CONTAINER_RELEASE_ISB401_IMAGE: $CI_REGISTRY_IMAGE:isb401_$CI_COMMIT_TAG
+  ISB401_BASE_IMAGE: $CI_REGISTRY_IMAGE/dep/isb401_base:latest
+  TEST_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
+  RELEASE_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
+  ISB401_TEST_IMAGE: $CI_REGISTRY_IMAGE:isb401_$CI_COMMIT_REF_SLUG
+  ISB401_RELEASE_IMAGE: $CI_REGISTRY_IMAGE:isb401_$CI_COMMIT_TAG
 
 
 base-image:
@@ -70,79 +71,92 @@ ssuser-image:
     - docker build --pull -t $SSUSER_IMAGE .
     - docker push $SSUSER_IMAGE
 
+isb401-base-image:
+  tags:
+    - docker
+    - $RUNNER_TAG
+  stage: dep_images
+  needs:
+    - job: ssuser-image
+      optional: true
+  rules:
+    - changes:
+        - docker/isb401_base/Dockerfile
+  script:
+    - cd docker/isb401_base
+    - docker build --pull -t $ISB401_BASE_IMAGE .
+    - docker push $ISB401_BASE_IMAGE
+
+
+build:
+  tags:
+    - docker
+    - $RUNNER_TAG
+  stage: build
+  script:
+    - docker build --pull -t $TEST_IMAGE .
+    - docker push $TEST_IMAGE
+  only:
+    - devel
+    - master
+
+build-isb401:
+  tags:
+    - docker
+    - $RUNNER_TAG
+  stage: build
+  needs:
+    - job: build
+  script:
+    - cp docker/isb401/Dockerfile .
+    - docker build --pull -t ISB401_TEST_IMAGE .
+    - docker push ISB401_TEST_IMAGE
+  only:
+    - devel
+    - master
+
+test:
+  tags:
+    - docker
+    - $RUNNER_TAG
+  stage: test
+  script:
+    - docker pull $TEST_IMAGE
+    - docker run $TEST_IMAGE test
+
+test-isb401:
+  tags:
+    - docker
+    - $RUNNER_TAG
+  stage: test
+  script:
+    - docker pull $TEST_ISB401_IMAGE
+    - docker run $TEST_ISB401_IMAGE test
+  only:
+    - devel
+    - master
 
+release-image:
+  tags:
+    - docker
+    - $RUNNER_TAG
+  stage: release
+  script:
+    - docker pull $TEST_IMAGE
+    - docker tag $TEST_IMAGE $CONTAINER_RELEASE_IMAGE
+    - docker push $RELEASE_IMAGE
+  rules:
+    - if: $CI_COMMIT_TAG =~ /^v[0-9]+.[0-9]+.[0-9]+/
 
-# build:
-#   tags:
-#     - docker
-#     - $RUNNER_TAG
-#   stage: build
-#   before_script:
-#     # This did not work, so mounting authentication JSON on the side
-#     # of the runner.
-#     # - echo "$CI_REGISTRY_PASSWORD" | docker login "$CI_REGISTRY" --username "$CI_REGISTRY_USER" --password-stdin
-#   script:
-#     - docker build --pull -t $CONTAINER_TEST_IMAGE .
-#     - docker push $CONTAINER_TEST_IMAGE
-#   only:
-#     - devel
-#     - master
-
-# build-isb401:
-#   tags:
-#     - docker
-#     - $RUNNER_TAG
-#   stage: build
-#   script:
-#     - cp docker/isb401/Dockerfile .
-#     - docker build --pull -t $CONTAINER_TEST_ISB401_IMAGE .
-#     - docker push $CONTAINER_TEST_ISB401_IMAGE
-#   only:
-#     - devel
-#     - master
-
-# test:
-#   tags:
-#     - docker
-#     - $RUNNER_TAG
-#   stage: test
-#   script:
-#     - docker pull $CONTAINER_TEST_IMAGE
-#     - docker run $CONTAINER_TEST_IMAGE test
-
-# test-isb401:
-#   tags:
-#     - docker
-#     - $RUNNER_TAG
-#   stage: test
-#   script:
-#     - docker pull $CONTAINER_TEST_ISB401_IMAGE
-#     - docker run $CONTAINER_TEST_ISB401_IMAGE test
-#   only:
-#     - devel
-#     - master
-
-# release-image:
-#   tags:
-#     - docker
-#     - $RUNNER_TAG
-#   stage: release
-#   script:
-#     - docker pull $CONTAINER_TEST_IMAGE
-#     - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE
-#     - docker push $CONTAINER_RELEASE_IMAGE
-#   rules:
-#     - if: $CI_COMMIT_TAG =~ /^v[0-9]+.[0-9]+.[0-9]+/
-
-# release-isb401:
-#   tags:
-#     - docker
-#     - $RUNNER_TAG
-#   stage: release
-#   script:
-#     - docker pull $CONTAINER_TEST_ISB401_IMAGE
-#     - docker tag $CONTAINER_TEST_ISB401_IMAGE $CONTAINER_RELEASE_ISB401_IMAGE
-#     - docker push $CONTAINER_RELEASE_ISB401_IMAGE
-#   rules:
-#     - if: $CI_COMMIT_TAG =~ /^v[0-9]+.[0-9]+.[0-9]+/
+release-isb401:
+  tags:
+    - docker
+    - $RUNNER_TAG
+  stage: release
+  script:
+    - docker pull $ISB401_TEST_IMAGE
+    - docker tag $ISB401_TEST_IMAGE $ISB401_RELEASE_IMAGE
+    - docker push $ISB401_RELEASE_IMAGE
+  rules:
+    - if: $CI_COMMIT_TAG =~ /^v[0-9]+.[0-9]+.[0-9]+/
 
diff --git a/Dockerfile b/Dockerfile
index 18b4f028806c5b6394cd01e3491deafebed269f9..94c30a4d3f51ee41765795f9c622cb89e23daf7d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM gitlab.lcsb.uni.lu:4567/eci/shinyscreen:ssuser
+FROM gitlab.lcsb.uni.lu:4567/eci/shinyscreen/dep/ssuser:latest
 MAINTAINER todor.kondic@uni.lu
 EXPOSE 5432
 ENV SS_MF_DB="PubChemLite_exposomics.csv"
@@ -6,23 +6,11 @@ ENV SS_CPU 2
 ADD . shinyscreen/
 RUN R CMD build shinyscreen
 RUN R CMD INSTALL shinyscreen
-RUN useradd -ms /bin/bash ssuser
 RUN cp shinyscreen/runme /home/ssuser/runme
 RUN cp -R shinyscreen /home/ssuser
 RUN chmod u+x /home/ssuser/runme
 RUN chown ssuser /home/ssuser/runme
 RUN chown -R ssuser /home/ssuser/shinyscreen
-USER ssuser
-WORKDIR /home/ssuser
-RUN mkdir top_data_dir
-RUN mkdir projects
-RUN mkdir metfrag_dbs
-RUN mkdir users
-# RUN mkdir -p isb401/top_data_dir/isb401
-# RUN mkdir -p isb401/projects/isb401
-# WORKDIR isb401/top_data_dir/isb401
-# RUN curl -LJO https://zenodo.org/record/3666069/files/ISB401_AA_Std_pos.mzML?download=1
-# RUN curl -LJO https://zenodo.org/record/3666069/files/ISB401_KO_pos.mzML?download=1
-# RUN curl -LJO https://zenodo.org/record/3666069/files/ISB401_WT_pos.mzML?download=1
-RUN R -e 'library(shinyscreen);setwd("~");init(top_data_dir="~/top_data_dir",projects="~/projects",users_dir="~/users",metfrag_db_dir=Sys.getenv("SS_MF_DB_DIR"),metfrag_jar="/usr/local/bin/MetFragCommandLine.jar",save=T,merge=F)'
+RUN R -e 'library(shinyscreen);setwd("~");init(top_data_dir="~/top_data_dir",projects="~/projects",users_dir="~/users",metfrag_db_dir=Sys.getenv("SS_MF_DB_DIR"),metfrag_jar="/usr/local/bin/MetFragCommandLine.jar",no_structure_plot=T,save=T,merge=F)'
 ENTRYPOINT ["/home/ssuser/runme"]
+CMD ["app"]
diff --git a/docker/isb401/Dockerfile b/docker/isb401/Dockerfile
index 394578306ae6fd4910b92f1c211513944cdead85..16b84c9200c46b140dee309994dc7486f6453f9a 100644
--- a/docker/isb401/Dockerfile
+++ b/docker/isb401/Dockerfile
@@ -1,30 +1,17 @@
-FROM gitlab.lcsb.uni.lu:4567/eci/shinyscreen:base
+FROM gitlab.lcsb.uni.lu:4567/eci/shinyscreen/deb/isb401_base:latest
 MAINTAINER todor.kondic@uni.lu
 
-
-
-RUN mkdir -p top_data_dir/isb401
-RUN mkdir -p projects/isb401
-WORKDIR isb401/top_data_dir/isb401
-RUN curl -LJO https://zenodo.org/record/3666069/files/ISB401_AA_Std_pos.mzML?download=1
-RUN curl -LJO https://zenodo.org/record/3666069/files/ISB401_KO_pos.mzML?download=1
-RUN curl -LJO https://zenodo.org/record/3666069/files/ISB401_WT_pos.mzML?download=1
-WORKDIR /home/ssuser/
-RUN curl -LJO https://gitlab.lcsb.uni.lu/eci/isb401/-/archive/master/isb401-master.tar.gz
-RUN tar -xf isb401-master.tar.gz
-RUN cp isb401-master/shinyscreen_files/*.csv /home/ssuser/projects/isb401
-RUN R -e 'library(shinyscreen);setwd("~");init(top_data_dir="~/top_data_dir",projects="~/projects",users_dir="~/users",metfrag_db_dir=Sys.getenv("SS_MF_DB_DIR"),metfrag_jar="/usr/local/bin/MetFragCommandLine.jar",save=T,merge=F)'
-ENTRYPOINT ["/home/ssuser/runme"]
-
-
-ENV SS_MF_JAR /usr/local/bin/MetFragCommandLine.jar
 EXPOSE 5432
+ENV SS_MF_DB="PubChemLite_exposomics.csv"
 ENV SS_CPU 2
+ADD . shinyscreen/
+RUN R CMD build shinyscreen
+RUN R CMD INSTALL shinyscreen
 RUN cp shinyscreen/runme /home/ssuser/runme
 RUN cp -R shinyscreen /home/ssuser
 RUN chmod u+x /home/ssuser/runme
 RUN chown ssuser /home/ssuser/runme
 RUN chown -R ssuser /home/ssuser/shinyscreen
-ADD . shinyscreen/
-RUN R CMD build shinyscreen
-RUN R CMD INSTALL shinyscreen
+RUN R -e 'library(shinyscreen);setwd("~");init(top_data_dir="~/top_data_dir",projects="~/projects",users_dir="~/users",metfrag_db_dir=Sys.getenv("SS_MF_DB_DIR"),metfrag_jar="/usr/local/bin/MetFragCommandLine.jar",no_structure_plot=T,save=T,merge=F)'
+ENTRYPOINT ["/home/ssuser/runme"]
+CMD ["app"]
\ No newline at end of file
diff --git a/docker/isb401_base/Dockerfile b/docker/isb401_base/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..c699e3516d4c24cb8d742d6309cb23bcfce5609e
--- /dev/null
+++ b/docker/isb401_base/Dockerfile
@@ -0,0 +1,12 @@
+FROM gitlab.lcsb.uni.lu:4567/eci/shinyscreen/dep/ssuser:latest
+MAINTAINER todor.kondic@uni.lu
+WORKDIR isb401/top_data_dir/isb401
+RUN curl -LJO https://zenodo.org/record/3666069/files/ISB401_AA_Std_pos.mzML
+RUN curl -LJO https://zenodo.org/record/3666069/files/ISB401_KO_pos.mzML
+RUN curl -LJO https://zenodo.org/record/3666069/files/ISB401_WT_pos.mzML
+WORKDIR /home/ssuser/
+RUN curl -LJO https://gitlab.lcsb.uni.lu/eci/isb401/-/archive/master/isb401-master.tar.gz
+RUN tar -xf isb401-master.tar.gz
+RUN mkdir top_data_dir/isb401
+RUN mkdir projects/isb401
+RUN cp isb401-master/shinyscreen_files/*.csv /home/ssuser/projects/isb401
\ No newline at end of file
diff --git a/runme b/runme
index 0b74d9d4ccb4c1b042d2f45506929713cbf64953..50373241ee471a3ee7e792aa2589385dd2b413a9 100644
--- a/runme
+++ b/runme
@@ -12,10 +12,10 @@ carg = commandArgs(trailingOnly=T)
 eo = init(metfrag_db_dir=mf_db_dir)
 if (length(carg)>0L) {
     if (carg[[1]]=="app") {
-        app(envopts=eo,shiny_args=list(launch.browser=F,port=5432))
+        app(envopts=eo,shiny_args=list(launch.browser=F,port=3838))
     } else if (carg[[1]]=="serve") {
         app(envopts=eo,shiny_args=list(launch.browser=F,
-                                       port=5432L,
+                                       port=3838L,
                                        host="0.0.0.0"))
     } else if (carg[[1]]=="test") {
         setwd("/home/ssuser/shinyscreen")
@@ -25,5 +25,7 @@ if (length(carg)>0L) {
         stop("Argument should be either `app', `test', or `serve'")
     }
 } else {
-    app(envopts=eo,shiny_args=list(launch.browser=F,port=5432))
+    app(envopts=eo,shiny_args=list(launch.browser=F,
+                                       port=3838L,
+                                       host="0.0.0.0"))
 }