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
