diff --git .gitignore .gitignore
new file mode 100644
index 0000000..61d9bd4
--- /dev/null
+++ .gitignore
@@ -0,0 +1,2 @@
+.settings
+.project
diff --git client/pifr_client.review.inc client/pifr_client.review.inc
index 63a9915..0d664dc 100644
--- client/pifr_client.review.inc
+++ client/pifr_client.review.inc
@@ -170,10 +170,10 @@ function pifr_client_review_pre_built_test($type) {
       'vcs' => array(
         'main' => array(
           'repository' => array(
-            'type' => 'cvs',
-            'url' => ':pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal/drupal',
+            'type' => 'git',
+            'url' => 'git://git-dev.drupal.org/project/drupal',
           ),
-          'vcs_identifier' => 'HEAD',
+          'vcs_identifier' => 'master',
         ),
         'dependencies' => array(),
       ),
@@ -206,25 +206,25 @@ function pifr_client_review_pre_built_test($type) {
       'vcs' => array(
         'main' => array(
           'repository' => array(
-            'type' => 'cvs',
-            'url' => ':pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal/drupal',
+            'type' => 'git',
+            'url' => 'git://git-dev.drupal.org/project/drupal',
           ),
-          'vcs_identifier' => 'DRUPAL-6',
+          'vcs_identifier' => '6.x',
         ),
         'dependencies' => array(
           array(
             'repository' => array(
-              'type' => 'cvs',
-              'url' => ':pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal-contrib/contributions/modules/multivariate',
+              'type' => 'git',
+              'url' => 'git://git-dev.drupal.org/project/multivariate',
             ),
-            'vcs_identifier' => 'HEAD',
+            'vcs_identifier' => 'master',
           ),
           array(
             'repository' => array(
-              'type' => 'cvs',
-              'url' => ':pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal-contrib/contributions/modules/chart',
+              'type' => 'git',
+              'url' => 'git://git-dev.drupal.org/project/chart',
             ),
-            'vcs_identifier' => 'HEAD',
+            'vcs_identifier' => 'master',
           ),
         ),
       ),
diff --git client/review/vcs/git.inc client/review/vcs/git.inc
new file mode 100644
index 0000000..f48a9ba
--- /dev/null
+++ client/review/vcs/git.inc
@@ -0,0 +1,48 @@
+<?php
+// $Id: git.inc,v 1.5 2010/11/16 20:23:07 boombatower Exp $
+
+/**
+ * @file
+ * Git implementation of review interface.
+ *
+ * @author Jimmy Berry ("boombatower", http://drupal.org/user/214218)
+ */
+
+/**
+ * Git implementation of VCS interface.
+ */
+class PIFRClientReviewVCS_git implements PIFRClientReviewVCS {
+
+  public function checkout($directory, $url, $branch) {
+    $url = escapeshellarg($url);
+    $branch = escapeshellarg($branch);
+    if (!empty($directory)) {
+      $directory = escapeshellarg($directory);
+    }
+    $cmd = "git clone --depth 1 -b $branch $url $directory";
+    // watchdog('debug', 'Checking out code: ' . $cmd); // DEBUG
+    return pifr_client_review::exec($cmd);
+  }
+
+  public function apply($patch) {
+    return pifr_client_review::exec("patch -p0 -i $patch");
+  }
+
+  public function get_changed_files($patch) {
+    $contents = file_get_contents($patch);
+    preg_match_all('/^[\+-]{3}\s+(.*?)\s/m', $contents, $matches, PREG_SET_ORDER);
+
+    $files = array();
+    foreach ($matches as $match) {
+      if ($match[1] != '/dev/null') {
+        $files[] = $match[1];
+      }
+    }
+    return array_unique($files);
+  }
+
+  public function get_display($url, $branch) {
+    return $url . ' (' . $branch . ')';
+  }
+}
+
diff --git review/client.inc review/client.inc
index 9ba790f..8bf03a3 100644
--- review/client.inc
+++ review/client.inc
@@ -658,12 +658,13 @@ abstract class pifr_client_review {
     if ($capture_stderr) {
       $command .= ' 2>&1';
     }
+    $cwd = getcwd();
     exec($command, $output, $status);
     self::$instance->output = $output;
 
     if ($status != 0) {
       $output = trim(implode("\n", $output));
-      self::$instance->log("Command [$command] failed with status [$status] and " .
+      self::$instance->log("Command [$command] failed in directory [$cwd] with status [$status] and " .
         ($output ? "output:\n$output" : 'no output') . '.');
       return FALSE;
     }
diff --git review/drupal/pifr_drupal.client.inc review/drupal/pifr_drupal.client.inc
index 48443d7..f735af7 100644
--- review/drupal/pifr_drupal.client.inc
+++ review/drupal/pifr_drupal.client.inc
@@ -16,7 +16,7 @@ class pifr_client_review_pifr_drupal extends pifr_client_review {
   /**
    * Default Drupal core repository URL.
    */
-  protected $core_url = ':pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal/drupal';
+  protected $core_url = 'git://git-dev.drupal.org/project/drupal.git';
 
   /**
    * Location of default sites module directory.
@@ -59,6 +59,7 @@ class pifr_client_review_pifr_drupal extends pifr_client_review {
 
       // Store the project name 'simpletest' for use when applying patches.
       $this->project_directory = basename($this->test['vcs']['main']['repository']['url']);
+      $this->project_directory = preg_replace('/\.git$/', '', $this->project_directory);
 
       foreach ($this->test['vcs']['dependencies'] as $key => $dependency) {
         if ($dependency['repository']['url'] == $this->core_url) {
@@ -71,7 +72,7 @@ class pifr_client_review_pifr_drupal extends pifr_client_review {
 
     // Add SimpleTest as dependencies, unless it has already been added.
     if ($this->test['review']['argument']['core'] == 6) {
-      $simpletest_url = ':pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal-contrib/contributions/modules/simpletest';
+      $simpletest_url = 'git://git-dev.drupal.org/project/simpletest.git';
       $found = FALSE;
       foreach ($this->test['vcs']['dependencies'] as $key => $dependency) {
         if ($dependency['repository']['url'] == $simpletest_url) {
@@ -85,10 +86,10 @@ class pifr_client_review_pifr_drupal extends pifr_client_review {
         // out from contrib.
         $this->test['vcs']['dependencies'][] = array(
           'repository' => array(
-            'type' => 'cvs',
+            'type' => 'git',
             'url' => $simpletest_url,
           ),
-          'vcs_identifier' => 'DRUPAL-6--2',
+          'vcs_identifier' => '6.x-2.x',
         );
       }
     }
@@ -185,7 +186,7 @@ class pifr_client_review_pifr_drupal extends pifr_client_review {
 
     // If there are patch files and dependencies then assume the patch files
     // are relative to the modules.
-    if (!empty($this->test['files']) && !empty($this->test['vcs']['dendencies'])) {
+    if (!empty($this->test['files']) && !empty($this->test['vcs']['dependencies'])) {
       foreach ($files as &$file) {
         $file = $this->module_directory . '/' . $file;
       }
@@ -254,20 +255,21 @@ class pifr_client_review_pifr_drupal extends pifr_client_review {
       $edit['db_user'] = $db_info['username'];
       $edit['db_pass'] = $db_info['password'];
       $edit['db_host'] = $db_info['host'];
+      $edit['db_prefix'] = '';
     }
     else {
       // Drupal 7 and above.
-      $edit['database'] = $db_info['name'];
-      $edit['username'] = $db_info['username'];
-      $edit['password'] = $db_info['password'];
-      $edit['host'] = $db_info['host'];
+      $edit['mysql[database]'] = $db_info['name'];
+      $edit['mysql[username]'] = $db_info['username'];
+      $edit['mysql[password]'] = $db_info['password'];
+      $edit['mysql[host]'] = $db_info['host'];
+      $edit['mysql[db_prefix]'] = '';
     }
 
-    $edit['db_prefix'] = '';
     $b->drupalPost(NULL, $edit, t('Save and continue'));
 
     if (($b->results['#exception'] + $b->results['#fail']) != 0) {
-      $this->set_error(array('@reason' => 'failed to set database information'));
+      $this->set_error(array('@reason' => 'failed to set database information (database name, user, password were wrong)'));
       return;
     }
 
diff --git review/drupal/pifr_drupal.server.inc review/drupal/pifr_drupal.server.inc
index 3663a31..668cb4d 100644
--- review/drupal/pifr_drupal.server.inc
+++ review/drupal/pifr_drupal.server.inc
@@ -44,10 +44,10 @@ abstract class pifr_server_review_pifr_drupal extends pifr_server_review_pifr_as
 
     $this->confirmation_default['vcs']['main'] = array(
       'repository' => array(
-        'type' => 'cvs',
-        'url' => ':pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal/drupal',
+        'type' => 'git',
+        'url' => 'git://git-dev.drupal.org/project/drupal.git',
       ),
-      'vcs_identifier' => 'HEAD',
+      'vcs_identifier' => 'master',  // GITMIGRATION will have to be changed at migration
     );
   }
 }
diff --git review/drupal/pifr_drupal.test review/drupal/pifr_drupal.test
index 3399df2..20f14ff 100644
--- review/drupal/pifr_drupal.test
+++ review/drupal/pifr_drupal.test
@@ -25,10 +25,10 @@ class PIFRClientDrupalTestCase extends PIFRClientPluginTestCase {
       'vcs' => array(
         'main' => array(
           'repository' => array(
-            'type' => 'cvs',
-            'url' => ':pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal/drupal',
+            'type' => 'git',
+            'url' => 'git://git-dev.drupal.org/project/drupal',
           ),
-          'vcs_identifier' => 'HEAD',
+          'vcs_identifier' => 'master',
         ),
       ),
     ));
@@ -49,17 +49,17 @@ class PIFRClientDrupalTestCase extends PIFRClientPluginTestCase {
         'dependencies' => array(
           array(
             'repository' => array(
-              'type' => 'cvs',
-              'url' => ':pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal-contrib/contributions/modules/simpletest',
+              'type' => 'git',
+              'url' => 'git://git-dev.drupal.org/project/simpletest',
             ),
-            'vcs_identifier' => 'DRUPAL-7--2',
+            'vcs_identifier' => '7.x-2.x',
           ),
           array(
             'repository' => array(
-              'type' => 'cvs',
-              'url' => ':pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal-contrib/contributions/modules/menu_rewrite',
+              'type' => 'git',
+              'url' => 'git://git-dev.drupal.org/project/menu_rewrite',
             ),
-            'vcs_identifier' => 'HEAD',
+            'vcs_identifier' => 'master',
           ),
         ),
       ),
diff --git server/pifr_server.admin.inc server/pifr_server.admin.inc
index 8c89628..d71d436 100644
--- server/pifr_server.admin.inc
+++ server/pifr_server.admin.inc
@@ -80,8 +80,8 @@ function pifr_serveradmin_dashboard_form_queue_submit($form, &$form_state) {
 
   $batch['branches'][] = array(
     'project_identifier' => '3060',
-    'client_identifier' => 156281,
-    'vcs_identifier' => 'HEAD',
+    'client_identifier' => 156281, # this could be a random number
+    'vcs_identifier' => 'master',   // GITMIGRATION fragile
     'dependency' => '',
     'plugin_argument' => array(),
     'test' => TRUE,
@@ -89,7 +89,7 @@ function pifr_serveradmin_dashboard_form_queue_submit($form, &$form_state) {
 
   $batch['files'][] = array(
     'branch_identifier' => $batch['branches'][0]['client_identifier'],
-    'client_identifier' => 17,
+    'client_identifier' => 17,  # this could be a random number
     'file_url' => url(file_directory_path() . '/pifr_simpletest/pass.patch', array('absolute' => TRUE)),
   );
   $batch['files'][] = array(
@@ -99,10 +99,10 @@ function pifr_serveradmin_dashboard_form_queue_submit($form, &$form_state) {
   );
 
   $batch['projects'][] = array(
-    'client_identifier' => 3060,
+    'client_identifier' => 3060, # this could be a random number
     'name' => 'Drupal',
-    'repository_type' => 'cvs',
-    'repository_url' => ':pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal/drupal',
+    'repository_type' => 'git',   // GITMIGRATION fragile
+    'repository_url' => 'git://git-dev.drupal.org/project/drupal',
   );
 
   module_load_include('xmlrpc.inc', 'pifr_server');
diff --git server/pifr_server.test server/pifr_server.test
index 2f78f6c..24c6455 100644
--- server/pifr_server.test
+++ server/pifr_server.test
@@ -229,7 +229,7 @@ class PIFRServerXMLRPCTestCase extends PIFRServerTestCase {
       array(
         'project_identifier' => '3',
         'client_identifier' => '4',
-        'vcs_identifier' => 'HEAD',
+        'vcs_identifier' => 'git',
         'dependency' => '2,6',
         'plugin_argument' => array(
           'modules' => array(
@@ -243,7 +243,7 @@ class PIFRServerXMLRPCTestCase extends PIFRServerTestCase {
       array(
         'project_identifier' => '1',
         'client_identifier' => '2',
-        'vcs_identifier' => 'HEAD',
+        'vcs_identifier' => 'master',  // GITMIGRATION fragile
         'dependency' => '',
         'plugin_argument' => array(
           'core' => '7',
@@ -254,7 +254,7 @@ class PIFRServerXMLRPCTestCase extends PIFRServerTestCase {
       array(
         'project_identifier' => '5',
         'client_identifier' => '6',
-        'vcs_identifier' => 'HEAD',
+        'vcs_identifier' => 'master',   // GITMIGRATION fragile
         'dependency' => '2,4',
         'plugin_argument' => array(
           'modules' => array(
@@ -375,7 +375,7 @@ class PIFRServerXMLRPCTestCase extends PIFRServerTestCase {
     $this->assertEqual($branch['project_id'], 1, 'Project ID matches');
     $this->assertEqual($branch['test_id'], $test['test_id'], 'Test ID matches');
     $this->assertEqual($branch['client_identifier'], 4, 'Client identifier matches');
-    $this->assertEqual($branch['vcs_identifier'], 'HEAD', 'VCS identifier matches');
+    $this->assertEqual($branch['vcs_identifier'], 'master', 'VCS identifier matches'); // GITMIGRATION fragile
     $this->assertEqual($branch['plugin_argument']['modules'], array('foo', 'foofoo'), 'Modules list matches');
     $this->assertEqual($branch['link'], 'http://example.com/node/4', 'Link matches');
 
