diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 286e6d45cd364d2a42172a9ebd410b22b6370540..7c9e8a54c65d2396ed9f860759e64f4a3dfffaaf 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -14,6 +14,7 @@ variables:
   image: 0xacab.org:4567/leap/docker/debian:bullseye_amd64
   tags:
     - docker-in-docker
+    - runner02-sea
   services:
     - docker:dind
 
@@ -51,6 +52,15 @@ docker_image:emulator:
   allow_failure: true
   <<: *build_docker_image
 
+docker_image:fastlane:
+  stage: docker_image_other
+  variables:
+    DOCKER_IMAGE: android-fastlane
+#    DEFAULT_IMAGE: "registry.0xacab.org/leap/bitmask_android/android-emulator"
+  when: manual
+  <<: *build_docker_image
+  allow_failure: true
+
 unit_test:
   image: "0xacab.org:4567/leap/bitmask_android/android-ndk:latest"
   stage: test
@@ -63,6 +73,38 @@ unit_test:
     when: on_failure
     expire_in: 3 days
 
+screenshot:
+  image: "0xacab.org:4567/leap/bitmask_android/android-fastlane:latest"
+  stage: test
+  when: always
+#  needs: ["docker_image:fastlane"]
+  tags:
+    - birch
+  variables:
+    LC_ALL: "en_US.UTF-8"
+    LANG: "en_US.UTF-8"
+    ANDROID_EMULATOR_USE_SYSTEM_LIBS: 1
+    DEBIAN_FRONTEN: "noninteractive"
+# try to re-use the build artifcats from before, lib building is slow
+#  dependencies:
+#    - build
+  script:
+    - ./scripts/prepareForScreenshots.sh
+    - ./scripts/installFastlane.sh
+    - ./gradlew testCustomProductionFatReleaseUnitTest testNormalProductionFatReleaseUnitTest
+    - ./scripts/startEmulators.sh
+    - ./scripts/fastlane.sh
+  artifacts:
+    paths:
+      - app
+      - app/build/screenshots
+      - ./source/custom/fastlane/metadata/
+      - build/
+      - src/normal/
+    when: always
+    expire_in: 3 days
+  allow_failure: true
+
 #ui_test:
 #  image: "0xacab.org:4567/leap/bitmask_android/android-emulator:latest"
 #  stage: test
@@ -106,7 +148,7 @@ build:
   script:
     - ./scripts/cleanProject.sh
     - ./scripts/build_deps.sh >> build_deps.log 2>&1
-    - ./gradlew clean assembleNormalProductionFatDebug --stacktrace >> build.log 2>&1
+    - ./gradlew clean assembleNormalProductionFatDebug -debug >> build.log 2>&1
   artifacts:
     paths:
     - app/build/outputs/
