diff --git a/gradle/nshm.gradle b/gradle/nshm.gradle
index 0e1a39a17c9477faf6afe3985adf691099b5e3bc..7774f90b869a519aa9e96b2ca0069d7a0de8ecc2 100644
--- a/gradle/nshm.gradle
+++ b/gradle/nshm.gradle
@@ -15,9 +15,23 @@ ext {
   nshmDir = "nshms";
 
   // Download and unzip NSHM
-  downloadNshm = {repo, tag, year ->
+  downloadNshm = {repo, year ->
+    def yaml = new Yaml()
+    def nshmConfig = new Yaml().load(new File("${projectDir}/nshms.yml").newInputStream())
+    def nshm = nshmConfig.nshms.find{nshm -> nshm.repo == repo && nshm.year == year}
+
+    if (nshm == null) {
+      throw new Exception("NSHM ${repo} ${year} not found.")
+    }
+
+    def tag = nshm.tag
     def zipName = "${repo}-${tag}.zip";
     def zipFile = new File(nshmDir, zipName)
+    def nshmFile = file("${nshmDir}/${repo}-${year}")
+
+    if (nshmFile.exists()) {
+      delete nshmFile
+    }
 
     download.run {
       src "https://code.usgs.gov/ghsc/nshmp/nshms/${repo}/-/archive/${tag}/${zipName}"
@@ -27,7 +41,7 @@ ext {
       from zipTree(zipFile)
       into nshmDir
     }
-    file("${nshmDir}/${repo}-${tag}").renameTo(file("${nshmDir}/${repo}-${year}"))
+    file("${nshmDir}/${repo}-${tag}").renameTo(nshmFile)
     delete {
       delete zipFile
     }
@@ -39,25 +53,14 @@ task cleanNshm(type: Delete) {
 }
 clean.dependsOn cleanNshm
 
-// Download all NSHMs
-task nshms() {
-  dependsOn cleanNshm
-  def yaml = new Yaml()
-  def nshmConfig = new Yaml().load(new File("${projectDir}/nshms.yml").newInputStream())
-
-  doLast {
-    for (nshm in nshmConfig.nshms) {
-      // Download NSHM
-      downloadNshm(nshm.repo, nshm.tag, nshm.year)
-    }
-  }
-}
-
 // Test Alaska 2023 NSHM
 task testAlaska2023(type: Test) {
   description = "Test Alaska 2023 NSHM"
   group = "verification"
-  dependsOn nshms
+
+  doFirst {
+    downloadNshm("nshm-alaska", 2023)
+  }
 
   testLogging {
     exceptionFormat "full"
@@ -78,7 +81,10 @@ task testAlaska2023(type: Test) {
 task testConus2018(type: Test) {
   description = "Test CONUS 2018 NSHM"
   group = "verification"
-  dependsOn nshms
+
+  doFirst {
+    downloadNshm("nshm-conus", 2018)
+  }
 
   testLogging {
     exceptionFormat "full"
@@ -99,7 +105,10 @@ task testConus2018(type: Test) {
 task testConus2023(type: Test) {
   description = "Test CONUS 2023 NSHM"
   group = "verification"
-  dependsOn nshms
+
+  doFirst {
+    downloadNshm("nshm-conus", 2023)
+  }
 
   testLogging {
     exceptionFormat "full"
@@ -120,7 +129,10 @@ task testConus2023(type: Test) {
 task testHawaii2021(type: Test) {
   description = "Test Hawaii 2021 NSHM"
   group = "verification"
-  dependsOn nshms
+
+  doFirst {
+    downloadNshm("nshm-hawaii", 2021)
+  }
 
   testLogging {
     exceptionFormat "full"