diff --git a/src/Entity/Flagging.php b/src/Entity/Flagging.php
index 3787e89..100e9e4 100644
--- a/src/Entity/Flagging.php
+++ b/src/Entity/Flagging.php
@@ -37,8 +37,18 @@ use Drupal\flag\FlaggingInterface;
  * )
  */
 class Flagging extends ContentEntityBase implements FlaggingInterface {
+
   // @todo should there be a data_table annotation?
   // @todo should the bundle entity_key annotation be "flag" not "type"?
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $values, $entity_type, $bundle = FALSE, $translations = array()) {
+    parent::__construct($values, $entity_type, $bundle, $translations);
+    $this->setFlaggedEntity();
+  }
+
   /**
    * Gets the flag ID for the parent flag.
    *
@@ -53,7 +63,7 @@ class Flagging extends ContentEntityBase implements FlaggingInterface {
    * {@inheritdoc}
    */
   public function getFlag() {
-    return $this->entityManager()->getStorage('flag')->load($this->getFlagId());
+    return Flag::load($this->getFlagId());
   }
 
   /**
@@ -82,7 +92,7 @@ class Flagging extends ContentEntityBase implements FlaggingInterface {
   public function getFlaggable() {
     $flaggable_type = $this->getFlaggableType();
     $flaggable_id = $this->getFlaggableId();
-    return $this->entityManager()->getStorage($flaggable_type)->load($flaggable_id);
+    return $this->entityTypeManager()->getStorage($flaggable_type)->load($flaggable_id);
   }
 
   /**
@@ -116,6 +126,11 @@ class Flagging extends ContentEntityBase implements FlaggingInterface {
       ->setRequired(TRUE)
       ->setDescription(t('The Entity ID.'));
 
+    $fields['flagged_entity'] = BaseFieldDefinition::create('entity_reference')
+      ->setLabel(t('Entity'))
+      ->setDescription(t('The entity of which this flag belongs to.'))
+      ->setComputed(TRUE);
+
     // Also duplicates data on flag entity for querying purposes.
     $fields['global'] = BaseFieldDefinition::create('boolean')
       ->setLabel(t('Global'))
@@ -136,4 +151,41 @@ class Flagging extends ContentEntityBase implements FlaggingInterface {
     return $fields;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function onChange($name) {
+    if ($name == 'flagged_entity') {
+      $this->entity_id->value = $this->flagged_entity->target_id;
+    }
+    if ($name == 'entity_id') {
+      $this->setFlaggedEntity();
+    }
+    parent::onChange($name);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function bundleFieldDefinitions(EntityTypeInterface $entity_type, $bundle, array $base_field_definitions) {
+    /** @var Flag $flag */
+    if ($flag = Flag::load($bundle)) {
+      $fields['flagged_entity'] = clone $base_field_definitions['flagged_entity'];
+      $fields['flagged_entity']->setSetting('target_type', $flag->getFlaggableEntityTypeId());
+      return $fields;
+    }
+    return parent::bundleFieldDefinitions($entity_type, $bundle, $base_field_definitions); // TODO: Change the autogenerated stub
+  }
+
+  /**
+   * Set the flagged_entity computed field.
+   */
+  protected function setFlaggedEntity() {
+    $flagged_entity_item_list = $this->get('flagged_entity');
+    $entity_id_item_list = $this->get('entity_id');
+    if ($flagged_entity_item_list->isEmpty() != $entity_id_item_list->isEmpty() || $flagged_entity_item_list->target_id != $entity_id_item_list->value) {
+      $flagged_entity_item_list->target_id = $entity_id_item_list->value;
+    }
+  }
+
 }
diff --git a/src/Tests/FlagSimpleTest.php b/src/Tests/FlagSimpleTest.php
index e97adfa..5093bbb 100644
--- a/src/Tests/FlagSimpleTest.php
+++ b/src/Tests/FlagSimpleTest.php
@@ -117,6 +117,13 @@ class FlagSimpleTest extends FlagTestBase {
     $this->drupalGet('node/' . $node_id);
     $this->clickLink('Flag this item');
     $this->assertResponse(200);
+    $flaggings = \Drupal::entityTypeManager()->getStorage('flagging')->loadMultiple();
+    $this->assertEqual(count($flaggings), 1);
+    $flagging = reset($flaggings);
+    $this->assertEqual($flagging->flagged_entity->getSetting('target_type'), 'node');
+    $this->assertEqual($flagging->flagged_entity->target_id, $node_id);
+    $this->assertEqual($flagging->flagged_entity->entity->id(), $node_id);
+    $this->assertEqual($flagging->flagged_entity->entity->getEntityTypeId(), 'node');
     $this->assertLink('Unflag this item');
 
     // Switch user to check flagging link.
