diff --git a/fillpdf.links.menu.yml b/fillpdf.links.menu.yml
index 55d5d9ae1f6685f1305deb3ddf839acc1b49f2a2..9036f1330fb2b471a1ed6631e4f58914fe96986e 100644
--- a/fillpdf.links.menu.yml
+++ b/fillpdf.links.menu.yml
@@ -8,4 +8,4 @@ fillpdf.forms_admin:
   title: FillPDF
   description: Manage your PDFs
   route_name: fillpdf.forms_admin
-  parent: system.admin_structure
\ No newline at end of file
+  parent: system.admin_structure
diff --git a/fillpdf.permissions.yml b/fillpdf.permissions.yml
index 2ae4ebc19da9b9be769b41045c74e704aa449095..66aaf7c01474d90312c82ffff6f9aaefc70999c7 100644
--- a/fillpdf.permissions.yml
+++ b/fillpdf.permissions.yml
@@ -8,4 +8,5 @@ publish own pdfs:
 
 publish all pdfs:
   title: 'Publish all PDFs'
-  description: 'Allows filling in and downloading PDFs with any site content.'
\ No newline at end of file
+  description: 'Allows filling in and downloading PDFs with any site content.'add fillpdf file context entities:
+  title: 'Create new FillPDF file context entities'
diff --git a/fillpdf.routing.yml b/fillpdf.routing.yml
index ec34d9ba0208e3f7279fefceed13cf497763c35a..91f6594ac2450ed6f77bac77dc3fd29bfbb421b0 100644
--- a/fillpdf.routing.yml
+++ b/fillpdf.routing.yml
@@ -1,9 +1,11 @@
+---
 fillpdf.settings:
   path: '/admin/config/media/fillpdf'
   defaults:
     _form: '\Drupal\fillpdf\Form\FillPdfSettingsForm'
     _title: 'FillPDF settings'
   requirements:
+    # TOOD: Use entity access instead
     _permission: 'administer pdfs'
   options:
     _admin_route: TRUE
@@ -14,6 +16,8 @@ fillpdf.forms_admin:
     _form: '\Drupal\fillpdf\Form\FillPdfOverviewForm'
     _title: 'FillPDF'
   requirements:
+    # TOOD: Use entity access instead
+    _permission: 'administer pdfs'
     _permission: 'administer pdfs'
   options:
     _admin_route: TRUE
@@ -54,3 +58,11 @@ entity.fillpdf_form_field.edit_form:
     _permission: 'administer pdfs' # todo: do we have an administer own pdfs perm?
   options:
     _admin_route: TRUE
