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
