diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/Module.java b/src/main/java/com/googlesource/gerrit/plugins/download/Module.java
index 3f6da18..14ff781 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/Module.java
@@ -14,45 +14,15 @@
 
 package com.googlesource.gerrit.plugins.download;
 
-import com.google.gerrit.extensions.annotations.Exports;
-import com.google.gerrit.extensions.config.DownloadCommand;
-import com.google.gerrit.extensions.config.DownloadScheme;
 import com.google.inject.AbstractModule;
 
-import com.googlesource.gerrit.plugins.download.command.CheckoutCommand;
-import com.googlesource.gerrit.plugins.download.command.CherryPickCommand;
-import com.googlesource.gerrit.plugins.download.command.FormatPatchCommand;
-import com.googlesource.gerrit.plugins.download.command.PullCommand;
-import com.googlesource.gerrit.plugins.download.command.RepoCommand;
-import com.googlesource.gerrit.plugins.download.scheme.AnonymousHttpScheme;
-import com.googlesource.gerrit.plugins.download.scheme.GitScheme;
-import com.googlesource.gerrit.plugins.download.scheme.HttpScheme;
-import com.googlesource.gerrit.plugins.download.scheme.RepoScheme;
-import com.googlesource.gerrit.plugins.download.scheme.SshScheme;
+import com.googlesource.gerrit.plugins.download.command.DownloadCommandsModule;
+import com.googlesource.gerrit.plugins.download.scheme.SchemeModule;
 
 class Module extends AbstractModule {
   @Override
   protected void configure() {
-    bind(DownloadScheme.class).annotatedWith(Exports.named("anonymous http"))
-        .to(AnonymousHttpScheme.class);
-    bind(DownloadScheme.class).annotatedWith(Exports.named("git"))
-        .to(GitScheme.class);
-    bind(DownloadScheme.class).annotatedWith(Exports.named("http"))
-        .to(HttpScheme.class);
-    bind(DownloadScheme.class).annotatedWith(Exports.named("repo"))
-        .to(RepoScheme.class);
-    bind(DownloadScheme.class).annotatedWith(Exports.named("ssh"))
-        .to(SshScheme.class);
-
-    bind(DownloadCommand.class).annotatedWith(Exports.named("Checkout"))
-        .to(CheckoutCommand.class);
-    bind(DownloadCommand.class).annotatedWith(Exports.named("Cherry-Pick"))
-        .to(CherryPickCommand.class);
-    bind(DownloadCommand.class).annotatedWith(Exports.named("Format-Patch"))
-        .to(FormatPatchCommand.class);
-    bind(DownloadCommand.class).annotatedWith(Exports.named("Pull"))
-        .to(PullCommand.class);
-    bind(DownloadCommand.class).annotatedWith(Exports.named("Repo-Download"))
-        .to(RepoCommand.class);
+    install(new DownloadCommandsModule());
+    install(new SchemeModule());
   }
 }
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 349e56a..b415813 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
@@ -16,19 +16,17 @@
 
 import static com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadCommand.CHECKOUT;
 
-import com.google.gerrit.extensions.annotations.Listen;
 import com.google.gerrit.server.config.DownloadConfig;
 import com.google.inject.Inject;
 
