diff --git a/upstream_utils/update_eigen.py b/upstream_utils/update_eigen.py
index 0df72a8..e04689a 100755
--- a/upstream_utils/update_eigen.py
+++ b/upstream_utils/update_eigen.py
@@ -4,7 +4,13 @@
 import re
 import shutil
 
-from upstream_utils import setup_upstream_repo, comment_out_invalid_includes, walk_cwd_and_copy_if, apply_patches
+from upstream_utils import (
+    get_repo_root,
+    clone_repo,
+    comment_out_invalid_includes,
+    walk_cwd_and_copy_if,
+    git_am,
+)
 
 
 def eigen_inclusions(dp, f):
@@ -38,8 +44,12 @@
 
     # Include architectures we care about
     if "Core/arch/" in abspath:
-        return ("arch/AVX/" in abspath or "arch/Default" in abspath or
-                "arch/NEON" in abspath or "arch/SSE" in abspath)
+        return (
+            "arch/AVX/" in abspath
+            or "arch/Default" in abspath
+            or "arch/NEON" in abspath
+            or "arch/SSE" in abspath
+        )
 
     # Include the following modules
     modules = [
@@ -47,22 +57,24 @@
         "Core",
         "Eigenvalues",
         "Householder",
+        "IterativeLinearSolvers",
         "Jacobi",
         "LU",
+        "OrderingMethods",
         "QR",
         "SVD",
+        "SparseCholesky",
+        "SparseCore",
+        "SparseLU",
+        "SparseQR",
         "StlSupport",
         "misc",
         "plugins",
     ]
     modules_rgx = r"|".join("/" + m for m in modules)
 
-    # "Std" matches StdDeque, StdList, and StdVector headers
-    if re.search(modules_rgx, abspath) or "Std" in f:
-        return True
-    else:
-        # Exclude all other modules
-        return False
+    # "Std" matches StdDeque, StdList, and StdVector headers. Other modules are excluded.
+    return bool(re.search(modules_rgx, abspath) or "Std" in f)
 
 
 def unsupported_inclusions(dp, f):
@@ -82,39 +94,47 @@
     if f == "CMakeLists.txt" or "README" in f:
         return False
 
-    # Include the AutoDiff and MatrixFunctions modules
-    return "AutoDiff" in abspath or "MatrixFunctions" in abspath
+    # Include the MatrixFunctions module
+    return "MatrixFunctions" in abspath
 
 
 def main():
-    root, repo = setup_upstream_repo("https://gitlab.com/libeigen/eigen.git",
-                                     "3.4.0")
-    wpimath = os.path.join(root, "wpimath")
+    upstream_root = clone_repo("https://gitlab.com/libeigen/eigen.git", "3.4.0")
+    wpilib_root = get_repo_root()
+    wpimath = os.path.join(wpilib_root, "wpimath")
+
+    # Apply patches to upstream Git repo
+    os.chdir(upstream_root)
+    for f in ["0001-Disable-warnings.patch"]:
+        git_am(os.path.join(wpilib_root, "upstream_utils/eigen_patches", f))
 
     # Delete old install
     for d in [
-            "src/main/native/eigeninclude/Eigen",
-            "src/main/native/eigeninclude/unsupported"
+        "src/main/native/thirdparty/eigen/include/Eigen",
+        "src/main/native/thirdparty/eigen/include/unsupported",
     ]:
         shutil.rmtree(os.path.join(wpimath, d), ignore_errors=True)
 
     # Copy Eigen headers into allwpilib
     eigen_files = walk_cwd_and_copy_if(
-        eigen_inclusions, os.path.join(wpimath, "src/main/native/eigeninclude"))
+        eigen_inclusions,
+        os.path.join(wpimath, "src/main/native/thirdparty/eigen/include"),
+    )
 
     # Copy unsupported headers into allwpilib
     unsupported_files = walk_cwd_and_copy_if(
         unsupported_inclusions,
-        os.path.join(wpimath, "src/main/native/eigeninclude"))
+        os.path.join(wpimath, "src/main/native/thirdparty/eigen/include"),
+    )
 
     for f in eigen_files:
         comment_out_invalid_includes(
-            f, [os.path.join(wpimath, "src/main/native/eigeninclude")])
+            f, [os.path.join(wpimath, "src/main/native/thirdparty/eigen/include")]
+        )
     for f in unsupported_files:
         comment_out_invalid_includes(
-            f, [os.path.join(wpimath, "src/main/native/eigeninclude")])
-
-    apply_patches(root, ["upstream_utils/eigen-maybe-uninitialized.patch"])
+            f, [os.path.join(wpimath, "src/main/native/thirdparty/eigen/include")]
+        )
 
 
 if __name__ == "__main__":
