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..d9a98fe
--- /dev/null
+++ b/content_entity_example/content_entity_example.info.yml
@@ -0,0 +1,5 @@
+name: Content Entity Example
+type: module
+description: 'Provides ContentEntityExampleContact entity.'
+package: Example modules
+core: 8.x
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..f843b9c
--- /dev/null
+++ b/content_entity_example/content_entity_example.local_actions.yml
@@ -0,0 +1,6 @@
+content_entity_example.contact_add:
+  route_name: content_entity_example.contact_add
+  title: 'Add Contact'
+  appears_on:
+    - content_entity_example.contact_list
+    - content_entity_example.contact_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..d18022e
--- /dev/null
+++ b/content_entity_example/content_entity_example.local_tasks.yml
@@ -0,0 +1,20 @@
+contact.settings_tab:
+  route_name: content_entity_example.contact_settings
+  title: 'Settings'
+  base_route: content_entity_example.contact_settings
+
+content_entity_example.contact_view:
+  route_name: content_entity_example.contact_view
+  base_route: content_entity_example.contact_view
+  title: 'View'
+
+contact.page_edit:
+  route_name: content_entity_example.contact_edit
+  base_route: content_entity_example.contact_view
+  title: Edit
+
+contact.delete_confirm:
+  route_name:  content_entity_example.contact_delete
+  base_route:  content_entity_example.contact_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..d732d65
--- /dev/null
+++ b/content_entity_example/content_entity_example.menu_links.yml
@@ -0,0 +1,10 @@
+content_entity_example.contact_list:
+  title: 'Content Entity Example: Contacts Listing'
+  route_name: content_entity_example.contact_list
+  description: 'List Contacts'
+  weight: 10
+content_entity_example_contact.admin.structure.settings:
+  title: Contact Settings
+  description: 'Configure Contact entity'
+  route_name:  content_entity_example.contact_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..f4b97e5
--- /dev/null
+++ b/content_entity_example/content_entity_example.module
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\content_entity_example\content_entity_example.module
+ */
+
+use Symfony\Component\HttpFoundation\Request;
+
+/**
+ * @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 contact entity' => array(
+      'title' => t('Delete entity content.'),
+    ),
+    'add contact entity' => array(
+      'title' => t('Add entity content'),
+    ),
+    'view contact entity' => array(
+      'title' => t('View entity content'),
+    ),
+    'edit contact entity' => array(
+      'title' => t('Edit entity content'),
+    ),
+    'administer contact entity' => array(
+      'title' => t('Administer settings'),
+    ),
+  );
+}
+
+/**
+ * Implements hook_help().
+ */
+function content_entity_example_help($route_name, Request $request) {
+  switch ($route_name) {
+    // Main module help for the block module.
+    case 'content_entity_example.contact_list':
+      return '<p>' .
+        t('Content Entity Example implements a Contacts model. These contacts are fieldable entities. You can manage the fields on the <a href="@adminlink">Contacts admin page</a>.', array(
+          '@adminlink' => \Drupal::urlGenerator()->generateFromRoute('content_entity_example.contact_settings'),
+          )
+        ) . '</p>';
+  }
+}
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..43c5273
--- /dev/null
+++ b/content_entity_example/content_entity_example.routing.yml
@@ -0,0 +1,47 @@
+content_entity_example.contact_view:
+  path: '/content_entity_example_contact/{content_entity_example_contact}'
+  defaults:
+    _entity_view: 'content_entity_example_contact'
+    _title: 'Contact Content'
+  requirements:
+    _entity_access: 'content_entity_example_contact.view'
+
+content_entity_example.contact_list:
+  path: '/content_entity_example_contact/list'
+  defaults:
+    _entity_list: 'content_entity_example_contact'
+    _title: 'Contact List'
+  requirements:
+    _permission: 'view contact entity'
+
+content_entity_example.contact_add:
+  path: '/content_entity_example_contact/add'
+  defaults:
+    _entity_form: content_entity_example_contact.add
+    _title: 'Add Contact'
+  requirements:
+    _entity_create_access: 'content_entity_example_contact'
+
+content_entity_example.contact_edit:
+  path: '/content_entity_example_contact/{content_entity_example_contact}/edit'
+  defaults:
+    _entity_form: content_entity_example_contact.edit
+    _title: 'Edit Contact'
+  requirements:
+    _entity_access: 'content_entity_example_contact.edit'
+
+content_entity_example.contact_delete:
+  path: '/contact/{content_entity_example_contact}/delete'
+  defaults:
+    _entity_form: content_entity_example_contact.delete
+    _title: 'Delete Contact'
+  requirements:
+    _entity_access: 'content_entity_example_contact.delete'
+
+content_entity_example.contact_settings:
+  path: 'admin/structure/content_entity_example_contact_settings'
+  defaults:
+   _form: '\Drupal\content_entity_example\Form\ContactSettingsForm'
+   _title: 'Contact Settings'
+  requirements:
+    _permission: 'administer contact entity'
diff --git a/content_entity_example/src/ContactAccessController.php b/content_entity_example/src/ContactAccessController.php
new file mode 100755
index 0000000..bde73ed
--- /dev/null
+++ b/content_entity_example/src/ContactAccessController.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\content_entity_example/ContactAccessController
+ */
+
+namespace Drupal\content_entity_example;
+
+use Drupal\Core\Entity\EntityAccessController;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Session\AccountInterface;
+
+/**
+ * Access controller for the comment entity.
+ *
+ * @see \Drupal\comment\Entity\Comment.
+ */
+class ContactAccessController extends EntityAccessController {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) {
+
+    switch ($operation) {
+      case 'view':
+        return $account->hasPermission('view contact entity');
+        break;
+
+      case 'edit':
+        return $account->hasPermission('edit contact entity');
+        break;
+
+      case 'delete':
+        return $account->hasPermission('delete contact entity');
+        break;
+
+    }
+
+    return TRUE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
+    return $account->hasPermission('add contact entity');
+  }
+}
diff --git a/content_entity_example/src/ContactInterface.php b/content_entity_example/src/ContactInterface.php
new file mode 100755
index 0000000..499d555
--- /dev/null
+++ b/content_entity_example/src/ContactInterface.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\content_entity_example\ContactInterface.
+ */
+
+namespace Drupal\content_entity_example;
+
+use Drupal\Core\Entity\ContentEntityInterface;
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\user\EntityOwnerInterface;
+/**
+ * Provides an interface defining a Contact entity.
+ * @ingroup content_entity_example
+ */
+interface ContactInterface extends ContentEntityInterface, EntityOwnerInterface {
+
+}
diff --git a/content_entity_example/src/Entity/Contact.php b/content_entity_example/src/Entity/Contact.php
new file mode 100755
index 0000000..824dc21
--- /dev/null
+++ b/content_entity_example/src/Entity/Contact.php
@@ -0,0 +1,215 @@
+<?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\ContactInterface;
+use Drupal\user\UserInterface;
+/**
+ * Defines the ContentEntityExample entity.
+ *
+ * @ingroup content_entity_example
+ *
+ * @ContentEntityType(
+ *   id = "content_entity_example_contact",
+ *   label = @Translation("ContentEntityExample entity"),
+ *   controllers = {
+ *     "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
+ *     "list_builder" = "Drupal\content_entity_example\Entity\Controller\ContactListController",
+ *
+ *     "form" = {
+ *       "add" = "Drupal\content_entity_example\Form\ContactForm",
+ *       "edit" = "Drupal\content_entity_example\Form\ContactForm",
+ *       "delete" = "Drupal\content_entity_example\Form\ContactDeleteForm",
+ *     },
+ *     "access" = "Drupal\content_entity_example\ContactAccessController",
+ *   },
+ *   base_table = "contact",
+ *   admin_permission = "administer content_entity_example entity",
+ *   fieldable = TRUE,
+ *   entity_keys = {
+ *     "id" = "id",
+ *     "label" = "name",
+ *     "uuid" = "uuid"
+ *   },
+ *   links = {
+ *     "edit-form" = "content_entity_example.contact_edit",
+ *     "admin-form" = "content_entity_example.contact_settings",
+ *     "delete-form" = "content_entity_example.contact_delete"
+ *   }
+ * )
+ */
+class Contact extends ContentEntityBase implements ContactInterface {
+
+  /**
+   * {@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 Contact entity.'))
+      ->setReadOnly(TRUE);
+
+    $fields['uuid'] = FieldDefinition::create('uuid')
+      ->setLabel(t('UUID'))
+      ->setDescription(t('The UUID of the Contact entity.'))
+      ->setReadOnly(TRUE);
+
+    $fields['name'] = FieldDefinition::create('string')
+      ->setLabel(t('Name'))
+      ->setDescription(t('The name of the Contact 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['first_name'] = FieldDefinition::create('string')
+      ->setLabel(t('First Name'))
+      ->setDescription(t('The first name of the Contact entity.'))
+      ->setSettings(array(
+        'default_value' => '',
+        'max_length' => 255,
+        'text_processing' => 0,
+      ))
+      ->setDisplayOptions('view', array(
+        'label' => 'above',
+        'type' => 'string',
+        'weight' => -5,
+      ))
+      ->setDisplayOptions('form', array(
+        'type' => 'string',
+        'weight' => -5,
+      ))
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['gender'] = FieldDefinition::create('string')
+      ->setLabel(t('Gender'))
+      ->setDescription(t('The gender of the ContentEntityExample entity.'))
+      ->setSettings(array(
+        'default_value' => '',
+        'max_length' => 255,
+        'text_processing' => 0,
+      ))
+      ->setDisplayOptions('view', array(
+        'label' => 'above',
+        'type' => 'string',
+        'weight' => -4,
+      ))
+      ->setDisplayOptions('form', array(
+        'type' => 'options_select',
+        'weight' => -4,
+      ))
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['user_id'] = FieldDefinition::create('entity_reference')
+      ->setLabel(t('User Name'))
+      ->setDescription(t('The Name of the associated user.'))
+      ->setSetting('target_type', 'user')
+      ->setSetting('handler', 'default')
+      ->setDisplayOptions('view', array(
+        'label' => 'above',
+        'type' => 'entity_reference',
+        'weight' => -3,
+      ))
+      ->setDisplayOptions('form', array(
+        'type' => 'entity_reference_autocomplete',
+        'settings' => array(
+          'match_operator' => 'CONTAINS',
+          'size' => 60,
+          'autocomplete_type' => 'tags',
+          'placeholder' => '',
+        ),
+        'weight' => -3,
+      ))
+      ->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/ContactListController.php b/content_entity_example/src/Entity/Controller/ContactListController.php
new file mode 100755
index 0000000..85ecaf3
--- /dev/null
+++ b/content_entity_example/src/Entity/Controller/ContactListController.php
@@ -0,0 +1,45 @@
+<?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 ContactListController extends EntityListBuilder {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildHeader() {
+    $header['id'] = t('ContactID');
+    $header['name'] = t('Name');
+    $header['first_name'] = t('First Name');
+    $header['gender'] = t('Gender');
+    return $header + parent::buildHeader();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildRow(EntityInterface $entity) {
+    /* @var $entity \Drupal\content_entity_example\Entity\Contact */
+    $row['id'] = $entity->id();
+    $row['name'] = \Drupal::l($this->getLabel($entity),
+      'content_entity_example.contact_view', array(
+        'content_entity_example_contact' => $entity->id(),
+      ));
+    $row['first_name'] = $entity->first_name->value;
+    $row['gender'] = $entity->gender->value;
+    return $row + parent::buildRow($entity);
+  }
+}
diff --git a/content_entity_example/src/Form/ContactDeleteForm.php b/content_entity_example/src/Form/ContactDeleteForm.php
new file mode 100755
index 0000000..55e31e0
--- /dev/null
+++ b/content_entity_example/src/Form/ContactDeleteForm.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\content_entity_example\Entity\Form\ContactDeleteForm.
+ */
+
+namespace Drupal\content_entity_example\Form;
+
+use Drupal\Core\Entity\ContentEntityConfirmFormBase;
+use Drupal\Core\Url;
+
+/**
+ * Provides a form for deleting a content_entity_example entity.
+ *
+ * @ingroup content_entity_example
+ */
+class ContactDeleteForm 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 new Url('content_entity_example.contact_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.contact_list';
+  }
+
+}
diff --git a/content_entity_example/src/Form/ContactForm.php b/content_entity_example/src/Form/ContactForm.php
new file mode 100755
index 0000000..2a77cb4
--- /dev/null
+++ b/content_entity_example/src/Form/ContactForm.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * @file
+ * Definition of Drupal\content_entity_example\Entity\Form\ContentEntityExampleFormController.
+ */
+
+namespace Drupal\content_entity_example\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 ContactForm extends ContentEntityForm {
+
+  /**
+   * Overrides Drupal\Core\Entity\EntityFormController::buildForm().
+   */
+  public function buildForm(array $form, array &$form_state) {
+    /* @var $entity \Drupal\content_entity_example\Entity\Contact */
+    $form = parent::buildForm($form, $form_state);
+    $entity = $this->entity;
+
+    $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.contact_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/ContactSettingsForm.php b/content_entity_example/src/Form/ContactSettingsForm.php
new file mode 100755
index 0000000..a8d02fc
--- /dev/null
+++ b/content_entity_example/src/Form/ContactSettingsForm.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 ContactSettingsForm 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['contact_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..e2ca4b5
--- /dev/null
+++ b/content_entity_example/src/Tests/ContentEntityExampleTest.php
@@ -0,0 +1,115 @@
+<?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',
+    'entity_reference');
+
+  protected $webUser;
+
+  /**
+   * {@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',
+    );
+  }
+
+  /**
+   * Set up instance for starting the test.
+   */
+  public function setUp() {
+    parent::setUp();
+
+    $this->webUser = $this->drupalCreateUser(array(
+     'add contact entity',
+     'edit contact entity',
+     'view contact entity',
+     'delete contact entity',
+     'administer contact entity'));
+    $this->drupalPlaceBlock('system_menu_block:tools', array());
+  }
+
+  /**
+   * Basic tests for Content Entity Example.
+   */
+  public function testContentEntityExample() {
+
+    // Anonymous User should not see the link to the listing.
+    $this->assertNoText(t('Contacts Listing'));
+
+    $this->drupalLogin($this->webUser);
+
+    // Web_user user has the right to view listing.
+    $this->assertLink(t('Contacts Listing'));
+
+    $this->clickLink(t('Contacts Listing'));
+
+    // WebUser can add entity content.
+    $this->assertLink(t('Add Contact'));
+
+    $this->clickLink(t('Add Contact'));
+
+    $this->assertFieldByName('name[0][value]', '', 'Name Field, empty');
+    $this->assertFieldByName('name[0][value]', '', 'First Name Field, empty');
+    $this->assertFieldByName('name[0][value]', '', 'Gender Field, empty');
+
+    $user_ref = $this->webUser->name->value . ' (' . $this->webUser->id() . ')';
+    $this->assertFieldByName('user_id[0][target_id]', $user_ref, 'User ID reference field points to web_user');
+
+    // Post content, save an instance. Go back to list after saving.
+    $edit = array(
+      'name[0][value]' => 'test name',
+      'first_name[0][value]' => 'test first name',
+      'gender[0][value]' => 'test gender',
+    );
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+
+    // Entity listed.
+    $this->assertLink(t('Edit'));
+    $this->assertLink(t('Delete'));
+
+    $this->clickLink('test name');
+
+    // Entity shown.
+    $this->assertText(t('test name'));
+    $this->assertText(t('test first name'));
+    $this->assertText(t('test gender'));
+    $this->assertLink(t('Add Contact'));
+    $this->assertLink(t('Edit'));
+    $this->assertLink(t('Delete'));
+
+    // Delete the entity.
+    $this->clickLink('Delete');
+
+    // Confirm deletion.
+    $this->assertLink(t('Cancel'));
+    $this->drupalPostForm(NULL, array(), 'Delete');
+
+    // Back to list, must be empty.
+    $this->assertNoText('test name');
+
+    // Settings page.
+    $this->drupalGet('admin/structure/content_entity_example_contact_settings');
+    $this->assertText(t('Contact Settings'));
+
+  }
+}
