diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/BranchCommand.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/BranchCommand.java
new file mode 100644
index 0000000..e38ccd4
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/BranchCommand.java
@@ -0,0 +1,49 @@
+// Copyright 2020 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.download.command;
+
+import static com.google.gerrit.extensions.client.GeneralPreferencesInfo.DownloadCommand.CHECKOUT;
+
+import com.google.gerrit.server.config.DownloadConfig;
+import com.google.gerrit.server.config.GerritServerConfig;
+import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.inject.Inject;
+import org.eclipse.jgit.lib.Config;
+
+class BranchCommand extends GitDownloadCommand {
+  @Inject
+  BranchCommand(
+      @GerritServerConfig Config cfg,
+      DownloadConfig downloadConfig,
+      GitRepositoryManager repoManager) {
+    super(cfg, downloadConfig, CHECKOUT, repoManager);
+  }
+
+  @Override
+  String getCommand(String url, String ref, String id) {
+    return "git fetch "
+        + QuoteUtil.quote(url)
+        + " "
+        + ref
+        + " && git checkout -b CL-"
+        + id.replaceAll("/", "-")
+        + " FETCH_HEAD";
+  }
+
+  @Override
+  String getRepoCommand(String url, String id) {
+    return "repo download -b CL-" + id.replaceAll("/", "-") + " " + QuoteUtil.quote(url) + " " + id;
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/CheckoutCommand.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/CheckoutCommand.java
index 34ca19c..bc3ede6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/CheckoutCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/CheckoutCommand.java
@@ -32,7 +32,7 @@
   }
 
   @Override
-  String getCommand(String url, String ref) {
+  String getCommand(String url, String ref, String id) {
     return "git fetch " + QuoteUtil.quote(url) + " " + ref + " && git checkout FETCH_HEAD";
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/CherryPickCommand.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/CherryPickCommand.java
index 0e964be..4856e83 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/CherryPickCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/CherryPickCommand.java
@@ -32,7 +32,7 @@
   }
 
   @Override
-  String getCommand(String url, String ref) {
+  String getCommand(String url, String ref, String id) {
     return "git fetch " + QuoteUtil.quote(url) + " " + ref + " && git cherry-pick FETCH_HEAD";
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/DownloadCommandsModule.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/DownloadCommandsModule.java
index 7ab47f2..2f64b71 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/DownloadCommandsModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/DownloadCommandsModule.java
@@ -23,6 +23,8 @@
   protected void configure() {
     bind(DownloadCommand.class).annotatedWith(Exports.named("Checkout")).to(CheckoutCommand.class);
 
+    bind(DownloadCommand.class).annotatedWith(Exports.named("Branch")).to(BranchCommand.class);
+
     bind(DownloadCommand.class)
         .annotatedWith(Exports.named("Cherry Pick"))
         .to(CherryPickCommand.class);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/FormatPatchCommand.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/FormatPatchCommand.java
index a65b5e1..eb3ec3a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/FormatPatchCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/FormatPatchCommand.java
@@ -32,7 +32,7 @@
   }
 
   @Override
-  String getCommand(String url, String ref) {
+  String getCommand(String url, String ref, String id) {
     return "git fetch "
         + QuoteUtil.quote(url)
         + " "
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/GitDownloadCommand.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/GitDownloadCommand.java
index e47a31a..f85ffb4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/GitDownloadCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/GitDownloadCommand.java
@@ -61,20 +61,25 @@
   @Override
   public final String getCommand(DownloadScheme scheme, String project, String ref) {
     if (commandAllowed) {
+      String id = refToId(ref);
+      if (id == null) {
+        return null;
+      }
+
       String url = scheme.getUrl(project);
+      if (url == null) {
+        return null;
+      }
+
       if (scheme instanceof RepoScheme) {
-        String id = refToId(ref);
-        if (id != null) {
-          return getRepoCommand(url, id);
+        return getRepoCommand(url, id);
+      }
+      if (isValidUrl(url)) {
+        if (checkForHiddenChangeRefs) {
+          ref = resolveRef(project, ref);
         }
-      } else {
-        if (url != null && isValidUrl(url)) {
-          if (checkForHiddenChangeRefs) {
-            ref = resolveRef(project, ref);
-          }
-          if (ref != null) {
-            return getCommand(url, ref);
-          }
+        if (ref != null) {
+          return getCommand(url, ref, id);
         }
       }
     }
@@ -134,7 +139,12 @@
     }
   }
 
-  abstract String getCommand(String url, String ref);
+  /**
+   * @param url The project URL this change is for.
+   * @param ref Git named ref to this CL/patchset.
+   * @param id The CL/PS numbers.
+   */
+  abstract String getCommand(String url, String ref, String id);
 
   /**
    * @param url The project URL this change is for.
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/PullCommand.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/PullCommand.java
index d93f6b6..97b4c6e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/PullCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/PullCommand.java
@@ -32,7 +32,7 @@
   }
 
   @Override
-  String getCommand(String url, String ref) {
+  String getCommand(String url, String ref, String id) {
     return "git pull " + QuoteUtil.quote(url) + " " + ref;
   }
 }
