diff --git entity_metadata/entity_metadata.test entity_metadata/entity_metadata.test
index afc69d8..0c4418d 100644
--- entity_metadata/entity_metadata.test
+++ entity_metadata/entity_metadata.test
@@ -62,7 +62,7 @@ class EntityMetadataTestCase extends DrupalWebTestCase {
     $wrapper = entity_metadata_wrapper('node', $node);
 
     $this->assertEqual('<b>Is it bold?<b>', $wrapper->title->value(), 'Getting a field value.');
-    $this->assertEqual(node_type_get_name($node->type), $wrapper->{'type_name'}->raw(), 'Getting a raw property value.');
+    $this->assertEqual($node->title, $wrapper->title->raw(), 'Getting a raw property value.');
 
     // Test chaining
     $this->assertEqual($account->mail, $wrapper->author->mail->value(), 'Testing chained usage.');
@@ -83,8 +83,8 @@ class EntityMetadataTestCase extends DrupalWebTestCase {
     }
 
     // Test setting.
-    $wrapper->uid = 0;
-    $this->assertEqual(0, $wrapper->uid->value(), 'Setting a property.');
+    $wrapper->author = 0;
+    $this->assertEqual(0, $wrapper->author->uid->value(), 'Setting a property.');
     try {
       $wrapper->url = 'dummy';
       $this->fail('Setting an unsupported property.');
@@ -366,7 +366,7 @@ class EntityMetadataIntegrationTestCase extends DrupalWebTestCase {
     // Test whether the properties work.
     $wrapper = entity_metadata_wrapper('node', $node2);
     $this->assertEqual("Book 1", $wrapper->book->title->value(), "Book title returned.");
-    $this->assertEqual($node->nid, $wrapper->{'book_id'}->value(), "Book id returned.");
+    $this->assertEqual($node->nid, $wrapper->book->nid->value(), "Book id returned.");
 
     // Try using book properties for no book nodes.
     $wrapper = entity_metadata_wrapper('node', $node3);
@@ -409,12 +409,13 @@ class EntityMetadataIntegrationTestCase extends DrupalWebTestCase {
     $node = $this->drupalCreateNode(array('title' => $title, 'type' => 'page'));
     $wrapper = entity_metadata_wrapper('node', $node);
     foreach ($wrapper as $key => $value) {
-      if ($key != 'book' && $key != 'book_id') {
+      if ($key != 'book' && $key != 'source') {
         $this->assertValue($wrapper, $key);
       }
     }
     $this->assertException($wrapper, 'book');
-    $this->assertException($wrapper, 'book_id');
+    $this->assertException($wrapper, 'source');
+    $this->assertException($wrapper->source, 'title');
   }
 
   /**
diff --git entity_metadata/entity_metadata.wrapper.inc entity_metadata/entity_metadata.wrapper.inc
index 5f3e0b6..e0c7b39 100644
--- entity_metadata/entity_metadata.wrapper.inc
+++ entity_metadata/entity_metadata.wrapper.inc
@@ -72,7 +72,7 @@ abstract class EntityMetadataWrapper {
       $this->data = $this->info['parent']->getPropertyValue($this->info['name'], $this->info);
     }
     elseif (!isset($this->data)) {
-      throw new EntityMetadataWrapperException('There is no data set, so you cannot retrieve any values.');
+      throw new EntityMetadataWrapperException('Missing data values.');
     }
     return $this->data;
   }
@@ -589,7 +589,7 @@ class EntityDrupalWrapper extends EntityStructureWrapper {
    */
   public function value(array $options = array()) {
     if (!$this->dataAvailable()) {
-      throw new EntityMetadataWrapperException('There is no data set, thus there are no values to retrieve.');
+      throw new EntityMetadataWrapperException('Missing data values.');
     }
     elseif (!$this->data && $this->id !== FALSE) {
       // Lazy load the entity if necessary.
diff --git entity_metadata/modules/book.info.inc entity_metadata/modules/book.info.inc
index 03b97b7..ecd0704 100644
--- entity_metadata/modules/book.info.inc
+++ entity_metadata/modules/book.info.inc
@@ -14,13 +14,6 @@ function entity_metadata_book_entity_property_info_alter(&$info) {
   // Add meta-data about the added node properties.
   $properties = &$info['node']['properties'];
 
-  $properties['book_id'] = array(
-    'label' => t("Book ID"),
-    'type' => 'integer',
-    'validation callback' => 'entity_metadata_validate_integer_positive',
-    'description' => t("If part of a book, the unique ID of this page's book."),
-    'getter callback' => 'entity_metadata_book_get_properties',
-  );
   $properties['book'] = array(
     'label' => t("Book"),
     'type' => 'node',
diff --git entity_metadata/modules/callbacks.inc entity_metadata/modules/callbacks.inc
index 4567ab3..db3424e 100644
--- entity_metadata/modules/callbacks.inc
+++ entity_metadata/modules/callbacks.inc
@@ -38,13 +38,7 @@ function entity_metadata_book_get_properties($node, array $options, $name, $enti
   if (!isset($node->book['bid'])) {
     throw new EntityMetadataWrapperException('This node is no book page.');
   }
-  switch ($name) {
-    case 'book_id':
-      return $node->book['bid'];
-
-    case 'book':
-      return $node->book['bid'];
-  }
+  return $node->book['bid'];
 }
 
 /**
@@ -121,8 +115,11 @@ function entity_metadata_node_get_properties($node, array $options, $name, $enti
     case 'is_new':
       return empty($node->nid) || !empty($node->is_new);
 
-    case 'type_name':
-      return node_type_get_name($node->type);
+    case 'source':
+      if (!empty($node->tnid) && $source = node_load($node->tnid)) {
+        return $source;
+      }
+      return NULL;
 
     case 'edit_url':
       return url('node/' . $node->nid . '/edit', $options);
@@ -306,7 +303,7 @@ function entity_metadata_taxonomy_vocabulary_get_properties($vocabulary, array $
  */
 function entity_metadata_user_get_properties($account, array $options, $name, $entity_type) {
   switch ($name) {
-    case 'last-login':
+    case 'last_login':
       return $account->login;
 
     case 'name':
diff --git entity_metadata/modules/comment.info.inc entity_metadata/modules/comment.info.inc
index a832f7d..2f0bb58 100644
--- entity_metadata/modules/comment.info.inc
+++ entity_metadata/modules/comment.info.inc
@@ -21,30 +21,6 @@ function entity_metadata_comment_entity_property_info() {
     'description' => t("The unique ID of the comment."),
     'validation callback' => 'entity_metadata_validate_integer_positive',
   );
-  $properties['pid'] = array(
-    'label' => t("Parent ID"),
-    'type' => 'integer',
-    'description' => t("The unique ID of the comment's parent, if comment threading is active."),
-    'validation callback' => 'entity_metadata_validate_integer_positive',
-  );
-  $properties['nid'] = array(
-    'label' => t("Node ID"),
-    'type' => 'integer',
-    'description' => t("The unique ID of the node the comment was posted to."),
-    'setter callback' => 'entity_metadata_verbatim_set',
-    'setter permission' => 'administer comments',
-    'clear' => array('node'),
-    'validation callback' => 'entity_metadata_validate_integer_positive',
-  );
-  $properties['uid'] = array(
-    'label' => t("User ID"),
-    'type' => 'integer',
-    'description' => t("The unique ID of the user who posted the comment."),
-    'setter callback' => 'entity_metadata_verbatim_set',
-    'setter permission' => 'administer comments',
-    'clear' => array('user'),
-    'validation callback' => 'entity_metadata_validate_integer_positive',
-  );
   $properties['hostname'] = array(
     'label' => t("IP Address"),
     'description' => t("The IP address of the computer the comment was posted from."),
@@ -113,7 +89,6 @@ function entity_metadata_comment_entity_property_info() {
     'setter callback' => 'entity_metadata_comment_setter',
     'setter permission' => 'administer comments',
     'required' => TRUE,
-    'clear' => array('nid'),
   );
   $properties['author'] = array(
     'label' => t("Author"),
@@ -123,7 +98,6 @@ function entity_metadata_comment_entity_property_info() {
     'setter callback' => 'entity_metadata_comment_setter',
     'setter permission' => 'administer comments',
     'required' => TRUE,
-    'clear' => array('uid'),
   );
   return $info;
 }
diff --git entity_metadata/modules/node.info.inc entity_metadata/modules/node.info.inc
index 293d33b..9b9e7ac 100644
--- entity_metadata/modules/node.info.inc
+++ entity_metadata/modules/node.info.inc
@@ -29,23 +29,6 @@ function entity_metadata_node_entity_property_info() {
     'query callback' => 'entity_metadata_table_query',
     'validation callback' => 'entity_metadata_validate_integer_positive',
   );
-  $properties['tnid'] = array(
-    'label' => t("Translation set ID"),
-    'type' => 'integer',
-    'description' => t("The unique ID of the original-language version of this node, if one exists."),
-    'query callback' => 'entity_metadata_table_query',
-    'validation callback' => 'entity_metadata_validate_integer_positive',
-  );
-  $properties['uid'] = array(
-    'label' => t("User ID"),
-    'type' => 'integer',
-    'description' => t("The unique ID of the author of the node."),
-    'setter callback' => 'entity_metadata_verbatim_set',
-    'setter permission' => 'administer nodes',
-    'clear' => array('author'),
-    'query callback' => 'entity_metadata_table_query',
-    'validation callback' => 'entity_metadata_validate_integer_non_negative',
-  );
   $properties['is_new'] = array(
     'label' => t("Is new"),
     'type' => 'boolean',
@@ -62,11 +45,6 @@ function entity_metadata_node_entity_property_info() {
     'required' => TRUE,
     'query callback' => 'entity_metadata_table_query',
   );
-  $properties['type_name'] = array(
-    'label' => t("Content type name"),
-    'description' => t("The human-readable name of the node type."),
-    'getter callback' => 'entity_metadata_node_get_properties',
-  );
   $properties['title'] = array(
     'label' => t("Title"),
     'description' => t("The title of the node."),
@@ -140,7 +118,12 @@ function entity_metadata_node_entity_property_info() {
     'setter callback' => 'entity_metadata_node_set_properties',
     'setter permission' => 'administer nodes',
     'required' => TRUE,
-    'clear' => array('uid'),
+  );
+  $properties['source'] = array(
+    'label' => t("Translation source node"),
+    'type' => 'node',
+    'description' => t("The original-language version of this node, if one exists."),
+    'getter callback' => 'entity_metadata_node_get_properties',
   );
   $properties['log'] = array(
     'label' => t("Revision log message"),
diff --git entity_metadata/modules/system.info.inc entity_metadata/modules/system.info.inc
index f2f5079..2141bae 100644
--- entity_metadata/modules/system.info.inc
+++ entity_metadata/modules/system.info.inc
@@ -71,12 +71,6 @@ function entity_metadata_system_entity_property_info() {
     'type' => 'integer',
     'validation callback' => 'entity_metadata_validate_integer_positive',
   );
-  $properties['uid'] = array(
-    'label' => t("User ID"),
-    'description' => t("The unique ID of the user who owns the file."),
-    'type' => 'integer',
-    'validation callback' => 'entity_metadata_validate_integer_positive',
-  );
   $properties['name'] = array(
     'label' => t("File name"),
     'description' => t("The name of the file on disk."),
diff --git entity_metadata/modules/taxonomy.info.inc entity_metadata/modules/taxonomy.info.inc
index 39661bd..fe6147a 100644
--- entity_metadata/modules/taxonomy.info.inc
+++ entity_metadata/modules/taxonomy.info.inc
@@ -21,25 +21,12 @@ function entity_metadata_taxonomy_entity_property_info() {
     'type' => 'integer',
     'validation callback' => 'entity_metadata_validate_integer_positive',
   );
-  $properties['vid'] = array(
-    'label' => t("Vocabulary ID"),
-    'description' => t("The unique ID of the vocabulary the term belongs to."),
-    'setter callback' => 'entity_metadata_verbatim_set',
-    'type' => 'integer',
-    'clear' => array('vocabulary'),
-    'validation callback' => 'entity_metadata_validate_integer_positive',
-  );
   $properties['name'] = array(
     'label' => t("Name"),
     'description' => t("The name of the taxonomy term."),
     'setter callback' => 'entity_metadata_verbatim_set',
     'required' => TRUE,
   );
-  $properties['vocabulary_machine_name'] = array(
-    'label' => t("Vocabulary machine name"),
-    'type' => 'token',
-    'description' => t("The machine readable name of the term's vocabulary."),
-  );
   $properties['description'] = array(
     'label' => t("Description"),
     'description' => t("The optional description of the taxonomy term."),
@@ -73,7 +60,6 @@ function entity_metadata_taxonomy_entity_property_info() {
     'setter callback' => 'entity_metadata_taxonomy_term_setter',
     'type' => 'taxonomy_vocabulary',
     'required' => TRUE,
-    'clear' => array('vid'),
   );
   $properties['parent'] = array(
     'label' => t("Parent terms"),
diff --git entity_metadata/modules/user.info.inc entity_metadata/modules/user.info.inc
index ebf6162..9b171f6 100644
--- entity_metadata/modules/user.info.inc
+++ entity_metadata/modules/user.info.inc
@@ -48,7 +48,7 @@ function entity_metadata_user_entity_property_info() {
     'getter callback' => 'entity_metadata_user_get_properties',
     'type' => 'uri',
   );
-  $properties['last-login'] = array(
+  $properties['last_login'] = array(
     'label' => t("Last login"),
     'description' => t("The date the user last logged in to the site."),
     'getter callback' => 'entity_metadata_user_get_properties',
