diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1ad977ed6b67564ac661a07d91248807ae33280d..176ec286f88c00eb203d39deaae187248affc494 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -4,6 +4,8 @@ image: docker:latest
 variables:
   DOCKER_DRIVER: overlay2
   DOCKER_BUILDKIT: 1
+  TEXLIVE_IMAGE_UPSTREAM: texlive/texlive:latest
+  TEXLIVE_IMAGE: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/${TEXLIVE_IMAGE_UPSTREAM}
 
 # Docker in Docker Service
 services:
@@ -12,6 +14,7 @@ services:
 
 before_script:
   - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+  - docker login -u "$CI_DEPENDENCY_PROXY_USER" -p "$CI_DEPENDENCY_PROXY_PASSWORD" $CI_DEPENDENCY_PROXY_SERVER
   - source environment
 
 build-main:
@@ -55,29 +58,12 @@ build:
     - docker build
       --build-arg BUILDKIT_INLINE_CACHE=1
       --build-arg LDAP_PLUGIN_URL="${LDAP_PLUGIN_URL}"
-      --cache-from $CI_REGISTRY_IMAGE:stage-src
-      --target src
-      -t "$CI_REGISTRY_IMAGE:stage-src"
-      -t "$CI_REGISTRY_IMAGE:stage-src-branch-$CI_COMMIT_REF_SLUG" .
-    - docker push "$CI_REGISTRY_IMAGE:stage-src-branch-$CI_COMMIT_REF_SLUG"
-    - docker build
-      --build-arg BUILDKIT_INLINE_CACHE=1
-      --build-arg LDAP_PLUGIN_URL="${LDAP_PLUGIN_URL}"
-      --pull
-      --cache-from $CI_REGISTRY_IMAGE:stage-texlive-update
-      --target texlive-update
-      -t "$CI_REGISTRY_IMAGE:stage-texlive-update"
-      -t "$CI_REGISTRY_IMAGE:stage-texlive-update-branch-$CI_COMMIT_REF_SLUG" .
-    - docker push "$CI_REGISTRY_IMAGE:stage-texlive-update-branch-$CI_COMMIT_REF_SLUG"
-    - docker build
-      --build-arg BUILDKIT_INLINE_CACHE=1
-      --build-arg LDAP_PLUGIN_URL="${LDAP_PLUGIN_URL}"
+      --build-arg TEXLIVE_IMAGE="${TEXLIVE_IMAGE}"
       --build-arg login_text="${LOGIN_TEXT}"
       --build-arg collab_text="${COLLAB_TEXT}"
       --pull
-      --cache-from $CI_REGISTRY_IMAGE
-      --target app --squash
-      -t "$CI_REGISTRY_IMAGE"
+      --cache-from "$CI_REGISTRY_IMAGE:branch-$CI_COMMIT_REF_SLUG"
+      --cache-from "$CI_REGISTRY_IMAGE"
       -t "$CI_REGISTRY_IMAGE:branch-$CI_COMMIT_REF_SLUG" .
     - docker push "$CI_REGISTRY_IMAGE:branch-$CI_COMMIT_REF_SLUG"
   except:
diff --git a/Dockerfile b/Dockerfile
index b0a53f53b27c88d47ed00dbe3df292d3c14da170..ad84c01ec3cf4348920294103f0691ff758851ae 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,7 @@
 ARG BASE=docker.io/sharelatex/sharelatex:2.6.1
+ARG TEXLIVE_IMAGE=registry.gitlab.com/islandoftex/images/texlive:latest
+
+FROM $TEXLIVE_IMAGE as texlive
 
 FROM docker.io/nixpkgs/curl as src
 ARG LDAP_PLUGIN_URL=https://codeload.github.com/smhaller/ldap-overleaf-sl/tar.gz/master
@@ -6,11 +9,7 @@ RUN mkdir /src && cd /src && curl "$LDAP_PLUGIN_URL" | tar -xzf - --strip-compon
 RUN ls /src
 RUN sysctl fs.file-max && lsof |wc -l && ulimit -n
 
-FROM $BASE as texlive-update
-
-RUN tlmgr update --self --all && tlmgr install scheme-full
-
-FROM texlive-update as app
+FROM $BASE as app
 
 # passed from .env (via make)
 ARG collab_text
@@ -54,3 +53,6 @@ RUN rm /var/www/sharelatex/web/app/views/admin/register.pug
 #RUN rm /var/www/sharelatex/web/app/views/project/editor/review-panel.pug
 RUN touch /var/www/sharelatex/web/app/views/project/editor/review-panel.pug
 
+# Update TeXLive
+COPY --from=texlive /usr/local/texlive /usr/local/texlive
+RUN tlmgr path add