diff --git a/tests/VersioncontrolTokenTests.test b/tests/VersioncontrolTokenTests.test
new file mode 100644
index 0000000..c6ff83b
--- /dev/null
+++ b/tests/VersioncontrolTokenTests.test
@@ -0,0 +1,105 @@
+<?php
+/**
+ * @file
+ *   Tests ensuring proper behavior of the integration with Token.
+ */
+require_once drupal_get_path('module', 'versioncontrol') . '/tests/VersioncontrolTestCase.test';
+
+class VersioncontrolTokenTests extends VersioncontrolTestCase {
+
+  public static function getInfo() {
+    return array(
+      'name' => t('Token integration tests'),
+      'description' => t('Tests on Token integration.'),
+      'group' => t('Version Control API'),
+    );
+  }
+
+  function setUp() {
+    $this->useBackends = self::BACKENDS_ALL;
+    parent::setUp('token');
+  }
+
+  function testVersioncontrolBackendTokens() {
+    $message = '[VersioncontrolBackend:name] [VersioncontrolBackend:type] [VersioncontrolBackend:description]';
+    $object = $this->testBackend;
+    $expected = implode(' ', array($object->name, $object->type, $object->description));
+    $render = token_replace($message, array('VersioncontrolBackend' => $object));
+    $this->assertEqual($render, $expected);
+  }
+
+  function testVersioncontrolRepositoryTokens() {
+    $message = '[VersioncontrolRepository:id] [VersioncontrolRepository:name] [VersioncontrolRepository:vcs] [VersioncontrolRepository:viewer]';
+    $object = $this->versioncontrolCreateRepository();
+    $viewer_url = l($object->name, $object->getUrlHandler()->getRepositoryViewUrl());
+    $expected = implode(' ', $object->repo_id, $object->name, $object->vcs, $viewer_url);
+    $render = token_replace($message, array('VersioncontrolRepository' => $object));
+    $this->assertEqual($render, $expected);
+  }
+
+  //function testVersioncontrolOperationTokens() {
+    //$message = '[operation-id] [operation-repository] [operation-repository-id] [operation-repository-name] [operation-revision] [operation-message] [operation-author] [operation-author-name] [operation-author-uid] [operation-committer] [operation-committer-name] [operation-committer-uid]';
+    //$object = $this->versioncontrolCreateOperation();
+    //$expected = $object->vc_op_id .' '.
+                //l($object->getRepository()->name, $object->getRepository()->getUrlHandler()->getRepositoryViewUrl()) .' '.
+                //$object->getRepository()->repo_id .' '.
+                //$object->getRepository()->name .' '.
+                //$object->revision .' '.
+                //$object->message .' '.
+                //l($object->author, 'user/'. $object->author_uid) .' '.
+                //$object->author .' '.
+                //$object->author_uid .' '.
+                //l($object->committer, 'user/'. $object->committer_uid) .' '.
+                //$object->committer .' '.
+                //$object->committer_uid;
+    //$render = token_replace($message, array('VersioncontrolOperation' => $object));
+    //$this->assertEqual($render, $expected);
+  //}
+
+  //function testVersioncontrolBranchTokens() {
+    //$message = '[branch-id] [branch-name] [branch-repository] [branch-repository-id] [branch-repository-name]';
+    //$object = $this->versioncontrolCreateLabel('branch');
+    //$expected = $object->label_id .' '.
+                //$object->name .' '.
+                //l($object->getRepository()->name, $object->getRepository()->getUrlHandler()->getRepositoryViewUrl()) .' '.
+                //$object->getRepository()->repo_id .' '.
+                //$object->getRepository()->name;
+    //$render = token_replace($message, array('VersioncontrolBranch' => $object));
+    //$this->assertEqual($render, $expected);
+  //}
+
+  //function testVersioncontrolTagTokens() {
+    //$message = '[tag-id] [tag-name] [tag-repository] [tag-repository-id] [tag-repository-name]';
+    //$object = $this->versioncontrolCreateLabel('tag');
+    //$expected = $object->label_id .' '.
+                //$object->name .' '.
+                //l($object->getRepository()->name, $object->getRepository()->getUrlHandler()->getRepositoryViewUrl()) .' '.
+                //$object->getRepository()->repo_id .' '.
+                //$object->getRepository()->name;
+    //$render = token_replace($message, array('VersioncontrolTag' => $object));
+    //$this->assertEqual($render, $expected);
+  //}
+
+  //function testVersioncontrolItemTokens() {
+    //$message = '[item-path]';
+    //$object = $this->versioncontrolCreateItem();
+    //$expected = $object->path;
+    //$render = token_replace($message, array('VersioncontrolItem' => $object));
+    //$this->assertEqual($render, $expected);
+  //}
+
+  //function testVersioncontrolEventTokens() {
+    //$message = '[event-id] [event-actor] [event-actor-name] [event-actor-uid] [event-repository] [event-repository-id] [event-repository-name]';
+    //$object = $this->versioncontrolCreateEvent();
+    //$actor = db_fetch_object(db_query("SELECT name, mail FROM {users} WHERE uid = %d", $object->uid));
+    //$expected = $object->elid .' '.
+                //l($actor->name, 'user/'. $object->uid) .' '.
+                //$actor->name .' '.
+                //$object->uid .' '.
+                //l($object->getRepository()->name, $object->getRepository()->getUrlHandler()->getRepositoryViewUrl()) .' '.
+                //$object->getRepository()->repo_id .' '.
+                //$object->getRepository()->name;
+    //$render = token_replace($message, array('VersioncontrolEvent' => $object));
+    //$this->assertEqual($render, $expected);
+  //}
+}
diff --git a/versioncontrol.info b/versioncontrol.info
index 204150c..cce963f 100644
--- a/versioncontrol.info
+++ b/versioncontrol.info
@@ -52,3 +52,4 @@ files[] = tests/VersioncontrolRepositoryManagementTestCase.test
 files[] = tests/VersioncontrolRepositoryUnitTestingTestCase.test
 files[] = tests/VersioncontrolTagUnitTestingTestCase.test
 files[] = tests/VersioncontrolTestCase.test