-@Listen
-public class CheckoutCommand extends GitDownloadCommand {
+class CheckoutCommand extends GitDownloadCommand {
   @Inject
   CheckoutCommand(DownloadConfig downloadConfig) {
     super(downloadConfig, CHECKOUT);
   }
 
   @Override
-  public String getCommand(String url, String ref) {
+  String getCommand(String url, String ref) {
     return "git fetch " + 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 a357aa8..5490848 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
@@ -16,19 +16,17 @@
 
 import static com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadCommand.CHERRY_PICK;
 
-import com.google.gerrit.extensions.annotations.Listen;
 import com.google.gerrit.server.config.DownloadConfig;
 import com.google.inject.Inject;
 
-@Listen
-public class CherryPickCommand extends GitDownloadCommand {
+class CherryPickCommand extends GitDownloadCommand {
   @Inject
   CherryPickCommand(DownloadConfig downloadConfig) {
     super(downloadConfig, CHERRY_PICK);
   }
 
   @Override
-  public String getCommand(String url, String ref) {
+  String getCommand(String url, String ref) {
     return "git fetch " + 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
new file mode 100644
index 0000000..22ca5d3
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/DownloadCommandsModule.java
@@ -0,0 +1,44 @@
+// Copyright (C) 2013 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 com.google.gerrit.extensions.annotations.Exports;
+import com.google.gerrit.extensions.config.DownloadCommand;
+import com.google.inject.AbstractModule;
+
+public class DownloadCommandsModule extends AbstractModule {
+  @Override
+  protected void configure() {
+    bind(DownloadCommand.class)
+      .annotatedWith(Exports.named("Checkout"))
+      .to(CheckoutCommand.class);
+
+    bind(DownloadCommand.class)
+      .annotatedWith(Exports.named("Cherry Pick"))
+      .to(CherryPickCommand.class);
+
+    bind(DownloadCommand.class)
+      .annotatedWith(Exports.named("Format Patch"))
+      .to(FormatPatchCommand.class);
+
+    bind(DownloadCommand.class)
+      .annotatedWith(Exports.named("Pull"))
+      .to(PullCommand.class);
+
+    bind(DownloadCommand.class)
+      .annotatedWith(Exports.named("repo"))
+      .to(RepoCommand.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 aefa23f..67e1d17 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
@@ -16,19 +16,17 @@
 
 import static com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadCommand.FORMAT_PATCH;
 
-import com.google.gerrit.extensions.annotations.Listen;
 import com.google.gerrit.server.config.DownloadConfig;
 import com.google.inject.Inject;
 
-@Listen
-public class FormatPatchCommand extends GitDownloadCommand {
+class FormatPatchCommand extends GitDownloadCommand {
   @Inject
   FormatPatchCommand(DownloadConfig downloadConfig) {
     super(downloadConfig, FORMAT_PATCH);
   }
 
   @Override
-  public String getCommand(String url, String ref) {
+  String getCommand(String url, String ref) {
     return "git fetch " + url + " " + ref + " && git format-patch -1 --stdout FETCH_HEAD";
   }
 }
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 61e3fbd..a290856 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
@@ -21,12 +21,13 @@
 import com.google.gerrit.reviewdb.client.AccountGeneralPreferences;
 import com.google.gerrit.server.config.DownloadConfig;
 
-import com.googlesource.gerrit.plugins.download.scheme.AnonymousHttpScheme;
-import com.googlesource.gerrit.plugins.download.scheme.GitScheme;
-import com.googlesource.gerrit.plugins.download.scheme.HttpScheme;
-import com.googlesource.gerrit.plugins.download.scheme.SshScheme;
+import com.googlesource.gerrit.plugins.download.scheme.RepoScheme;
 
-public abstract class GitDownloadCommand extends DownloadCommand {
+import org.eclipse.jgit.transport.URIish;
+
+import java.net.URISyntaxException;
+
+abstract class GitDownloadCommand extends DownloadCommand {
   private final boolean commandAllowed;
 
   GitDownloadCommand(
@@ -38,23 +39,27 @@
   @Override
   public final String getCommand(DownloadScheme scheme, String project,
       String ref) {
-    if (!commandAllowed) {
-      return null;
-    }
-
-    if (scheme instanceof SshScheme
-        || scheme instanceof HttpScheme
-        || scheme instanceof AnonymousHttpScheme
-        || scheme instanceof GitScheme) {
+    if (commandAllowed && isRecognizedScheme(scheme)) {
       String url = scheme.getUrl(project);
-      if (url != null) {
+      if (url != null && isValidUrl(url)) {
         return getCommand(url, ref);
-      } else
-        return null;
-    } else {
-      return null;
+      }
+    }
+    return null;
+  }
+
+  private static boolean isRecognizedScheme(DownloadScheme scheme) {
+    return !(scheme instanceof RepoScheme);
+  }
+
+  private static boolean isValidUrl(String url) {
+    try {
+      new URIish(url);
+      return true;
+    } catch (URISyntaxException e) {
+      return false;
     }
   }
 
-  public abstract String getCommand(String url, String ref);
+  abstract String getCommand(String url, String ref);
 }
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 d86a630..b70ff56 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
@@ -16,19 +16,17 @@
 
 import static com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadCommand.PULL;
 
-import com.google.gerrit.extensions.annotations.Listen;
 import com.google.gerrit.server.config.DownloadConfig;
 import com.google.inject.Inject;
 
-@Listen
-public class PullCommand extends GitDownloadCommand {
+class PullCommand extends GitDownloadCommand {
   @Inject
   PullCommand(DownloadConfig downloadConfig) {
     super(downloadConfig, PULL);
   }
 
   @Override
-  public String getCommand(String url, String ref) {
+  String getCommand(String url, String ref) {
     return "git pull " + url + " " + ref;
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/AnonymousHttpScheme.java b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/AnonymousHttpScheme.java
index 905b0b6..1ea2cf0 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/AnonymousHttpScheme.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/AnonymousHttpScheme.java
@@ -71,6 +71,11 @@
     return false;
   }
 
+  @Override
+  public boolean isAuthSupported() {
+    return false;
+  }
+
   private static String ensureSlash(String in) {
     if (in != null && !in.endsWith("/")) {
       return in + "/";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/GitScheme.java b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/GitScheme.java
index 77b12b0..e185fdc 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/GitScheme.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/GitScheme.java
@@ -56,6 +56,11 @@
     return false;
   }
 
+  @Override
+  public boolean isAuthSupported() {
+    return false;
+  }
+
   private static String ensureSlash(String in) {
     if (in != null && !in.endsWith("/")) {
       return in + "/";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/HttpScheme.java b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/HttpScheme.java
index b97a1bd..af75046 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/HttpScheme.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/HttpScheme.java
@@ -86,6 +86,11 @@
     return true;
   }
 
+  @Override
+  public boolean isAuthSupported() {
+    return true;
+  }
+
   private static String ensureSlash(String in) {
     if (in != null && !in.endsWith("/")) {
       return in + "/";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/RepoScheme.java b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/RepoScheme.java
index 7397b0a..e5a0110 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/RepoScheme.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/RepoScheme.java
@@ -16,14 +16,11 @@
 
 import static com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadScheme.REPO_DOWNLOAD;
 
-import com.google.gerrit.extensions.annotations.Listen;
 import com.google.gerrit.extensions.config.DownloadScheme;
 import com.google.gerrit.server.config.DownloadConfig;
 import com.google.inject.Inject;
 
-@Listen
 public class RepoScheme extends DownloadScheme {
-
   private final boolean schemeAllowed;
 
   @Inject
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SchemeModule.java b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SchemeModule.java
new file mode 100644
index 0000000..9a42fcc
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SchemeModule.java
@@ -0,0 +1,44 @@
+// Copyright (C) 2013 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.scheme;
+
+import com.google.gerrit.extensions.annotations.Exports;
+import com.google.gerrit.extensions.config.DownloadScheme;
+import com.google.inject.AbstractModule;
+
+public class SchemeModule extends AbstractModule {
+  @Override
+  protected void configure() {
+    bind(DownloadScheme.class)
+      .annotatedWith(Exports.named("anonymous http"))
+      .to(AnonymousHttpScheme.class);
+
+    bind(DownloadScheme.class)
+      .annotatedWith(Exports.named("git"))
+      .to(GitScheme.class);
+
+    bind(DownloadScheme.class)
+      .annotatedWith(Exports.named("http"))
+      .to(HttpScheme.class);
+
+    bind(DownloadScheme.class)
+      .annotatedWith(Exports.named("repo"))
+      .to(RepoScheme.class);
+
+    bind(DownloadScheme.class)
+      .annotatedWith(Exports.named("ssh"))
+      .to(SshScheme.class);
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SshScheme.java b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SshScheme.java
index 5e3c0da..8253b66 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SshScheme.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/scheme/SshScheme.java
@@ -18,7 +18,6 @@
 import static com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadScheme.SSH;
 
 import com.google.gerrit.common.Nullable;
-import com.google.gerrit.extensions.annotations.Listen;
 import com.google.gerrit.extensions.config.DownloadScheme;
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.config.CanonicalWebUrl;
@@ -31,7 +30,6 @@
 import java.net.URL;
 import java.util.List;
 
-@Listen
 public class SshScheme extends DownloadScheme {
   private final String sshdAddress;
   private final Provider<CurrentUser> userProvider;
@@ -81,6 +79,11 @@
     return true;
   }
 
+  @Override
+  public boolean isAuthSupported() {
+    return true;
+  }
+
   private static String ensureSlash(String in) {
     if (in != null && !in.endsWith("/")) {
       return in + "/";
