diff --git includes/VersioncontrolAccount.php includes/VersioncontrolAccount.php
deleted file mode 100644
index 91d6bdc..0000000
--- includes/VersioncontrolAccount.php
+++ /dev/null
@@ -1,154 +0,0 @@
-<?php
-// $Id: VersioncontrolAccount.php,v 1.12 2010/12/06 03:23:44 marvil07 Exp $
-/**
- * @file
- * Account class
- */
-
-/**
- * Account class
- *
- * This class provides the way to manage users accounts.
- */
-abstract class VersioncontrolAccount extends VersioncontrolEntity {
-  /**
-   * The username, as it is represented by the VCS.
-   *
-   * @var string
-   */
-  public $vcs_username = '';
-
-  /**
-   * The uid of the associated Drupal user.
-   *
-   * If 0, indicates that there is no known associated Drupal user. Code using
-   * this class should construct their behaviors to respect this magic value.
-   *
-   * @var int
-   */
-  public $uid = 0;
-
-  public $repo_id;
-
-  /**
-   * Update a VCS user account in the database, and call the necessary
-   * module hooks. The account repository and uid must stay the same values as
-   * the one given on account creation, whereas vcs_username and
-   * data data members can change.
-   *
-   * FIXME use same logic as in other classes, this probably would
-   * be changed only when we get account_id PK schema change in.
-   * TODO review performance impact of updating the vcs_username since
-   * original jpetso work try to avoid to update if not needed by passing
-   * it as parameter.
-   */
-  public function update($options = array()) {
-    // Append default options.
-    $options += $this->defaultCrudOptions['update'];
-
-    $repo_id = $this->repository->repo_id;
-
-    db_query("UPDATE {versioncontrol_accounts}
-      SET vcs_username = '%s'
-      WHERE uid = %d AND repo_id = %d",
-      $this->vcs_username, $this->uid, $repo_id
-    );
-
-    // Update operations table.
-    // this is assuming 1-1 relation between accounts and uid's
-    //   1. unassign all uid related operations
-    db_query('update {versioncontrol_operations}
-              set author_uid = 0
-              where author_uid = %d and repo_id = %d',
-              $this->uid, $this->repository->repo_id);
-    db_query('update {versioncontrol_operations}
-              set committer_uid = 0
-              where committer_uid = %d and repo_id = %d',
-              $this->uid, $this->repository->repo_id);
-    //   2. assingn all operations related to repo and vcs username
-    db_query("UPDATE {versioncontrol_operations}
-              SET author_uid = %d
-              WHERE author = '%s' AND repo_id = %d",
-              $this->uid, $this->vcs_username, $this->repository->repo_id);
-    db_query("UPDATE {versioncontrol_operations}
-              SET committer_uid = %d
-              WHERE committer = '%s' AND repo_id = %d",
-              $this->uid, $this->vcs_username, $this->repository->repo_id);
-    // not using data field for now, but backends can
-
-    // Let the backend take action.
-    $this->backendUpdate($options);
-
-    // Everything's done, invoke the hook.
-    module_invoke_all('versioncontrol_entity_account_update', $this);
-    return $this;
-  }
-
-  /**
-   * Insert a VCS user account into the database,
-   * and call the necessary module hooks.
-   *
-   * FIXME use same logic as in other classes, this probably would
-   * be changed only when we get account_id PK schema change in.
-   */
-  public function insert($options = array()) {
-    // Append default options.
-    $options += $this->defaultCrudOptions['insert'];
-
-    // not using data field for now, but backends can
-    db_query(
-      "INSERT INTO {versioncontrol_accounts} (uid, repo_id, vcs_username)
-       VALUES (%d, %d, '%s')", $this->uid, $this->repository->repo_id, $this->vcs_username
-    );
-
-    // Provide an opportunity for the backend to add its own stuff.
-    $this->backendInsert($options);
-
-    // Update the operations table.
-    db_query("UPDATE {versioncontrol_operations}
-              SET author_uid = %d
-              WHERE author = '%s' AND repo_id = %d",
-              $this->uid, $this->vcs_username, $this->repository->repo_id);
-    db_query("UPDATE {versioncontrol_operations}
-              SET committer_uid = %d
-              WHERE committer = '%s' AND repo_id = %d",
-              $this->uid, $this->vcs_username, $this->repository->repo_id);
-
-    // Everything's done, invoke the hook.
-    module_invoke_all('versioncontrol_entity_account_insert', $this);
-    return $this;
-  }
-
-  /**
-   * Delete a VCS user account from the database, set all commits with this
-   * account as author to user 0 (anonymous), and call the necessary hooks.
-   *
-   * FIXME use same logic as in other classes, this probably would
-   * be changed only when we get account_id PK schema change in.
-   */
-  public function delete($options = array()) {
-    // Append default options.
-    $options += $this->defaultCrudOptions['delete'];
-
-    // Update the operations table.
-    db_query('update {versioncontrol_operations}
-              set author_uid = 0
-              where author_uid = %d and repo_id = %d',
-              $this->uid, $this->repository->repo_id);
-    db_query('update {versioncontrol_operations}
-              set committer_uid = 0
-              where committer_uid = %d and repo_id = %d',
-              $this->uid, $this->repository->repo_id);
-
-    db_delete('versioncontrol_accounts')
-      ->condition('uid', $this->uid)
-      ->condition('repo_id', $this->repo_id)
-      ->execute();
-
-    // Provide an opportunity for the backend to delete its own stuff.
-    $this->backendDelete($options);
-
-    module_invoke_all('versioncontrol_entity_account_delete', $this);
-  }
-
-}
diff --git includes/VersioncontrolRepository.php includes/VersioncontrolRepository.php
index 35d0cca..5193943 100644
--- includes/VersioncontrolRepository.php
+++ includes/VersioncontrolRepository.php
@@ -227,17 +227,14 @@ abstract class VersioncontrolRepository implements VersioncontrolEntityInterface
     return $this->backend->loadEntities('operation', $ids, $conditions, $options);
   }
 
-  public function loadAccounts($ids = array(), $conditions = array(), $options = array()) {
-    $conditions['repo_id'] = $this->repo_id;
-    return $this->backend->loadEntities('account', $ids, $conditions, $options);
-  }
-
   /**
    * Return TRUE if the account is authorized to commit in the actual
    * repository, or FALSE otherwise. Only call this function on existing
    * accounts or uid 0, the return value for all other
    * uid/repository combinations is undefined.
    *
+   * FIXME deprecate this in favour of a plugin implementation.
+   *
    * @param $uid
    *   The user id of the checked account.
    */
@@ -319,8 +316,8 @@ abstract class VersioncontrolRepository implements VersioncontrolEntityInterface
 
   /**
    * Delete a repository from the database, and call the necessary hooks.
-   * Together with the repository, all associated commits and accounts are
-   * deleted as well.
+   * Together with the repository, all associated commits are deleted as
+   * well.
    */
   public function delete($options = array()) {
     // Append default options.
@@ -337,10 +334,6 @@ abstract class VersioncontrolRepository implements VersioncontrolEntityInterface
       foreach ($this->loadCommits() as $commit) {
         $commit->delete();
       }
-      // FIXME accounts are changing significantly, this will need to, too
-      foreach ($this->loadAccounts() as $account) {
-        $account->delete();
-      }
     }
 
     db_delete('versioncontrol_repositories')
@@ -383,69 +376,6 @@ abstract class VersioncontrolRepository implements VersioncontrolEntityInterface
   }
 
   /**
-   * Retrieve the Drupal user id for a given VCS username.
-   *
-   * @param $username
-   *   The VCS specific username (a string) corresponding to the Drupal
-   *   user.
-   * @param $include_unauthorized
-   *   If FALSE (which is the default), this function does not return
-   *   accounts that are pending, queued, disabled, blocked, or otherwise
-   *   non-approved. If TRUE, all accounts are returned, regardless of
-   *   their status.
-   *
-   * @return
-   *   The Drupal user id that corresponds to the given username and
-   *   repository, or NULL if no Drupal user could be associated to
-   *   those.
-   */
-  public function getAccountUidForUsername($username, $include_unauthorized = FALSE) {
-    $result = db_query("SELECT uid, repo_id
-      FROM {versioncontrol_accounts}
-      WHERE vcs_username = '%s' AND repo_id = %d",
-      $username, $this->repo_id);
-
-    while ($account = db_fetch_object($result)) {
-      // Only include approved accounts, except in case the caller said otherwise.
-      if ($include_unauthorized || $this->isAccountAuthorized($account->uid)) {
-        return $account->uid;
-      }
-    }
-    return NULL;
-  }
-
-  /**
-   * Retrieve the VCS username for the Drupal user id.
-   *
-   * @param $uid
-   *   The Drupal user id corresponding to the VCS account.
-   * @param $include_unauthorized
-   *   If FALSE (which is the default), this function does not return
-   *   accounts that are pending, queued, disabled, blocked, or otherwise
-   *   non-approved. If TRUE, all accounts are returned, regardless of
-   *   their status.
-   *
-   * @return
-   *   The VCS username (a string) that corresponds to the given Drupal
-   *   user and repository, or NULL if no VCS account could be associated
-   *   to those.
-   */
-  function getAccountUsernameForUid($uid, $include_unauthorized = FALSE) {
-    $result = db_query('SELECT uid, username, repo_id
-      FROM {versioncontrol_accounts}
-      WHERE uid = %d AND repo_id = %d',
-      $uid, $this->repo_id);
-
-    while ($account = db_fetch_object($result)) {
-      // Only include approved accounts, except in case the caller said otherwise.
-      if ($include_unauthorized || $this->isAccountAuthorized($account->uid)) {
-        return $account->vcs_username;
-      }
-    }
-    return NULL;
-  }
-
-  /**
    * Get an instantiated plugin object based on a requested plugin slot, and the
    * plugin this repository object has assigned to that slot.
    *
diff --git includes/controllers.inc includes/controllers.inc
index 07ad02c..a4de763 100644
--- includes/controllers.inc
+++ includes/controllers.inc
@@ -414,52 +414,6 @@ class VersioncontrolRepositoryController extends VersioncontrolEntityController
   protected function extendData(&$queried_entities) {}
 }
 
-class VersioncontrolAccountController extends VersioncontrolEntityController {
-  protected $entityType = 'account';
-  protected $baseTable = 'versioncontrol_accounts';
-  protected $idKey = 'uid';
-
-  protected function executeQuery(&$query) {
-    $result = $query->execute();
-    if ($this->options['repository'] instanceof VersioncontrolRepository) {
-      return $result->fetchAllAssoc('uid');
-    }
-    else { // No repository specified, create a specially-keyed array
-      $return = array();
-      foreach ($result as $row) {
-        if (!isset($return[$row->uid])) {
-          $return[$row->uid] = array();
-        }
-        $return[$row->uid][$row->repo_id] = $row;
-      }
-      return $return;
-    }
-  }
-
-  protected function buildEntities(&$queried_entities) {
-    // If a repository is attached, the default parent implementation is fine
-    if ($this->options['repository'] instanceof VersioncontrolRepository) {
-      return parent::buildEntities($queried_entities);
-    }
-    // Otherwise we need special handling for our two-level array.
-    $almost_built = array();
-    foreach ($queried_entities as $uid => $raw_accounts_per_repo) {
-      foreach ($raw_accounts_per_repo as $repo_id => $raw_account) {
-        $id = "$uid-$repo_id";
-        // load the repository object
-        $raw_account->repository = $this->backends[$raw_account->vcs]->loadEntity('repo', array($repo_id));
-        $almost_built[$id] = $raw_account;
-      }
-    }
-    return parent::buildEntities($almost_built);
-  }
-
-  protected function modifyReturn($entities) {
-    // by now, return the same
-    return $entities;
-  }
-}
-
 class VersioncontrolBranchController extends VersioncontrolEntityController {
   protected $entityType = 'branch';
   protected $baseTable = 'versioncontrol_labels';
diff --git includes/views/versioncontrol.views.inc includes/views/versioncontrol.views.inc
index c5f1004..df75ca9 100755
--- includes/views/versioncontrol.views.inc
+++ includes/views/versioncontrol.views.inc
@@ -140,10 +140,6 @@ function versioncontrol_views_data() {
       'left_field' => 'repo_id',
       'field' => 'repo_id',
     ),
-    'versioncontrol_accounts' => array(
-      'left_field' => 'repo_id',
-      'field' => 'repo_id',
-    ),
   );
 
   // VersionControl Operations
@@ -314,43 +310,6 @@ function versioncontrol_views_data() {
       'type'       => 'inner',
   );
 
-  // VersionControl Accounts
-  $data['versioncontrol_accounts']['table']['group'] = t("VersionControl Accounts");
-  $data['versioncontrol_accounts']['table']['base'] = array(
-    'field' => 'uid',
-    'title' => t('VersionControl Accounts'),
-    'help'  => t('The VersionControl accounts held by users.'),
-  );
-  $data['versioncontrol_accounts']['table']['join'] = array(
-    'user' => array(
-      'left_field' => 'uid',
-      'field' => 'uid',
-    ),
-    'versioncontrol_repositories' => array(
-      'left_field' => 'repo_id',
-      'field' => 'repo_id',
-    ),
-  );
-  $data['versioncontrol_accounts']['vcs_username'] = array(
-    'title' => t('Versioncontrol Name'),
-    'help' => t('The username of the committer, as known by the VCS.'),
-    'field' => array(
-      'handler' => 'views_handler_field',
-      'click sortable' => TRUE,
-    ),
-    'sort' => array(
-      'handler' => 'views_handler_sort',
-    ),
-    'argument' => array(
-      'handler' => 'views_handler_argument_string',
-    ),
-  );
-  $data['users']['table']['join']['versioncontrol_accounts'] = array(
-    'left_field' => 'uid',
-    'field' => 'uid',
-    'type' => 'inner',
-  );
-
   // VersionControl Labels
   $data['versioncontrol_labels']['table']['group'] = t("VersionControl Labels");
   $data['versioncontrol_labels']['table']['base'] = array(
diff --git tests/VersioncontrolBackendTests.test tests/VersioncontrolBackendTests.test
index b8ab805..ce8c8b1 100644
--- tests/VersioncontrolBackendTests.test
+++ tests/VersioncontrolBackendTests.test
@@ -31,7 +31,7 @@ class VersioncontrolBackendBaseUnitTest extends VersioncontrolTestCase {
     // As soon as the backend is initialized, the base class should have a bunch
     // of classes declared on it and available for factory operations. Check.
     // This also has the effect of ensuring autoload declarations are in place.
-    $types = array('repo', 'account', 'operation', 'item', 'branch', 'tag');
+    $types = array('repo', 'operation', 'item', 'branch', 'tag');
     foreach ($this->backends as $backend) { // Iterate over all available backends.
       foreach ($types as $type) { // Iterate over each entity type.
         $this->assertTrue(isset($backend->classesEntities[$type]), "$backend->name backend declares an entity class for type '$type'", 'PHP');
diff --git tests/versioncontrol_test.inc tests/versioncontrol_test.inc
index e88775f..d9fd686 100644
--- tests/versioncontrol_test.inc
+++ tests/versioncontrol_test.inc
@@ -17,7 +17,6 @@ class VersioncontrolTestBackend extends VersioncontrolBackend {
     );
     $this->classesEntities = array(
       'repo'      => 'VersioncontrolTestRepository',
-      'account'   => 'VersioncontrolTestAccount',
       'operation' => 'VersioncontrolTestOperation',
       'item'      => 'VersioncontrolTestItem',
       'branch'    => 'VersioncontrolTestBranch',
@@ -30,9 +29,6 @@ class VersioncontrolTestBackend extends VersioncontrolBackend {
 class VersioncontrolTestRepository extends VersioncontrolRepository {
 }
 
-class VersioncontrolTestAccount extends VersioncontrolAccount {
-}
-
 class VersioncontrolTestOperation extends VersioncontrolOperation {
 
   /**
diff --git versioncontrol.admin.inc versioncontrol.admin.inc
index 458709c..f80e63c 100644
--- versioncontrol.admin.inc
+++ versioncontrol.admin.inc
@@ -6,7 +6,7 @@
  * whose functionality is provided by pluggable back-end modules.
  *
  * This file contains the administrative user interface
- * for accounts and repositories.
+ * and repositories.
  *
  * Copyright 2006, 2007 Derek Wright ("dww" , http://drupal.org/user/46549)
  * Copyright 2007, 2008, 2009 by Jakob Petsovits ("jpetso", http://drupal.org/user/56020)
@@ -82,258 +82,6 @@ function versioncontrol_admin_settings_submit($form, &$form_state) {
   }
 }
 
-
-/**
- * Form callback for "admin/project/versioncontrol-accounts":
- * A list of accounts with filtering possibilities.
- *
- * TODO Completely reimplement in Views.
- */
-function versioncontrol_admin_account_list_form(&$form_state) {
-  // Retrieve a list of all repositories with registered VCS accounts.
-  $result = db_query('SELECT DISTINCT repo_id FROM {versioncontrol_accounts}');
-  $repo_ids = array();
-
-  while ($repo_id = db_result($result)) {
-    $repo_ids[] = $repo_id;
-  }
-  $repositories = versioncontrol_repository_load_multiple($repo_ids);
-
-  $filter_form = versioncontrol_admin_account_list_filter_form($form_state, $repositories);
-  $filter_form['#id'] = 'versioncontrol-account-filter-form';
-  drupal_alter('form', $filter_form, $form_state, 'versioncontrol_admin_account_list_filter_form');
-
-  $form = array();
-  $form['filters'] = array_merge($filter_form, array(
-    '#type' => 'fieldset',
-    '#title' => t('Filter'),
-    '#collapsible' => TRUE,
-    '#collapsed' => FALSE,
-    '#prefix' => '<div class="container-inline">',
-    '#suffix' => '</div>',
-  ));
-
-  // Filter the list of accounts.
-  $accounts = versioncontrol_user_accounts_load_multiple(array(), array(), array('include unauthorized' => TRUE));
-
-  foreach (module_implements('versioncontrol_filter_accounts') as $module) {
-    $function = $module .'_versioncontrol_filter_accounts';
-    $function($accounts);
-  }
-  $accounts = versioncontrol_admin_get_paged_accounts($accounts);
-  $users = array();
-
-  // Retrieve more info for the accounts that survived filtering.
-  foreach ($accounts as $uid => $usernames_by_repository) {
-    $user = user_load($uid);
-    if (!$user) {
-      unset($accounts[$uid]);
-      continue;
-    }
-    $users[$uid] = $user;
-  }
-  if (empty($users)) {
-    $form['empty'] = array(
-      '#type' => 'markup',
-      '#value' => '<p>'. t('No accounts could be found with the current filter settings.') .'</p>',
-    );
-    return $form;
-  }
-
-  // Retrieve total, first and last commits of each user.
-  $statistics = VersioncontrolOperationCache::getInstance()->getStatistics(array(
-    'types' => array(VERSIONCONTROL_OPERATION_COMMIT),
-    'uids' => array_keys($users),
-  ), array(
-    'group_by' => array('uid'),
-  ));
-
-  $total_operations = array();
-  $first_operation_dates = array();
-  $last_operation_dates = array();
-
-  foreach ($statistics as $user_stats) {
-    $total_operations[$user_stats->uid] = $user_stats->total_operations;
-    $first_operation_dates[$user_stats->uid] = t('!time ago', array(
-      '!time' => format_interval(time() - $user_stats->first_operation_date, 1))
-    );
-    $last_operation_dates[$user_stats->uid] = t('!time ago', array(
-      '!time' => format_interval(time() - $user_stats->last_operation_date, 1))
-    );
-    if (module_exists('commitlog')) {
-      $total_operations[$user_stats->uid] =
-        l($total_operations[$user_stats->uid], 'user/'. $user_stats->uid .'/track/code');
-    }
-  }
-
-  // Construct the user account table.
-  $header = array(t('User'), t('Accounts'), t('Commits'), t('First commit'), t('Last commit'));
-  $rows_by_uid = array();
-  foreach ($accounts as $uid => $usernames_by_repository) {
-    $user = $users[$uid];
-
-    // Present a list of all VCS usernames and the repository where they're in.
-    $repo_usernames = array();
-    foreach ($usernames_by_repository as $repo_id => $account) {
-      if (!isset($repositories[$repo_id])) { // happens if the backend isn't loaded
-        continue;
-      }
-      $formatted_username = theme('versioncontrol_account_username',
-        $uid, $account->vcs_username, $repositories[$repo_id],
-        array('prefer_drupal_username' => FALSE)
-      );
-      $repo_name = module_exists('commitlog')
-        ? theme('commitlog_repository', $repositories[$repo_id])
-        : check_plain($repositories[$repo_id]['name']);
-
-      $repo_usernames[] = t('!username in !repository (!edit)', array(
-        '!username' => $formatted_username,
-        '!repository' => $repo_name,
-        '!edit' => l(t('edit'),
-          'user/'. $uid .'/edit/versioncontrol/'. $repo_id .'/'. drupal_urlencode($account->vcs_username)
-        ),
-      ));
-    }
-    $vcs_usernames = empty($repo_usernames)
-      ? t('VCS backend is currently disabled')
-      : theme('item_list', $repo_usernames);
-
-    $rows_by_uid[$uid] = array(
-      theme('username', $user), $vcs_usernames,
-      isset($total_operations[$uid]) ? $total_operations[$uid] : 0,
-      isset($first_operation_dates[$uid]) ? $first_operation_dates[$uid] : t('n/a'),
-      isset($last_operation_dates[$uid]) ? $last_operation_dates[$uid] : t('n/a'),
-    );
-  }
-
-  // Provide a possibility for backends and other modules to modify the list.
-  foreach (module_implements('versioncontrol_alter_account_list') as $module) {
-    $function = $module .'_versioncontrol_alter_account_list';
-    $function($accounts, $repositories, $header, $rows_by_uid);
-  }
-  // We don't want the uids in the final $rows array.
-  $rows = array_values($rows_by_uid);
-
-  // The finished user account list with account filter.
-  $form['accounts'] = array(
-    '#type' => 'markup',
-    '#value' => theme('table', $header, $rows),
-  );
-
-  if ($pager = theme('pager', NULL, variable_get('versioncontrol_admin_account_pager', 20), 0)) {
-    $form['pager'] = array(
-      '#type' => 'markup',
-      '#value' => $pager,
-    );
-  }
-  return $form;
-}
-
-/**
- * Return a subset of the given accounts (10 Drupal users by default, and all
- * of their VCS usernames). Paging is also used by emulating pager_query().
- */
-function versioncontrol_admin_get_paged_accounts($accounts, $element = 0) {
-  global $pager_page_array, $pager_total, $pager_total_items;
-  $page = isset($_GET['page']) ? $_GET['page'] : '';
-  $pager_page_array = explode(',', $page);
-  $page = empty($pager_page_array[$element]) ? 0 : $pager_page_array[$element];
-
-  $limit = variable_get('versioncontrol_admin_account_pager', 20);
-  $i = 0;
-  $paged_accounts = array();
-
-  foreach ($accounts as $uid => $usernames_by_repository) {
-    if ($i >= ($page * $limit) && $i < (($page+1) * $limit)) {
-      $paged_accounts[$uid] = $usernames_by_repository;
-    }
-    ++$i;
-  }
-
-  // Emulate pager_query() in order to get a proper theme('pager').
-  $pager_total_items[$element] = count($accounts);
-  $pager_total[$element] = ceil($pager_total_items[$element] / $limit);
-  $pager_page_array[$element] = max(0, min((int)$pager_page_array[$element], ((int)$pager_total[$element]) - 1));
-
-  return $paged_accounts;
-}
-
-/**
- * A form for filtering accounts which is embedded in the account list page.
- */
-function versioncontrol_admin_account_list_filter_form(&$form_state, $repositories) {
-  $form = array();
-  $repository_names = array(0 => t('All'));
-
-  foreach ($repositories as $repo_id => $repository) {
-    $repository_names[$repo_id] = check_plain($repository['name']);
-  }
-  if (!isset($_SESSION['versioncontrol_filter_repo_id'])) {
-    $_SESSION['versioncontrol_filter_repo_id'] = 0;
-  }
-
-  $form['#id'] = 'versioncontrol-account-filter-form';
-
-  $form['repo_id'] = array(
-    '#type' => 'select',
-    '#title' => t('Repository'),
-    '#options' => $repository_names,
-    '#default_value' => $_SESSION['versioncontrol_filter_repo_id'],
-    '#weight' => 10,
-  );
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Filter'),
-    '#submit' => array('versioncontrol_admin_account_list_filter_form_submit'),
-    '#weight' => 100,
-  );
-  return $form;
-}
-
-/**
- * Submit handler for the account filter form.
- */
-function versioncontrol_admin_account_list_filter_form_submit($form, &$form_state) {
-  $_SESSION['versioncontrol_filter_repo_id'] = $form_state['values']['repo_id'];
-}
-
-/**
- * Implementation of hook_versioncontrol_filter_accounts():
- * Unset filtered accounts before they are even attempted to be displayed
- * on the account list.
- *
- * TODO remove, obsoleted by Views
- *
- * @param $accounts
- *   The accounts that would normally be displayed, in the same format as the
- *   return value of versioncontrol_user_accounts_load_multiple(). Entries in
- *   this list may be unset by this filter function.
- */
-function versioncontrol_versioncontrol_filter_accounts(&$accounts) {
-  if (empty($accounts)) {
-    return;
-  }
-  if (!isset($_SESSION['versioncontrol_filter_repo_id'])) {
-    $_SESSION['versioncontrol_filter_repo_id'] = 0;
-  }
-  $filter_repo_id = $_SESSION['versioncontrol_filter_repo_id'];
-
-  if ($filter_repo_id == 0) {
-    return; // Don't change the list if "All" repositories are selected.
-  }
-
-  foreach ($accounts as $uid => $usernames_by_repository) {
-    foreach ($usernames_by_repository as $repo_id => $username) {
-      if ($repo_id != $filter_repo_id) {
-        unset($accounts[$uid][$repo_id]);
-        if (empty($accounts[$uid])) {
-          unset($accounts[$uid]);
-        }
-      }
-    }
-  }
-}
-
 /**
  * Form callback for "admin/project/versioncontrol-repositories":
  * A simple list of repositories, sorted by version control system.
diff --git versioncontrol.info versioncontrol.info
index 670c0f7..3b0e7c1 100644
--- versioncontrol.info
+++ versioncontrol.info
@@ -5,7 +5,6 @@ dependencies[] = autoload
 dependencies[] = dbtng
 dependencies[] = ctools
 dependencies[] = views
-files[] = includes/VersioncontrolAccount.php
 files[] = includes/VersioncontrolBackend.php
 files[] = includes/VersioncontrolBranch.php
 files[] = includes/VersioncontrolItem.php
diff --git versioncontrol.install versioncontrol.install
index 622e064..2ee4aa2 100644
--- versioncontrol.install
+++ versioncontrol.install
@@ -370,38 +370,6 @@ function versioncontrol_schema() {
     'primary key' => array('repo_id'),
   );
 
-  $schema['versioncontrol_accounts'] = array(
-    'description' =>
-      'Association table of VCS account usernames (in a specific repository) to Drupal user ids. A Drupal user can be associated to multiple VCS accounts. Ideally, multiple VCS accounts per repository should be possible too, but clumsy array data structures and assumptions in the admin interface (elsewhere, too? don\'t know) currently make it necessary to restrict the number of VCS accounts to a maximum of 1 per repository and Drupal user.',
-    'fields' => array(
-      'uid' => array(
-        'description' => 'The {users}.uid of the Drupal user associated with the VCS-specific username in {versioncontrol_accounts}.username.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'repo_id' => array(
-        'description' => 'Foreign key (referring to {versioncontrol_repositories}.repo_id) for the repository that contains the VCS account.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'vcs_username' => array(
-        'description' => 'VCS-specific username of the VCS account associated with the Drupal user in {versioncontrol_accounts}.uid.',
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => '',
-      ),
-    ),
-    'unique keys' => array(
-      'repo_id_username' => array('repo_id', 'vcs_username'),
-    ),
-    'primary key' => array('uid', 'repo_id'),
-  );
-
   $schema['versioncontrol_auth_account'] = array(
     'description' => 'ACL table, used by the VersioncontrolAuthHandlerMappedAccounts family of plugins, that stores ACL data on a per-uid/per-repo basis.',
     'fields' => array(
@@ -968,8 +936,7 @@ function versioncontrol_update_6308() {
 }
 
 /**
- * Remove the defunct versioncontrol_accounts table and replace it with ones
- * driven by auth plugins, specifically the
+ * Add tables for auth plugins, specifically the
  * VersioncontrolAuthHandlerMappedAccounts family of plugins.
  */
 function versioncontrol_update_6309() {
@@ -1091,3 +1058,50 @@ function versioncontrol_update_6309() {
 
   return $ret;
 }
+
+/**
+ * Change the main schema to let drupal users have more than one account.
+ */
+function versioncontrol_account_status_update_6310() {
+  $ret = array();
+  $account_id = array(
+    'description' => 'The primary identifier for an account.',
+    'type' => 'serial',
+    'unsigned' => TRUE,
+    'not null' => TRUE,
+  );
+  db_drop_primary_key($ret, 'versioncontrol_accounts');
+  db_add_field($ret, 'versioncontrol_accounts', 'account_id', $account_id, array('primary key' => array('account_id')));
+  return $ret;
+}
+
+/**
+ * Move vcs_username field to account status module and remove
+ * {versioncontrol_accounts} table.
+ */
+function versioncontrol_account_status_update_6311() {
+  $ret = array();
+
+  // Try to migrate data if possible.
+  if (module_exists('versioncontrol_account_status')) {
+    $vcs_username = array(
+      'description' => 'VCS-specific username.',
+      'type' => 'varchar',
+      'length' => 64,
+      'not null' => TRUE,
+      'default' => '',
+    );
+    db_add_field($ret, 'versioncontrol_account_status_users', 'vcs_username', $vcs_username);
+
+    // Move vcs usernames data to the new field.
+    $result = db_query("SELECT uid, repo_id, vcs_username FROM {versioncontrol_accounts}");
+    while ($row = db_fetch_object($result)) {
+      db_query("UPDATE {versioncontrol_account_status_users} SET vcs_username ='%s' WHERE uid = %d AND repo_id = %d", $row->vcs_username, $row->uid, $row->repo_id);
+    }
+  }
+
+  // Remove the table.
+  db_drop_table($ret, 'versioncontrol_accounts');
+
+  return $ret;
+}
diff --git versioncontrol.module versioncontrol.module
index 0254402..fae6d2b 100644
--- versioncontrol.module
+++ versioncontrol.module
@@ -95,8 +95,20 @@ define('VERSIONCONTROL_ITEM_FILE_DELETED',      3);
 define('VERSIONCONTROL_ITEM_DIRECTORY_DELETED', 4);
 //@}
 
+/**
+ * The account registration form has a special demo mode to show the
+ * admin how account registration will look like in the general case,
+ * mainly in order to demonstrate how the various registration messages
+ * are being used.
+ *
+ * FIXME remove this hacky demo
+ */
+define('VERSIONCONTROL_REGISTER_DEMO', -1);
 
-/** Used internally by the repository and account admin pages. Private constant. */
+/**
+ * Used internally by the repository and account admin pages. Private
+ * constant.
+ */
 define('VERSIONCONTROL_FORM_CREATE', FALSE);
 
 /**
@@ -253,51 +265,6 @@ function versioncontrol_menu() {
     'type' => MENU_CALLBACK,
   ) + $admin;
 
-  $items['admin/project/versioncontrol-accounts'] = array(
-    'title' => 'VCS accounts',
-    'description' => 'Manage associations of Drupal users to VCS user accounts.',
-    'page arguments' => array('versioncontrol_admin_account_list_form'),
-    'type' => MENU_NORMAL_ITEM,
-  ) + $admin;
-  $items['admin/project/versioncontrol-accounts/list'] = array(
-    'title' => 'List',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => 0,
-  );
-
-  // Account registration and editing pages for the regular user.
-  $items['versioncontrol/register'] = array(
-    'title' => 'Get commit access',
-    'page callback' => 'versioncontrol_account_register_page',
-    'access callback' => TRUE, // access checking is done in the page callback
-    'file' => 'versioncontrol.pages.inc',
-    'type' => MENU_SUGGESTED_ITEM,
-  );
-  $items['user/%versioncontrol_user_accounts/edit/versioncontrol'] = array(
-    // Load with $include_unauthorized == TRUE, so that the user can inspect
-    // his/her VCS accounts even if they are not approved by the admin yet.
-    'load arguments' => array(TRUE),
-    'title callback' => 'versioncontrol_user_accounts_title_callback',
-    'title arguments' => array(1),
-    'page callback' => 'versioncontrol_account_page',
-    'page arguments' => array(1),
-    'access callback' => 'versioncontrol_private_account_access',
-    'access arguments' => array(1),
-    'file' => 'versioncontrol.pages.inc',
-    'weight' => 99,
-    'type' => MENU_LOCAL_TASK,
-  );
-
-  // Autocomplete callback for Drupal usernames that have access to
-  // the repo_id given in arg(3). (No need to fetch the full repository,
-  // as the callback uses a raw & safe database query anyways.)
-  $items['versioncontrol/user/autocomplete'] = array(
-    'title' => 'Version control user autocomplete',
-    'page callback' => 'versioncontrol_user_autocomplete',
-    'access callback' => 'versioncontrol_user_access',
-    'type' => MENU_CALLBACK,
-  );
-
   return $items;
 }
 
@@ -354,46 +321,6 @@ function versioncontrol_determine_backend_mode() {
 }
 
 /**
- * Custom access callback, determining if the current user (or the one given
- * in @p $account, if set) is permitted to view version control account
- * settings of the user specified the first user id in @p $vcs_accounts.
- * (We take that parameter because it's what the '%versioncontrol_user_accounts'
- * wildcard returns.)
- */
-function versioncontrol_private_account_access($vcs_accounts, $account = NULL) {
-  $viewed_uid = key($vcs_accounts);
-  if (!$viewed_uid) {
-    return FALSE;
-  }
-  if (is_null($account)) {
-    global $user;
-    $account = clone $user;
-  }
-  return ($viewed_uid == $account->uid && user_access('use version control systems', $account))
-    || user_access('administer version control systems', $account);
-}
-
-/**
- * Title callback for the "user/%versioncontrol_user_accounts/edit/versioncontrol" tab.
- */
-function versioncontrol_user_accounts_title_callback($accounts) {
-  $repo_ids = array();
-  foreach ($accounts as $account) {
-    $repo_ids[] = $account->repo_id;
-  }
-  $repositories = versioncontrol_repository_load_multiple($repo_ids);
-  $vcses = array();
-  foreach ($repositories as $repository) {
-    $vcses[$repository['vcs']] = TRUE;
-  }
-  if (count($vcses) == 1) {
-    $repo = array_shift($repositories);
-    return check_plain($repo->getBackend()->name);
-  }
-  return t('Repository accounts');
-}
-
-/**
  * Implementation of hook_perm().
  */
 function versioncontrol_perm() {
@@ -445,7 +372,7 @@ function versioncontrol_repository_load_multiple($ids = array(), $conditions = a
  *   API documentation of that function.
  */
 function versioncontrol_user_accounts_load($uid, $include_unauthorized = FALSE) {
-  return versioncontrol_user_accounts_load_multiple(array($uid), array(), array('include unauthorized' => $include_unauthorized));
+  return versioncontrol_user_accounts_load_multiple(array(), array('uid' => $uid), array('include unauthorized' => $include_unauthorized));
 }
 
 function versioncontrol_user_accounts_load_multiple($ids = array(), $conditions = array(), $options = array()) {
@@ -835,7 +762,10 @@ function theme_versioncontrol_account_username($uid, $username, $repository, $op
     ));
   }
   if ($format == 'html' && module_exists('commitlog')) {
-    return l($username, commitlog_get_account_url($repository, $username));
+    $url = url('commitlog', array(
+      'query' => array('username' => $username, 'repo' => $repository['repo_id']),
+    ));
+    return l($username, $url);
   }
   return $username;
 }
@@ -1009,37 +939,6 @@ function versioncontrol_block_site_active_developers() {
 
 
 /**
- * Returns a string of suggestions for Drupal usernames with accounts for
- * the given repository, formatted to be suitable for use with
- * JS autocomplete fields.
- */
-function versioncontrol_user_autocomplete($repo_id, $string = '') {
-  if (!is_numeric($repo_id) || empty($string)) {
-    drupal_json(array());
-    return;
-  }
-  $matches = array();
-  $result = db_query_range("SELECT u.uid, u.name
-                            FROM {users} u
-                             INNER JOIN {versioncontrol_accounts} a
-                              ON u.uid = a.uid
-                            WHERE repo_id = %d
-                             AND LOWER(u.name) LIKE LOWER('%s%%')",
-                            $repo_id, $string, 0, 10);
-
-  while ($user = db_fetch_object($result)) {
-    if (!isset($repository)) {
-      $repository = versioncontrol_repository_load($repo_id);
-    }
-    if ($repository->isAccountAuthorized($user->uid)) {
-      $matches[$user->name] = check_plain($user->name);
-    }
-  }
-  drupal_json($matches);
-}
-
-
-/**
  * Return preset values for strings that are used in the user interface.
  */
 function _versioncontrol_get_string_presets() {
diff --git versioncontrol.pages.inc versioncontrol.pages.inc
index 46ff844..0bf0ded 100644
--- versioncontrol.pages.inc
+++ versioncontrol.pages.inc
@@ -11,121 +11,6 @@
  * Copyright 2007, 2009 by Jakob Petsovits ("jpetso", http://drupal.org/user/56020)
  */
 
-// The account registration form has a special demo mode to show the admin how
-// account registration will look like in the general case, mainly in order to
-// demonstrate how the various registration messages are being used.
-define('VERSIONCONTROL_REGISTER_DEMO', -1);
-
-/**
- * Form callback for "versioncontrol/register[/$register_uid[/$register_at_repo_id]]":
- * Provide an indirection that leads to an account registration form.
- */
-function versioncontrol_account_register_page($register_uid = FALSE, $register_at_repo_id = FALSE) {
-  global $user;
-
-  if ($user->uid == 0 || !versioncontrol_user_access()) {
-    $presets = _versioncontrol_get_string_presets();
-
-    return variable_get(
-      'versioncontrol_registration_message_unauthorized',
-      $presets['versioncontrol_registration_message_unauthorized']
-    );
-  }
-
-  if ($register_uid == 'demo') {
-    $register_uid = VERSIONCONTROL_REGISTER_DEMO;
-  }
-  else {
-    $register_uid = is_numeric($register_uid) ? $register_uid : $user->uid;
-  }
-
-  $admin_access = versioncontrol_admin_access();
-
-  if (!$admin_access && $register_uid != $user->uid) {
-    drupal_access_denied();
-    return;
-  }
-
-  $accounts = versioncontrol_user_accounts_load($register_uid, TRUE);
-  $repositories = versioncontrol_repository_load_multiple(FALSE);
-
-  // Construct the '#options' array.
-  $account_usernames = array();
-  foreach ($accounts as $uid => $usernames_by_repository) {
-    foreach ($usernames_by_repository as $repo_id => $account) {
-      $account_usernames[$repo_id][] = $account->vcs_username;
-    }
-  }
-
-  if ($register_uid == VERSIONCONTROL_REGISTER_DEMO) {
-    $account_usernames = array();
-  }
-
-  $repository_names = array();
-  foreach ($repositories as $repo_id => $repository) {
-    if (isset($account_usernames[$repo_id])
-        && $repository->isAccountAuthorized($register_uid)) {
-      // We only want repositories in the list of repositories that are open
-      // for registrations where no (authorized) account exists yet.
-      continue;
-    }
-    if (!isset($first_repo_id)) {
-      $first_repo_id = $repo_id;
-    }
-    $repository_names[$repo_id] = check_plain($repository['name']);
-  }
-
-  // Filter (and possibly change the caption of) the list of repositories to
-  // select. The admin has all the permissions and gets the uncensored list.
-  if (!$admin_access) {
-    foreach (module_implements('versioncontrol_alter_repository_selection') as $module) {
-      $function = $module .'_versioncontrol_alter_repository_selection';
-      $function($repository_names, $repositories);
-    }
-  }
-
-  // If there's just one repository on the site, redirect directly to this one.
-  if (count($repository_names) == 1) {
-    $only_repo_id = $first_repo_id;
-  }
-  elseif (count($repositories) == 1) {
-    $only_repo_id = reset(array_keys($repositories));
-  }
-
-  if ($register_uid == VERSIONCONTROL_REGISTER_DEMO) {
-    unset($only_repo_id);
-  }
-
-  if (is_numeric($register_at_repo_id) || isset($only_repo_id)) {
-    // If there is only one repository left to register, it doesn't matter
-    // whether or not the URL contains a repository (and which one), we always
-    // redirect to the remaining possible one. Otherwise, we try to register
-    // at the given repository.
-    $repo_id = isset($only_repo_id) ? $only_repo_id : $register_at_repo_id;
-
-    if (isset($account_usernames[$repo_id])) {
-      drupal_set_message(t('You already have a registered account.'));
-      drupal_goto('user/'. $user->uid .'/edit/versioncontrol/'. $repo_id
-                  .'/'. reset($account_usernames[$repo_id]));
-      // drupal_goto() calls exit() so script execution ends right here
-    }
-    elseif (isset($repository_names[$repo_id])) {
-      return drupal_get_form('versioncontrol_account_edit_form',
-        $register_uid, $repositories[$repo_id], VERSIONCONTROL_FORM_CREATE
-      );
-    }
-  }
-
-  if (!isset($first_repo_id)) {
-    // when there are no repos, this var is not set
-    $first_repo_id = NULL;
-  }
-
-  return drupal_get_form('versioncontrol_account_register_form',
-    $register_uid, $repository_names, $first_repo_id
-  );
-}
-
 /**
  * Implementation of hook_versioncontrol_alter_repository_selection():
  * Alter the list of repositories that are available for user registration
@@ -153,414 +38,3 @@ function versioncontrol_versioncontrol_alter_repository_selection(&$repository_n
     }
   }
 }
-
-/**
- * The actual form for "versioncontrol/register[/$register_uid]".
- */
-function versioncontrol_account_register_form(&$form_state, $register_uid, $repository_names, $first_repo_id) {
-  $form = array();
-
-  if (empty($repository_names)) {
-    drupal_set_title(t('No more registrations possible'));
-    $form['no_registration'] = array(
-      '#type' => 'markup',
-      '#value' => t('You already have an account for all the repositories where you can register. Go to your !user-account-page to configure repository account settings.',
-        array('!user-account-page' => l(t('user account page'), 'user/'. $register_uid .'/edit/versioncontrol'))
-      ),
-      '#prefix' => '<p>',
-      '#suffix' => '</p>',
-    );
-    return $form;
-  }
-
-  $form['#id'] = 'vcs-account-indirection-form';
-
-  $message = variable_get('versioncontrol_registration_message_authorized', FALSE);
-  if ($message == FALSE) {
-    $presets = _versioncontrol_get_string_presets();
-    $message = $presets['versioncontrol_registration_message_authorized'];
-  }
-  if (!empty($message)) {
-    $form['overview'] = array(
-      '#type' => 'fieldset',
-      '#title' => t('Overview'),
-      '#weight' => -100,
-    );
-    $form['overview']['overview'] = array(
-      '#type' => 'markup',
-      '#value' => $message,
-    );
-  }
-
-  $form['#uid'] = $register_uid;
-
-  $form['repository'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Select repository'),
-    '#weight' => 10,
-  );
-  $form['repository']['repo_id'] = array(
-    '#type' => 'select',
-    '#title' => t('Create user account in'),
-    '#options' => $repository_names,
-    '#default_value' => $first_repo_id,
-  );
-
-  if ($register_uid != VERSIONCONTROL_REGISTER_DEMO) {
-    $form['repository']['submit'] = array(
-      '#type' => 'submit',
-      '#value' => t('Create account'),
-      '#weight' => 100,
-    );
-  }
-  return $form;
-}
-
-/**
- * Submit handler for the indirection form.
- * Surprisingly, all it does is redirect to the appropriate registration form.
- */
-function versioncontrol_account_register_form_submit($form, &$form_state) {
-  $form_state['redirect'] = 'versioncontrol/register/'. $form['#uid'] .'/'. $form_state['values']['repo_id'];
-}
-
-
-/**
- * Form callback for 'user/%versioncontrol_user_accounts/edit/versioncontrol':
- * Display a list of the given user's VCS accounts, or directly return the form
- * array from versioncontrol_account_edit_form() if only a single account
- * exists for that user (or if the account has been given in the URL).
- */
-function versioncontrol_account_page($vcs_accounts, $url_repo_id = NULL, $url_username = NULL) {
-  $selected_usernames = array();
-
-  foreach ($vcs_accounts as $key => $vcs_account) {
-    // The caller (menu system) ensures that there is only one uid.
-    $uid = $vcs_account->uid;
-    if (isset($url_repo_id) && $vcs_account->repo_id != $url_repo_id) {
-      unset($vcs_accounts[$key]);
-      continue; // disregard repositories that don't match the URL constraints
-    }
-    if (isset($url_username) && $vcs_account->vcs_username != $url_username) {
-      unset($vcs_accounts[$key]);
-      continue; // disregard usernames that don't match the URL constraints
-    }
-    $any_repo_id = $vcs_account->repo_id;
-    $selected_usernames[] = $vcs_account->vcs_username;
-  }
-
-  if (empty($selected_usernames)) {
-    drupal_not_found();
-    return;
-  }
-  elseif (count($selected_usernames) == 1) {
-    $repository = versioncontrol_repository_load($any_repo_id);
-    return drupal_get_form('versioncontrol_account_edit_form',
-      $uid, $repository, reset($selected_usernames)
-    );
-  }
-  else {
-    return drupal_get_form('versioncontrol_account_list_form', $vcs_accounts);
-  }
-}
-
-/**
- * Form callback for "admin/project/versioncontrol-accounts" and
- * (in certain cases) "user/%versioncontrol_user_accounts/edit/versioncontrol":
- * Show a list of VCS accounts to the admin or the user.
- *
- * @param $accounts
- *   The list of accounts to show, in versioncontrol_user_account_load_multiple format.
- */
-function versioncontrol_account_list_form(&$form_state, $accounts) {
-  $form = array();
-  $form['#id'] = 'versioncontrol-account-list-form';
-
-  $repositories = versioncontrol_repository_load_multiple(array_keys(reset($accounts)));
-
-  $header = array(t('Repository'), t('Username'), '');
-  $rows = array();
-
-  foreach ($accounts as $uid => $usernames_by_repository) {
-    foreach ($usernames_by_repository as $repo_id => $username) {
-      if (!isset($repositories[$repo_id])) { // happens if the backend isn't loaded
-        continue;
-      }
-      $usernames = array($username);
-
-      foreach ($usernames as $username) {
-        $formatted_username = theme('versioncontrol_account_username',
-          $uid, $username, $repositories[$repo_id],
-          array('prefer_drupal_username' => FALSE)
-        );
-        $repo_name = module_exists('commitlog')
-          ? theme('commitlog_repository', $repositories[$repo_id])
-          : check_plain($repositories[$repo_id]['name']);
-
-        $rows[] = array(
-          $repo_name,
-          $formatted_username,
-          l(t('Edit @vcs account', array('@vcs' => $repositories[$repo_id]->getBackend()->name)),
-            'user/'. $uid .'/edit/versioncontrol/'. $repo_id .'/'. drupal_urlencode($username)
-          ),
-        );
-      }
-    }
-  }
-
-  $form['accounts'] = array(
-    '#type' => 'markup',
-    '#value' => theme('table', $header, $rows, array('style' => 'width: 50%;')),
-  );
-  return $form;
-}
-
-/**
- * Form callback for (in certain cases) "versioncontrol/register"
- * and "user/%versioncontrol_user_accounts/edit/versioncontrol":
- * Provide a form to register or edit a VCS account.
- *
- * @param $uid
- *   The uid of the Drupal user whose account is being edited or registered.
- * @param $repository
- *   The repository of the added/edited account.
- * @param $vcs_username
- *   The user's VCS-specific username for the repository,
- *   or VERSIONCONTROL_FORM_CREATE if a new VCS account should be registered.
- */
-function versioncontrol_account_edit_form(&$form_state, $uid, $repository, $vcs_username) {
-  $form = array();
-  $create_account = ($vcs_username === VERSIONCONTROL_FORM_CREATE);
-  $vcs_name = $repository->getBackend()->name;
-
-  $user = ($uid === VERSIONCONTROL_REGISTER_DEMO) ? FALSE : user_load($uid);
-
-  if (!($user || ($uid === VERSIONCONTROL_REGISTER_DEMO && $create_account))) {
-    drupal_not_found(); // cannot edit/register accounts for non-existing users
-    return array();
-  }
-
-  // Set an appropriate page title.
-  if ($create_account) {
-    drupal_set_title(t(
-      'Create user account in @repository',
-      array('@repository' => $repository['name'])
-    ));
-  }
-  elseif ($user) {
-    drupal_set_title(check_plain($user->name));
-  }
-
-  $form['#id'] = 'versioncontrol-account-form';
-
-  $form['#repository'] = $repository;
-  $form['#vcs'] = $repository['vcs'];
-  $form['#vcs_name'] = $vcs_name;
-  $form['#uid'] = $uid;
-  $form['#original_username'] = $vcs_username;
-
-  $form['#validate'] = array('versioncontrol_account_edit_form_validate');
-  $form['#submit'] = array('versioncontrol_account_edit_form_submit');
-
-  if ($create_account) {
-    $registration_message = isset($repository->data['versioncontrol']['registration_message'])
-      ? $repository->data['versioncontrol']['registration_message']
-      : '';
-
-    if (!empty($registration_message)) {
-      $form['overview'] = array(
-        '#type' => 'fieldset',
-        '#title' => t('Overview'),
-        '#weight' => -100,
-      );
-      $form['overview']['overview'] = array(
-        '#type' => 'markup',
-        '#value' => $registration_message,
-      );
-    }
-  }
-
-  $form['account'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('@vcs account settings', array('@vcs' => $vcs_name)),
-    '#weight' => 0,
-  );
-
-  $admin_access = versioncontrol_admin_access();
-
-  if ($create_account || $admin_access) {
-    if ($create_account) {
-      $data = array(
-        'vcs_username' => $vcs_username,
-        'uid' => $uid,
-        'repository' => $repository,
-      );
-      $vcs_account = $repository->getBackend()->buildEntity('account', $data);
-      // Have a nice default value for the new VCS username.
-      $vcs_username = $repository->getBackend()->usernameSuggestion($user);
-    }
-
-    if ($admin_access) { // the admin version
-      $description = t('The @vcs username associated with the account of !user. This field is used to link commit messages to user accounts.', array('@vcs' => $vcs_name, '!user' => theme_username($user)));
-    }
-    else { // the account creation version
-      $description = t('Choose a username to access the @vcs repository with. @vcs usernames should be lowercase. Spaces or other special characters are not allowed.', array('@vcs' => $vcs_name));
-    }
-
-    $form['account']['account_name'] = array(
-      '#type' => 'textfield',
-      '#title' => t('@vcs username', array('@vcs' => $vcs_name)),
-      '#description' => $description,
-      '#default_value' => $vcs_username,
-      '#weight' => 0,
-      '#size' => 30,
-      '#maxlength' => 64,
-    );
-  }
-  else {
-    $form['account_name'] = array(
-      '#type' => 'value',
-      '#value' => $vcs_username,
-    );
-    $form['account']['account_name_display'] = array(
-      '#type' => 'item',
-      '#title' => t('@vcs username', array('@vcs' => $vcs_name)),
-      '#description' => t('Your @vcs username. This field can only be edited by administrators and is used to link your @vcs messages to your user account.', array('@vcs' => $vcs_name)),
-      '#value' => $vcs_username,
-      '#weight' => 0,
-    );
-  }
-
-  if ($uid !== VERSIONCONTROL_REGISTER_DEMO) {
-    $form['submit'] = array(
-      '#type' => 'submit',
-      '#value' => $create_account
-                  ? t('Create @vcs account', array('@vcs' => $vcs_name))
-                  : t('Update @vcs account', array('@vcs' => $vcs_name)),
-      '#weight' => 100,
-    );
-  }
-  return $form;
-}
-
-/**
- * Validate the edit/register user account form submission before it is submitted.
- */
-function versioncontrol_account_edit_form_validate($form, &$form_state) {
-  if (!isset($form_state['values']['account_name'])) {
-    return;
-  }
-  $uid = $form['#uid'];
-  $username = trim($form_state['values']['account_name']);
-  $repository = $form['#repository'];
-  $vcs_name = $form['#vcs_name'];
-
-  if (!isset($repository)) { // admin deletes repo while user fills in form
-    form_set_error('account',
-      t('The repository has been deleted.')
-    );
-    return;
-  }
-
-  if (empty($username)) {
-    form_set_error('account_name',
-      t('The @vcs username may not be empty.', array('@vcs' => $vcs_name))
-    );
-  }
-  else {
-    // Check for username validity - done by the backend, but with a fallback
-    // for alphanum-only characters.
-    $data = array(
-      'vcs_username' => $username,
-      'uid' => $uid,
-      'repository' => $repository,
-    );
-    $vcs_account = $repository->getBackend()->buildEntity('account', $data);
-    if (!$repository->getBackend()->isUsernameValid($username)) {
-      form_set_error('account_name',
-        t('The specified @vcs username is invalid.', array('@vcs' => $vcs_name))
-      );
-    }
-    // The username is passed by reference and might have changed. That's a bit
-    // uncomfortable as a caller API, but more convenient for the backends.
-    // (Plus it makes sense anyways since we have trimmed the username too.)
-    $form_state['values']['account_name'] = $username;
-
-    // Check for duplicates.
-    $existing_uid = $repository->getAccountUidForUsername($username, TRUE);
-    if ($existing_uid && $uid != $existing_uid) {
-      if ($existing_user = user_load(array('uid' => $existing_uid))) {
-        $existing_username = theme('username', $existing_user);
-      }
-      else {
-        $existing_username = t('user #!id', array('!id' => $existing_uid));
-      }
-      form_set_error('account_name',
-        t('The specified @vcs username is already in use by !existing-user.',
-          array('@vcs' => $vcs_name, '!existing-user' => $existing_username))
-      );
-    }
-  }
-}
-
-/**
- * Add or update the user account when the edit/register form is submitted.
- */
-function versioncontrol_account_edit_form_submit($form, &$form_state) {
-  // Reconstruct the user data from the $form_state that was passed.
-  $uid = $form['#uid'];
-  $vcs_username = $form_state['values']['account_name'];
-  $repository = $form['#repository'];
-  $vcs_name = $form['#vcs_name'];
-
-  // Let other modules provide additional account data.
-  $additional_data = array();
-  foreach (module_implements('versioncontrol_account_submit') as $module) {
-    $function = $module .'_versioncontrol_account_submit';
-    $function($additional_data, $form, $form_state);
-  }
-
-  if (empty($form['#original_username'])) {
-    $data = array(
-      'vcs_username' => $vcs_username,
-      'uid' => $uid,
-      'repository' => $repository,
-    );
-    $vcs_account = $repository->getBackend()->buildEntity('account', $data);
-    $vcs_account->additional_data = $additional_data;
-    $vcs_account->insert();
-    $message = drupal_set_message(t(
-      'The @vcs account %vcs_username has been registered.',
-      array('@vcs' => $vcs_name, '%vcs_username' => $vcs_username)
-    ));
-  }
-  else {
-    //FIXME why username are a required constraint? <-- shouldn't be anymore
-    //      uid and repo_id are the PK on the table getAccounts query
-    $conditions = array(
-      'repo_id' => array($repository->repo_id),
-      'vcs_username' => array($form['#original_username'])
-    );
-    $vcs_accounts = versioncontrol_user_accounts_load_multiple(array($uid), $conditions, array('include unauthorized' => TRUE));
-    // if we got an original_username we can trust on getting a value
-    $vcs_account = array_shift($vcs_accounts);
-
-    $vcs_account->vcs_username = $vcs_username;
-    $vcs_account->additional_data = $additional_data;
-    $vcs_account->update();
-
-    // Regular users cannot change the username, and will probably get
-    // a message for each of the other actions that hook into the form.
-    if (versioncontrol_admin_access()) {
-      $message = drupal_set_message(t(
-        'The @vcs account %username has been updated successfully.',
-        array('@vcs' => $vcs_name, '%username' => $vcs_username)
-      ));
-    }
-  }
-
-  $form_state['redirect'] = versioncontrol_admin_access()
-    ? 'admin/project/versioncontrol-accounts'
-    : 'user/'. $uid .'/edit/versioncontrol/'. $repository->repo_id
-        .'/'. drupal_urlencode($vcs_username);
-}
diff --git versioncontrol_account_status/includes/VersioncontrolAccount.php versioncontrol_account_status/includes/VersioncontrolAccount.php
new file mode 100644
index 0000000..1e673d8
--- /dev/null
+++ versioncontrol_account_status/includes/VersioncontrolAccount.php
@@ -0,0 +1,179 @@
+<?php
+// $Id: VersioncontrolAccount.php,v 1.12 2010/12/06 03:23:44 marvil07 Exp $
+/**
+ * @file
+ * Account class
+ */
+
+/**
+ * Account class
+ *
+ * This class provides the way to manage users accounts.
+ */
+class VersioncontrolAccount extends VersioncontrolEntity {
+  protected $_id = 'account_id';
+
+  /**
+   * The tag identifier (a simple integer), used for unique identification of
+   * this account in the database.
+   *
+   * @var int
+   */
+  public $account_id;
+
+  /**
+   * The username, as it is represented by the VCS.
+   *
+   * @var string
+   */
+  public $vcs_username = '';
+
+  /**
+   * The uid of the associated Drupal user.
+   *
+   * If 0, indicates that there is no known associated Drupal user. Code using
+   * this class should construct their behaviors to respect this magic value.
+   *
+   * @var int
+   */
+  public $uid = 0;
+
+  public $repo_id;
+
+  /**
+   * Update a VCS user account in the database, and call the necessary
+   * module hooks. The account repository and uid must stay the same values as
+   * the one given on account creation, whereas vcs_username and
+   * data data members can change.
+   *
+   * FIXME use same logic as in other classes, this probably would
+   * be changed only when we get account_id PK schema change in.
+   * TODO review performance impact of updating the vcs_username since
+   * original jpetso work try to avoid to update if not needed by passing
+   * it as parameter.
+   */
+  public function update($options = array()) {
+    // Append default options.
+    $options += $this->defaultCrudOptions['update'];
+
+    // make sure repo id is set for drupal_write_record()
+    if (empty($this->repo_id)) {
+      $this->repo_id = $this->repository->repo_id;
+    }
+    drupal_write_record('versioncontrol_account_status_users', $this, 'account_id');
+
+    // Update operations table.
+    // this is assuming 1-1 relation between accounts and uid's
+    //   1. unassign all uid related operations
+    db_query('update {versioncontrol_operations}
+              set author_uid = 0
+              where author_uid = %d and repo_id = %d',
+              $this->uid, $this->repo_id);
+    db_query('update {versioncontrol_operations}
+              set committer_uid = 0
+              where committer_uid = %d and repo_id = %d',
+              $this->uid, $this->repo_id);
+    //   2. assingn all operations related to repo and vcs username
+    db_query("UPDATE {versioncontrol_operations}
+              SET author_uid = %d
+              WHERE author = '%s' AND repo_id = %d",
+              $this->uid, $this->vcs_username, $this->repo_id);
+    db_query("UPDATE {versioncontrol_operations}
+              SET committer_uid = %d
+              WHERE committer = '%s' AND repo_id = %d",
+              $this->uid, $this->vcs_username, $this->repo_id);
+    // not using data field for now, but backends can
+
+    // Let the backend take action.
+    $this->backendUpdate($options);
+
+    // Everything's done, invoke the hook.
+    module_invoke_all('versioncontrol_entity_account_update', $this);
+    return $this;
+  }
+
+  /**
+   * Insert a VCS user account into the database,
+   * and call the necessary module hooks.
+   *
+   * FIXME use same logic as in other classes, this probably would
+   * be changed only when we get account_id PK schema change in.
+   */
+  public function insert($options = array()) {
+    // Append default options.
+    $options += $this->defaultCrudOptions['insert'];
+
+    // make sure repo id is set for drupal_write_record()
+    if (empty($this->repo_id)) {
+      $this->repo_id = $this->repository->repo_id;
+    }
+    drupal_write_record('versioncontrol_account_status_users', $this);
+
+    // Provide an opportunity for the backend to add its own stuff.
+    $this->backendInsert($options);
+
+    // Update the operations table.
+    db_query("UPDATE {versioncontrol_operations}
+              SET author_uid = %d
+              WHERE author = '%s' AND repo_id = %d",
+              $this->uid, $this->vcs_username, $this->repo_id);
+    db_query("UPDATE {versioncontrol_operations}
+              SET committer_uid = %d
+              WHERE committer = '%s' AND repo_id = %d",
+              $this->uid, $this->vcs_username, $this->repo_id);
+
+    // Everything's done, invoke the hook.
+    module_invoke_all('versioncontrol_entity_account_insert', $this);
+    return $this;
+  }
+
+  /**
+   * Delete a VCS user account from the database, set all commits with this
+   * account as author to user 0 (anonymous), and call the necessary hooks.
+   *
+   * FIXME use same logic as in other classes, this probably would
+   * be changed only when we get account_id PK schema change in.
+   */
+  public function delete($options = array()) {
+    // Append default options.
+    $options += $this->defaultCrudOptions['delete'];
+
+    // make sure repo id is set for drupal_write_record()
+    if (empty($this->repo_id)) {
+      $this->repo_id = $this->repository->repo_id;
+    }
+
+    // Update the operations table.
+    db_query('update {versioncontrol_operations}
+              set author_uid = 0
+              where author_uid = %d and repo_id = %d',
+              $this->uid, $this->repo_id);
+    db_query('update {versioncontrol_operations}
+              set committer_uid = 0
+              where committer_uid = %d and repo_id = %d',
+              $this->uid, $this->repo_id);
+
+    db_delete('versioncontrol_account_status_users')
+      ->condition('uid', $this->uid)
+      ->condition('repo_id', $this->repo_id)
+      ->execute();
+
+    // Provide an opportunity for the backend to delete its own stuff.
+    $this->backendDelete($options);
+
+    module_invoke_all('versioncontrol_entity_account_delete', $this);
+  }
+
+}
+
+class VersioncontrolAccountController extends VersioncontrolEntityController {
+  //TODO handle correctly 'include unauthorized' option
+  protected $entityType = 'account';
+  protected $baseTable = 'versioncontrol_account_status_users';
+  protected $idKey = 'account_id';
+
+  protected function modifyReturn($entities) {
+    // by now, return the same
+    return $entities;
+  }
+}
diff --git versioncontrol_account_status/includes/handlers/versioncontrol_account_status_handler_field_account_status.inc versioncontrol_account_status/includes/handlers/versioncontrol_account_status_handler_field_account_status.inc
new file mode 100755
index 0000000..501dbd5
--- /dev/null
+++ versioncontrol_account_status/includes/handlers/versioncontrol_account_status_handler_field_account_status.inc
@@ -0,0 +1,18 @@
+<?php
+// $Id$
+
+/**
+ * Views Field handler map account status constants to strings.
+ */
+class versioncontrol_account_status_handler_field_account_status extends views_handler_field {
+  public $account_statuses;
+
+  function construct() {
+    parent::construct();
+    $this->account_statuses = _versioncontrol_account_status_get_status_options(TRUE);
+  }
+
+  function render($values) {
+    return $this->account_statuses[$values->{$this->field_alias}];
+  }
+}
diff --git versioncontrol_account_status/includes/handlers/versioncontrol_account_status_handler_filter_account_status.inc versioncontrol_account_status/includes/handlers/versioncontrol_account_status_handler_filter_account_status.inc
new file mode 100755
index 0000000..dbd8ba3
--- /dev/null
+++ versioncontrol_account_status/includes/handlers/versioncontrol_account_status_handler_filter_account_status.inc
@@ -0,0 +1,14 @@
+<?php
+// $Id$
+
+/**
+ * Views filter handler to allow filtering based on the account status.
+ */
+
+class versioncontrol_account_status_handler_filter_account_status extends views_handler_filter_in_operator {
+
+  function get_value_options() {
+    $this->value_options = _versioncontrol_account_status_get_status_options(TRUE);
+  }
+
+}
diff --git versioncontrol_account_status/includes/versioncontrol_account_status.views.inc versioncontrol_account_status/includes/versioncontrol_account_status.views.inc
new file mode 100755
index 0000000..13273a0
--- /dev/null
+++ versioncontrol_account_status/includes/versioncontrol_account_status.views.inc
@@ -0,0 +1,148 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ *
+ * Implement views hooks to provide views integration for Version Control
+ * Account statsus tables and define the requisite plugins for doing so.
+ */
+
+/**
+ * Implementation of hook_views_data().
+ */
+function versioncontrol_account_status_views_data() {
+  $data = array();
+  $data['versioncontrol_account_status_users']['table']['base'] = array(
+    'field' => 'account_id',
+    'title' => t('Versioncontrol account status accounts'),
+    'help' => t('A table describing the approval status of a user account in an associated repository. The Version Control Account Status module maps the approval status to the the Version Control API\'s concept of "authorized accounts".'),
+  );
+  $data['versioncontrol_account_status_users']['table']['group'] = t('Versioncontrol account status');
+  $data['versioncontrol_account_status_users']['account_id'] = array(
+    'title' => t('Account status account ID'),
+    'help' => t('The primary identifier for an account.'),
+    'field' => array(
+      'handler' => 'views_handler_field_numeric',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_numeric',
+      'allow empty' => TRUE,
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_numeric',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+  $data['versioncontrol_account_status_users']['uid'] = array(
+    'title' => t('User ID'),
+    'help' => t('The Drupal user id of the applying user, referring to both {users}.uid.'),
+    'relationship' => array(
+      'base'  => 'users',
+      'base field' => 'uid',
+      'handler' => 'views_handler_relationship',
+      'label' => t('User'),
+    ),
+    'field' => array(
+      'handler' => 'views_handler_field_numeric',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_numeric',
+      'allow empty' => TRUE,
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_numeric',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+  $data['versioncontrol_account_status_users']['repo_id'] = array(
+    'title' => t('Repository ID'),
+    'help' => t('The {versioncontrol_repositories}.repo_id where the user requested approval for a VCS account.'),
+    'relationship' => array(
+      'base'  => 'versioncontrol_repositories',
+      'base field' => 'repo_id',
+      'handler' => 'views_handler_relationship',
+      'label' => t('Repository'),
+    ),
+    'field' => array(
+      'handler' => 'views_handler_field_numeric',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_numeric',
+      'allow empty' => TRUE,
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_numeric',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+  $data['versioncontrol_account_status_users']['motivation'] = array(
+    'title' => t('Motivation'),
+    'help' => t('The motivation message entered by the applying user. This contains an explanation why the user thinks that (s)he should get a VCS account for this repository.'),
+    'field' => array(
+      'handler' => 'views_handler_field',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+      'allow empty' => TRUE,
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_string',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+  $data['versioncontrol_account_status_users']['status'] = array(
+    'title' => t('Status'),
+    'help' => t('The approval status of the applying user - one of the constants defined at the top of versioncontrol_account_status.module. If there is no entry for a user/repository combination, the module will assume the VERSIONCONTROL_ACCOUNT_STATUS_UNDEFINED constant when retrieving the status.'),
+    'field' => array(
+      'handler' => 'versioncontrol_account_status_handler_field_account_status',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'versioncontrol_account_status_handler_filter_account_status',
+      'allow empty' => TRUE,
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_numeric',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+
+  return $data;
+}
+
+/**
+ * Implement hook_views_handler().
+ */
+function versioncontrol_account_status_views_handlers() {
+  $ret = array(
+    'info' => array(
+      'path'       => drupal_get_path('module', 'versioncontrol_account_status') . '/includes/handlers',
+    ),
+    'handlers' => array(
+      // field handlers
+      'versioncontrol_account_status_handler_field_account_status' => array(
+        'parent' => 'views_handler_field',
+      ),
+      // filter handlers
+      'versioncontrol_account_status_handler_filter_account_status' => array(
+        'parent' => 'views_handler_filter_in_operator',
+      ),
+    ),
+  );
+  return $ret;
+}
diff --git versioncontrol_account_status/includes/versioncontrol_account_status.views_default.inc versioncontrol_account_status/includes/versioncontrol_account_status.views_default.inc
new file mode 100644
index 0000000..4fe7fda
--- /dev/null
+++ versioncontrol_account_status/includes/versioncontrol_account_status.views_default.inc
@@ -0,0 +1,271 @@
+<?php
+// $Id: commitlog.views_default.inc,v 1.5 2010/12/03 19:50:02 marvil07 Exp $
+
+/**
+ * @file
+ *   Provide default views for use by the account status module.
+ */
+
+/**
+ * Implementation of hook_views_default_views().
+ */
+function versioncontrol_account_status_views_default_views() {
+  $views = array();
+  //TODO add a repository filter by name
+
+  // View 'versioncontrol_account_status_accounts'
+  $view = new view;
+  $view->name = 'versioncontrol_account_status_acccounts';
+  $view->description = t('Accounts as defined by the versiocontrol_account_status module.');
+  $view->tag = 'Version Control Account Status';
+  $view->view_php = '';
+  $view->base_table = 'versioncontrol_account_status_users';
+  $view->is_cacheable = FALSE;
+  $view->api_version = 2;
+  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+  $handler = $view->new_display('default', 'Defaults', 'default');
+  $handler->override_option('relationships', array(
+    'repo_id' => array(
+      'label' => 'Repository',
+      'required' => 0,
+      'id' => 'repo_id',
+      'table' => 'versioncontrol_account_status_users',
+      'field' => 'repo_id',
+      'relationship' => 'none',
+    ),
+    'uid' => array(
+      'label' => 'User',
+      'required' => 0,
+      'id' => 'uid',
+      'table' => 'versioncontrol_account_status_users',
+      'field' => 'uid',
+      'relationship' => 'none',
+    ),
+  ));
+  $handler->override_option('fields', array(
+    'account_id' => array(
+      'label' => 'Account ID',
+      'alter' => array(
+        'alter_text' => 0,
+        'text' => '',
+        'make_link' => 0,
+        'path' => '',
+        'link_class' => '',
+        'alt' => '',
+        'prefix' => '',
+        'suffix' => '',
+        'target' => '',
+        'help' => '',
+        'trim' => 0,
+        'max_length' => '',
+        'word_boundary' => 1,
+        'ellipsis' => 1,
+        'html' => 0,
+        'strip_tags' => 0,
+      ),
+      'empty' => '',
+      'hide_empty' => 0,
+      'empty_zero' => 0,
+      'set_precision' => FALSE,
+      'precision' => 0,
+      'decimal' => '.',
+      'separator' => ',',
+      'prefix' => '',
+      'suffix' => '',
+      'exclude' => 0,
+      'id' => 'account_id',
+      'table' => 'versioncontrol_account_status_users',
+      'field' => 'account_id',
+      'relationship' => 'none',
+    ),
+    'vcs' => array(
+      'label' => 'Backend',
+      'alter' => array(
+        'alter_text' => 0,
+        'text' => '',
+        'make_link' => 0,
+        'path' => '',
+        'link_class' => '',
+        'alt' => '',
+        'prefix' => '',
+        'suffix' => '',
+        'target' => '',
+        'help' => '',
+        'trim' => 0,
+        'max_length' => '',
+        'word_boundary' => 1,
+        'ellipsis' => 1,
+        'html' => 0,
+        'strip_tags' => 0,
+      ),
+      'empty' => '',
+      'hide_empty' => 0,
+      'empty_zero' => 0,
+      'exclude' => 0,
+      'id' => 'vcs',
+      'table' => 'versioncontrol_repositories',
+      'field' => 'vcs',
+      'relationship' => 'repo_id',
+    ),
+    'name' => array(
+      'label' => 'Repository',
+      'alter' => array(
+        'alter_text' => 0,
+        'text' => '',
+        'make_link' => 0,
+        'path' => '',
+        'link_class' => '',
+        'alt' => '',
+        'prefix' => '',
+        'suffix' => '',
+        'target' => '',
+        'help' => '',
+        'trim' => 0,
+        'max_length' => '',
+        'word_boundary' => 1,
+        'ellipsis' => 1,
+        'html' => 0,
+        'strip_tags' => 0,
+      ),
+      'empty' => '',
+      'hide_empty' => 0,
+      'empty_zero' => 0,
+      'exclude' => 0,
+      'id' => 'name',
+      'table' => 'versioncontrol_repositories',
+      'field' => 'name',
+      'relationship' => 'repo_id',
+    ),
+    'name_1' => array(
+      'label' => 'Username',
+      'alter' => array(
+        'alter_text' => 0,
+        'text' => '',
+        'make_link' => 0,
+        'path' => '',
+        'link_class' => '',
+        'alt' => '',
+        'prefix' => '',
+        'suffix' => '',
+        'target' => '',
+        'help' => '',
+        'trim' => 0,
+        'max_length' => '',
+        'word_boundary' => 1,
+        'ellipsis' => 1,
+        'html' => 0,
+        'strip_tags' => 0,
+      ),
+      'empty' => '',
+      'hide_empty' => 0,
+      'empty_zero' => 0,
+      'link_to_user' => 1,
+      'overwrite_anonymous' => 0,
+      'anonymous_text' => '',
+      'exclude' => 0,
+      'id' => 'name_1',
+      'table' => 'users',
+      'field' => 'name',
+      'relationship' => 'uid',
+    ),
+    'status' => array(
+      'label' => 'Status',
+      'alter' => array(
+        'alter_text' => 0,
+        'text' => '',
+        'make_link' => 0,
+        'path' => '',
+        'link_class' => '',
+        'alt' => '',
+        'prefix' => '',
+        'suffix' => '',
+        'target' => '',
+        'help' => '',
+        'trim' => 0,
+        'max_length' => '',
+        'word_boundary' => 1,
+        'ellipsis' => 1,
+        'html' => 0,
+        'strip_tags' => 0,
+      ),
+      'empty' => '',
+      'hide_empty' => 0,
+      'empty_zero' => 0,
+      'exclude' => 0,
+      'id' => 'status',
+      'table' => 'versioncontrol_account_status_users',
+      'field' => 'status',
+      'relationship' => 'none',
+    ),
+  ));
+  $handler->override_option('filters', array(
+    'status' => array(
+      'operator' => 'in',
+      'value' => array(),
+      'group' => '0',
+      'exposed' => TRUE,
+      'expose' => array(
+        'use_operator' => 0,
+        'operator' => 'status_op',
+        'identifier' => 'status',
+        'label' => 'Account status',
+        'optional' => 1,
+        'single' => 1,
+        'remember' => 0,
+        'reduce' => 0,
+      ),
+      'id' => 'status',
+      'table' => 'versioncontrol_account_status_users',
+      'field' => 'status',
+      'relationship' => 'none',
+    ),
+    'uid' => array(
+      'operator' => 'in',
+      'value' => '',
+      'group' => '0',
+      'exposed' => TRUE,
+      'expose' => array(
+        'use_operator' => 0,
+        'operator' => 'uid_op',
+        'identifier' => 'uid',
+        'label' => 'Usernames',
+        'optional' => 1,
+        'remember' => 0,
+        'reduce' => 0,
+      ),
+      'id' => 'uid',
+      'table' => 'users',
+      'field' => 'uid',
+      'relationship' => 'uid',
+    ),
+  ));
+  $handler->override_option('access', array(
+    'type' => 'none',
+  ));
+  $handler->override_option('cache', array(
+    'type' => 'none',
+  ));
+  $handler->override_option('title', 'Version Control Account Status Accounts');
+  $handler->override_option('items_per_page', 50);
+  $handler->override_option('use_pager', '1');
+  $handler->override_option('style_plugin', 'table');
+  $handler = $view->new_display('page', 'Page', 'page_1');
+  $handler->override_option('path', 'admin/project/versioncontrol_account_status/accounts');
+  $handler->override_option('menu', array(
+    'type' => 'none',
+    'title' => '',
+    'description' => '',
+    'weight' => 0,
+    'name' => 'navigation',
+  ));
+  $handler->override_option('tab_options', array(
+    'type' => 'none',
+    'title' => '',
+    'description' => '',
+    'weight' => 0,
+    'name' => 'navigation',
+  ));
+  $views[$view->name] = $view;
+
+  return $views;
+}
diff --git versioncontrol_account_status/versioncontrol_account_status.info versioncontrol_account_status/versioncontrol_account_status.info
index 610b29e..8a1358a 100644
--- versioncontrol_account_status/versioncontrol_account_status.info
+++ versioncontrol_account_status/versioncontrol_account_status.info
@@ -2,5 +2,7 @@
 name = "Version Control Account Status"
 description = "Require users to submit a motivation text and meet approval of version control administrators before their VCS account is enabled."
 dependencies[] = versioncontrol
+dependencies[] = views
 package = Version Control
 core = 6.x
+files[] = includes/VersioncontrolAccount.php
diff --git versioncontrol_account_status/versioncontrol_account_status.install versioncontrol_account_status/versioncontrol_account_status.install
index 519a53d..49591f5 100644
--- versioncontrol_account_status/versioncontrol_account_status.install
+++ versioncontrol_account_status/versioncontrol_account_status.install
@@ -19,8 +19,14 @@ function versioncontrol_account_status_schema() {
     'description' =>
       'A table describing the approval status of a user account in an associated repository. The Version Control Account Status module maps the approval status to the the Version Control API\'s concept of "authorized accounts".',
     'fields' => array(
+      'account_id' => array(
+        'description' => 'The primary identifier for an account.',
+        'type' => 'serial',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+      ),
       'uid' => array(
-        'description' => 'The Drupal user id of the applying user, referring to both {users}.uid and {versioncontrol_accounts}.uid.',
+        'description' => 'The Drupal user id of the applying user, referring to {users}.uid.',
         'type' => 'int',
         'unsigned' => TRUE,
         'not null' => TRUE,
@@ -33,6 +39,13 @@ function versioncontrol_account_status_schema() {
         'not null' => TRUE,
         'default' => 0,
       ),
+      'vcs_username' => array(
+        'description' => 'VCS-specific username.',
+        'type' => 'varchar',
+        'length' => 64,
+        'not null' => TRUE,
+        'default' => '',
+      ),
       'motivation' => array(
         'description' => 'The motivation message entered by the applying user. This contains an explanation why the user thinks that (s)he should get a VCS account for this repository.',
         'type' => 'text',
@@ -47,7 +60,10 @@ function versioncontrol_account_status_schema() {
         'default' => 0,
       ),
     ),
-    'primary key' => array('uid', 'repo_id'),
+    'primary key' => array('account_id'),
+    'unique keys' => array(
+      'repo_id_username' => array('repo_id', 'vcs_username'),
+    ),
   );
 
   $schema['versioncontrol_account_status_strings'] = array(
@@ -128,3 +144,19 @@ function versioncontrol_account_status_uninstall() {
   // Remove tables.
   drupal_uninstall_schema('versioncontrol_account_status');
 }
+
+/**
+ * Change the main schema to let drupal users have more than one account.
+ */
+function versioncontrol_account_status_update_6301() {
+  $ret = array();
+  $account_id = array(
+    'description' => 'The primary identifier for an account.',
+    'type' => 'serial',
+    'unsigned' => TRUE,
+    'not null' => TRUE,
+  );
+  db_drop_primary_key($ret, 'versioncontrol_account_status_users');
+  db_add_field($ret, 'versioncontrol_account_status_users', 'account_id', $account_id, array('primary key' => array('account_id')));
+  return $ret;
+}
diff --git versioncontrol_account_status/versioncontrol_account_status.module versioncontrol_account_status/versioncontrol_account_status.module
index 5db3a76..e59bc5d 100644
--- versioncontrol_account_status/versioncontrol_account_status.module
+++ versioncontrol_account_status/versioncontrol_account_status.module
@@ -126,20 +126,11 @@ function _versioncontrol_account_status_get_conditions($default_condition_descri
  *         The user doesn't have repository access anymore.
  */
 function versioncontrol_account_status_get($uid, $repo_id) {
-  $result = db_query('SELECT uid, repo_id, motivation, status
-                      FROM {versioncontrol_account_status_users}
-                      WHERE uid = %d AND repo_id = %d', $uid, $repo_id);
-
-  while ($data = db_fetch_array($result)) {
-    return $data;
+  static $controller;
+  if (!isset($controller)) {
+    $controller = new VersioncontrolAccountController();
   }
-  // If there is no entry, return a default result value.
-  return array(
-    'uid' => $uid,
-    'repo_id' => $repo_id,
-    'motivation' => '',
-    'status' => VERSIONCONTROL_ACCOUNT_STATUS_UNDEFINED,
-  );
+  return $controller->load(array(), array('uid' => $uid, 'repo_id' => $repo_id));
 }
 
 /**
@@ -151,14 +142,12 @@ function versioncontrol_account_status_get($uid, $repo_id) {
  *   of versioncontrol_account_status_get().
  */
 function versioncontrol_account_status_set($status_data) {
-  db_query('DELETE FROM {versioncontrol_account_status_users}
-            WHERE uid = %d AND repo_id = %d',
-            $status_data['uid'], $status_data['repo_id']);
-  db_query("INSERT INTO {versioncontrol_account_status_users}
-            (uid, repo_id, motivation, status)
-            VALUES (%d, %d, '%s', %d)",
-            $status_data['uid'], $status_data['repo_id'],
-            $status_data['motivation'], $status_data['status']);
+  if (!empty($status_data['account_id'])) {
+    drupal_write_record('versioncontrol_account_status_users', $status_data, array('account_id'));
+  }
+  else {
+    drupal_write_record('versioncontrol_account_status_users', $status_data);
+  }
 }
 
 /**
@@ -357,8 +346,7 @@ function versioncontrol_account_status_account_filter_form_submit($form, &$form_
 
 /**
  * Implementation of hook_versioncontrol_filter_accounts():
- * Unset filtered accounts before they are even attempted to be displayed
- * on the account list.
+ * TODO remove, obsoleted by Views
  *
  * @param $accounts
  *   The accounts that would normally be displayed, in the same format as the
@@ -374,10 +362,45 @@ function versioncontrol_account_status_versioncontrol_filter_accounts(&$accounts
   }
   $filter_status = $_SESSION['versioncontrol_account_status_filter'];
 
-  if ($filter_status == VERSIONCONTROL_ACCOUNT_STATUS_ALL) {
-    return; // Don't change the list if "All" statuses are selected.
+  if (!isset($_SESSION['versioncontrol_filter_repo_id'])) {
+    $_SESSION['versioncontrol_filter_repo_id'] = 0;
   }
+  $filter_repo_id = $_SESSION['versioncontrol_filter_repo_id'];
 
+  if ($filter_status == VERSIONCONTROL_ACCOUNT_STATUS_ALL
+  && $filter_repo_id == 0) {
+    return; // Don't change the list if "All" statuses are selected or no repo_id is choosen
+  }
+  if ($filter_repo_id != 0) {
+    versioncontrol_account_status_filter_repo_id($accounts, $filter_repo_id);
+  }
+  if ($filter_status != VERSIONCONTROL_ACCOUNT_STATUS_ALL) {
+    versioncontrol_account_status_filter_status($accounts, $filter_status);
+  }
+}
+
+/**
+ * Unset filtered accounts before they are even attempted to be displayed
+ * on the account list.
+ */
+function versioncontrol_account_status_filter_repo_id(&$accounts, $filter_repo_id) {
+  //FIXME new structure for the array
+  foreach ($accounts as $uid => $usernames_by_repository) {
+    foreach ($usernames_by_repository as $repo_id => $username) {
+      if ($repo_id != $filter_repo_id) {
+        unset($accounts[$uid][$repo_id]);
+        if (empty($accounts[$uid])) {
+          unset($accounts[$uid]);
+        }
+      }
+    }
+  }
+}
+/**
+ * Unset filtered accounts before they are even attempted to be displayed
+ * on the account list.
+ */
+function versioncontrol_account_status_filter_status(&$accounts, $filter_status) {
   $uid_constraints = array();
   $params = array($filter_status);
   foreach ($accounts as $uid => $usernames_by_repository) {
@@ -604,7 +627,19 @@ function versioncontrol_account_status_form_alter_account(&$form, $repo_id) {
   global $user;
 
   $uid = $form['#uid'];
-  $data = versioncontrol_account_status_get($uid, $repo_id);
+  $accounts = versioncontrol_account_status_get($uid, $repo_id);
+  if (!empty($accounts)) {
+    //FIXME let UI support more than one account per repo
+    $data = reset($accounts);
+  }
+  else {
+    $data = array(
+      'status' => VERSIONCONTROL_ACCOUNT_STATUS_UNDEFINED,
+      'repo_id' => $repo_id,
+      'uid' => $uid,
+      'motivation' => '',
+    );
+  }
 
   $admin_access = versioncontrol_admin_access();
   if ($admin_access) {
@@ -886,7 +921,19 @@ function versioncontrol_account_status_versioncontrol_account_submit(&$additiona
 
   $applicant_uid = $form['#versioncontrol_account_status_uid'];
   $repo_id = $form['#versioncontrol_account_status_repo_id'];
-  $status_data = versioncontrol_account_status_get($applicant_uid, $repo_id);
+  $accounts = versioncontrol_account_status_get($applicant_uid, $repo_id);
+  if (!empty($accounts)) {
+    //FIXME let UI support more than one account per repo
+    $status_data = reset($accounts);
+  }
+  else {
+    $status_data = array(
+      'status' => VERSIONCONTROL_ACCOUNT_STATUS_UNDEFINED,
+      'repo_id' => $repo_id,
+      'uid' => $applicant_uid,
+      'motivation' => '',
+    );
+  }
 
   if (isset($form_state['values']['send_admin_message'])) { // if status administration was on the form
     if ($status_data['status'] == $form_state['values']['status']
@@ -933,6 +980,7 @@ function versioncontrol_account_status_versioncontrol_entity_account_insert($vcs
       'status_data' => array(
         'uid' => $vcs_account->committer_uid,
         'repo_id' => $vcs_account->repo_id,
+        'vcs_username' => $vcs_account->vcs_username,
         'motivation' => 'Inserted programmatically.',
         'status' => VERSIONCONTROL_ACCOUNT_STATUS_APPROVED,
       ),
@@ -940,6 +988,8 @@ function versioncontrol_account_status_versioncontrol_entity_account_insert($vcs
       'send_application_mails' => FALSE,
     );
   }
+  // update instead of insert
+  $additional_data['status_data']['account_id'] = $vcs_account->account_id;
 
   $status_data = $additional_data['status_data'];
   versioncontrol_account_status_set($status_data);
@@ -1301,3 +1351,902 @@ Motivation message:
 
   return $presets;
 }
+
+/**
+ * Implementation of hook_user():
+ */
+function versioncontrol_account_status_user($type, &$edit, &$user, $category = NULL) {
+  switch ($type) {
+    case 'delete':
+      // Delete VCS accounts when the associated user account is deleted.
+      db_query('DELETE FROM {versioncontrol_account_status_users} vcu
+        WHERE vcu.uid = %d', $user->uid);
+      break;
+
+  }
+}
+
+/**
+ * Implementation of hook_menu().
+ */
+function versioncontrol_account_status_menu() {
+  $items = array();
+  $items['admin/project/versioncontrol-accounts'] = array(
+    'title' => 'VCS accounts',
+    'description' => 'Manage associations of Drupal users to VCS user accounts.',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('versioncontrol_admin_account_list_form'),
+    'access arguments' => array('administer version control systems'),
+    'type' => MENU_NORMAL_ITEM,
+  );
+  $items['admin/project/versioncontrol-accounts/list'] = array(
+    'title' => 'List',
+    'type' => MENU_DEFAULT_LOCAL_TASK,
+    'weight' => 0,
+  );
+  $items['versioncontrol/register'] = array(
+    'title' => 'Get commit access',
+    'page callback' => 'versioncontrol_account_status_register_page',
+    'access callback' => TRUE, // access checking is done in the page callback
+    'type' => MENU_SUGGESTED_ITEM,
+  );
+  // Account registration and editing pages for the regular user.
+  $items['user/%versioncontrol_user_accounts/edit/versioncontrol'] = array(
+    // Load with $include_unauthorized == TRUE, so that the user can inspect
+    // his/her VCS accounts even if they are not approved by the admin yet.
+    'load arguments' => array(TRUE),
+    'title callback' => 'versioncontrol_user_accounts_title_callback',
+    'title arguments' => array(1),
+    'page callback' => 'versioncontrol_account_status_page',
+    'page arguments' => array(1),
+    'access callback' => 'versioncontrol_private_account_access',
+    'access arguments' => array(1),
+    'weight' => 99,
+    'type' => MENU_LOCAL_TASK,
+  );
+  // Autocomplete callback for Drupal usernames that have access to
+  // the repo_id given in arg(3). (No need to fetch the full repository,
+  // as the callback uses a raw & safe database query anyways.)
+  $items['versioncontrol/user/autocomplete'] = array(
+    'title' => 'Version control user autocomplete',
+    'page callback' => 'versioncontrol_user_autocomplete',
+    'access callback' => 'versioncontrol_user_access',
+    'type' => MENU_CALLBACK,
+  );
+
+  return $items;
+}
+
+/**
+ * Form callback for "versioncontrol/register[/$register_uid[/$register_at_repo_id]]":
+ * Provide an indirection that leads to an account registration form.
+ */
+function versioncontrol_account_status_register_page($register_uid = FALSE, $register_at_repo_id = FALSE) {
+  global $user;
+
+  if ($user->uid == 0 || !versioncontrol_user_access()) {
+    $presets = _versioncontrol_get_string_presets();
+
+    return variable_get(
+      'versioncontrol_registration_message_unauthorized',
+      $presets['versioncontrol_registration_message_unauthorized']
+    );
+  }
+
+  if ($register_uid == 'demo') {
+    $register_uid = VERSIONCONTROL_REGISTER_DEMO;
+  }
+  else {
+    $register_uid = is_numeric($register_uid) ? $register_uid : $user->uid;
+  }
+
+  $admin_access = versioncontrol_admin_access();
+
+  if (!$admin_access && $register_uid != $user->uid) {
+    drupal_access_denied();
+    return;
+  }
+
+  $accounts = versioncontrol_user_accounts_load($register_uid, TRUE);
+  $repositories = versioncontrol_repository_load_multiple(FALSE);
+
+  // Construct the '#options' array.
+  $account_usernames = array();
+  foreach ($accounts as $account) {
+    $account_usernames[$account->repo_id][] = $account->vcs_username;
+  }
+
+  if ($register_uid == VERSIONCONTROL_REGISTER_DEMO) {
+    $account_usernames = array();
+  }
+
+  $repository_names = array();
+  foreach ($repositories as $repo_id => $repository) {
+    if (isset($account_usernames[$repo_id])
+        && $repository->isAccountAuthorized($register_uid)) {
+      // We only want repositories in the list of repositories that are open
+      // for registrations where no (authorized) account exists yet.
+      continue;
+    }
+    if (!isset($first_repo_id)) {
+      $first_repo_id = $repo_id;
+    }
+    $repository_names[$repo_id] = check_plain($repository['name']);
+  }
+
+  // Filter (and possibly change the caption of) the list of repositories to
+  // select. The admin has all the permissions and gets the uncensored list.
+  if (!$admin_access) {
+    foreach (module_implements('versioncontrol_alter_repository_selection') as $module) {
+      $function = $module .'_versioncontrol_alter_repository_selection';
+      $function($repository_names, $repositories);
+    }
+  }
+
+  // If there's just one repository on the site, redirect directly to this one.
+  if (count($repository_names) == 1) {
+    $only_repo_id = $first_repo_id;
+  }
+  elseif (count($repositories) == 1) {
+    $only_repo_id = reset(array_keys($repositories));
+  }
+
+  if ($register_uid == VERSIONCONTROL_REGISTER_DEMO) {
+    unset($only_repo_id);
+  }
+
+  if (is_numeric($register_at_repo_id) || isset($only_repo_id)) {
+    // If there is only one repository left to register, it doesn't matter
+    // whether or not the URL contains a repository (and which one), we always
+    // redirect to the remaining possible one. Otherwise, we try to register
+    // at the given repository.
+    $repo_id = isset($only_repo_id) ? $only_repo_id : $register_at_repo_id;
+
+    if (isset($account_usernames[$repo_id])) {
+      drupal_set_message(t('You already have a registered account.'));
+      drupal_goto('user/'. $user->uid .'/edit/versioncontrol/'. $repo_id
+                  .'/'. reset($account_usernames[$repo_id]));
+      // drupal_goto() calls exit() so script execution ends right here
+    }
+    elseif (isset($repository_names[$repo_id])) {
+      return drupal_get_form('versioncontrol_account_status_edit_form',
+        $register_uid, $repositories[$repo_id], VERSIONCONTROL_FORM_CREATE
+      );
+    }
+  }
+
+  if (!isset($first_repo_id)) {
+    // when there are no repos, this var is not set
+    $first_repo_id = NULL;
+  }
+
+  return drupal_get_form('versioncontrol_account_status_register_form',
+    $register_uid, $repository_names, $first_repo_id
+  );
+}
+
+/**
+ * Form callback for "admin/project/versioncontrol-accounts":
+ * A list of accounts with filtering possibilities.
+ *
+ * TODO Completely reimplement in Views.
+ */
+function versioncontrol_admin_account_list_form(&$form_state) {
+  // Retrieve a list of all repositories with registered VCS accounts.
+  $result = db_query('SELECT DISTINCT repo_id FROM {versioncontrol_account_status_users}');
+  $repo_ids = array();
+
+  while ($repo_id = db_result($result)) {
+    $repo_ids[] = $repo_id;
+  }
+  $repositories = versioncontrol_repository_load_multiple($repo_ids);
+
+  $filter_form = versioncontrol_admin_account_list_filter_form($form_state, $repositories);
+  $filter_form['#id'] = 'versioncontrol-account-filter-form';
+  drupal_alter('form', $filter_form, $form_state, 'versioncontrol_admin_account_list_filter_form');
+
+  $form = array();
+  $form['filters'] = array_merge($filter_form, array(
+    '#type' => 'fieldset',
+    '#title' => t('Filter'),
+    '#collapsible' => TRUE,
+    '#collapsed' => FALSE,
+    '#prefix' => '<div class="container-inline">',
+    '#suffix' => '</div>',
+  ));
+
+  // Filter the list of accounts.
+  $accounts = versioncontrol_user_accounts_load_multiple(array(), array(), array('include unauthorized' => TRUE));
+
+  foreach (module_implements('versioncontrol_filter_accounts') as $module) {
+    $function = $module .'_versioncontrol_filter_accounts';
+    $function($accounts);
+  }
+  $accounts = versioncontrol_admin_get_paged_accounts($accounts);
+  $users = array();
+
+  // Retrieve more info for the accounts that survived filtering.
+  foreach ($accounts as $uid => $usernames_by_repository) {
+    $user = user_load($uid);
+    if (!$user) {
+      unset($accounts[$uid]);
+      continue;
+    }
+    $users[$uid] = $user;
+  }
+  if (empty($users)) {
+    $form['empty'] = array(
+      '#type' => 'markup',
+      '#value' => '<p>'. t('No accounts could be found with the current filter settings.') .'</p>',
+    );
+    return $form;
+  }
+
+  // Retrieve total, first and last commits of each user.
+  // FIXME getStatistics was removed on other commit, see if we need to
+  // resurrect it(probably re-architeching it)
+  $statistics = VersioncontrolOperationCache::getInstance()->getStatistics(array(
+    'types' => array(VERSIONCONTROL_OPERATION_COMMIT),
+    'uids' => array_keys($users),
+  ), array(
+    'group_by' => array('uid'),
+  ));
+
+  $total_operations = array();
+  $first_operation_dates = array();
+  $last_operation_dates = array();
+
+  foreach ($statistics as $user_stats) {
+    $total_operations[$user_stats->uid] = $user_stats->total_operations;
+    $first_operation_dates[$user_stats->uid] = t('!time ago', array(
+      '!time' => format_interval(time() - $user_stats->first_operation_date, 1))
+    );
+    $last_operation_dates[$user_stats->uid] = t('!time ago', array(
+      '!time' => format_interval(time() - $user_stats->last_operation_date, 1))
+    );
+    if (module_exists('commitlog')) {
+      $total_operations[$user_stats->uid] =
+        l($total_operations[$user_stats->uid], 'user/'. $user_stats->uid .'/track/code');
+    }
+  }
+
+  // Construct the user account table.
+  $header = array(t('User'), t('Accounts'), t('Commits'), t('First commit'), t('Last commit'));
+  $rows_by_uid = array();
+  foreach ($accounts as $uid => $usernames_by_repository) {
+    $user = $users[$uid];
+
+    // Present a list of all VCS usernames and the repository where they're in.
+    $repo_usernames = array();
+    foreach ($usernames_by_repository as $repo_id => $account) {
+      if (!isset($repositories[$repo_id])) { // happens if the backend isn't loaded
+        continue;
+      }
+      $formatted_username = theme('versioncontrol_account_username',
+        $uid, $account->vcs_username, $repositories[$repo_id],
+        array('prefer_drupal_username' => FALSE)
+      );
+      $repo_name = module_exists('commitlog')
+        ? theme('commitlog_repository', $repositories[$repo_id])
+        : check_plain($repositories[$repo_id]['name']);
+
+      $repo_usernames[] = t('!username in !repository (!edit)', array(
+        '!username' => $formatted_username,
+        '!repository' => $repo_name,
+        '!edit' => l(t('edit'),
+          'user/'. $uid .'/edit/versioncontrol/'. $repo_id .'/'. drupal_urlencode($account->vcs_username)
+        ),
+      ));
+    }
+    $vcs_usernames = empty($repo_usernames)
+      ? t('VCS backend is currently disabled')
+      : theme('item_list', $repo_usernames);
+
+    $rows_by_uid[$uid] = array(
+      theme('username', $user), $vcs_usernames,
+      isset($total_operations[$uid]) ? $total_operations[$uid] : 0,
+      isset($first_operation_dates[$uid]) ? $first_operation_dates[$uid] : t('n/a'),
+      isset($last_operation_dates[$uid]) ? $last_operation_dates[$uid] : t('n/a'),
+    );
+  }
+
+  // Provide a possibility for backends and other modules to modify the list.
+  foreach (module_implements('versioncontrol_alter_account_list') as $module) {
+    $function = $module .'_versioncontrol_alter_account_list';
+    $function($accounts, $repositories, $header, $rows_by_uid);
+  }
+  // We don't want the uids in the final $rows array.
+  $rows = array_values($rows_by_uid);
+
+  // The finished user account list with account filter.
+  $form['accounts'] = array(
+    '#type' => 'markup',
+    '#value' => theme('table', $header, $rows),
+  );
+
+  if ($pager = theme('pager', NULL, variable_get('versioncontrol_admin_account_pager', 20), 0)) {
+    $form['pager'] = array(
+      '#type' => 'markup',
+      '#value' => $pager,
+    );
+  }
+  return $form;
+}
+
+/**
+ * A form for filtering accounts which is embedded in the account list page.
+ */
+function versioncontrol_admin_account_list_filter_form(&$form_state, $repositories) {
+  $form = array();
+  $repository_names = array(0 => t('All'));
+
+  foreach ($repositories as $repo_id => $repository) {
+    $repository_names[$repo_id] = check_plain($repository['name']);
+  }
+  if (!isset($_SESSION['versioncontrol_filter_repo_id'])) {
+    $_SESSION['versioncontrol_filter_repo_id'] = 0;
+  }
+
+  $form['#id'] = 'versioncontrol-account-filter-form';
+
+  $form['repo_id'] = array(
+    '#type' => 'select',
+    '#title' => t('Repository'),
+    '#options' => $repository_names,
+    '#default_value' => $_SESSION['versioncontrol_filter_repo_id'],
+    '#weight' => 10,
+  );
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Filter'),
+    '#submit' => array('versioncontrol_admin_account_list_filter_form_submit'),
+    '#weight' => 100,
+  );
+  return $form;
+}
+
+/**
+ * Submit handler for the account filter form.
+ */
+function versioncontrol_admin_account_list_filter_form_submit($form, &$form_state) {
+  $_SESSION['versioncontrol_filter_repo_id'] = $form_state['values']['repo_id'];
+}
+
+/**
+ * Return a subset of the given accounts (10 Drupal users by default, and all
+ * of their VCS usernames). Paging is also used by emulating pager_query().
+ */
+function versioncontrol_admin_get_paged_accounts($accounts, $element = 0) {
+  global $pager_page_array, $pager_total, $pager_total_items;
+  $page = isset($_GET['page']) ? $_GET['page'] : '';
+  $pager_page_array = explode(',', $page);
+  $page = empty($pager_page_array[$element]) ? 0 : $pager_page_array[$element];
+
+  $limit = variable_get('versioncontrol_admin_account_pager', 20);
+  $i = 0;
+  $paged_accounts = array();
+
+  foreach ($accounts as $uid => $usernames_by_repository) {
+    if ($i >= ($page * $limit) && $i < (($page+1) * $limit)) {
+      $paged_accounts[$uid] = $usernames_by_repository;
+    }
+    ++$i;
+  }
+
+  // Emulate pager_query() in order to get a proper theme('pager').
+  $pager_total_items[$element] = count($accounts);
+  $pager_total[$element] = ceil($pager_total_items[$element] / $limit);
+  $pager_page_array[$element] = max(0, min((int)$pager_page_array[$element], ((int)$pager_total[$element]) - 1));
+
+  return $paged_accounts;
+}
+
+/**
+ * Add or update the user account when the edit/register form is submitted.
+ */
+function versioncontrol_account_status_edit_form_submit($form, &$form_state) {
+  // Reconstruct the user data from the $form_state that was passed.
+  $uid = $form['#uid'];
+  $vcs_username = $form_state['values']['account_name'];
+  $repository = $form['#repository'];
+  $vcs_name = $form['#vcs_name'];
+
+  // Let other modules provide additional account data.
+  $additional_data = array();
+  foreach (module_implements('versioncontrol_account_submit') as $module) {
+    $function = $module .'_versioncontrol_account_submit';
+    $function($additional_data, $form, $form_state);
+  }
+
+  if (empty($form['#original_username'])) {
+    $data = array(
+      'vcs_username' => $vcs_username,
+      'uid' => $uid,
+      'repository' => $repository,
+    );
+    $vcs_account = $repository->getBackend()->buildEntity('account', $data);
+    $vcs_account->additional_data = $additional_data;
+    $vcs_account->insert();
+    $message = drupal_set_message(t(
+      'The @vcs account %vcs_username has been registered.',
+      array('@vcs' => $vcs_name, '%vcs_username' => $vcs_username)
+    ));
+  }
+  else {
+    //FIXME why username are a required constraint? <-- shouldn't be anymore
+    //      uid and repo_id are the PK on the table getAccounts query
+    //FIXME use account_id PK to search?
+    $conditions = array(
+      'repo_id' => array($repository->repo_id),
+      'uid' => $uid,
+      'vcs_username' => array($form['#original_username'])
+    );
+    $vcs_accounts = versioncontrol_user_accounts_load_multiple(array(), $conditions, array('include unauthorized' => TRUE));
+    // if we got an original_username we can trust on getting a value
+    $vcs_account = array_shift($vcs_accounts);
+
+    $vcs_account->vcs_username = $vcs_username;
+    $vcs_account->additional_data = $additional_data;
+    $vcs_account->update();
+
+    // Regular users cannot change the username, and will probably get
+    // a message for each of the other actions that hook into the form.
+    if (versioncontrol_admin_access()) {
+      $message = drupal_set_message(t(
+        'The @vcs account %username has been updated successfully.',
+        array('@vcs' => $vcs_name, '%username' => $vcs_username)
+      ));
+    }
+  }
+
+  $form_state['redirect'] = versioncontrol_admin_access()
+    ? 'admin/project/versioncontrol-accounts'
+    : 'user/'. $uid .'/edit/versioncontrol/'. $repository->repo_id
+        .'/'. drupal_urlencode($vcs_username);
+}
+
+/**
+ * Form callback for 'user/%versioncontrol_user_accounts/edit/versioncontrol':
+ * Display a list of the given user's VCS accounts, or directly return the form
+ * array from versioncontrol_account_edit_form() if only a single account
+ * exists for that user (or if the account has been given in the URL).
+ */
+function versioncontrol_account_status_page($vcs_accounts, $url_repo_id = NULL, $url_username = NULL) {
+  $selected_usernames = array();
+
+  foreach ($vcs_accounts as $key => $vcs_account) {
+    // The caller (menu system) ensures that there is only one uid.
+    $uid = $vcs_account->uid;
+    if (isset($url_repo_id) && $vcs_account->repo_id != $url_repo_id) {
+      unset($vcs_accounts[$key]);
+      continue; // disregard repositories that don't match the URL constraints
+    }
+    if (isset($url_username) && $vcs_account->vcs_username != $url_username) {
+      unset($vcs_accounts[$key]);
+      continue; // disregard usernames that don't match the URL constraints
+    }
+    $any_repo_id = $vcs_account->repo_id;
+    $selected_usernames[] = $vcs_account->vcs_username;
+  }
+
+  if (empty($selected_usernames)) {
+    drupal_not_found();
+    return;
+  }
+  elseif (count($selected_usernames) == 1) {
+    $repository = versioncontrol_repository_load($any_repo_id);
+    return drupal_get_form('versioncontrol_account_status_edit_form',
+      $uid, $repository, reset($selected_usernames)
+    );
+  }
+  else {
+    return drupal_get_form('versioncontrol_account_status_list_form', $vcs_accounts);
+  }
+}
+
+/**
+ * Form callback for "admin/project/versioncontrol-accounts" and
+ * (in certain cases) "user/%versioncontrol_user_accounts/edit/versioncontrol":
+ * Show a list of VCS accounts to the admin or the user.
+ *
+ * @param $accounts
+ *   The list of accounts to show, in versioncontrol_user_account_load_multiple format.
+ */
+function versioncontrol_account_status_list_form(&$form_state, $accounts) {
+  $form = array();
+  $form['#id'] = 'versioncontrol-account-list-form';
+
+  $repo_ids = array();
+  foreach ($accounts as $account) {
+    $repo_ids[$account->repo_id] = TRUE;
+  }
+  $repositories = versioncontrol_repository_load_multiple(array_keys($repo_ids));
+
+  $header = array(t('Repository'), t('Username'), '');
+  $rows = array();
+
+  foreach ($accounts as $account) {
+    if (!isset($repositories[$account->repo_id])) { // happens if the backend isn't loaded
+      continue;
+    }
+    $formatted_username = theme('versioncontrol_account_username',
+      $account->uid, $account->vcs_username, $repositories[$account->repo_id],
+      array('prefer_drupal_username' => FALSE)
+    );
+    $repo_name = module_exists('commitlog')
+      ? l($repositories[$account->repo_id]->name, 'commitlog', array('query' => 'repos='. $account->repo_id))
+      : check_plain($repositories[$account->repo_id]->name);
+
+    $rows[] = array(
+      $repo_name,
+      $formatted_username,
+      l(t('Edit @vcs account', array('@vcs' => $repositories[$account->repo_id]->getBackend()->name)),
+      'user/'. $account->uid .'/edit/versioncontrol/'. $account->repo_id .'/'. drupal_urlencode($account->vcs_username)
+    ),
+  );
+  }
+
+  $form['accounts'] = array(
+    '#type' => 'markup',
+    '#value' => theme('table', $header, $rows, array('style' => 'width: 50%;')),
+  );
+  return $form;
+}
+
+/**
+ * Title callback for the "user/%versioncontrol_user_accounts/edit/versioncontrol" tab.
+ */
+function versioncontrol_user_accounts_title_callback($accounts) {
+  $repo_ids = array();
+  foreach ($accounts as $account) {
+    $repo_ids[] = $account->repo_id;
+  }
+  $repositories = versioncontrol_repository_load_multiple($repo_ids);
+  $vcses = array();
+  foreach ($repositories as $repository) {
+    $vcses[$repository['vcs']] = TRUE;
+  }
+  if (count($vcses) == 1) {
+    $repo = array_shift($repositories);
+    return check_plain($repo->getBackend()->name);
+  }
+  return t('Repository accounts');
+}
+
+/**
+ * Custom access callback, determining if the current user (or the one given
+ * in @p $account, if set) is permitted to view version control account
+ * settings of the user specified the first user id in @p $vcs_accounts.
+ * (We take that parameter because it's what the '%versioncontrol_user_accounts'
+ * wildcard returns.)
+ */
+function versioncontrol_private_account_access($vcs_accounts, $account = NULL) {
+  if (is_null($account)) {
+    global $user;
+    $account = clone $user;
+  }
+  if (user_access('administer version control systems', $account)) {
+    return TRUE;
+  }
+  if (!user_access('use version control systems', $account)) {
+    return FALSE;
+  }
+  foreach ($vcs_accounts as $vcs_account) {
+    if ($vcs_account->uid != $account->uid) {
+      return FALSE;
+    }
+  }
+  return TRUE;
+}
+
+/**
+ * Form callback for (in certain cases) "versioncontrol/register"
+ * and "user/%versioncontrol_user_accounts/edit/versioncontrol":
+ * Provide a form to register or edit a VCS account.
+ *
+ * @param $uid
+ *   The uid of the Drupal user whose account is being edited or registered.
+ * @param $repository
+ *   The repository of the added/edited account.
+ * @param $vcs_username
+ *   The user's VCS-specific username for the repository,
+ *   or VERSIONCONTROL_FORM_CREATE if a new VCS account should be registered.
+ */
+function versioncontrol_account_status_edit_form(&$form_state, $uid, $repository, $vcs_username) {
+  $form = array();
+  $create_account = ($vcs_username === VERSIONCONTROL_FORM_CREATE);
+  $vcs_name = $repository->getBackend()->name;
+
+  $user = ($uid === VERSIONCONTROL_REGISTER_DEMO) ? FALSE : user_load($uid);
+
+  if (!($user || ($uid === VERSIONCONTROL_REGISTER_DEMO && $create_account))) {
+    drupal_not_found(); // cannot edit/register accounts for non-existing users
+    return array();
+  }
+
+  // Set an appropriate page title.
+  if ($create_account) {
+    drupal_set_title(t(
+      'Create user account in @repository',
+      array('@repository' => $repository->name)
+    ));
+  }
+  elseif ($user) {
+    drupal_set_title(check_plain($user->name));
+  }
+
+  $form['#id'] = 'versioncontrol-account-form';
+
+  $form['#repository'] = $repository;
+  $form['#vcs'] = $repository['vcs'];
+  $form['#vcs_name'] = $vcs_name;
+  $form['#uid'] = $uid;
+  $form['#original_username'] = $vcs_username;
+
+  $form['#validate'] = array('versioncontrol_account_status_edit_form_validate');
+  $form['#submit'] = array('versioncontrol_account_status_edit_form_submit');
+
+  if ($create_account) {
+    $registration_message = isset($repository->data['versioncontrol']['registration_message'])
+      ? $repository->data['versioncontrol']['registration_message']
+      : '';
+
+    if (!empty($registration_message)) {
+      $form['overview'] = array(
+        '#type' => 'fieldset',
+        '#title' => t('Overview'),
+        '#weight' => -100,
+      );
+      $form['overview']['overview'] = array(
+        '#type' => 'markup',
+        '#value' => $registration_message,
+      );
+    }
+  }
+
+  $form['account'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('@vcs account settings', array('@vcs' => $vcs_name)),
+    '#weight' => 0,
+  );
+
+  $admin_access = versioncontrol_admin_access();
+
+  if ($create_account || $admin_access) {
+    if ($create_account) {
+      $data = array(
+        'vcs_username' => $vcs_username,
+        'uid' => $uid,
+        'repository' => $repository,
+      );
+      $vcs_account = $repository->getBackend()->buildEntity('account', $data);
+      // Have a nice default value for the new VCS username.
+      $vcs_username = $repository->getBackend()->usernameSuggestion($user);
+    }
+
+    if ($admin_access) { // the admin version
+      $description = t('The @vcs username associated with the account of !user. This field is used to link commit messages to user accounts.', array('@vcs' => $vcs_name, '!user' => theme_username($user)));
+    }
+    else { // the account creation version
+      $description = t('Choose a username to access the @vcs repository with. @vcs usernames should be lowercase. Spaces or other special characters are not allowed.', array('@vcs' => $vcs_name));
+    }
+
+    $form['account']['account_name'] = array(
+      '#type' => 'textfield',
+      '#title' => t('@vcs username', array('@vcs' => $vcs_name)),
+      '#description' => $description,
+      '#default_value' => $vcs_username,
+      '#weight' => 0,
+      '#size' => 30,
+      '#maxlength' => 64,
+    );
+  }
+  else {
+    $form['account_name'] = array(
+      '#type' => 'value',
+      '#value' => $vcs_username,
+    );
+    $form['account']['account_name_display'] = array(
+      '#type' => 'item',
+      '#title' => t('@vcs username', array('@vcs' => $vcs_name)),
+      '#description' => t('Your @vcs username. This field can only be edited by administrators and is used to link your @vcs messages to your user account.', array('@vcs' => $vcs_name)),
+      '#value' => $vcs_username,
+      '#weight' => 0,
+    );
+  }
+
+  if ($uid !== VERSIONCONTROL_REGISTER_DEMO) {
+    $form['submit'] = array(
+      '#type' => 'submit',
+      '#value' => $create_account
+                  ? t('Create @vcs account', array('@vcs' => $vcs_name))
+                  : t('Update @vcs account', array('@vcs' => $vcs_name)),
+      '#weight' => 100,
+    );
+  }
+  return $form;
+}
+
+/**
+ * Validate the edit/register user account form submission before it is submitted.
+ */
+function versioncontrol_account_status_edit_form_validate($form, &$form_state) {
+  if (!isset($form_state['values']['account_name'])) {
+    return;
+  }
+  $uid = $form['#uid'];
+  $vcs_username = trim($form_state['values']['account_name']);
+  $repository = $form['#repository'];
+  $vcs_name = $form['#vcs_name'];
+
+  if (!isset($repository)) { // admin deletes repo while user fills in form
+    form_set_error('account',
+      t('The repository has been deleted.')
+    );
+    return;
+  }
+
+  if (empty($vcs_username)) {
+    form_set_error('account_name',
+      t('The @vcs username may not be empty.', array('@vcs' => $vcs_name))
+    );
+  }
+  else {
+    // Check for username validity - done by the backend, but with a fallback
+    // for alphanum-only characters.
+    $data = array(
+      'vcs_username' => $vcs_username,
+      'uid' => $uid,
+      'repository' => $repository,
+    );
+    $vcs_account = $repository->getBackend()->buildEntity('account', $data);
+    if (!$repository->getBackend()->isUsernameValid($vcs_username)) {
+      form_set_error('account_name',
+        t('The specified @vcs username is invalid.', array('@vcs' => $vcs_name))
+      );
+    }
+    // The username is passed by reference and might have changed. That's a bit
+    // uncomfortable as a caller API, but more convenient for the backends.
+    // (Plus it makes sense anyways since we have trimmed the username too.)
+    $form_state['values']['account_name'] = $vcs_username;
+
+    // Check for duplicates.
+    $accounts_in_db = versioncontrol_user_accounts_load_multiple(array(), array('vcs_username' => $vcs_username, 'repo_id' => $repository->repo_id), array('include unauthorized' => TRUE));
+    if (count($accounts_in_db) == 1) {
+      $account_in_db = reset($accounts_in_db);
+      $existing_uid = $account_in_db->uid;
+    }
+    elseif (count($accounts_in_db) == 0) {
+      $existing_uid = NULL;
+    }
+    else { // fail
+      form_set_error('account_name',
+        t('The specified @vcs username is already in use by more than one user.',
+          array('@vcs' => $vcs_name))
+        );
+      return;
+    }
+    if ($existing_uid && $uid != $existing_uid) {
+      if ($existing_user = user_load(array('uid' => $existing_uid))) {
+        $existing_username = theme('username', $existing_user);
+      }
+      else {
+        $existing_username = t('user #!id', array('!id' => $existing_uid));
+      }
+      form_set_error('account_name',
+        t('The specified @vcs username is already in use by !existing-user.',
+          array('@vcs' => $vcs_name, '!existing-user' => $existing_username))
+      );
+    }
+  }
+}
+
+/**
+ * The actual form for "versioncontrol/register[/$register_uid]".
+ */
+function versioncontrol_account_status_register_form(&$form_state, $register_uid, $repository_names, $first_repo_id) {
+  $form = array();
+
+  if (empty($repository_names)) {
+    drupal_set_title(t('No more registrations possible'));
+    $form['no_registration'] = array(
+      '#type' => 'markup',
+      '#value' => t('You already have an account for all the repositories where you can register. Go to your !user-account-page to configure repository account settings.',
+        array('!user-account-page' => l(t('user account page'), 'user/'. $register_uid .'/edit/versioncontrol'))
+      ),
+      '#prefix' => '<p>',
+      '#suffix' => '</p>',
+    );
+    return $form;
+  }
+
+  $form['#id'] = 'vcs-account-status-indirection-form';
+
+  $message = variable_get('versioncontrol_registration_message_authorized', FALSE);
+  if ($message == FALSE) {
+    $presets = _versioncontrol_get_string_presets();
+    $message = $presets['versioncontrol_registration_message_authorized'];
+  }
+  if (!empty($message)) {
+    $form['overview'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Overview'),
+      '#weight' => -100,
+    );
+    $form['overview']['overview'] = array(
+      '#type' => 'markup',
+      '#value' => $message,
+    );
+  }
+
+  $form['#uid'] = $register_uid;
+
+  $form['repository'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Select repository'),
+    '#weight' => 10,
+  );
+  $form['repository']['repo_id'] = array(
+    '#type' => 'select',
+    '#title' => t('Create user account in'),
+    '#options' => $repository_names,
+    '#default_value' => $first_repo_id,
+  );
+
+  if ($register_uid != VERSIONCONTROL_REGISTER_DEMO) {
+    $form['repository']['submit'] = array(
+      '#type' => 'submit',
+      '#value' => t('Create account'),
+      '#weight' => 100,
+    );
+  }
+  return $form;
+}
+
+/**
+ * Submit handler for the indirection form.
+ * Surprisingly, all it does is redirect to the appropriate registration form.
+ */
+function versioncontrol_account_status_register_form_submit($form, &$form_state) {
+  $form_state['redirect'] = 'versioncontrol/register/'. $form['#uid'] .'/'. $form_state['values']['repo_id'];
+}
+
+/**
+ * Returns a string of suggestions for Drupal usernames with accounts for
+ * the given repository, formatted to be suitable for use with
+ * JS autocomplete fields.
+ */
+function versioncontrol_user_autocomplete($repo_id, $string = '') {
+  if (!is_numeric($repo_id) || empty($string)) {
+    drupal_json(array());
+    return;
+  }
+  $matches = array();
+  $result = db_query_range("SELECT u.uid, u.name
+                            FROM {users} u
+                             INNER JOIN {versioncontrol_account_status_users} a
+                              ON u.uid = a.uid
+                            WHERE repo_id = %d
+                             AND LOWER(u.name) LIKE LOWER('%s%%')",
+                            $repo_id, $string, 0, 10);
+
+  while ($user = db_fetch_object($result)) {
+    if (!isset($repository)) {
+      $repository = versioncontrol_repository_load($repo_id);
+    }
+    if ($repository->isAccountAuthorized($user->uid)) {
+      $matches[$user->name] = check_plain($user->name);
+    }
+  }
+  drupal_json($matches);
+}
+
+/**
+ * Implementation of hook_views_api().
+ */
+function versioncontrol_account_status_views_api() {
+  return array(
+    'api' => 2,
+    'path' => drupal_get_path('module', 'versioncontrol_account_status'). '/includes',
+  );
+}
diff --git versioncontrol_fakevcs/includes/classes.inc versioncontrol_fakevcs/includes/classes.inc
index fc690d8..2b2a8d5 100644
--- versioncontrol_fakevcs/includes/classes.inc
+++ versioncontrol_fakevcs/includes/classes.inc
@@ -6,7 +6,6 @@ class VersioncontrolFakeBackend extends VersioncontrolBackend {
 
   public $classes = array(
     'repo'      => 'VersioncontrolFakeRepository',
-    'account'   => 'VersioncontrolFakeAccount',
     'operation' => 'VersioncontrolFakeOperation',
     'item'      => 'VersioncontrolFakeItem',
   );
@@ -78,65 +77,6 @@ class VersioncontrolFakeRepository extends VersioncontrolRepository implements V
 
 }
 
-class VersioncontrolFakeAccount extends VersioncontrolAccount {
-
-  /**
-   * Overwrite
-   */
-  public function usernameSuggestion($user) {
-    // For distributed version control systems, the user's email address
-    // might be a more appropriate username than the actual nick - it
-    // guarantees unique identification (= uid association for
-    // operations), even though it might need to be replaced by or
-    // amended with the full name on page display.
-    return $user->mail;
-  }
-
-  /**
-   * Overwrite
-   */
-  protected function _insert($additional_data) {
-    $fakevcs_specific = $additional_data['fakevcs_specific'];
-    if (!isset($fakevcs_specific) || !isset($fakevcs_specific['password'])) {
-      drupal_set_message(t('Error: no FakeVCS password given on account creation!'), 'error');
-      return;
-    }
-    db_query("INSERT INTO {versioncontrol_fakevcs_accounts}
-      (uid, repo_id, password)
-      VALUES (%d, %d, '%s')",
-      $this->uid, $this->repository->repo_id, $fakevcs_specific['password']);
-  }
-
-  /**
-   * Overwrite
-   */
-  protected function _update($additional_data) {
-    $fakevcs_specific = $additional_data['fakevcs_specific'];
-    if (!isset($fakevcs_specific) || !isset($fakevcs_specific['password'])) {
-      return; // the user didn't update the password in the process.
-    }
-    db_query("UPDATE {versioncontrol_fakevcs_accounts}
-      SET password = '%s'
-      WHERE uid = %d AND repo_id = %d",
-    $fakevcs_specific['password'], $this->uid, $this->repository->repo_id);
-
-    if (!versioncontrol_admin_access()) {
-      // Admins get "The account has been updated successfully" anyways.
-      drupal_set_message(t('The FakeVCS password has been updated successfully.'));
-    }
-  }
-
-  /**
-   * Overwrite
-   */
-  protected function _delete($additional_data) {
-   db_query('DELETE FROM {versioncontrol_fakevcs_accounts}
-     WHERE uid = %d AND repo_id = %d',
-     $this->uid, $this->repository->repo_id);
-  }
-
-}
-
 class VersioncontrolFakeOperation extends VersioncontrolOperation {
 
   /**
