diff --git a/upstream_utils/update_drake.py b/upstream_utils/update_drake.py
index 069d3a8..1849494 100755
--- a/upstream_utils/update_drake.py
+++ b/upstream_utils/update_drake.py
@@ -3,68 +3,97 @@
 import os
 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 main():
-    root, repo = setup_upstream_repo("https://github.com/RobotLocomotion/drake",
-                                     "v0.37.0")
-    wpimath = os.path.join(root, "wpimath")
+    upstream_root = clone_repo("https://github.com/RobotLocomotion/drake", "v1.6.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-Replace-Eigen-Dense-with-Eigen-Core.patch",
+        "0002-Add-WPILIB_DLLEXPORT-to-DARE-function-declarations.patch",
+    ]:
+        git_am(os.path.join(wpilib_root, "upstream_utils/drake_patches", f))
 
     # Delete old install
     for d in [
-            "src/main/native/cpp/drake", "src/main/native/include/drake",
-            "src/test/native/cpp/drake", "src/test/native/include/drake"
+        "src/main/native/thirdparty/drake/src",
+        "src/main/native/thirdparty/drake/include",
+        "src/test/native/cpp/drake",
+        "src/test/native/include/drake",
     ]:
         shutil.rmtree(os.path.join(wpimath, d), ignore_errors=True)
 
     # Copy drake source files into allwpilib
     src_files = walk_cwd_and_copy_if(
-        lambda dp, f: f in
-        ["drake_assert_and_throw.cc", "discrete_algebraic_riccati_equation.cc"],
-        os.path.join(wpimath, "src/main/native/cpp/drake"))
+        lambda dp, f: f
+        in ["drake_assert_and_throw.cc", "discrete_algebraic_riccati_equation.cc"],
+        os.path.join(wpimath, "src/main/native/thirdparty/drake/src"),
+    )
 
     # Copy drake header files into allwpilib
     include_files = walk_cwd_and_copy_if(
-        lambda dp, f: f in [
-            "drake_assert.h", "drake_assertion_error.h",
-            "is_approx_equal_abstol.h", "never_destroyed.h", "drake_copyable.h",
-            "drake_throw.h", "discrete_algebraic_riccati_equation.h"
-        ], os.path.join(wpimath, "src/main/native/include/drake"))
+        lambda dp, f: f
+        in [
+            "drake_assert.h",
+            "drake_assertion_error.h",
+            "is_approx_equal_abstol.h",
+            "never_destroyed.h",
+            "drake_copyable.h",
+            "drake_throw.h",
+            "discrete_algebraic_riccati_equation.h",
+        ],
+        os.path.join(wpimath, "src/main/native/thirdparty/drake/include/drake"),
+    )
 
     # Copy drake test source files into allwpilib
-    os.chdir(os.path.join(repo, "math/test"))
+    os.chdir(os.path.join(upstream_root, "math/test"))
     test_src_files = walk_cwd_and_copy_if(
         lambda dp, f: f == "discrete_algebraic_riccati_equation_test.cc",
-        os.path.join(wpimath, "src/test/native/cpp/drake"))
-    os.chdir(repo)
+        os.path.join(wpimath, "src/test/native/cpp/drake"),
+    )
+    os.chdir(upstream_root)
 
     # Copy drake test header files into allwpilib
     test_include_files = walk_cwd_and_copy_if(
         lambda dp, f: f == "eigen_matrix_compare.h",
-        os.path.join(wpimath, "src/test/native/include/drake"))
+        os.path.join(wpimath, "src/test/native/include/drake"),
+    )
 
     for f in src_files:
         comment_out_invalid_includes(
-            f, [os.path.join(wpimath, "src/main/native/include")])
+            f, [os.path.join(wpimath, "src/main/native/thirdparty/drake/include")]
+        )
     for f in include_files:
         comment_out_invalid_includes(
-            f, [os.path.join(wpimath, "src/main/native/include")])
+            f, [os.path.join(wpimath, "src/main/native/thirdparty/drake/include")]
+        )
     for f in test_src_files:
-        comment_out_invalid_includes(f, [
-            os.path.join(wpimath, "src/main/native/include"),
-            os.path.join(wpimath, "src/test/native/include")
-        ])
+        comment_out_invalid_includes(
+            f,
+            [
+                os.path.join(wpimath, "src/main/native/thirdparty/drake/include"),
+                os.path.join(wpimath, "src/test/native/include"),
+            ],
+        )
     for f in test_include_files:
-        comment_out_invalid_includes(f, [
-            os.path.join(wpimath, "src/main/native/include"),
-            os.path.join(wpimath, "src/test/native/include")
-        ])
-
-    apply_patches(root, [
-        "upstream_utils/drake-replace-dense-with-core.patch",
-        "upstream_utils/drake-dllexport-dare.patch"
-    ])
+        comment_out_invalid_includes(
+            f,
+            [
+                os.path.join(wpimath, "src/main/native/thirdparty/drake/include"),
+                os.path.join(wpimath, "src/test/native/include"),
+            ],
+        )
 
 
 if __name__ == "__main__":
