diff --git a/entity.api.php b/entity.api.php
index edfdaf3..cbb3eb3 100644
--- a/entity.api.php
+++ b/entity.api.php
@@ -306,6 +306,10 @@ function entity_metadata_hook_entity_info() {
  *       entity_property_values_create_entity().
  *     - field: (optional) A boolean indicating whether a property is stemming
  *       from a field.
+ *     - computed: (optional) A boolean indiciating whether a property is
+ *       computed, i.e. the property value is not stored or loaded by the
+ *       entity's controller but determined on the fly by the getter callback.
+ *       Defaults to FALSE.
  *     - sanitized: (optional) For textual properties only, whether the text is
  *       already sanitized. In this case you might want to also specify a raw
  *       getter callback. Defaults to FALSE.
diff --git a/modules/callbacks.inc b/modules/callbacks.inc
index 453b1c0..7a9a3d6 100644
--- a/modules/callbacks.inc
+++ b/modules/callbacks.inc
@@ -259,6 +259,14 @@ function entity_metadata_taxonomy_term_get_properties($term, array $options, $na
         return $term->parent;
       }
       return array_keys(taxonomy_get_parents($term->tid));
+
+    case 'parents_all':
+      // We have to return an array of ids.
+      $tids = array();
+      foreach (taxonomy_get_parents_all($term->tid) as $parent) {
+        $tids[] = $parent->tid;
+      }
+      return $tids;
   }
 }
 
