diff --git a/abuild.conf.in b/abuild.conf.in
index 5db5a6ca5d52bf69d67e21b40889b3666b81c973..11a83e72f6448418828889a00d44606b51810910 100644
--- a/abuild.conf.in
+++ b/abuild.conf.in
@@ -27,3 +27,7 @@
 
 # uncomment to prevent using global cache directories for Go and Cargo
 #MOVE_CACHES=1
+
+# uncomment to create .orig files when patches don't align. May change
+# build output
+#patch_args_cfg="--backup-if-mismatch"
diff --git a/abuild.in b/abuild.in
index aeb4d8de901735305edcab51d6943f36a1b2e69a..2b6c7e5c175c6e5628627b49c96acab4a9c369ad 100644
--- a/abuild.in
+++ b/abuild.in
@@ -733,19 +733,20 @@ default_prepare() {
 		return 0
 	fi
 	[ -d "$builddir" ] || { error "Is \$builddir set correctly?"; return 1; }
+	local args="$patch_args_cfg ${patch_args:--p1}"
 	for i in $source; do
 		case ${i%::*} in
 			*.patch)
 				msg "${i%::*}"
-				POSIXLY_CORRECT=1 patch ${patch_args:--p1} -i "$srcdir/$(filename_from_uri $i)" || failed="$failed $i"
+				POSIXLY_CORRECT=1 patch $args -i "$srcdir/$(filename_from_uri $i)" || failed="$failed $i"
 				;;
 			*.patch.gz)
 				msg "${i%::*}"
-				gunzip -c "$srcdir/$(filename_from_uri $i)" | POSIXLY_CORRECT=1 patch ${patch_args:--p1} || failed="$failed $i"
+				gunzip -c "$srcdir/$(filename_from_uri $i)" | POSIXLY_CORRECT=1 patch $args || failed="$failed $i"
 				;;
 			*.patch.xz)
 				msg "${i%::*}"
-				unxz -c "$srcdir/$(filename_from_uri $i)" | POSIXLY_CORRECT=1 patch ${patch_args:--p1} || failed="$failed $i"
+				unxz -c "$srcdir/$(filename_from_uri $i)" | POSIXLY_CORRECT=1 patch $args || failed="$failed $i"
 				;;
 		esac
 	done