diff --git a/docker/android-fastlane/Dockerfile b/docker/android-fastlane/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..07240c2107f366e2cd2c165ccdb80a97fccf97ca
--- /dev/null
+++ b/docker/android-fastlane/Dockerfile
@@ -0,0 +1,89 @@
+FROM registry.0xacab.org/leap/bitmask_android/android-sdk:latest
+
+MAINTAINER LEAP Encryption Access Project <info@leap.se>
+LABEL Description="Android emulator image based on android-sdk" Vendor="LEAP" Version="2"
+
+# Make sure debconf doesn't complain about lack of interactivity
+ENV DEBIAN_FRONTEND noninteractive
+# ensure GL compatibility
+ENV ANDROID_EMULATOR_USE_SYSTEM_LIBS=1
+
+# ------------------------------------------------------
+# --- System Dependencies
+
+# Need docker package in order to do Docker-in-Docker (DIND)
+RUN lsb_release -a
+
+RUN apt-get update -qq && \
+    apt-get -y dist-upgrade && \
+    apt-get -y install gnupg apt-transport-https
+
+# Docker apt details should be inherited from android_sdk
+#RUN curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && \
+#    echo \
+#      "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
+#      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
+
+# JNI build dependencies w/ 32-bit compatible C libs
+# fastlane dependencies
+
+RUN apt-get update -qq && \
+    apt-get install -y docker-ce docker-ce-cli make gcc swig file lib32stdc++6 lib32z1 \
+    autoconf autogen automake autopoint autotools-dev gettext-base libtool patch pkg-config po4a \
+    curl git openjdk-11-jdk openjdk-11-jre-headless imagemagick libpulse0 po4a \
+    make build-essential ruby-dev imagemagick docker-ce-cli mesa-utils xvfb \
+    libstdc++6 libncurses5 libsdl1.2debian imagemagick libpulse-java libpulse0 libxkbcommon-x11-0 && \
+    apt-get clean && \
+    apt-get autoclean && \
+    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+
+# ------------------------------------------------------
+# --- Install Android Emulator
+
+RUN echo "accept all licenses"
+# Accept all licenses
+RUN echo y | sdkmanager --licenses
+RUN sdkmanager --list
+
+# Install Android SDK emulator package
+RUN echo y | sdkmanager "emulator"
+
+# Install System Images for emulators
+# seems like every version has its own quirks
+RUN echo y | sdkmanager "system-images;android-31;google_apis;x86_64"
+#RUN echo y | sdkmanager "system-images;android-27;google_apis;x86"
+#RUN echo y | sdkmanager "system-images;android-25;google_apis;x86_64"
+#RUN echo y | sdkmanager "system-images;android-23;google_apis;x86_64"
+
+# fastlane wants 2 emulators. Starting happens in the scripts
+RUN echo no | avdmanager create avd --force --name testApi31 --abi google_apis/x86_64 --package 'system-images;android-31;google_apis;x86_64'
+# TODO: fastlane has been troublesome for newer versions, need to dive deep to update
+#RUN echo no | avdmanager create avd --force --name testApi27 --abi google_apis/x86_64 --package 'system-images;android-27;google_apis;x86_64'
+#RUN echo no | avdmanager create avd --force --name testApi27-duet --abi google_apis/x86_64 --package 'system-images;android-27;google_apis;x86_64'
+
+# Install Android cmake
+RUN sdkmanager "cmake;3.10.2.4988404"
+
+# Fastlane:
+RUN gem install bundler fastlane
+
+
+###############################################
+
+# this stuff is all just notes... really, don't call it a mess
+# ------------------------------------------------------
+# --- Install Android NDK (for running C code)
+
+#ENV ANDROID_NDK_VERSION "r21e"
+#ENV ANDROID_NDK_HOME ${ANDROID_HOME}/android-ndk-${ANDROID_NDK_VERSION}
+#ENV ANDROID_NDK_URL http://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip
+#ENV ANDROID_SDK_ROOT ${ANDROID_HOME}/latest/cmdline-tools
+#
+#RUN curl -L $ANDROID_NDK_URL -o ndk.zip  \
+#    && unzip ndk.zip -d $ANDROID_HOME/ndk  \
+#    && rm -rf ndk.zip
+#RUN cat $ANDROID_HOME/ndk/android-ndk-${ANDROID_NDK_VERSION}/source.properties | \
+#    grep Pkg.Revision | cut -d "=" -f 2 | \
+#    xargs -I '{}' mv $ANDROID_HOME/ndk/android-ndk-${ANDROID_NDK_VERSION}/ $ANDROID_HOME/ndk/'{}'
+#ENV PATH ${PATH}:${ANDROID_NDK_HOME}
+
diff --git a/scripts/fastlane.sh b/scripts/fastlane.sh
index f039cd24dd40b64b50a31105d2b2176ffae4e239..1ce06ab8c3162b8a5335b5e7c99aefd5c041cd50 100755
--- a/scripts/fastlane.sh
+++ b/scripts/fastlane.sh
@@ -26,9 +26,8 @@ BASE_DIR="$SCRIPT_DIR/.."
 
 cd $BASE_DIR
 if [[ -z $BUILD_CUSTOM ]]; then
-  fastlane android bitmask_screenshots
+  fastlane --verbose  android bitmask_screenshots
 else
   fastlane android custom_build_screenshots --env custom
 fi;
 cd -
