diff --git includes/VersioncontrolAccount.php includes/VersioncontrolAccount.php
index db65575..4405b20 100644
--- includes/VersioncontrolAccount.php
+++ includes/VersioncontrolAccount.php
@@ -80,7 +80,10 @@ abstract class VersioncontrolAccount extends VersioncontrolEntity {
    * original jpetso work try to avoid to update if not needed by passing
    * it as parameter.
    */
-  public final function update($options = array()) {
+  public function update($options = array()) {
+    // Append default options.
+    $options += $this->defaultCrudOptions['update'];
+
     $repo_id = $this->repository->repo_id;
 
     db_query("UPDATE {versioncontrol_accounts}
@@ -114,7 +117,10 @@ abstract class VersioncontrolAccount extends VersioncontrolEntity {
    * FIXME use same logic as in other classes, this probably would
    * be changed only when we get account_id PK schema change in.
    */
-  public final function insert($options = array()) {
+  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)
@@ -143,22 +149,25 @@ abstract class VersioncontrolAccount extends VersioncontrolEntity {
    * FIXME use same logic as in other classes, this probably would
    * be changed only when we get account_id PK schema change in.
    */
-  public final function delete($options = array()) {
+  public function delete($options = array()) {
+    // Append default options.
+    $options += $this->defaultCrudOptions['delete'];
+
     // Update the operations table.
     db_query('UPDATE {versioncontrol_operations}
               SET uid = 0
               WHERE uid = %d AND repo_id = %d',
               $this->uid, $this->repository->repo_id);
 
-    // Announce deletion of the account before anything has happened.
-    module_invoke_all('versioncontrol_entity_account_delete', $this);
+    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);
 
-    db_query('DELETE FROM {versioncontrol_accounts}
-              WHERE uid = %d AND repo_id = %d',
-              $this->uid, $this->repository->repo_id);
+    module_invoke_all('versioncontrol_entity_account_delete', $this);
   }
 
 }
diff --git includes/VersioncontrolBranch.php includes/VersioncontrolBranch.php
index 0ece8c5..888cac5 100644
--- includes/VersioncontrolBranch.php
+++ includes/VersioncontrolBranch.php
@@ -68,14 +68,14 @@ class VersioncontrolBranch extends VersioncontrolEntity {
   }
 
   public function update($options = array()) {
-    // Append default options.
-    $options += $this->defaultCrudOptions['update'];
-
     if (empty($this->label_id)) {
       // This is supposed to be an existing branch, but has no label_id.
       throw new Exception('Attempted to update a Versioncontrol branch which has not yet been inserted in the database.', E_ERROR);
     }
 
+    // Append default options.
+    $options += $this->defaultCrudOptions['update'];
+
     drupal_write_record('versioncontrol_labels', $this, 'label_id');
 
     // Let the backend take action.
@@ -87,14 +87,14 @@ class VersioncontrolBranch extends VersioncontrolEntity {
   }
 
   public function insert($options = array()) {
-    // Append default options.
-    $options += $this->defaultCrudOptions['insert'];
-
     if (!empty($this->label_id)) {
       // This is supposed to be a new branch, but has a label_id already.
       throw new Exception('Attempted to insert a Versioncontrol branch which is already present in the database.', E_ERROR);
     }
 
+    // Append default options.
+    $options += $this->defaultCrudOptions['insert'];
+
     drupal_write_record('versioncontrol_labels', $this);
 
     $this->backendInsert($options);
diff --git includes/VersioncontrolOperation.php includes/VersioncontrolOperation.php
index 07854cb..dbf2e7f 100644
--- includes/VersioncontrolOperation.php
+++ includes/VersioncontrolOperation.php
@@ -133,14 +133,14 @@ abstract class VersioncontrolOperation extends VersioncontrolEntity {
   }
 
   public function insert($options = array()) {
-    // Append default options.
-    $options += $this->defaultCrudOptions['insert'];
-
     if (!empty($this->vc_op_id)) {
       // This is supposed to be a new commit, but has a vc_op_id already.
       throw new Exception('Attempted to insert a Versioncontrol commit which is already present in the database.', E_ERROR);
     }
 
+    // Append default options.
+    $options += $this->defaultCrudOptions['insert'];
+
     drupal_write_record('versioncontrol_operations', $this);
 
     if (!empty($options['nested'])) {
@@ -161,14 +161,14 @@ abstract class VersioncontrolOperation extends VersioncontrolEntity {
   }
 
   public function update($options = array()) {
-    // Append default options.
-    $options += $this->defaultCrudOptions['update'];
-
     if (empty($this->vc_op_id)) {
       // This is supposed to be an existing branch, but has no vc_op_id.
       throw new Exception('Attempted to update a Versioncontrol commit which has not yet been inserted in the database.', E_ERROR);
     }
 
+    // Append default options.
+    $options += $this->defaultCrudOptions['update'];
+
     drupal_write_record('versioncontrol_operations', $this, 'vc_op_id');
 
     if (!empty($options['nested'])) {
diff --git includes/VersioncontrolRepository.php includes/VersioncontrolRepository.php
index d84a655..8aef15c 100644
--- includes/VersioncontrolRepository.php
+++ includes/VersioncontrolRepository.php
@@ -250,6 +250,8 @@ abstract class VersioncontrolRepository implements VersioncontrolEntityInterface
     return $this;
   }
 
+  protected function backendUpdate($options) {}
+
   /**
    * Insert a repository into the database, and call the necessary hooks.
    *
@@ -275,6 +277,8 @@ abstract class VersioncontrolRepository implements VersioncontrolEntityInterface
     return $this;
   }
 
+  protected function backendInsert($options) {}
+
   /**
    * Delete a repository from the database, and call the necessary hooks.
    * Together with the repository, all associated commits and accounts are
@@ -310,6 +314,8 @@ abstract class VersioncontrolRepository implements VersioncontrolEntityInterface
     module_invoke_all('versioncontrol_entity_repository_delete', $this);
   }
 
+  protected function backendDelete($options) {}
+
   /**
    * Export a repository's authenticated accounts to the version control system's
    * password file format.
diff --git includes/VersioncontrolTag.php includes/VersioncontrolTag.php
index 560a672..32297f5 100644
--- includes/VersioncontrolTag.php
+++ includes/VersioncontrolTag.php
@@ -50,14 +50,14 @@ class VersioncontrolTag extends VersioncontrolEntity {
   public $repo_id;
 
   public function update($options = array()) {
-    // Append default options.
-    $options += $this->defaultCrudOptions['update'];
-
     if (empty($this->label_id)) {
       // This is supposed to be an existing tag, but has no label_id.
       throw new Exception('Attempted to update a Versioncontrol branch which has not yet been inserted in the database.', E_ERROR);
     }
 
+    // Append default options.
+    $options += $this->defaultCrudOptions['update'];
+
     drupal_write_record('versioncontrol_labels', $this, 'label_id');
 
     // Let the backend take action.
@@ -69,14 +69,14 @@ class VersioncontrolTag extends VersioncontrolEntity {
   }
 
   public function insert($options = array()) {
-    // Append default options.
-    $options += $this->defaultCrudOptions['insert'];
-
     if (!empty($this->label_id)) {
       // This is supposed to be a new tag, but has a label_id already.
       throw new Exception('Attempted to insert a Versioncontrol branch which is already present in the database.', E_ERROR);
     }
 
+    // Append default options.
+    $options += $this->defaultCrudOptions['insert'];
+
     drupal_write_record('versioncontrol_labels', $this);
 
     $this->backendInsert($options);
diff --git includes/controllers.inc includes/controllers.inc
index 2a8b93c..3e83371 100644
--- includes/controllers.inc
+++ includes/controllers.inc
@@ -681,7 +681,7 @@ abstract class VersioncontrolEntity implements VersioncontrolEntityInterface {
    * Overridden by backends as needed to decorate the new entity insertion
    * process.
    */
-  protected function backendInsert($options = array()) {}
+  protected function backendInsert($options) {}
 
   /**
    * Default, empty implementation of backendUpdate().
@@ -689,12 +689,12 @@ abstract class VersioncontrolEntity implements VersioncontrolEntityInterface {
    * Overridden by backends as needed to decorate the existing entity update
    * process.
    */
-  protected function backendUpdate($options = array()) {}
+  protected function backendUpdate($options) {}
 
   /**
    * Default, empty implementation of backendDelete().
    */
-  protected function backendDelete($options = array()) {}
+  protected function backendDelete($options) {}
 
   //ArrayAccess interface implementation FIXME soooooooo deprecated
   public function offsetExists($offset) {
