diff --git a/src/Changes/Changes.php b/src/Changes/Changes.php
index 1a0f643..e2ed59e 100644
--- a/src/Changes/Changes.php
+++ b/src/Changes/Changes.php
@@ -36,6 +36,11 @@ class Changes implements ChangesInterface {
   protected $serializer;
 
   /**
+   * @var string[]
+   */
+  protected $uuids = [];
+
+  /**
    * @var boolean
    */
   protected $includeDocs = FALSE;
@@ -61,8 +66,17 @@ class Changes implements ChangesInterface {
   /**
    * {@inheritdoc}
    */
+  public function uuids(array $uuids) {
+    $this->uuids = $uuids;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function includeDocs($include_docs) {
     $this->includeDocs = $include_docs;
+    return $this;
   }
 
   /**
@@ -87,6 +101,9 @@ class Changes implements ChangesInterface {
       if (!empty($sequence['local']) || !empty($sequence['is_stub'])) {
         continue;
       }
+      if (!empty($this->uuids) && !in_array($sequence['entity_uuid'], $this->uuids)) {
+        continue;
+      }
 
       $uuid = $sequence['entity_uuid'];
       $changes[$uuid] = array(
diff --git a/src/Changes/ChangesInterface.php b/src/Changes/ChangesInterface.php
index 52b4a06..ddef8cd 100644
--- a/src/Changes/ChangesInterface.php
+++ b/src/Changes/ChangesInterface.php
@@ -14,6 +14,16 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 interface ChangesInterface {
 
   /**
+   * Filter out changes only for the given uuids.
+   *
+   * Note: the caller must include referenced uuids to maintain data integrity.
+   *
+   * @param string[] @uuids
+   * @return \Drupal\replication\Changes\ChangesInterface
+   */
+  public function uuids(array $uuids);
+
+  /**
    * @param boolean $include_docs
    * @return \Drupal\replication\Changes\ChangesInterface
    */
