diff --git a/Dockerfile b/Dockerfile
index 98b6bf5..4a0bdcd 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -58,6 +58,7 @@
 
 USER ${user}
 
+COPY jenkins-support /usr/local/bin/jenkins-support
 COPY jenkins.sh /usr/local/bin/jenkins.sh
 ENTRYPOINT ["/bin/tini", "--", "/usr/local/bin/jenkins.sh"]
 
diff --git a/install-plugins.sh b/install-plugins.sh
index 4e47afe..cdb2917 100755
--- a/install-plugins.sh
+++ b/install-plugins.sh
Binary files differ
diff --git a/jenkins-support b/jenkins-support
new file mode 100755
index 0000000..6174b86
--- /dev/null
+++ b/jenkins-support
@@ -0,0 +1,127 @@
+#!/bin/bash -e
+
+# compare if version1 < version2
+versionLT() {
+	local v1; v1=$(echo $1 | cut -d '-' -f 1 )
+	local q1; q1=$(echo $1 | cut -s -d '-' -f 2- )
+	local v2; v2=$(echo $2 | cut -d '-' -f 1 )
+	local q2; q2=$(echo $2 | cut -s -d '-' -f 2- )
+	if [ "$v1" = "$v2" ]; then
+		if [ "$q1" = "$q2" ]; then
+			return 1
+		else
+			if [ -z "$q1" ]; then
+				return 1
+			else
+				if [ -z "$q2" ]; then
+					return 0
+				else
+					[  "$q1" = "`echo -e "$q1\n$q2" | sort -V | head -n1`" ]
+				fi
+			fi
+		fi
+	else
+		[  "$v1" = "`echo -e "$v1\n$v2" | sort -V | head -n1`" ]
+	fi
+}
+
+# returns a plugin version from a plugin archive
+get_plugin_version() {
+	local archive; archive=$1
+	local version; version=$(unzip -p $archive META-INF/MANIFEST.MF | grep "^Plugin-Version: " | sed -e 's#^Plugin-Version: ##')
+	version=${version%%[[:space:]]}
+	echo $version
+}
+
+# Copy files from /usr/share/jenkins/ref into $JENKINS_HOME
+# So the initial JENKINS-HOME is set with expected content.
+# Don't override, as this is just a reference setup, and use from UI
+# can then change this, upgrade plugins, etc.
+copy_reference_file() {
+	f="${1%/}"
+	b="${f%.override}"
+	rel="${b:23}"
+	version_marker="${rel}.version_from_image"
+	dir=$(dirname "${b}")
+	local action;
+	local reason;
+	local container_version;
+	local image_version;
+	local marker_version;
+	local log; log=false
+	if [[ ${rel} == plugins/*.jpi ]]; then
+	    container_version=$(get_plugin_version $JENKINS_HOME/${rel})
+        image_version=$(get_plugin_version ${f})
+	    if [[ -e $JENKINS_HOME/${version_marker} ]]; then
+            marker_version=$(cat $JENKINS_HOME/${version_marker})
+            if versionLT $marker_version $container_version; then
+                action="SKIPPED"
+                reason="Installed version ($container_version) has been manually upgraded from initial version ($marker_version)"
+                log=true
+            else
+                if [[ "$image_version" == "$container_version" ]]; then
+                    action="SKIPPED"
+                    reason="Version from image is the same as the installed version $image_version"
+                else
+                    if versionLT $image_version $container_version; then
+                        action="SKIPPED"
+                        log=true
+                        reason="Image version ($image_version) is older than installed version ($container_version)"
+                    else
+                        action="UPGRADED"
+                        log=true
+                        reason="Image version ($image_version) is newer than installed version ($container_version)"
+                    fi
+                fi
+            fi
+        else
+            if [[ -n "$TRY_UPGRADE_IF_NO_MARKER" ]]; then
+                if [[ "$image_version" == "$container_version" ]]; then
+                    action="SKIPPED"
+                    reason="Version from image is the same as the installed version $image_version (no marker found)"
+                    # Add marker for next time
+                    echo $image_version > $JENKINS_HOME/${version_marker}
+                else
+                    if versionLT $image_version $container_version; then
+                        action="SKIPPED"
+                        log=true
+                        reason="Image version ($image_version) is older than installed version ($container_version) (no marker found)"
+                    else
+                        action="UPGRADED"
+                        log=true
+                        reason="Image version ($image_version) is newer than installed version ($container_version) (no marker found)"
+                    fi
+                fi
+            fi
+		fi
+        if [[ ! -e $JENKINS_HOME/${rel} || "$action" == "UPGRADED" || $f = *.override ]]; then
+            action=${action:-"INSTALLED"}
+            log=true
+            mkdir -p "$JENKINS_HOME/${dir:23}"
+            cp -r "${f}" "$JENKINS_HOME/${rel}";
+		    # pin plugins on initial copy
+		    touch "$JENKINS_HOME/${rel}.pinned"
+            echo $image_version > $JENKINS_HOME/${version_marker}
+            reason=${reason:-$image_version}
+        else
+            action=${action:-"SKIPPED"}
+	    fi
+    else
+        if [[ ! -e $JENKINS_HOME/${rel} || $f = *.override ]]
+        then
+            action="INSTALLED"
+            log=true
+            mkdir -p "$JENKINS_HOME/${dir:23}"
+            cp -r "${f}" "$JENKINS_HOME/${rel}";
+        else
+            action="SKIPPED"
+        fi
+	fi
+	if [[ -n "$VERBOSE" || "$log" == "true" ]]; then
+        if [ -z "$reason" ]; then
+            echo "$action $rel" >> "$COPY_REFERENCE_FILE_LOG"
+        else
+            echo "$action $rel : $reason" >> "$COPY_REFERENCE_FILE_LOG"
+        fi
+	fi
+}
\ No newline at end of file
diff --git a/jenkins.sh b/jenkins.sh
index 570f1c8..df1531d 100755
--- a/jenkins.sh
+++ b/jenkins.sh
@@ -1,119 +1,9 @@
-#! /bin/bash
+#! /bin/bash -e
 
-set -e
-
-# compare if version1 < version2
-versionLT() {
-	[ "$1" = "$2" ] && return 1 || [  "$1" = "`echo -e "$1\n$2" | sort -V | head -n1`" ]
-}
-
-# returns a plugin version from a plugin archive
-get_plugin_version() {
-	local archive; archive=$1
-	local version; version=$(unzip -p $archive META-INF/MANIFEST.MF | grep "^Plugin-Version: " | sed -e 's#^Plugin-Version: ##')
-	version=${version%%[[:space:]]}
-	echo $version
-}
-
-# Copy files from /usr/share/jenkins/ref into $JENKINS_HOME
-# So the initial JENKINS-HOME is set with expected content.
-# Don't override, as this is just a reference setup, and use from UI
-# can then change this, upgrade plugins, etc.
-copy_reference_file() {
-	f="${1%/}"
-	b="${f%.override}"
-	rel="${b:23}"
-	version_marker="${rel}.version_from_image"
-	dir=$(dirname "${b}")
-	local action;
-	local reason;
-	local container_version;
-	local image_version;
-	local marker_version;
-	local log; log=false
-	if [[ ${rel} == plugins/*.jpi ]]; then
-	    container_version=$(get_plugin_version $JENKINS_HOME/${rel})
-        image_version=$(get_plugin_version ${f})
-	    if [[ -e $JENKINS_HOME/${version_marker} ]]; then
-            marker_version=$(cat $JENKINS_HOME/${version_marker})
-            if versionLT $marker_version $container_version; then
-                action="SKIPPED"
-                reason="Installed version ($container_version) has been manually upgraded from initial version ($marker_version)"
-                log=true
-            else
-                if [[ "$image_version" == "$container_version" ]]; then
-                    action="SKIPPED"
-                    reason="Version from image is the same as the installed version $image_version"
-                else
-                    if versionLT $image_version $container_version; then
-                        action="SKIPPED"
-                        log=true
-                        reason="Image version ($image_version) is older than installed version ($container_version)"
-                    else
-                        action="UPGRADED"
-                        log=true
-                        reason="Image version ($image_version) is newer than installed version ($container_version)"
-                    fi
-                fi
-            fi
-        else
-            if [[ -n "$TRY_UPGRADE_IF_NO_MARKER" ]]; then
-                if [[ "$image_version" == "$container_version" ]]; then
-                    action="SKIPPED"
-                    reason="Version from image is the same as the installed version $image_version (no marker found)"
-                    # Add marker for next time
-                    echo $image_version > $JENKINS_HOME/${version_marker}
-                else
-                    if versionLT $image_version $container_version; then
-                        action="SKIPPED"
-                        log=true
-                        reason="Image version ($image_version) is older than installed version ($container_version) (no marker found)"
-                    else
-                        action="UPGRADED"
-                        log=true
-                        reason="Image version ($image_version) is newer than installed version ($container_version) (no marker found)"
-                    fi
-                fi
-            fi
-		fi
-        if [[ ! -e $JENKINS_HOME/${rel} || "$action" == "UPGRADED" || $f = *.override ]]; then
-            action=${action:-"INSTALLED"}
-            log=true
-            mkdir -p "$JENKINS_HOME/${dir:23}"
-            cp -r "${f}" "$JENKINS_HOME/${rel}";
-		    # pin plugins on initial copy
-		    touch "$JENKINS_HOME/${rel}.pinned"
-            echo $image_version > $JENKINS_HOME/${version_marker}
-            reason=${reason:-$image_version}
-        else
-            action=${action:-"SKIPPED"}
-	    fi
-    else
-        if [[ ! -e $JENKINS_HOME/${rel} || $f = *.override ]]
-        then
-            action="INSTALLED"
-            log=true
-            mkdir -p "$JENKINS_HOME/${dir:23}"
-            cp -r "${f}" "$JENKINS_HOME/${rel}";
-        else
-            action="SKIPPED"
-        fi
-	fi
-	if [[ -n "$VERBOSE" || "$log" == "true" ]]; then
-        if [ -z "$reason" ]; then
-            echo "$action $rel" >> "$COPY_REFERENCE_FILE_LOG"
-        else
-            echo "$action $rel : $reason" >> "$COPY_REFERENCE_FILE_LOG"
-        fi
-	fi
-}
 : ${JENKINS_HOME:="/var/jenkins_home"}
-export -f versionLT
-export -f get_plugin_version
-export -f copy_reference_file
 touch "${COPY_REFERENCE_FILE_LOG}" || (echo "Can not write to ${COPY_REFERENCE_FILE_LOG}. Wrong volume permissions?" && exit 1)
 echo "--- Copying files at $(date)" >> "$COPY_REFERENCE_FILE_LOG"
-find /usr/share/jenkins/ref/ -type f -exec bash -c "copy_reference_file '{}'" \;
+find /usr/share/jenkins/ref/ -type f -exec bash -c ". /usr/local/bin/jenkins-support; copy_reference_file '{}'" \;
 
 # if `docker run` first argument start with `--` the user is passing jenkins launcher arguments
 if [[ $# -lt 1 ]] || [[ "$1" == "--"* ]]; then
diff --git a/tests/functions.bats b/tests/functions.bats
new file mode 100644
index 0000000..6745b10
--- /dev/null
+++ b/tests/functions.bats
@@ -0,0 +1,24 @@
+#!/usr/bin/env bats
+
+load 'test_helper/bats-support/load'
+load 'test_helper/bats-assert/load'
+load test_helpers
+
+. $BATS_TEST_DIRNAME/../jenkins-support
+
+@test "versionLT" {
+  run versionLT 1.0 1.0
+  assert_failure
+  run versionLT 1.0 1.1
+  assert_success
+  run versionLT 1.1 1.0
+  assert_failure
+  run versionLT 1.0-beta-1 1.0
+  assert_success
+  run versionLT 1.0 1.0-beta-1
+  assert_failure
+  run versionLT 1.0-alpha-1 1.0-beta-1
+  assert_success
+  run versionLT 1.0-beta-1 1.0-alpha-1
+  assert_failure
+}
