diff --git a/coder_review/coder_review.drush.inc b/coder_review/coder_review.drush.inc
index 44ab181..6080653 100644
--- a/coder_review/coder_review.drush.inc
+++ b/coder_review/coder_review.drush.inc
@@ -52,6 +52,24 @@ function coder_review_drush_command() {
     'description' => dt('Install PHP Code_Sniffer'),
     'bootstrap' => DRUSH_BOOTSTRAP_DRUSH,
   );
+  $items['coder-install-codesniffer'] = array(
+    'description' => 'Install PHP CodeSniffer (phpcs).',
+    'arguments' => array(
+    ),
+    'options' => array(
+      'install-dir' => 'Install directory (defaults to $HOME/.drush/PHP/)',
+      'php-dir' => 'Path to PHP include directory (may require running under sudo)',
+      'force' => 'Overwrite existing installation ("yes" or "no", defaults to "no")',
+    ),
+    'examples' => array(
+      'drush coder-install-codesniffer'
+      => 'Download PHP_CodeSniffer library to $HOME/.drush/PHP/.',
+      'sudo drush coder-install-codesniffer --php-dir=/usr/lib/php --force="yes"'
+      => 'Download to $HOME/.drush/PHP/, overwriting any existing installation, and make a symbolic link to /usr/lib/php/. The example path is suitable for some versions of Mac OSX.',
+    ),
+    'aliases' => array(),
+    'bootstrap' => DRUSH_BOOTSTRAP_DRUSH,
+  );
   return $items;
 }
 
@@ -334,6 +352,86 @@ function drush_coder_review_install_php_code_sniffer() {
 }
 
 /**
+ * Install PHP_CodeSniffer without pear.
+ */
+function drush_coder_review_coder_install_codesniffer() {
+  // @todo This version ignores the options.
+
+  // Try loading CodeSniffer first, and if it already exists, exit.
+  try {
+    @include_once drush_server_home() . '/.drush/PHP/PHP_CodeSniffer/CodeSniffer.php';
+    $missing = !class_exists('PHP_CodeSniffer');
+  }
+  catch (Exception $e) {
+    $missing = TRUE;
+  }
+  if (!$missing) {
+    drush_print(dt('PHP_CodeSniffer already installed.'));
+    return;
+  }
+
+  $program = 'PHP_CodeSniffer';
+  $tempdir = drush_tempdir();
+  $uri = 'https://github.com/squizlabs/PHP_CodeSniffer/archive/master.zip';
+  $tarball = basename($uri);
+  // See http://drupal.org/node/1642444#comment-6742834.
+  if (!$path = _coder_download_file($uri, "$tempdir/$tarball")) {
+    drush_log(dt('Failed to download %program from @uri.', array(
+      '%program' => $program,
+      '@uri' => $uri,
+    )));
+  }
+  elseif (!$file_list = drush_tarball_extract($path, $tempdir, TRUE)) {
+    drush_log(dt('Failed to extract %program from @path.', array(
+      '%program' => $program,
+      '@path' => $path,
+    )));
+  }
+  else {
+    // Cribbed from package_handler_download_project().
+    $project_dir = drush_trim_path(array_shift($file_list));
+    $bundle = drush_server_home() . '/.drush/PHP';
+    if (!is_dir($bundle) && !mkdir($bundle, 0777, TRUE)) {
+      $error = dt('Cannot create the directory %bundle.', array('%bundle' => $bundle));
+      drush_log($error, 'error');
+      return FALSE;
+    }
+    // We will get an error if "$bundle/$program" exists.
+    drush_move_dir("$tempdir/$project_dir", "$bundle/$program");
+    drush_log(dt('Installed %program.', array('%program' => $program)));
+  }
+}
+
+/**
+ * Poor substitute for _drush_download_file(), add --no-check-certificate.
+ * See http://drupal.org/node/1642444#comment-6742834
+ */
+function _coder_download_file($url, $destination, $overwrite = TRUE) {
+  static $use_wget;
+  if ($use_wget === NULL) {
+    $use_wget = drush_shell_exec('which wget');
+  }
+
+  $destination_tmp = drush_tempnam('download_file');
+  if ($use_wget) {
+    drush_shell_exec("wget -q --no-check-certificate --timeout=30 -O %s %s", $destination_tmp, $url);
+  }
+  else {
+    drush_shell_exec("curl --insecure --fail -s -L --connect-timeout 30 -o %s %s", $destination_tmp, $url);
+  }
+  if (!drush_file_not_empty($destination_tmp) && $file = @file_get_contents($url)) {
+    @file_put_contents($destination_tmp, $file);
+  }
+  if (!drush_file_not_empty($destination_tmp)) {
+    // Download failed.
+    return FALSE;
+  }
+
+  drush_move_dir($destination_tmp, $destination, $overwrite);
+  return $destination;
+}
+
+/**
  * Determines if a specific option is explicitly disabled.
  *
  * Options can be disabled several ways in drush:
