diff --git includes/VersioncontrolAccount.php includes/VersioncontrolAccount.php
index c1d2917..fd4f172 100644
--- includes/VersioncontrolAccount.php
+++ includes/VersioncontrolAccount.php
@@ -70,7 +70,7 @@ abstract class VersioncontrolAccount extends VersioncontrolEntity {
    * the one given on account creation, whereas vcs_username and
    * @p $additional_data may change.
    *
-   * @param $username
+   * @param $vcs_username
    *   The VCS specific username (a string). Here we are using an explicit
    *   parameter instead of taking the vcs_username data member to be able to
    *   verify is it changed, there would be lots of operations, so we do not
@@ -82,12 +82,12 @@ abstract class VersioncontrolAccount extends VersioncontrolEntity {
    * FIXME the function sig here is incompatible with VersioncontrolEntity, and
    * needs the logic needs to be fixed to suit.
    */
-  public final function update($username, $additional_data = array()) {
+  public final function update($vcs_username, $additional_data = array()) {
     $repo_id = $this->repository->repo_id;
-    $username_changed = ($username != $this->vcs_username);
+    $username_changed = ($vcs_username != $this->vcs_username);
 
     if ($username_changed) {
-      $this->vcs_username = $username;
+      $this->vcs_username = $vcs_username;
       db_query("UPDATE {versioncontrol_accounts}
                 SET username = '%s'
                 WHERE uid = %d AND repo_id = %d",
diff --git includes/VersioncontrolRepository.php includes/VersioncontrolRepository.php
index b61577b..68331b1 100644
--- includes/VersioncontrolRepository.php
+++ includes/VersioncontrolRepository.php
@@ -499,7 +499,7 @@ abstract class VersioncontrolRepository implements VersioncontrolEntityInterface
     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->username;
+        return $account->vcs_username;
       }
     }
     return NULL;
diff --git versioncontrol.install versioncontrol.install
index 7d5b53e..eb44e66 100644
--- versioncontrol.install
+++ versioncontrol.install
@@ -408,7 +408,7 @@ function versioncontrol_schema() {
         'not null' => TRUE,
         'default' => 0,
       ),
-      'username' => array(
+      'vcs_username' => array(
         'description' => 'VCS-specific username of the VCS account associated with the Drupal user in {versioncontrol_accounts}.uid.',
         'type' => 'varchar',
         'length' => 64,
@@ -417,7 +417,7 @@ function versioncontrol_schema() {
       ),
     ),
     'unique keys' => array(
-      'repo_id_username' => array('repo_id', 'username'),
+      'repo_id_username' => array('repo_id', 'vcs_username'),
     ),
     'primary key' => array('uid', 'repo_id'),
   );
@@ -662,3 +662,26 @@ function versioncontrol_update_6301() {
   db_add_field($ret, 'versioncontrol_labels', 'data', $data_spec);
   return $ret;
 }
+
+/**
+ * Rename {versioncontrol_accounts}.username to
+ * {versioncontrol_accounts}.vcs_username.
+ *
+ * VCAPI's entity controllers expect an exact naming match between object
+ * properties and field names, and VersioncontrolAccount has a $vcs_username
+ * property, not a $username property. We're changing the db column name rather
+ * than the class property name as vcs_username is more specific & accurate, and
+ * won't be confused with Drupal's own {users}.username.
+ */
+function versioncontrol_update_6302() {
+  $ret = array();
+  $spec = 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' => '',
+  );
+  db_change_field($ret, 'versioncontrol_accounts', 'username', 'vcs_username', $spec);
+  return $ret;
+}
\ No newline at end of file
