diff --git a/Dockerfile b/Dockerfile
index 02f7328..1c96f1f 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -23,7 +23,7 @@ ENV TZ=UTC
 ENV LOG_LEVEL=9
 
 #Get required packages
-RUN apk update && apk add tzdata curl shadow bash xz git procps nodejs npm nano
+RUN apk update && apk add --no-cache tzdata curl shadow bash xz git procps nodejs npm nano openssl ca-certificates
 
 #Make folders
 RUN mkdir /config && \
@@ -39,13 +39,18 @@ RUN curl -fsSL "https://github.com/just-containers/s6-overlay/releases/download/
     curl -fsSL "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-arch.tar.xz" | tar Jpxf - -C /
 ENV S6_BEHAVIOUR_IF_STAGE2_FAILS=2 S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 S6_VERBOSITY=1
 
-#Install Cronicle
-RUN mkdir /app/cronicle && \
+#Install Cronicle & tidy up things I don't want
+RUN apk add --no-cache --virtual .jq jq && \
+    mkdir /app/cronicle && \
     cd /app/cronicle && \
     wget https://github.com/cronicle-edge/cronicle-edge/archive/refs/tags/v${CRONICLE_EDGE_VERSION}.tar.gz && \
     tar -xf v${CRONICLE_EDGE_VERSION}.tar.gz --strip-components 1 && \
-    rm -rf Docker* .gitignore Readme.md .vscode && \
-    rm -rf v${CRONICLE_EDGE_VERSION}.tar.gz
+    rm -rf Docker* .gitignore Readme.md .vscode sample_conf/examples/backup sample_conf/examples/docker.sh && \
+    jq 'del(.storage[] | select(contains(["global/conf_keys"])))' sample_conf/setup.json >> sample_conf/setup-new.json && \
+    rm sample_conf/setup.json && \
+    mv sample_conf/setup-new.json sample_conf/setup.json && \
+    rm -rf v${CRONICLE_EDGE_VERSION}.tar.gz && \
+    apk del .jq
 
 WORKDIR /app/cronicle
 RUN npm install && \
@@ -57,5 +62,6 @@ RUN chmod +x /cronicle-prepare.sh && \
     chown -R ${PUID}:${PGID} /app /config
 
 EXPOSE 3012
+EXPOSE 3013
 
 ENTRYPOINT [ "/init" ]
\ No newline at end of file
diff --git a/README.md b/README.md
index e5d0041..b74d41a 100644
--- a/README.md
+++ b/README.md
@@ -92,6 +92,8 @@ services:
 
 This container automatically checks for scripts in `/config/init` and runs them at startup. This could be useful if you need to install additional applications into a worker container so it can execute jobs.
 
+Note that any scripts will be run as `root` before permissions are altered in `/app` and `/config`. Anything that an init script does in either of these folders will be owned by `cronicle` when the container continues.
+
 ## Reverse Proxying
 
 For a single manager behind a reverse proxy, you may need to specify a specific route for the web-socket connections.
diff --git a/root/container-init.sh b/root/container-init.sh
index ce9909a..5516571 100644
--- a/root/container-init.sh
+++ b/root/container-init.sh
@@ -39,15 +39,30 @@ else
     exit 1
 fi
 
