diff --git a/entity_reference_revisions.info.yml b/entity_reference_revisions.info.yml
index ac32e2c..d39378d 100644
--- a/entity_reference_revisions.info.yml
+++ b/entity_reference_revisions.info.yml
@@ -3,4 +3,3 @@ type: module
 description: Adds a Entity Reference field type with revision support.
 core: 8.x
 package: Field types
-
diff --git a/src/EntityReferenceRevisionsServiceProvider.php b/src/EntityReferenceRevisionsServiceProvider.php
new file mode 100644
index 0000000..b5d3310
--- /dev/null
+++ b/src/EntityReferenceRevisionsServiceProvider.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Drupal\entity_reference_revisions;
+
+use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\Core\DependencyInjection\ServiceProviderBase;
+use Symfony\Component\DependencyInjection\Definition;
+use Symfony\Component\DependencyInjection\Reference;
+
+/**
+ * Service Provider for Entity Reference Revisions.
+ */
+class EntityReferenceRevisionsServiceProvider extends ServiceProviderBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function alter(ContainerBuilder $container) {
+    $modules = $container->getParameter('container.modules');
+    if (isset($modules['hal'])) {
+      // Hal module is enabled, add our new normalizer for entity reference
+      // revision items.
+      $service_definition = new Definition('Drupal\entity_reference_revisions\Normalizer\EntityReferenceRevisionItemNormalizer', array(
+        new Reference('rest.link_manager'),
+        new Reference('serializer.entity_resolver'),
+      ));
+      // The priority must be higher than that of
+      // serializer.normalizer.entity_reference_item.hal in
+      // hal.services.yml.
+      $service_definition->addTag('normalizer', array('priority' => 20));
+      $container->setDefinition('serializer.normalizer.entity_reference_revision_item', $service_definition);
+    }
+  }
+
+}
diff --git a/src/Normalizer/EntityReferenceRevisionItemNormalizer.php b/src/Normalizer/EntityReferenceRevisionItemNormalizer.php
new file mode 100644
index 0000000..5c63cf2
--- /dev/null
+++ b/src/Normalizer/EntityReferenceRevisionItemNormalizer.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace Drupal\entity_reference_revisions\Normalizer;
+
+use Drupal\entity_reference_revisions\Plugin\Field\FieldType\EntityReferenceRevisionsItem;
+use Drupal\hal\Normalizer\EntityReferenceItemNormalizer;
+
+/**
+ * Defines a class for normalizing EntityReferenceRevisionItems.
+ */
+class EntityReferenceRevisionItemNormalizer extends EntityReferenceItemNormalizer {
+
+  /**
+   * The interface or class that this Normalizer supports.
+   *
+   * @var string
+   */
+  protected $supportedInterfaceOrClass = EntityReferenceRevisionsItem::class;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function constructValue($data, $context) {
+    $value = parent::constructValue($data, $context);
+    if ($value) {
+      $value['target_revision_id'] = $data['target_revision_id'];
+    }
+    return $value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function normalize($field_item, $format = NULL, array $context = array()) {
+    $data = parent::normalize($field_item, $format, $context);
+    $field_name = $field_item->getParent()->getName();
+    $entity = $field_item->getEntity();
+    $field_uri = $this->linkManager->getRelationUri($entity->getEntityTypeId(), $entity->bundle(), $field_name, $context);
+    $data['_embedded'][$field_uri][0]['target_revision_id'] = $field_item->target_revision_id;
+    return $data;
+  }
+
+}
diff --git a/src/Tests/EntityReferenceRevisionsNormalizerTest.php b/src/Tests/EntityReferenceRevisionsNormalizerTest.php
new file mode 100644
index 0000000..510e73c
--- /dev/null
+++ b/src/Tests/EntityReferenceRevisionsNormalizerTest.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\entity_reference_revisions\Tests\EntityReferenceRevisionsNormalizerTest.
+ */
+
+namespace Drupal\entity_reference_revisions\Tests;
+
+use Drupal\field_ui\Tests\FieldUiTestTrait;
+use Drupal\node\Entity\Node;
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Tests the entity_reference_revisions configuration.
+ *
+ * @group entity_reference_revisions
+ */
+class EntityReferenceRevisionsNormalizerTest extends WebTestBase {
+
+  use FieldUiTestTrait;
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array(
+    'node',
+    'field',
+    'entity_reference_revisions',
+    'field_ui',
+    'block',
+    'hal',
+    'serialization',
+  );
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    // Create paragraphs and article content types.
+    $this->drupalCreateContentType(array('type' => 'entity_revisions', 'name' => 'Entity revisions'));
+    $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article'));
+    // Place the breadcrumb, tested in fieldUIAddNewField().
+    $this->drupalPlaceBlock('system_breadcrumb_block');
+  }
+
+  /**
+   * Tests the entity reference revisions configuration.
+   */
+  public function testEntityReferenceRevisions() {
+    $admin_user = $this->drupalCreateUser(array(
+      'administer site configuration',
+      'administer nodes',
+      'create article content',
+      'administer content types',
+      'administer node fields',
+      'administer node display',
+      'administer node form display',
+      'edit any article content',
+    ));
+    $this->drupalLogin($admin_user);
+    // Create entity reference revisions field.
+    static::fieldUIAddNewField('admin/structure/types/manage/entity_revisions', 'entity_reference_revisions', 'Entity reference revisions', 'entity_reference_revisions', array('settings[target_type]' => 'node', 'cardinality' => '-1'), array('settings[handler_settings][target_bundles][article]' => TRUE));
+    $this->assertText('Saved Entity reference revisions configuration.');
+
+    // Create an article.
+    $title = $this->randomMachineName();
+    $edit = array(
+      'title[0][value]' => $title,
+      'body[0][value]' => 'Revision 1',
+      'revision' => TRUE,
+    );
+    $this->drupalPostForm('node/add/article', $edit, t('Save and publish'));
+    $this->assertText($title);
+    $this->assertText('Revision 1');
+    $node = $this->drupalGetNodeByTitle($title);
+
+    // Create entity revisions content that includes the above article.
+    $err_title = 'Entity reference revision content';
+    $edit = array(
+      'title[0][value]' => $err_title,
+      'field_entity_reference_revisions[0][target_id]' => $node->label() . ' (' . $node->id() . ')',
+    );
+    $this->drupalPostForm('node/add/entity_revisions', $edit, t('Save and publish'));
+    $this->assertText('Entity revisions Entity reference revision content has been created.');
+    $err_node = $this->drupalGetNodeByTitle($err_title);
+
+    $this->assertText($err_title);
+    $this->assertText($title);
+    $this->assertText('Revision 1');
+
+    // Create 2nd revision of the article.
+    $edit = array(
+      'body[0][value]' => 'Revision 2',
+      'revision' => TRUE,
+    );
+    $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save and keep published'));
+    $serializer = $this->container->get('serializer');
+    $normalized = $serializer->normalize($err_node, 'hal_json');
+    $request = \Drupal::request();
+    $link_domain = $request->getSchemeAndHttpHost() . $request->getBasePath();
+    $this->assertEqual($err_node->field_entity_reference_revisions->target_revision_id, $normalized['_embedded'][$link_domain . '/rest/relation/node/entity_revisions/field_entity_reference_revisions'][0]['target_revision_id']);
+    $new_err_node = $serializer->denormalize($normalized, Node::class, 'hal_json');
+    $this->assertEqual($err_node->field_entity_reference_revisions->target_revision_id, $new_err_node->field_entity_reference_revisions->target_revision_id);
+  }
+
+}
