diff --git a/content_entity_example/content_entity_example.info.yml b/content_entity_example/content_entity_example.info.yml
new file mode 100755
index 0000000..05b69d1
--- /dev/null
+++ b/content_entity_example/content_entity_example.info.yml
@@ -0,0 +1,5 @@
+name: Content Entity Example
+type: module
+description: 'Provides ContentEntityExample entity.'
+package: Example modules
+core: 8.x
diff --git a/content_entity_example/content_entity_example.install b/content_entity_example/content_entity_example.install
new file mode 100755
index 0000000..c32cbf2
--- /dev/null
+++ b/content_entity_example/content_entity_example.install
@@ -0,0 +1,65 @@
+<?php
+/**
+ * @file
+ * Install routines for content_entity_example module.
+ */
+
+/**
+ * Implements hook_schema().
+ */
+function content_entity_example_schema() {
+  $schema['content_entity_example'] = array(
+    'description' => 'Stores ContentEntityExample items.',
+    'fields' => array(
+      'id' => array(
+        'type' => 'serial',
+        'not null' => TRUE,
+        'description' => 'Primary Key: Unique ContentEntityExample item ID.',
+      ),
+      'uuid' => array(
+        'description' => 'Unique Key: Universally unique identifier for this entity.',
+        'type' => 'varchar',
+        'length' => 128,
+        'not null' => FALSE,
+      ),
+      'name' => array(
+        'description' => 'The name of the ContentEntityExample entity.',
+        'type' => 'varchar',
+        'length' => 32,
+        'not null' => TRUE,
+        'default' => '',
+      ),
+      'user_id' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => FALSE,
+        'default' => NULL,
+        'description' => 'The {users}.uid of the associated user.',
+      ),
+      'langcode' => array(
+        'description' => 'The {language}.langcode of the original variant of this ContentEntityExample entity.',
+        'type' => 'varchar',
+        'length' => 12,
+        'not null' => TRUE,
+        'default' => '',
+        ),
+      'created' => array(
+        'description' => 'The Unix timestamp when the entity was created.',
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
+      'changed' => array(
+        'description' => 'The Unix timestamp when the entity was most recently saved.',
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
+    ),
+    'primary key' => array('id'),
+    'unique keys' => array(
+      'uuid' => array('uuid'),
+    ),
+  );
+  return $schema;
+}
diff --git a/content_entity_example/content_entity_example.local_actions.yml b/content_entity_example/content_entity_example.local_actions.yml
new file mode 100755
index 0000000..f181615
--- /dev/null
+++ b/content_entity_example/content_entity_example.local_actions.yml
@@ -0,0 +1,6 @@
+content_entity_example.add:
+  route_name: content_entity_example.add
+  title: 'Add Content Entity Example Content'
+  appears_on:
+    - content_entity_example.list
+    - content_entity_example.view
diff --git a/content_entity_example/content_entity_example.local_tasks.yml b/content_entity_example/content_entity_example.local_tasks.yml
new file mode 100755
index 0000000..43138da
--- /dev/null
+++ b/content_entity_example/content_entity_example.local_tasks.yml
@@ -0,0 +1,17 @@
+content_entity_example.settings_tab:
+  route_name: content_entity_example.settings
+  title: 'Settings'
+  base_route: content_entity_example.settings
+content_entity_example.view:
+  route_name: content_entity_example.view
+  base_route: content_entity_example.view
+  title: 'View'
+content_entity_example.page_edit:
+  route_name: content_entity_example.edit
+  base_route: content_entity_example.view
+  title: Edit
+content_entity_example.delete_confirm:
+  route_name: content_entity_example.delete
+  base_route: content_entity_example.view
+  title: Delete
+  weight: 10
diff --git a/content_entity_example/content_entity_example.menu_links.yml b/content_entity_example/content_entity_example.menu_links.yml
new file mode 100755
index 0000000..8cb7d6e
--- /dev/null
+++ b/content_entity_example/content_entity_example.menu_links.yml
@@ -0,0 +1,10 @@
+content_entity_example.list:
+  title: Content Entity Example Listing
+  route_name: content_entity_example.list
+  description: 'List ContentEntityExample content'
+  weight: 10
+content_entity_example.admin.structure.settings:
+  title: Content Entity Example Settings
+  description: 'Configure content_entity_example entity'
+  route_name: content_entity_example.settings
+  parent: system.admin_structure
diff --git a/content_entity_example/content_entity_example.module b/content_entity_example/content_entity_example.module
new file mode 100755
index 0000000..f3e4812
--- /dev/null
+++ b/content_entity_example/content_entity_example.module
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\content_entity_example\content_entity_example.module
+ */
+
+/**
+ * @defgroup content_entity_example Example: Content Entity
+ * @ingroup examples
+ * @{
+ * Example of how to define a content entity.
+ * }
+ */
+
+/**
+ * Implements hook_permission().
+ */
+function content_entity_example_permission() {
+  return array(
+    'delete content_entity_example entity' => array(
+      'title' => t('Delete entity content.'),
+    ),
+    'add content_entity_example entity' => array(
+      'title' => t('Add entity content'),
+    ),
+    'view content_entity_example entity' => array(
+      'title' => t('View entity content'),
+    ),
+    'edit content_entity_example entity' => array(
+      'title' => t('Edit entity content'),
+    ),
+    'admininister content_entity_example entity' => array(
+      'title' => t('Administer settings'),
+    ),
+  );
+}
diff --git a/content_entity_example/content_entity_example.routing.yml b/content_entity_example/content_entity_example.routing.yml
new file mode 100755
index 0000000..b7970f5
--- /dev/null
+++ b/content_entity_example/content_entity_example.routing.yml
@@ -0,0 +1,42 @@
+content_entity_example.view:
+  path: '/content-entity-example/{content_entity_example}'
+  defaults:
+    _entity_view: 'content_entity_example'
+    _title: 'Content Entity Example Content'
+  requirements:
+    _permission: 'view content_entity_example entity'
+content_entity_example.list:
+  path: '/content-entity-example/list'
+  defaults:
+    _entity_list: 'content_entity_example'
+    _title: 'ContentEntityExample Content List'
+  requirements:
+    _permission: 'view content_entity_example entity'
+content_entity_example.add:
+  path: '/content-entity-example/add'
+  defaults:
+    _entity_form: content_entity_example.add
+    _title: 'Add ContentEntityExample Content'
+  requirements:
+    _permission: 'add content_entity_example entity'
+content_entity_example.edit:
+  path: '/content-entity-example/{content_entity_example}/edit'
+  defaults:
+    _entity_form: content_entity_example.edit
+    _title: 'Edit ContentEntityExample content'
+  requirements:
+    _permission: 'edit content_entity_example entity'
+content_entity_example.delete:
+  path: '/content-entity-example/{content_entity_example}/delete'
+  defaults:
+    _entity_form: content_entity_example.delete
+    _title: 'Delete ContentEntityExample Content '
+  requirements:
+    _permission: 'delete content_entity_example entity'
+content_entity_example.settings:
+  path: 'admin/structure/content_entity_example_settings'
+  defaults:
+   _form: '\Drupal\content_entity_example\Form\ContentEntityExampleSettingsForm'
+   _title: 'ContentEntityExample Settings'
+  requirements:
+    _permission: 'administer content_entity_example entity'
diff --git a/content_entity_example/src/ContentEntityExampleInterface.php b/content_entity_example/src/ContentEntityExampleInterface.php
new file mode 100755
index 0000000..4ce6bc7
--- /dev/null
+++ b/content_entity_example/src/ContentEntityExampleInterface.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\content_entity_example\ContentEntityExampleInterface.
+ */
+
+namespace Drupal\content_entity_example;
+use Drupal\Core\Entity\ContentEntityInterface;
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\user\EntityOwnerInterface;
+/**
+ * Provides an interface defining a ContentEntityExample entity.
+ * @ingroup content_entity_example
+ */
+interface ContentEntityExampleInterface extends ContentEntityInterface, EntityOwnerInterface {
+
+}
diff --git a/content_entity_example/src/Entity/ContentEntityExample.php b/content_entity_example/src/Entity/ContentEntityExample.php
new file mode 100755
index 0000000..1b3987a
--- /dev/null
+++ b/content_entity_example/src/Entity/ContentEntityExample.php
@@ -0,0 +1,174 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\content_entity_example\Entity\ContentEntityExample.
+ */
+
+namespace Drupal\content_entity_example\Entity;
+use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Field\FieldDefinition;
+use Drupal\Core\Entity\ContentEntityBase;
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\content_entity_example\ContentEntityExampleInterface;
+use Drupal\user\UserInterface;
+/**
+ * Defines the ContentEntityExample entity.
+ *
+ * @ingroup content_entity_example
+ *
+ * @ContentEntityType(
+ *   id = "content_entity_example",
+ *   label = @Translation("ContentEntityExample entity"),
+ *   controllers = {
+ *     "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
+ *     "list_builder" = "Drupal\content_entity_example\Entity\Controller\ContentEntityExampleListController",
+ *
+ *     "form" = {
+ *       "add" = "Drupal\content_entity_example\Entity\Form\ContentEntityExampleForm",
+ *       "edit" = "Drupal\content_entity_example\Entity\Form\ContentEntityExampleForm",
+ *       "delete" = "Drupal\content_entity_example\Entity\Form\ContentEntityExampleDeleteForm",
+ *     },
+ *   },
+ *   base_table = "content_entity_example",
+ *   admin_permission = "admin content_entity_example entity",
+ *   fieldable = TRUE,
+ *   entity_keys = {
+ *     "id" = "id",
+ *     "label" = "name",
+ *     "uuid" = "uuid"
+ *   },
+ *   links = {
+ *     "edit-form" = "content_entity_example.edit",
+ *     "admin-form" = "content_entity_example.settings",
+ *     "delete-form" = "content_entity_example.delete"
+ *   }
+ * )
+ */
+class ContentEntityExample extends ContentEntityBase implements ContentEntityExampleInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function preCreate(EntityStorageInterface $storage_controller, array &$values) {
+    parent::preCreate($storage_controller, $values);
+    $values += array(
+      'user_id' => \Drupal::currentUser()->id(),
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCreatedTime() {
+    return $this->get('created')->value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getChangedTime() {
+    return $this->get('changed')->value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getOwner() {
+    return $this->get('user_id')->entity;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getOwnerId() {
+    return $this->get('user_id')->target_id;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setOwnerId($uid) {
+    $this->set('user_id', $uid);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setOwner(UserInterface $account) {
+    $this->set('user_id', $account->id());
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
+    $fields['id'] = FieldDefinition::create('integer')
+      ->setLabel(t('ID'))
+      ->setDescription(t('The ID of the ContentEntityExample entity.'))
+      ->setReadOnly(TRUE);
+
+    $fields['uuid'] = FieldDefinition::create('uuid')
+      ->setLabel(t('UUID'))
+      ->setDescription(t('The UUID of the ContentEntityExample entity.'))
+      ->setReadOnly(TRUE);
+
+    $fields['name'] = FieldDefinition::create('string')
+      ->setLabel(t('Name'))
+      ->setDescription(t('The name of the ContentEntityExample entity.'))
+      ->setSettings(array(
+        'default_value' => '',
+        'max_length' => 255,
+        'text_processing' => 0,
+      ))
+      ->setDisplayOptions('view', array(
+        'label' => 'above',
+        'type' => 'string',
+        'weight' => -6,
+      ))
+      ->setDisplayOptions('form', array(
+        'type' => 'string',
+        'weight' => -6,
+      ))
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['user_id'] = FieldDefinition::create('entity_reference')
+      ->setLabel(t('User ID'))
+      ->setDescription(t('The ID of the associated user.'))
+      ->setSetting('target_type', 'user')
+      ->setSetting('handler', 'default')
+      ->setDisplayOptions('view', array(
+        'label' => 'above',
+        'type' => 'entity_reference',
+        'weight' => -6,
+      ))
+      ->setDisplayOptions('form', array(
+        'type' => 'entity_reference_autocomplete',
+        'settings' => array(
+          'match_operator' => 'CONTAINS',
+          'size' => 60,
+          'autocomplete_type' => 'tags',
+          'placeholder' => '',
+        ),
+        'weight' => -6,
+      ))
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+
+    $fields['langcode'] = FieldDefinition::create('language')
+      ->setLabel(t('Language code'))
+      ->setDescription(t('The language code of ContentEntityExample entity.'));
+    $fields['created'] = FieldDefinition::create('created')
+      ->setLabel(t('Created'))
+      ->setDescription(t('The time that the entity was created.'));
+
+    $fields['changed'] = FieldDefinition::create('changed')
+      ->setLabel(t('Changed'))
+      ->setDescription(t('The time that the entity was last edited.'));
+
+    return $fields;
+  }
+}
diff --git a/content_entity_example/src/Entity/Controller/ContentEntityExampleListController.php b/content_entity_example/src/Entity/Controller/ContentEntityExampleListController.php
new file mode 100755
index 0000000..18be0da
--- /dev/null
+++ b/content_entity_example/src/Entity/Controller/ContentEntityExampleListController.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\content_entity_example\Entity\Controller\ContentEntityExampleController.
+ */
+
+namespace Drupal\content_entity_example\Entity\Controller;
+
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Entity\EntityListBuilder;
+
+/**
+ * Provides a list controller for content_entity_example entity.
+ *
+ * @ingroup content_entity_example
+ */
+class ContentEntityExampleListController extends EntityListBuilder {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildHeader() {
+    $header['id'] = t('ContentEntityExampleID');
+    $header['label'] = t('Label');
+    return $header + parent::buildHeader();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildRow(EntityInterface $entity) {
+    /* @var $entity \Drupal\content_entity_example\Entity\ContentEntityExample */
+    $row['id'] = $entity->id();
+    $row['label'] = \Drupal::l($this->getLabel($entity),
+      'content_entity_example.view', array(
+        'content_entity_example' => $entity->id(),
+      ));
+    return $row + parent::buildRow($entity);
+  }
+}
diff --git a/content_entity_example/src/Entity/Form/ContentEntityExampleDeleteForm.php b/content_entity_example/src/Entity/Form/ContentEntityExampleDeleteForm.php
new file mode 100755
index 0000000..1e52626
--- /dev/null
+++ b/content_entity_example/src/Entity/Form/ContentEntityExampleDeleteForm.php
@@ -0,0 +1,53 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\content_entity_example\Entity\Form\ContentEntityExampleDeleteForm
+ */
+
+namespace Drupal\content_entity_example\Entity\Form;
+
+use Drupal\Core\Entity\ContentEntityConfirmFormBase;
+
+/**
+ * Provides a form for deleting a content_entity_example entity.
+ *
+ * @ingroup content_entity_example
+ */
+class ContentEntityExampleDeleteForm extends ContentEntityConfirmFormBase {
+
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getQuestion() {
+    return t('Are you sure you want to delete entity %name?', array('%name' => $this->entity->label()));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCancelRoute() {
+    return array(
+      'route_name' => 'content_entity_example.list',
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmText() {
+    return t('Delete');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submit(array $form, array &$form_state) {
+    $this->entity->delete();
+
+    watchdog('content', '@type: deleted %title.', array('@type' => $this->entity->bundle(), '%title' => $this->entity->label()));
+    $form_state['redirect_route']['route_name'] = 'content_entity_example.list';
+  }
+
+}
diff --git a/content_entity_example/src/Entity/Form/ContentEntityExampleForm.php b/content_entity_example/src/Entity/Form/ContentEntityExampleForm.php
new file mode 100755
index 0000000..d91d49a
--- /dev/null
+++ b/content_entity_example/src/Entity/Form/ContentEntityExampleForm.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * @file
+ * Definition of Drupal\content_entity_example\Entity\Form\ContentEntityExampleFormController.
+ */
+
+namespace Drupal\content_entity_example\Entity\Form;
+
+use Drupal\Core\Entity\ContentEntityForm;
+use Drupal\Core\Language\Language;
+
+/**
+ * Form controller for the content_entity_example entity edit forms.
+ *
+ * @ingroup content_entity_example
+ */
+class ContentEntityExampleForm extends ContentEntityForm {
+
+  /**
+   * Overrides Drupal\Core\Entity\EntityFormController::buildForm().
+   */
+  public function buildForm(array $form, array &$form_state) {
+    /* @var $entity \Drupal\content_entity_example\Entity\ContentEntityExample */
+    $form = parent::buildForm($form, $form_state);
+    $entity = $this->entity;
+
+    /* $form['user_id'] = array(
+      '#type' => 'textfield',
+      '#title' => 'UID',
+      '#default_value' => $entity->user_id->target_id,
+      '#size' => 60,
+      '#maxlength' => 128,
+      '#required' => TRUE,
+      '#weight' => -10,
+    );*/
+
+    $form['langcode'] = array(
+      '#title' => t('Language'),
+      '#type' => 'language_select',
+      '#default_value' => $entity->getUntranslated()->language()->id,
+      '#languages' => Language::STATE_ALL,
+    );
+
+    return $form;
+  }
+
+  /**
+   * Overrides \Drupal\Core\Entity\EntityFormController::submit().
+   */
+  public function submit(array $form, array &$form_state) {
+    // Build the entity object from the submitted values.
+    $entity = parent::submit($form, $form_state);
+    $form_state['redirect_route']['route_name'] = 'content_entity_example.list';
+
+    return $entity;
+  }
+
+  /**
+   * Overrides Drupal\Core\Entity\EntityFormController::save().
+   */
+  public function save(array $form, array &$form_state) {
+    $entity = $this->entity;
+    $entity->save();
+  }
+}
diff --git a/content_entity_example/src/Form/ContentEntityExampleSettingsForm.php b/content_entity_example/src/Form/ContentEntityExampleSettingsForm.php
new file mode 100755
index 0000000..51b4e2e
--- /dev/null
+++ b/content_entity_example/src/Form/ContentEntityExampleSettingsForm.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * @file
+ * Defines Drupal\content_entity_example\Form\ContentEntityExampleSettingsForm.
+ */
+
+namespace Drupal\content_entity_example\Form;
+
+use Drupal\Core\Form\FormBase;
+
+/**
+ * Class ContentEntityExampleSettingsForm.
+ * @package Drupal\content_entity_example\Form
+ * @ingroup content_entity_example
+ */
+class ContentEntityExampleSettingsForm extends FormBase {
+  /**
+   * Returns a unique string identifying the form.
+   *
+   * @return string
+   *   The unique string identifying the form.
+   */
+  public function getFormId() {
+    return 'content_entity_example_settings';
+  }
+
+  /**
+   * Form submission handler.
+   *
+   * @param array $form
+   *   An associative array containing the structure of the form.
+   * @param array $form_state
+   *   An associative array containing the current state of the form.
+   */
+  public function submitForm(array &$form, array &$form_state) {
+    // Empty implementation of the abstract submit class.
+  }
+
+
+  /**
+   * Define the form used for ContentEntityExample settings.
+   * @return array
+   *   Form definition array.
+   *
+   * @param array $form
+   *   An associative array containing the structure of the form.
+   * @param array $form_state
+   *   An associative array containing the current state of the form.
+   */
+  public function buildForm(array $form, array &$form_state) {
+    $form['content_entity_example_settings']['#markup'] = 'Settings form for ContentEntityExample. Manage field settings here.';
+    return $form;
+  }
+}
diff --git a/content_entity_example/src/Tests/ContentEntityExampleTest.php b/content_entity_example/src/Tests/ContentEntityExampleTest.php
new file mode 100755
index 0000000..1e45866
--- /dev/null
+++ b/content_entity_example/src/Tests/ContentEntityExampleTest.php
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * @file
+ * Test cases for Content Entity Example Module.
+ */
+
+namespace Drupal\content_entity_example\Tests;
+
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Class ContentEntityExampleTest.
+ * @package Drupal\content_entity_example\Tests
+ *
+ * @ingroup content_entity_example
+ */
+class ContentEntityExampleTest extends WebTestBase {
+
+  public static $modules = array('content_entity_example', 'block');
+
+  protected $web_user;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Content Entity Example tests',
+      'description' => 'Tests the basic functions of the Content Entity Example module.',
+      'group' => 'Content Entity Example',
+    );
+  }
+
+  public function setUp() {
+    parent::setUp();
+
+    $this->web_user = $this->drupalCreateUser(array('view content_entity_example entity'));
+    $this->drupalPlaceBlock('system_menu_block:tools', array());
+  }
+
+  /**
+   * Basic tests for Content Entity Example.
+   */
+  public function testContentEntityExample() {
+
+     $this->assertNoText('Content Entity Example Listing');
+
+    $this->drupalLogin($this->web_user);
+
+    $this->assertLink('Content Entity Example Listing');
+
+  }
+}