+files[] = tests/VersioncontrolTokenTests.test
diff --git a/versioncontrol.module b/versioncontrol.module
index 324da71..7a8a49e 100644
--- a/versioncontrol.module
+++ b/versioncontrol.module
@@ -653,3 +653,225 @@ function versioncontrol_plugins_get_information() {
     ),
   );
 }
+
+/**
+ * Implements hook_token_info().
+ */
+function versioncontrol_token_info() {
+  $info = array();
+
+  // Backend.
+  $info['types']['VersioncontrolBackend'] = array(
+    'name' => t('Version Control Backend'),
+    'description' => t('Tokens related to backends.'),
+    'needs-data' => 'VersioncontrolBackend',
+  );
+  $info['tokens']['VersioncontrolBackend'] = array(
+    'name' => array(
+      'name'=> t('Backend name'),
+      'description' => t('The name of the backend'),
+    ),
+    'type' => array(
+      'name'=> t('Backend machine name'),
+      'description' => t('The type of the backend'),
+    ),
+    'description' => array(
+      'name'=> t('Backend description'),
+      'description' => t('The description of the backend'),
+    ),
+  );
+
+  // Repository.
+  $info['types']['VersioncontrolRepository'] = array(
+    'name' => t('Version Control Repository'),
+    'description' => t('Tokens related to repositories.'),
+    'needs-data' => 'VersioncontrolRepository',
+  );
+  $info['tokens']['VersioncontrolRepository'] = array(
+    'id' => array(
+      'name'=> t('Repository ID'),
+      'description' => t('The unique identifier for the repository.'),
+    ),
+    'name' => array(
+      'name'=> t('Repository name'),
+      'description' => t('User visible name of the repository.'),
+    ),
+    // @todo Provide the whole backend object from here?
+    'vcs' => array(
+      'name'=> t('Repository backend machine name'),
+      'description' => t('The description of the backend'),
+    ),
+    'viewer' => array(
+      'name'=> t('Repository viewer url.'),
+      'description' => t('A link to the web viewer associated with this repository.'),
+    ),
+  );
+
+  //if ($all || $type == 'VersioncontrolOperation') {
+    //$tokens['Versioncontrol Operation'] = array(
+      //'operation-id' => t('The identifier of the operation'),
+      //'operation-repository' => t('Link to the repository'),
+      //'operation-repository-id' => t('The identifier of the repository'),
+      //'operation-repository-name' => t('The name of the repository'),
+      //'operation-revision' => t('The operation\'s revision identifier'),
+      //'operation-message' => t('The log message for the operation'),
+      //'operation-author' => t('Link to the user who performed the action'),
+      //'operation-author-name' => t('The name of the user who performed the action'),
+      //'operation-author-uid' => t('The user id of the user who performed the action'),
+      //'operation-committer' => t('Link to the user who performed the commit'),
+      //'operation-committer-name' => t('The name of the user who performed the commit'),
+      //'operation-committer-uid' => t('The user id of the user who performed the commit'),
+    //) + token_get_date_token_info(t('The operation\'s author'), 'operation-author-')
+      //+ token_get_date_token_info(t('The operation\'s committer'), 'operation-committer-');
+  //}
+
+  //if ($all || $type == 'VersioncontrolBranch') {
+    //$tokens['Versioncontrol Branch'] = array(
+      //'branch-id' => t('The identifier of the branch'),
+      //'branch-name' => t('The name of the branch'),
+      //'branch-repository' => t('Link to the repository'),
+      //'branch-repository-id' => t('The identifier of the repository'),
+      //'branch-repository-name' => t('The name of the repository'),
+    //);
+  //}
+
+  //if ($all || $type == 'VersioncontrolTag') {
+    //$tokens['Versioncontrol Tag'] = array(
+      //'tag-id' => t('The identifier of the tag'),
+      //'tag-name' => t('The name of the tag'),
+      //'tag-repository' => t('Link to the repository'),
+      //'tag-repository-id' => t('The identifier of the repository'),
+      //'tag-repository-name' => t('The name of the repository'),
+    //);
+  //}
+
+  //if ($all || $type == 'VersioncontrolItem') {
+    //$tokens['Versioncontrol Item'] = array(
+      //'item-path' => t('The path of the item'),
+    //);
+  //}
+
+  //if ($all || $type == 'VersioncontrolEvent') {
+    //$tokens['Versioncontrol Event'] = array(
+      //'event-id' => t('The identifier of the operation'),
+      //'event-actor' => t('Link to the user that caused the event'),
+      //'event-actor-name' => t('The name of the user that caused the event'),
+      //'event-actor-uid' => t('The user id of the user that caused the event'),
+      //'event-repository' => t('Link to the repository'),
+      //'event-repository-id' => t('The identifier of the repository'),
+      //'event-repository-name' => t('The name of the repository'),
+    //) + token_get_date_token_info(t('The event\'s'), 'event-');
+  //}
+
+  return $info;
+}
+
+/**
+ * Implements hook_tokens().
+ */
+function versioncontrol_tokens($type, $tokens, array $data = array(), array $options = array()) {
+  $replacements = array();
+  $sanitize = !empty($options['sanitize']);
+
+  if (empty($data[$type])) {
+    return $replacements;
+  }
+  $object = $data[$type];
+
+  foreach ($tokens as $name => $original) {
+    switch ($type) {
+      case 'VersioncontrolBackend':
+        foreach ($tokens as $name => $original) {
+          switch ($name) {
+            case 'name':
+            case 'type':
+            case 'description':
+              $replacements[$original] = $sanitize ? check_plain($object->$name) : $object->$name;
+          }
+        }
+        break;
+      case 'VersioncontrolRepository':
+        foreach ($tokens as $name => $original) {
+          switch ($name) {
+            case 'viewer':
+              $replacements[$original] = l($object->name, $object->getUrlHandler()->getRepositoryViewUrl());
+              break;
+            case 'id':
+              $name = 'repo_id';
+            case 'name':
+            case 'vcs':
+              $replacements[$original] = $sanitize ? check_plain($object->$name) : $object->$name;
+          }
+        }
+        break;
+    //case 'VersioncontrolRepository':
+      //$values = array(
+        //'repository' => l($object->name, $object->getUrlHandler()->getRepositoryViewUrl()),
+        //'repository-id' => $object->repo_id,
+        //'repository-name' => $object->name,
+        //'repository-vcs' => $object->vcs,
+      //);
+
+      //break;
+    //case 'VersioncontrolOperation':
+      //$values = array(
+        //'operation-id' => $object->vc_op_id,
+        //'operation-repository' => l($object->getRepository()->name, $object->getRepository()->getUrlHandler()->getRepositoryViewUrl()),
+        //'operation-repository-id' => $object->getRepository()->repo_id,
+        //'operation-repository-name' => $object->getRepository()->name,
+        //'operation-revision' => $object->revision,
+        //'operation-message' => $object->message,
+        //'operation-author' => l($object->author, 'user/'. $object->author_uid),
+        //'operation-author-name' => $object->author,
+        //'operation-author-uid' => $object->author_uid,
+        //'operation-committer' => l($object->committer, 'user/'. $object->committer_uid),
+        //'operation-committer-name' => $object->committer,
+        //'operation-committer-uid' => $object->committer_uid,
+      //) + token_get_date_token_values($object->author_date, 'operation-author-')
+      //+ token_get_date_token_values($object->committer_date, 'operation-committer-');
+
+      //break;
+    //case 'VersioncontrolBranch':
+      //$values = array(
+        //'branch-id' => $object->label_id,
+        //'branch-name' => $object->name,
+        //'branch-repository' => l($object->getRepository()->name, $object->getRepository()->getUrlHandler()->getRepositoryViewUrl()),
+        //'branch-repository-id' => $object->getRepository()->repo_id,
+        //'branch-repository-name' => $object->getRepository()->name,
+      //);
+
+      //break;
+    //case 'VersioncontrolTag':
+      //$values = array(
+        //'tag-id' => $object->label_id,
+        //'tag-name' => $object->name,
+        //'tag-repository' => l($object->getRepository()->name, $object->getRepository()->getUrlHandler()->getRepositoryViewUrl()),
+        //'tag-repository-id' => $object->getRepository()->repo_id,
+        //'tag-repository-name' => $object->getRepository()->name,
+      //);
+
+      //break;
+    //case 'VersioncontrolItem':
+      //$values = array(
+        //'item-path' => $object->path,
+      //);
+
+      //break;
+    //case 'VersioncontrolEvent':
+      //$actor = db_fetch_object(db_query("SELECT name, mail FROM {users} WHERE uid = %d", $object->uid));
+
+      //$values = array(
+        //'event-id' => $object->elid,
+        //'event-actor' => l($actor->name, 'user/'. $object->uid),
+        //'event-actor-name' => $actor->name,
+        //'event-actor-uid' => $object->uid,
+        //'event-repository' => l($object->getRepository()->name, $object->getRepository()->getUrlHandler()->getRepositoryViewUrl()),
+        //'event-repository-id' => $object->getRepository()->repo_id,
+        //'event-repository-name' => $object->getRepository()->name,
+      //) + token_get_date_token_values($object->timestamp, 'event-');
+
+    }
+  }
+
+  return $replacements;
+}
