diff --git a/src/Entity/WorkspacePointer.php b/src/Entity/WorkspacePointer.php
new file mode 100644
index 0000000..17befc1
--- /dev/null
+++ b/src/Entity/WorkspacePointer.php
@@ -0,0 +1,111 @@
+<?php
+
+namespace Drupal\workspace\Entity;
+
+use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Field\BaseFieldDefinition;
+use Drupal\Core\Entity\ContentEntityBase;
+use Drupal\Core\Entity\EntityChangedTrait;
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\workspace\WorkspacePointerInterface;
+use Drupal\user\UserInterface;
+
+/**
+ * Defines the Workspace pointer entity.
+ *
+ * @ingroup workspace
+ *
+ * @ContentEntityType(
+ *   id = "workspace_pointer",
+ *   label = @Translation("Workspace pointer"),
+ *   handlers = {
+ *     "access" = "Drupal\workspace\WorkspacePointerAccessControlHandler",
+ *   },
+ *   base_table = "workspace_pointer",
+ *   entity_keys = {
+ *     "id" = "id",
+ *     "label" = "name",
+ *     "uuid" = "uuid",
+ *   },
+ * )
+ */
+class WorkspacePointer extends ContentEntityBase implements WorkspacePointerInterface {
+  use EntityChangedTrait;
+  /**
+   * {@inheritdoc}
+   */
+  public static function preCreate(EntityStorageInterface $storage_controller, array &$values) {
+    parent::preCreate($storage_controller, $values);
+
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getName() {
+    return $this->get('name')->value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setName($name) {
+    $this->set('name', $name);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCreatedTime() {
+    return $this->get('created')->value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setCreatedTime($timestamp) {
+    $this->set('created', $timestamp);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
+    $fields['id'] = BaseFieldDefinition::create('integer')
+      ->setLabel(t('ID'))
+      ->setDescription(t('The ID of the Workspace pointer entity.'))
+      ->setReadOnly(TRUE);
+    $fields['uuid'] = BaseFieldDefinition::create('uuid')
+      ->setLabel(t('UUID'))
+      ->setDescription(t('The UUID of the Workspace pointer entity.'))
+      ->setReadOnly(TRUE);
+
+    $fields['name'] = BaseFieldDefinition::create('string')
+      ->setLabel(t('Name'))
+      ->setDescription(t('The name of the Workspace pointer entity.'))
+      ->setSettings(array(
+        'max_length' => 50,
+        'text_processing' => 0,
+      ))
+      ->setDefaultValue('')
+      ->setDisplayConfigurable('form', FALSE)
+      ->setDisplayConfigurable('view', FALSE);
+
+    $fields['created'] = BaseFieldDefinition::create('created')
+      ->setLabel(t('Created'))
+      ->setDescription(t('The time that the entity was created.'));
+
+    $fields['changed'] = BaseFieldDefinition::create('changed')
+      ->setLabel(t('Changed'))
+      ->setDescription(t('The time that the entity was last edited.'));
+
+    $fields['workspace'] = BaseFieldDefinition::create('dynamic_entity_reference')
+      ->setLabel(t('Workspace'))
+      ->setDescription(t('A reference to the workspace or remote config entity'));
+
+    return $fields;
+  }
+
+}
diff --git a/src/Entity/WorkspacePointerViewsData.php b/src/Entity/WorkspacePointerViewsData.php
new file mode 100644
index 0000000..5f8438f
--- /dev/null
+++ b/src/Entity/WorkspacePointerViewsData.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\workspace\Entity\WorkspacePointer.
+ */
+
+namespace Drupal\workspace\Entity;
+
+use Drupal\views\EntityViewsData;
+use Drupal\views\EntityViewsDataInterface;
+
+/**
+ * Provides Views data for Workspace pointer entities.
+ */
+class WorkspacePointerViewsData extends EntityViewsData implements EntityViewsDataInterface {
+  /**
+   * {@inheritdoc}
+   */
+  public function getViewsData() {
+    $data = parent::getViewsData();
+
+    $data['workspace_pointer']['table']['base'] = array(
+      'field' => 'id',
+      'title' => $this->t('Workspace pointer'),
+      'help' => $this->t('The Workspace pointer ID.'),
+    );
+
+    return $data;
+  }
+
+}
diff --git a/src/WorkspacePointer.php b/src/WorkspacePointer.php
deleted file mode 100644
index 42cfa5c..0000000
--- a/src/WorkspacePointer.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-namespace Drupal\workspace;
-
-use Drupal\Core\KeyValueStore\KeyValueFactoryInterface;
-
-class WorkspacePointer implements WorkspacePointerInterface {
-
-  /**
-   * @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
-   */
-  protected $keyValueStore;
-
-  /**
-   * @inheritDoc
-   */
-  public function __construct(KeyValueFactoryInterface $key_value_factory) {
-    $this->keyValueStore = $key_value_factory->get('workspace.pointer');
-  }
-
-  /**
-   * @inheritDoc
-   */
-  public function get($key) {
-    return $this->keyValueStore->get($key);
-  }
-
-  /**
-   * @inheritDoc
-   */
-  public function getMultiple(array $keys = []) {
-    if (empty($keys)) {
-      return $this->keyValueStore->getAll();
-    }
-    return $this->keyValueStore->getMultiple($keys);
-  }
-
-  /**
-   * @inheritDoc
-   */
-  public function add(Pointer $pointer) {
-    $this->keyValueStore->set($pointer->id(), $pointer);
-  }
-
-  /**
-   * @inheritDoc
-   */
-  public function addMultiple(array $pointers) {
-    foreach ($pointers as $pointer) {
-      $this->add($pointer);
-    }
-  }
-
-}
\ No newline at end of file
diff --git a/src/WorkspacePointerInterface.php b/src/WorkspacePointerInterface.php
index 9ef7716..59abc03 100644
--- a/src/WorkspacePointerInterface.php
+++ b/src/WorkspacePointerInterface.php
@@ -1,32 +1,56 @@
 <?php
 
+
 namespace Drupal\workspace;
 
-interface WorkspacePointerInterface {
+use Drupal\Core\Entity\ContentEntityInterface;
+use Drupal\Core\Entity\EntityChangedInterface;
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\user\EntityOwnerInterface;
+
+/**
+ * Provides an interface for defining Workspace pointer entities.
+ *
+ * @ingroup workspace
+ */
+interface WorkspacePointerInterface extends ContentEntityInterface, EntityChangedInterface {
+  // Add get/set methods for your configuration properties here.
 
   /**
-   * @param string $key
+   * Gets the Workspace pointer name.
    *
-   * @return array
+   * @return string
+   *   Name of the Workspace pointer.
    */
-  public function get($key);
+  public function getName();
 
   /**
-   * @param array $keys
+   * Sets the Workspace pointer name.
    *
-   * @return array
+   * @param string $name
+   *   The Workspace pointer name.
+   *
+   * @return \Drupal\workspace\WorkspacePointerInterface
+   *   The called Workspace pointer entity.
    */
-  public function getMultiple(array $keys);
+  public function setName($name);
 
   /**
-   * @param \Drupal\workspace\Pointer $pointer
-   * @return mixed
+   * Gets the Workspace pointer creation timestamp.
+   *
+   * @return int
+   *   Creation timestamp of the Workspace pointer.
    */
-  public function add(Pointer $pointer);
+  public function getCreatedTime();
 
   /**
-   * @param array $pointers
+   * Sets the Workspace pointer creation timestamp.
+   *
+   * @param int $timestamp
+   *   The Workspace pointer creation timestamp.
+   *
+   * @return \Drupal\workspace\WorkspacePointerInterface
+   *   The called Workspace pointer entity.
    */
-  public function addMultiple(array $pointers);
-
-}
\ No newline at end of file
+  public function setCreatedTime($timestamp);
+}
diff --git a/workspace.info.yml b/workspace.info.yml
index ed7468c..b50e2e4 100644
--- a/workspace.info.yml
+++ b/workspace.info.yml
@@ -5,4 +5,5 @@ core: 8.x
 dependencies:
   - options
   - datetime
-  - multiversion
\ No newline at end of file
+  - multiversion
+  - dynamic_entity_reference
diff --git a/workspace.links.action.yml b/workspace.links.action.yml
index b2c6971..4bd599b 100644
--- a/workspace.links.action.yml
+++ b/workspace.links.action.yml
@@ -7,4 +7,4 @@ entity.workspace_type.add_form:
   route_name: 'entity.workspace_type.add_form'
   title: 'Add Workspace type'
   appears_on:
-    - entity.workspace_type.collection
\ No newline at end of file
+    - entity.workspace_type.collection
diff --git a/workspace.links.task.yml b/workspace.links.task.yml
index e7a8e84..e6f8cc2 100644
--- a/workspace.links.task.yml
+++ b/workspace.links.task.yml
@@ -16,4 +16,4 @@ entity.workspace_type.edit_form:
   route_name: entity.workspace_type.edit_form
   base_route: entity.workspace_type.edit_form
 workspace.revisions:
-  deriver: '\Drupal\workspace\Plugin\Derivative\RevisionsLocalTask'
\ No newline at end of file
+  deriver: '\Drupal\workspace\Plugin\Derivative\RevisionsLocalTask'
diff --git a/workspace.routing.yml b/workspace.routing.yml
index 1f27918..b3b197d 100644
--- a/workspace.routing.yml
+++ b/workspace.routing.yml
@@ -56,4 +56,4 @@ entity.workspace_type.add_form:
   requirements:
     _permission: 'administer site configuration'
   options:
-    _admin_route: TRUE
\ No newline at end of file
+    _admin_route: TRUE
