diff --git a/tools/nimbus-gradle-plugin/src/main/groovy/org/mozilla/appservices/tooling/nimbus/NimbusAssembleToolsTask.groovy b/tools/nimbus-gradle-plugin/src/main/groovy/org/mozilla/appservices/tooling/nimbus/NimbusAssembleToolsTask.groovy
index 67c9e66d0..6dd949c92 100644
--- a/tools/nimbus-gradle-plugin/src/main/groovy/org/mozilla/appservices/tooling/nimbus/NimbusAssembleToolsTask.groovy
+++ b/tools/nimbus-gradle-plugin/src/main/groovy/org/mozilla/appservices/tooling/nimbus/NimbusAssembleToolsTask.groovy
@@ -20,6 +20,11 @@ import org.gradle.api.tasks.Nested
 import org.gradle.api.tasks.OutputFile
 import org.gradle.api.tasks.TaskAction
 
+import java.nio.file.Files
+import java.nio.file.Path
+import java.nio.file.Paths
+import java.nio.file.StandardCopyOption
+
 import javax.inject.Inject
 
 import groovy.transform.Immutable
@@ -84,46 +89,17 @@ abstract class NimbusAssembleToolsTask extends DefaultTask {
 
     @TaskAction
     void assembleTools() {
-        def sources = [fetchSpec, *fetchSpec.fallbackSources.get()].collect {
-            new Source(new URI(it.archive.get()), new URI(it.hash.get()))
-        }
-
-        def successfulSource = sources.find { it.trySaveArchiveTo(archiveFile.get().asFile) }
-        if (successfulSource == null) {
-            throw new GradleException("Couldn't fetch archive from any of: ${sources*.archiveURI.collect { "`$it`" }.join(', ')}")
-        }
-
-        // We get the checksum, although don't do anything with it yet;
-        // Checking it here would be able to detect if the zip file was tampered with
-        // in transit between here and the server.
-        // It won't detect compromise of the CI server.
-        try {
-            successfulSource.saveHashTo(hashFile.get().asFile)
-        } catch (IOException e) {
-            throw new GradleException("Couldn't fetch hash from `${successfulSource.hashURI}`", e)
-        }
-
-        def zipTree = archiveOperations.zipTree(archiveFile.get())
-        def visitedFilePaths = []
-        zipTree.matching {
-            include unzipSpec.includePatterns.get()
-        }.visit { FileVisitDetails details ->
-            if (!details.directory) {
-                if (visitedFilePaths.empty) {
-                    details.copyTo(fmlBinary.get().asFile)
-                    fmlBinary.get().asFile.setExecutable(true)
-                }
-                visitedFilePaths.add(details.relativePath)
+        String nimbusFmlPath = System.getenv("NIMBUS_FML")
+        Path source
+        if (nimbusFmlPath == null) {
+            nimbusFmlPath = System.getProperty("nimbusFml")
+            if (nimbusFmlPath == null) {
+                throw new GradleException("NIMBUS_FML and property nimbusFml are not defined.")
             }
         }
-
-        if (visitedFilePaths.empty) {
-            throw new GradleException("Couldn't find any files in archive matching unzip spec: (${unzipSpec.includePatterns.get().collect { "`$it`" }.join(' | ')})")
-        }
-
-        if (visitedFilePaths.size() > 1) {
-            throw new GradleException("Ambiguous unzip spec matched ${visitedFilePaths.size()} files in archive: ${visitedFilePaths.collect { "`$it`" }.join(', ')}")
-        }
+        source = Paths.get(nimbusFmlPath)
+        Path dest = fmlBinary.get().asFile.toPath()
+        Files.copy(source, dest, StandardCopyOption.REPLACE_EXISTING)
     }
 
     /**
