diff --git a/scripts/rebuildPatches.sh b/scripts/rebuildPatches.sh
index a065d6ce5..b89ee69f5 100755
--- a/scripts/rebuildPatches.sh
+++ b/scripts/rebuildPatches.sh
@@ -8,7 +8,10 @@ source "$basedir/scripts/functions.sh"
 gitcmd="git -c commit.gpgsign=false -c core.safecrlf=false"
 
 echo "Rebuilding patch files from current fork state..."
-
+nofilter="0"
+if [ "$2" = "nofilter" ]; then
+    nofilter="1"
+fi
 function cleanupPatches {
     cd "$1"
     for patch in *.patch; do
@@ -56,7 +59,9 @@ function savePatches {
     $gitcmd format-patch --no-stat -N -o "$basedir/${what_name}-Patches/" upstream/upstream >/dev/null
     cd "$basedir"
     $gitcmd add -A "$basedir/${what_name}-Patches"
-    cleanupPatches "$basedir/${what_name}-Patches"
+    if [ "$nofilter" == "0" ]; then
+        cleanupPatches "$basedir/${what_name}-Patches"
+    fi
     echo "  Patches saved for $what to $what_name-Patches/"
 }
 
diff --git a/scripts/upstreamMerge.sh b/scripts/upstreamMerge.sh
index a54b7c10e..d59a8b442 100755
--- a/scripts/upstreamMerge.sh
+++ b/scripts/upstreamMerge.sh
@@ -7,11 +7,21 @@ basedir="$(cd "$1" && pwd -P)"
 workdir="$basedir/work"
 gitcmd="git -c commit.gpgsign=false"
 
+updated="0"
+function getRef {
+    git ls-tree $1 $2  | cut -d' ' -f3 | cut -f1
+}
 function update {
     cd "$workdir/$1"
     $gitcmd fetch && $gitcmd clean -fd && $gitcmd reset --hard origin/master
+    refRemote=$(git rev-parse HEAD)
     cd ../
     $gitcmd add $1
+    refHEAD=$(getRef HEAD "$workdir/$1")
+    echo "$1 $refHEAD - $refRemote"
+    if [ "$refHEAD" != "$refRemote" ]; then
+        export updated="1"
+    fi
 }
 
 update Bukkit
@@ -22,4 +32,9 @@ if [[ "$2" = "all" || "$2" = "a" ]] ; then
 	update BuildData
 	update Paperclip
 fi
+if [ "$updated" == "1" ]; then
+    echo "Rebuilding patches without filtering to improve apply ability"
+    cd "$basedir"
+    scripts/rebuildPatches.sh "$basedir" nofilter 1>/dev/null|| exit 1
+fi
 )