+#Importing and running additional scripts placed in /config/init
+if [ -d /config/init ]; then
+	if [ "$(ls -A /config/init)" ]; then
+        echo "Running additional startup scripts."
+        for f in /config/init/*.sh; do
+            bash "$f" 
+        done
+    else
+        echo "/config/init is empty - no additional startup scripts detected."
+    fi
+else
+	echo "Directory /config/init not found. Creating."
+    mkdir /config/init && chown -R cronicle:cronicle /config/init
+fi
+
 echo "Checking permissions in /config and /app."
 
-if [ ! "$(stat -c %u /app)" -eq "${PUID}" ] || [ ! "$(stat -c %g /app)" -eq "${PGID}" ]
+if [ -n "$(find /app \! -user ${PUID})" ] || [ -n "$(find /app \! -group ${PGID})" ]
 then
     echo "Fixing permissions for /app (this can take some time)."
     chown -R cronicle:cronicle /app
 fi
 
-if [ ! "$(stat -c %u /config)" -eq "${PUID}" ] || [ ! "$(stat -c %g /config)" -eq "${PGID}" ]
+if [ -n "$(find /config \! -user ${PUID})" ] || [ -n "$(find /config \! -group ${PGID})" ]
 then
     echo "Fixing permissions for /config (this can take some time)."
     chown -R cronicle:cronicle /config
diff --git a/root/cronicle-prepare.sh b/root/cronicle-prepare.sh
index 699fae4..09eb0d8 100644
--- a/root/cronicle-prepare.sh
+++ b/root/cronicle-prepare.sh
@@ -3,34 +3,13 @@
 
 echo "Preparing Cronicle"
 
-#Importing and running additional scripts placed in /config/init
-if [ -d /config/init ]
-then
-	if [ "$(ls -A /config/init)" ]
-    then
-
-        echo "Running additional startup scripts."
-
-        bash /config/init/*
-	
-    else
-        
-        echo "/config/init is empty - no additional startup scripts detected."
-	
-    fi
-else
-
-	echo "Directory /config/init not found. Creating."
-
-    mkdir /config/init
-
-fi
-
 if [ ! -d /config/cronicle ]
 then
+
     echo "Directory /config/cronicle not found. Creating."
 
     mkdir /config/cronicle
+
 fi
 
 #Detecting what mode Cronicle should be started in
@@ -48,15 +27,27 @@ then
         cp -r /app/cronicle/conf /config/cronicle/conf
         rm -rf /app/cronicle/conf
         ln -s /config/cronicle/conf /app/cronicle/conf
+
     else
 
         echo "Config dir already exists. Doesn't need creating."
         echo "Linking persistent config dir back into Cronicle."
+
         rm -rf /app/cronicle/conf
         ln -s /config/cronicle/conf /app/cronicle/conf
 
     fi
 
+    if [ ! -f /config/cronicle/conf/ssl.crt ] || [ ! -f /config/cronicle/conf/ssl.key ]
+    then
+
+        echo "One or both SSL components are missing. Generating."
+
+        rm -f /config/cronicle/conf/ssl.crt /config/cronicle/conf/ssl.key
+        openssl req -x509 -newkey rsa:4096 -keyout /config/cronicle/conf/ssl.key -out /config/cronicle/conf/ssl.crt -sha256 -days 3650 -nodes -subj "/C=XX/ST=StateName/L=CityName/O=CompanyName/OU=CompanySectionName/CN=CommonNameOrHostname"
+
+    fi
+    
     if [ ! -f /config/cronicle/data/.setup_done ]
     then
 
@@ -84,24 +75,32 @@ then
 
     echo "Cronicle is running in 'worker' mode."
 
+    #Copying config directory to /config/cronicle/conf if not already there, then linking back into Cronicle
     if [ ! -f /config/cronicle/conf/config.json ]
     then
 
         echo "No config found. Copy config.json from the manager server and place it in /config/cronicle/conf dir."
-        mkdir -p /config/cronicle/conf
-        exit 0
+        cp -R /app/cronicle/conf /config/cronicle/conf
+        rm -rf /config/cronicle/conf/config.json
+        echo ''
+        echo ''
+        echo '*************************************'
+        exit 1
 
     else
 
-        #Removing default config.json and linking provided one back into Cronicle
-        rm -rf /app/cronicle/conf/config.json
-        ln -s /config/cronicle/conf/config.json /app/cronicle/conf/config.json
+        echo "Config is present."
+        echo "Linking persistent config dir back into Cronicle."
+
+        rm -rf /app/cronicle/conf
+        ln -s /config/cronicle/conf /app/cronicle/conf
 
     fi
 
 else
 
-    echo "'$MODE' is not a recognised appion for the MODE environment variable. Accepted appions are 'manager' and 'worker'."
+    echo "'$MODE' is not a recognised appion for the MODE environment variable. Accepted options are 'manager' and 'worker'."
+    exit 1
 
 fi
 
@@ -114,10 +113,12 @@ then
     cp -r /app/cronicle/logs /config/cronicle/logs
     rm -rf /app/cronicle/logs
     ln -s /config/cronicle/logs /app/cronicle/logs
+
 else
 
     echo "Logs dir already exists. Doesn't need creating."
     echo "Linking persistent logs dir back into Cronicle."
+    
     rm -rf /app/cronicle/logs
     ln -s /config/cronicle/logs /app/cronicle/logs