diff --git a/0001-mkinitcpio-remove-preset-pacsave.patch b/0001-mkinitcpio-remove-preset-pacsave.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e2f7efc30aad1e5404bed6c9115c4b958f9a0c79
--- /dev/null
+++ b/0001-mkinitcpio-remove-preset-pacsave.patch
@@ -0,0 +1,59 @@
+diff --git a/libalpm/scripts/mkinitcpio-remove b/libalpm/scripts/mkinitcpio-remove
+index 86838e4..17b4b31 100644
+--- a/libalpm/scripts/mkinitcpio-remove
++++ b/libalpm/scripts/mkinitcpio-remove
+@@ -2,6 +2,20 @@
+ 
+ package=0
+ 
++process_preset() {
++    if [[ -n "${pkgbase}" && -e $preset ]]; then
++        if ! cmp $preset > /dev/null 2>&1 <(sed "s|%PKGBASE%|${pkgbase}|g" /usr/share/mkinitcpio/hook.preset); then
++            if [[ ! -e $preset.pacsave ]]; then
++                # save the preset as pacsave
++                mv $preset $preset.pacsave && return 0
++            fi
++        else
++            # remove the preset
++            rm $preset && return 0
++        fi
++    fi
++}
++
+ while read -r line; do
+     if [[ $line != */vmlinuz ]]; then
+         # triggers when it's a change to usr/lib/initcpio/*
+@@ -23,17 +37,25 @@ while read -r line; do
+         # remove the installed kernel
+         rm $kernel
+     fi
+-    if [[ -e $preset ]]; then
+-        # remove the preset
+-        rm $preset
++
++    process_preset "${pkgbase}" $preset
++
++    if [[ -e $initramfs ]]; then
++        # remove the main image
++        rm $initramfs
+     fi
+-    if [[ -e $initramfs && -e $fallback_initramfs ]]; then
+-        # remove the images
+-        rm $initramfs $fallback_initramfs
++    if [[ -e $fallback_initramfs ]]; then
++        # remove the fallback image
++        rm $fallback_initramfs
+     fi
+ done
+ 
+ if (( package )) && compgen -G /etc/mkinitcpio.d/"*.preset" > /dev/null; then
+-    # remove all presets
+-    rm /etc/mkinitcpio.d/*.preset
++    shopt -s nullglob
++    for preset in /etc/mkinitcpio.d/*.preset; do
++        pkgbase=${preset##*/}
++        pkgbase=${pkgbase%.preset}
++        process_preset "${pkgbase}" $preset
++    done
++    shopt -u nullglob
+ fi
diff --git a/0002-mkinitcpio-fix-builtin.patch b/0002-mkinitcpio-fix-builtin.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3ee8d1f4f9399af7aa35b09861132a8594c121b0
--- /dev/null
+++ b/0002-mkinitcpio-fix-builtin.patch
@@ -0,0 +1,29 @@
+From 30dbfc2770cb49cb3babfb750205b126d7d88791 Mon Sep 17 00:00:00 2001
+From: Morten Linderud <morten@linderud.pw>
+Date: Thu, 20 Feb 2020 09:44:29 +0100
+Subject: [PATCH] [functions] Ignore modinfo built-in modules
+
+modinfo have started reporting filenames as "(builtin)" on built-in
+modules. Ignore these and continue with other modules.
+
+Fixes: https://bugs.archlinux.org/task/65564
+Introduced in: https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git/commit/?id=e7e2cb61fa9f1db3429d91ef6accff549500d268
+
+Signed-off-by: Morten Linderud <morten@linderud.pw>
+---
+ functions | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/functions b/functions
+index f407c82..1c72b56 100644
+--- a/functions
++++ b/functions
+@@ -371,7 +371,7 @@ add_module() {
+     target=${1%.ko*} target=${target//-/_}
+ 
+     # skip expensive stuff if this module has already been added
+-    (( _addedmodules["$target"] == 1 )) && return
++    (( _addedmodules["$target"] > 0 )) && return
+ 
+     while IFS=':= ' read -r -d '' field value; do
+         case "$field" in
diff --git a/PKGBUILD b/PKGBUILD
index 9b2ebf6a075fed42024b187a1e3717c89cf8d995..55fe02b327c1a17eaec7ae8109f453871b561386 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -5,7 +5,7 @@
 
 pkgname=mkinitcpio
 pkgver=27
-pkgrel=2.1
+pkgrel=3
 pkgdesc="Modular initramfs image creation utility"
 arch=('any')
 url="https://projects.archlinux.org/mkinitcpio.git/"
@@ -20,11 +20,12 @@ optdepends=('xz: Use lzma or xz compression for the initramfs image'
 provides=('initramfs')
 backup=('etc/mkinitcpio.conf')
 source=("https://sources.archlinux.org/other/$pkgname/$pkgname-$pkgver.tar.gz"{,.sig}
-        0001-mkinitcpio-remove-preset-pacsave.patch manjaro.patch)
+        0001-mkinitcpio-remove-preset-pacsave.patch 0002-mkinitcpio-fix-builtin.patch manjaro.patch)
 install=mkinitcpio.install
 sha256sums=('e6bff1cb78b677538eb9aace900b715fd59de8fc210b74fb9d899dfaa32bc354'
             'SKIP'
             '845569fa760f70c868ecb3dc8ae9667287970526dddaf403fdafcb716e8b3d51'
+            'd097f3df15ba9fefd3771f9f784e1c31c8d5ff1d9d6885a46fc6b5188e419796'
             'f6a619c2dfc5a6bdd4596d9b4d9f7fdcce3ee0244390161cab51ef646b7317f8')
 validpgpkeys=('487EACC08557AD082088DABA1EB2638FF56C0C53'   # Dave Reisner
               '86CFFCA918CF3AF47147588051E8B148A9999C34'   # Evangelos Foutras
@@ -34,6 +35,8 @@ prepare() {
   cd "$pkgname-$pkgver"
   # Apply 0001-mkinitcpio-remove-preset-pacsave.patch
   patch -Np1 < $srcdir/0001-mkinitcpio-remove-preset-pacsave.patch
+  # Apply 0002-mkinitcpio-fix-builtin.patch
+  patch -Np1 < $srcdir/0002-mkinitcpio-fix-builtin.patch
   # Add changes of Manjaro
   patch -p1 -i ../manjaro.patch
 }