-
diff --git a/scripts/installFastlane.sh b/scripts/installFastlane.sh
new file mode 100755
index 0000000000000000000000000000000000000000..9abc6211b3020ba7124f8367c62d706a2e545e19
--- /dev/null
+++ b/scripts/installFastlane.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+## --- System Dependencies for fastlane
+apt-get update -qq && \
+apt-get -y dist-upgrade && \
+apt-get -y install make build-essential ruby ruby-dev imagemagick xvfb libxcb1 libname-dev
+
+gem install fastlane
+
+## ------------------------------------------------------
+## --- Android Emulator 
+
+sdkmanager "platforms;android-30"
+#
+# Install Android SDK emulator package
+echo y | sdkmanager "emulator"
+
+echo y | sdkmanager "system-images;android-31;google_apis;x86_64"
+#echo y | sdkmanager "system-images;android-30;google_apis;x86_64"
+#echo y | sdkmanager "system-images;android-28;google_apis;x86_64"
+#echo y | sdkmanager "system-images;android-27;google_apis;x86"
+#echo y | sdkmanager "system-images;android-25;google_apis;x86_64"
+
+echo no | avdmanager create avd --force --name testApi31 --abi google_apis/x86_64 --package 'system-images;android-31;google_apis;x86_64'
+echo no | avdmanager create avd --force --name testApiduet --abi google_apis/x86_64 --package 'system-images;android-31;google_apis;x86_64'
+
+#echo no | avdmanager create avd --force --name testApi31 --abi google_apis/x86_64 --package 'system-images;android-30;google_apis;x86_64'
+#echo no | avdmanager create avd --force --name testApiduet --abi google_apis/x86_64 --package 'system-images;android-30;google_apis;x86_64'
+
+#echo no | avdmanager create avd --force --name testApi28 --abi google_apis/x86_64 --package 'system-images;android-28;google_apis;x86_64'
+#echo no | avdmanager create avd --force --name testApiduet --abi google_apis/x86_64 --package 'system-images;android-28;google_apis;x86_64'
+ 
+#echo no | avdmanager create avd --force --name testApi27 --abi google_apis/x86 --package 'system-images;android-27;google_apis;x86'
+#echo no | avdmanager create avd --force --name testApiduet --abi google_apis/x86 --package 'system-images;android-27;google_apis;x86'
+ 
+#echo no | avdmanager create avd --force --name testApi25 --abi google_apis/x86_64 --package 'system-images;android-25;google_apis;x86_64'
+#echo no | avdmanager create avd --force --name testApiduet --abi google_apis/x86_64 --package 'system-images;android-25;google_apis;x86_64'
+
+##bundle exec fastlane android bitmask_screenshots
diff --git a/scripts/prepareForScreenshots.sh b/scripts/prepareForScreenshots.sh
new file mode 100755
index 0000000000000000000000000000000000000000..c2ae1bd5f3821ab018b0cb0c8c66563f4a322d19
--- /dev/null
+++ b/scripts/prepareForScreenshots.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# Copyright (c) 2023 LEAP Encryption Access Project and contributors
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+SCRIPT_DIR=$(dirname "$0")
+BASE_DIR="$SCRIPT_DIR/.."
+
+rm -r $BASE_DIR/bitmaskcore/lib/*
+
+git checkout -- \*
+git checkout -- \.\*
+git submodule foreach --recursive git reset --hard HEAD
+git submodule sync --recursive
+git submodule update --init --recursive
+
+BUILD_TOR=false BUILD_OPENVPN_LIBS=false ./scripts/build_deps.sh
diff --git a/scripts/startEmulators.sh b/scripts/startEmulators.sh
index d1bc829224ba56ece4e3d1fea1d290fe9c855775..1d73dee7ddefb803238347e2e41a30e03338e7c1 100755
--- a/scripts/startEmulators.sh
+++ b/scripts/startEmulators.sh
@@ -1,5 +1,13 @@
 #!/bin/bash
 
+PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/Sdk/tools:$ANDROID_HOME/emulator
+apt-get update
+apt-get install -y libpulse-java libpulse0 imagemagick libxkbcommon-x11-0 xvfb vulkan-tools
+# there's a QT thing missing
+emulator -accel-check
+docker info
+export DISPLAY=:99.0
+
 # init parameters
 for ((i=1;i<=$#;i++)); 
 do
@@ -28,6 +36,13 @@ err() {
 }
 sec=0
 timeout=30
+
+# make sure the emulator is there - and in the PATH
+echo y | sdkmanager "emulator"
+avdmanager list avd
+emulator -version
+find /opt -iname emulator -type f
+
 waitForAdbDevices() {
 	while true; do
         	if [[ $sec -ge $timeout ]]; then
@@ -37,7 +52,7 @@ waitForAdbDevices() {
        		if [[ "$out" == "$N" ]]; then
                 	break
         	fi
-        	let "r = sec % 5"
+        	let "r = sec % 50"
         	if [[ $r -eq 0 ]]; then
                 	echo "Waiting for adb devices to start: $out / $N"
         	fi
@@ -47,12 +62,14 @@ waitForAdbDevices() {
 }
 
 #start first N avd images
-avdmanager list avd | grep Name: | cut -d ':' -f2 | head -n $N |  xargs -I{} -P$N -n1 emulator -no-snapshot -avd {} &
+Xvfb :0 -screen 0 800x600x16 &
+#avdmanager list avd | grep 'Name:' | cut -d ':' -f2 | head -n $N |  xargs -I{} -P$N -n1 emulator -no-snapshot -avd {} &
+avdmanager list avd | grep 'Name:' | cut -d ':' -f2 | head -n $N |  xargs -I{} -P$N -n1 emulator -no-window -no-audio -no-snapshot -avd {} &
+#avdmanager list avd | grep 'Name:' | cut -d ':' -f2 | head -n $N |  xargs -I{} -P$N -n1 emulator -no-snapshot -no-window -avd {} &
+# avdmanager list avd | grep 'Name:' | cut -d ':' -f2 | head -n $N |  xargs -I{} -P$N -n1 emulator -no-snapshot -no-window -no-boot-anim -accel on  -avd {} &
 waitForAdbDevices
 echo "adb found all emulators..."
 
 #wait for each emulator that booting completed
 adb devices | grep -v List | awk '$2{print $1}' | xargs -I{} .gitlab/wait-for-emulator.sh -s {}
 echo "all emulators successfully booted"
-
-