diff --git a/modules/comment.info.inc b/modules/comment.info.inc
index 96bfe24..4321b4c 100644
--- a/modules/comment.info.inc
+++ b/modules/comment.info.inc
@@ -66,12 +66,14 @@ function entity_metadata_comment_entity_property_info() {
     'description' => t("The URL of the comment."),
     'getter callback' => 'entity_metadata_entity_get_properties',
     'type' => 'uri',
+    'computed' => TRUE,
   );
   $properties['edit_url'] = array(
     'label' => t("Edit URL"),
     'description' => t("The URL of the comment's edit page."),
     'getter callback' => 'entity_metadata_comment_get_properties',
     'type' => 'uri',
+    'computed' => TRUE,
   );
   $properties['created'] = array(
     'label' => t("Date created"),
diff --git a/modules/node.info.inc b/modules/node.info.inc
index 8afd8f7..d3cde6a 100644
--- a/modules/node.info.inc
+++ b/modules/node.info.inc
@@ -63,12 +63,14 @@ function entity_metadata_node_entity_property_info() {
     'description' => t("The URL of the node."),
     'getter callback' => 'entity_metadata_entity_get_properties',
     'type' => 'uri',
+    'computed' => TRUE,
   );
   $properties['edit_url'] = array(
     'label' => t("Edit URL"),
     'description' => t("The URL of the node's edit page."),
     'getter callback' => 'entity_metadata_node_get_properties',
     'type' => 'uri',
+    'computed' => TRUE,
   );
   $properties['status'] = array(
     'label' => t("Status"),
diff --git a/modules/poll.info.inc b/modules/poll.info.inc
index 77a4b28..12d6b35 100644
--- a/modules/poll.info.inc
+++ b/modules/poll.info.inc
@@ -18,24 +18,28 @@ function entity_metadata_poll_entity_property_info_alter(&$info) {
     'description' => t("The number of votes that have been cast on a poll node."),
     'type' => 'integer',
     'getter callback' => 'entity_metadata_poll_node_get_properties',
+    'computed' => TRUE,
   );
   $properties['poll_winner'] = array(
     'label' => t("Poll winner"),
     'description' => t("The winning poll answer."),
     'getter callback' => 'entity_metadata_poll_node_get_properties',
     'sanitize' => 'filter_xss',
+    'computed' => TRUE,
   );
   $properties['poll_winner_votes'] = array(
     'label' => t("Poll winner votes"),
     'description' => t("The number of votes received by the winning poll answer."),
     'type' => 'integer',
     'getter callback' => 'entity_metadata_poll_node_get_properties',
+    'computed' => TRUE,
   );
   $properties['poll_winner_percent'] = array(
     'label' => t("Poll winner percent"),
     'description' => t("The percentage of votes received by the winning poll answer."),
     'getter callback' => 'entity_metadata_poll_node_get_properties',
     'type' => 'decimal',
+    'computed' => TRUE,
   );
   $properties['poll_duration'] = array(
     'label' => t("Poll duration"),
diff --git a/modules/statistics.info.inc b/modules/statistics.info.inc
index a844798..6633eaa 100644
--- a/modules/statistics.info.inc
+++ b/modules/statistics.info.inc
@@ -18,17 +18,20 @@ function entity_metadata_statistics_entity_property_info_alter(&$info) {
     'description' => t("The number of visitors who have read the node."),
     'type' => 'integer',
     'getter callback' => 'entity_metadata_statistics_node_get_properties',
+    'computed' => TRUE,
   );
   $properties['day_views'] = array(
     'label' => t("Views today"),
     'description' => t("The number of visitors who have read the node today."),
     'type' => 'integer',
     'getter callback' => 'entity_metadata_statistics_node_get_properties',
+    'computed' => TRUE,
   );
   $properties['last_view'] = array(
     'label' => t("Last view"),
     'description' => t("The date on which a visitor last read the node."),
     'type' => 'date',
     'getter callback' => 'entity_metadata_statistics_node_get_properties',
+    'computed' => TRUE,
   );
 }
diff --git a/modules/taxonomy.info.inc b/modules/taxonomy.info.inc
index b077404..e50c63d 100644
--- a/modules/taxonomy.info.inc
+++ b/modules/taxonomy.info.inc
@@ -49,12 +49,14 @@ function entity_metadata_taxonomy_entity_property_info() {
     'type' => 'integer',
     'description' => t("The number of nodes tagged with the taxonomy term."),
     'getter callback' => 'entity_metadata_taxonomy_term_get_properties',
+    'computed' => TRUE,
   );
   $properties['url'] = array(
     'label' => t("URL"),
     'description' => t("The URL of the taxonomy term."),
     'getter callback' => 'entity_metadata_entity_get_properties',
     'type' => 'uri',
+    'computed' => TRUE,
   );
   $properties['vocabulary'] = array(
     'label' => t("Vocabulary"),
@@ -71,6 +73,13 @@ function entity_metadata_taxonomy_entity_property_info() {
     'setter callback' => 'entity_metadata_taxonomy_term_setter',
     'type' => 'list<taxonomy_term>',
   );
+  $properties['parents_all'] = array(
+    'label' => t("All parent terms"),
+    'description' => t("Ancestors of the term, i.e. parent of all above hierarchy levels."),
+    'getter callback' => 'entity_metadata_taxonomy_term_get_properties',
+    'type' => 'list<taxonomy_term>',
+    'computed' => TRUE,
+  );
 
   // Add meta-data about the basic vocabulary properties.
   $properties = &$info['taxonomy_vocabulary']['properties'];
@@ -109,6 +118,7 @@ function entity_metadata_taxonomy_entity_property_info() {
     'type' => 'integer',
     'description' => t("The number of terms belonging to the taxonomy vocabulary."),
     'getter callback' => 'entity_metadata_taxonomy_vocabulary_get_properties',
+    'computed' => TRUE,
   );
   return $info;
 }
diff --git a/modules/user.info.inc b/modules/user.info.inc
index 35a6b1e..da63b6a 100644
--- a/modules/user.info.inc
+++ b/modules/user.info.inc
@@ -45,12 +45,14 @@ function entity_metadata_user_entity_property_info() {
     'description' => t("The URL of the account profile page."),
     'getter callback' => 'entity_metadata_user_get_properties',
     'type' => 'uri',
+    'computed' => TRUE,
   );
   $properties['edit_url'] = array(
     'label' => t("Edit URL"),
     'description' => t("The url of the account edit page."),
     'getter callback' => 'entity_metadata_user_get_properties',
     'type' => 'uri',
+    'computed' => TRUE,
   );
   $properties['last_login'] = array(
     'label' => t("Last login"),
