diff --git a/src/Normalizer/ChangesNormalizer.php b/src/Normalizer/ChangesNormalizer.php
index ebfb894..c71fda1 100644
--- a/src/Normalizer/ChangesNormalizer.php
+++ b/src/Normalizer/ChangesNormalizer.php
@@ -3,8 +3,10 @@
 namespace Drupal\replication\Normalizer;
 
 use Drupal\serialization\Normalizer\NormalizerBase;
+use Symfony\Component\Serializer\Exception\LogicException;
+use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
 
-class ChangesNormalizer extends NormalizerBase {
+class ChangesNormalizer extends NormalizerBase implements DenormalizerInterface {
 
   protected $supportedInterfaceOrClass = ['Drupal\replication\Changes\ChangesInterface'];
 
@@ -40,4 +42,21 @@ class ChangesNormalizer extends NormalizerBase {
     ];
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function denormalize($data, $class, $format = NULL, array $context = []) {
+    if (!isset($context['workspace'])) {
+      throw new LogicException('A \'workspace\' context is required to denormalize Changes data.');
+    }
+
+    $doc_ids = [];
+    if (!empty($data['doc_ids'])) {
+      $doc_ids = $data['doc_ids'];
+    }
+
+    // The service is not injected to avoid circular reference.
+    return \Drupal::service('replication.changes_factory')->get($context['workspace'])->parameters(['uuids' => $doc_ids]);
+  }
+
 }