+
+fillpdf_file_context.settings:
+  path: 'admin/structure/fillpdf_file_context'
+  defaults:
+   _form: '\Drupal\fillpdf\Entity\Form\FillPdfFileContextSettingsForm'
+   _title: 'FillPDF file context settings'
+  requirements:
+    _permission: 'administer fillpdf file context entities'
diff --git a/src/Entity/FillPdfFileContext.php b/src/Entity/FillPdfFileContext.php
new file mode 100644
index 0000000000000000000000000000000000000000..62443e839b5949f4557ee4d8c4176cb8f53b4aec
--- /dev/null
+++ b/src/Entity/FillPdfFileContext.php
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\fillpdf\Entity\FillPdfFileContext.
+ */
+
+namespace Drupal\fillpdf\Entity;
+
+use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\ContentEntityType;
+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\fillpdf\FillPdfFileContextInterface;
+use Drupal\user\UserInterface;
+
+/**
+ * Defines the FillPDF file context entity.
+ *
+ * @ingroup fillpdf
+ *
+ * @ContentEntityType(
+ *   id = "fillpdf_file_context",
+ *   label = @Translation("FillPDF file context"),
+ *   handlers = {
+ *     "views_data" = "Drupal\fillpdf\Entity\FillPdfFileContextViewsData",
+ *
+ *     "access" = "Drupal\fillpdf\FillPdfFileContextAccessControlHandler",
+ *   },
+ *   base_table = "fillpdf_file_context",
+ *   entity_keys = {
+ *     "id" = "id",
+ *     "label" = "name",
+ *     "uuid" = "uuid"
+ *   },
+ * )
+ */
+class FillPdfFileContext extends ContentEntityBase implements FillPdfFileContextInterface {
+  /**
+   * {@inheritdoc}
+   */
+  public static function preCreate(EntityStorageInterface $storage_controller, array &$values) {
+    parent::preCreate($storage_controller, $values);
+    $values += array(
+      'user_id' => \Drupal::currentUser()->id(),
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
+    $fields['id'] = BaseFieldDefinition::create('integer')
+      ->setLabel(t('ID'))
+      ->setDescription(t('The ID of the FillPDF file context entity.'))
+      ->setReadOnly(TRUE);
+
+    $fields['uuid'] = BaseFieldDefinition::create('uuid')
+      ->setLabel(t('UUID'))
+      ->setDescription(t('The UUID of the FillPDF file context entity.'))
+      ->setReadOnly(TRUE);
+
+    $fields['context'] = BaseFieldDefinition::create('string_long')
+      ->setLabel(t('Generation context'))
+      ->setDescription(t('The normalized FillPDF Link (URL) that was used to generate the PDF.'))
+      ->setRequired(TRUE);
+
+    return $fields;
+  }
+
+}
diff --git a/src/Entity/FillPdfFileContextViewsData.php b/src/Entity/FillPdfFileContextViewsData.php
new file mode 100644
index 0000000000000000000000000000000000000000..890f04f95210ca0cda1d799ab313b137208bbda8
--- /dev/null
+++ b/src/Entity/FillPdfFileContextViewsData.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\fillpdf\Entity\FillPdfFileContext.
+ */
+
+namespace Drupal\fillpdf\Entity;
+
+use Drupal\views\EntityViewsData;
+use Drupal\views\EntityViewsDataInterface;
+
+/**
+ * Provides Views data for FillPDF file context entities.
+ */
+class FillPdfFileContextViewsData extends EntityViewsData implements EntityViewsDataInterface {
+  /**
+   * {@inheritdoc}
+   */
+  public function getViewsData() {
+    $data = parent::getViewsData();
+
+    $data['fillpdf_file_context']['table']['base'] = array(
+      'field' => 'id',
+      'title' => $this->t('FillPDF file context'),
+      'help' => $this->t('The FillPDF file context ID.'),
+    );
+
+    return $data;
+  }
+
+}
diff --git a/src/FillPdfFileContextAccessControlHandler.php b/src/FillPdfFileContextAccessControlHandler.php
new file mode 100644
index 0000000000000000000000000000000000000000..d550c8848056636780254025a9a26b6c9d4f1a59
--- /dev/null
+++ b/src/FillPdfFileContextAccessControlHandler.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\fillpdf\FillPdfFileContextAccessControlHandler.
+ */
+
+namespace Drupal\fillpdf;
+
+use Drupal\Core\Entity\EntityAccessControlHandler;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\Core\Access\AccessResult;
+
+/**
+ * Access controller for the FillPDF file context entity.
+ *
+ * @see \Drupal\fillpdf\Entity\FillPdfFileContext.
+ */
+class FillPdfFileContextAccessControlHandler extends EntityAccessControlHandler {
+  /**
+   * {@inheritdoc}
+   */
+  protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
+
+    switch ($operation) {
+      case 'view':
+
+        // TODO: allow access if user has permission to entities user used to fill in PDF
+//        return AccessResult::allowedIfHasPermission($account, 'view fillpdf file context entities');
+
+      case 'update':
+        return AccessResult::allowedIfHasPermission($account, 'edit fillpdf file context entities');
+
+      case 'delete':
+        return AccessResult::allowedIfHasPermission($account, 'delete fillpdf file context entities');
+    }
+
+    return AccessResult::allowed();
+  }
+
+}
diff --git a/src/FillPdfFileContextInterface.php b/src/FillPdfFileContextInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..3de5d34c11a5af381e79612b725a2f03d76148df
--- /dev/null
+++ b/src/FillPdfFileContextInterface.php
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\fillpdf\FillPdfFileContextInterface.
+ */
+
+namespace Drupal\fillpdf;
+
+use Drupal\Core\Entity\ContentEntityInterface;
+use Drupal\Core\Entity\EntityChangedInterface;
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\user\EntityOwnerInterface;
+
+/**
+ * Provides an interface for defining FillPDF file context entities.
+ *
+ * @ingroup fillpdf
+ */
+interface FillPdfFileContextInterface extends ContentEntityInterface {
+
+}