diff --git a/config/install/replication.replication_settings.entity_type.article.yml b/config/install/replication.replication_settings.entity_type.article.yml
new file mode 100644
index 0000000..b6a07f0
--- /dev/null
+++ b/config/install/replication.replication_settings.entity_type.article.yml
@@ -0,0 +1,9 @@
+langcode: en
+status: true
+dependencies: {  }
+id: article
+label: Replicate only article entities
+filter_id: entity_type
+parameters:
+  entity_type_id: node
+  bundle: article
diff --git a/config/install/replication.replication_settings.entity_type.page.yml b/config/install/replication.replication_settings.entity_type.page.yml
new file mode 100644
index 0000000..a0977a1
--- /dev/null
+++ b/config/install/replication.replication_settings.entity_type.page.yml
@@ -0,0 +1,9 @@
+langcode: en
+status: true
+dependencies: {  }
+id: page
+label: Replicate only page entities
+filter_id: entity_type
+parameters:
+  entity_type_id: node
+  bundle: page
diff --git a/config/install/replication.replication_settings.published.yml b/config/install/replication.replication_settings.published.yml
new file mode 100644
index 0000000..11c4688
--- /dev/null
+++ b/config/install/replication.replication_settings.published.yml
@@ -0,0 +1,7 @@
+langcode: en
+status: true
+dependencies: {  }
+id: published
+label: Replicate published entities
+filter_id: published
+parameters: []
diff --git a/config/schema/replication.replication_settings.schema.yml b/config/schema/replication.replication_settings.schema.yml
new file mode 100644
index 0000000..86c6fcc
--- /dev/null
+++ b/config/schema/replication.replication_settings.schema.yml
@@ -0,0 +1,16 @@
+replication.replication_settings.*:
+  type: config_entity
+  label: 'Replication settings config'
+  mapping:
+    id:
+      type: string
+      label: 'ID'
+    label:
+      type: label
+      label: 'Label'
+    filter_id:
+      type: string
+      label: 'Filter plugin id'
+    parameters:
+      type: sequence
+      label: 'Filter parameters'
diff --git a/src/Entity/ReplicationSettings.php b/src/Entity/ReplicationSettings.php
new file mode 100644
index 0000000..5a03649
--- /dev/null
+++ b/src/Entity/ReplicationSettings.php
@@ -0,0 +1,67 @@
+<?php
+
+namespace Drupal\replication\Entity;
+
+use Drupal\Core\Config\Entity\ConfigEntityBase;
+use Drupal\replication\Entity\ReplicationSettingsInterface;
+
+/**
+ * Defines the replication settings entity.
+ *
+ * The replication settings are attached to a Workspace to define how that
+ * Workspace should be replicated.
+ *
+ * @ConfigEntityType(
+ *   id = "replication_settings",
+ *   label = @Translation("Replication settings"),
+ *   config_prefix = "replication_settings",
+ *   entity_keys = {
+ *     "id" = "id",
+ *     "label" = "label"
+ *   }
+ * )
+ */
+class ReplicationSettings extends ConfigEntityBase implements ReplicationSettingsInterface {
+
+  /**
+   * An identifier for these replication settings.
+   *
+   * @var string
+   */
+  protected $id;
+
+  /**
+   * The human readable name for these replication settings.
+   *
+   * @var string
+   */
+  protected $label;
+
+  /**
+   * The plugin ID of a replication filter.
+   *
+   * @var string
+   */
+  protected $filter_id;
+
+  /**
+   * The replication filter parameters.
+   *
+   * @var string[string]
+   */
+  protected $parameters;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFilterId() {
+    return $this->filter_id;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getParameters() {
+    return $this->parameters;
+  }
+}
diff --git a/src/Entity/ReplicationSettingsInterface.php b/src/Entity/ReplicationSettingsInterface.php
new file mode 100644
index 0000000..f046c9f
--- /dev/null
+++ b/src/Entity/ReplicationSettingsInterface.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace Drupal\replication\Entity;
+
+use Drupal\Core\Config\Entity\ConfigEntityInterface;
+
+/**
+ * Provides an interface for replication settings entities.
+ */
+interface ReplicationSettingsInterface extends ConfigEntityInterface {
+
+  /**
+   * Get the plugin ID of the replication filter to use.
+   *
+   * @return string
+   */
+  public function getFilterId();
+
+  /**
+   * Get the replication filter parameters.
+   *
+   * @return string[string]
+   */
+  public function getParameters();
+
+}
diff --git a/src/Plugin/ReplicationFilter/EntityTypeFilter.php b/src/Plugin/ReplicationFilter/EntityTypeFilter.php
index 5ab7393..ce588aa 100644
--- a/src/Plugin/ReplicationFilter/EntityTypeFilter.php
+++ b/src/Plugin/ReplicationFilter/EntityTypeFilter.php
@@ -10,7 +10,8 @@ use Symfony\Component\HttpFoundation\ParameterBag;
  * Provides a filter based on entity type.
  *
  * Supported parameters:
- *   entity_type: a comma delimited list of entity type id's to include
+ *   entity_type_id: a comma delimited list of entity type id's to include
+ *   bundle: a comma delimited list of bundles matching the type ids
  *
  * @ReplicationFilter(
  *   id = "entity_type",
@@ -24,15 +25,30 @@ class EntityTypeFilter extends ReplicationFilterBase {
    * {@inheritdoc}
    */
   public function filter(EntityInterface $entity, ParameterBag $parameters) {
-    if ($parameters->has('entity_type')) {
-      $types = $parameters->get('entity_type');
+    $type_ids = $this->parseParameterValues($parameters, 'entity_type_id');
+    $bundles = $this->parseParameterValues($parameters, 'bundle');
+    return in_array($entity->getEntityTypeId(), $type_ids) && in_array($entity->bundle(), $bundles);
+  }
+
+  /**
+   * Parse a parameter's comma delimiated values.
+   *
+   * @param string $parameter_name
+   *   The name of the parameter to get the values for.
+   *
+   * @return array
+   *   The parsed parameter values.
+   */
+  protected function parseParameterValues(ParameterBag $parameters, $parameter_name) {
+    if ($parameters->has($parameter_name)) {
+      $values = $parameters->get($parameter_name);
     }
     else {
-      $types = '';
+      $values = '';
     }
-    $types = explode(',', $types);
-    $types = array_filter(array_map('trim', $types));
-    return in_array($entity->bundle(), $types);
+    $values = explode(',', $values);
+    $values = array_filter(array_map('trim', $values));
+    return $values;
   }
 
 }
diff --git a/src/ReplicationTask/ReplicationTask.php b/src/ReplicationTask/ReplicationTask.php
index bb39a21..7b109e8 100644
--- a/src/ReplicationTask/ReplicationTask.php
+++ b/src/ReplicationTask/ReplicationTask.php
@@ -55,7 +55,10 @@ class ReplicationTask implements ReplicationTaskInterface {
   /**
    * {@inheritdoc}
    */
-  public function setParametersByArray(array $parameters_array = array()) {
+  public function setParametersByArray(array $parameters_array = NULL) {
+    if ($parameters_array == NULL) {
+      $parameters_array = [];
+    }
     $parameters = new ParameterBag($parameters_array);
     return $this->setParameters($parameters);
   }
diff --git a/src/ReplicationTask/ReplicationTaskInterface.php b/src/ReplicationTask/ReplicationTaskInterface.php
index 22f7a13..a8f0146 100644
--- a/src/ReplicationTask/ReplicationTaskInterface.php
+++ b/src/ReplicationTask/ReplicationTaskInterface.php
@@ -51,13 +51,13 @@ interface ReplicationTaskInterface {
    * The array input is converted to a ParameterBag and then passed to
    * setParameters.
    *
-   * @param array $parameters_array
+   * @param array|NULL $parameters_array
    *   An associative array of name-value parameters.
    *
    * @return ReplicationTaskInterface
    *   Returns $this.
    */
-  public function setParametersByArray(array $parameters_array = array());
+  public function setParametersByArray(array $parameters_array = NULL);
 
   /**
    * Set a parameter for the filter plugin.
diff --git a/tests/src/Functional/ReplicationFilterTest.php b/tests/src/Functional/ReplicationFilterTest.php
index de0b364..ef3f2db 100644
--- a/tests/src/Functional/ReplicationFilterTest.php
+++ b/tests/src/Functional/ReplicationFilterTest.php
@@ -14,8 +14,14 @@ use Symfony\Component\HttpFoundation\ParameterBag;
  */
 class ReplicationFilterTest extends WebTestBase {
 
+  /**
+   * {@inheritdoc}
+   */
   protected $strictConfigSchema = FALSE;
 
+  /**
+   * {@inheritdoc}
+   */
   public static $modules = [
     'multiversion',
     'node',
@@ -137,7 +143,7 @@ class ReplicationFilterTest extends WebTestBase {
     $entity2->workspace = $workspace;
     $entity2->save();
 
-    $parameters = new ParameterBag(['entity_type' => 'article']);
+    $parameters = new ParameterBag(['entity_type_id' => 'node', 'bundle' => 'article']);
     $changes = $changes_factory->get($workspace)->filter('entity_type')->parameters($parameters)->getNormal();
     $this->assertEqual(1, count($changes), 'Expect there is 1 entity in the changeset.');
   }
diff --git a/tests/src/Kernel/ReplicationSettingsTest.php b/tests/src/Kernel/ReplicationSettingsTest.php
new file mode 100644
index 0000000..2adbb3d
--- /dev/null
+++ b/tests/src/Kernel/ReplicationSettingsTest.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Drupal\Tests\replication\Kernel;
+
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\replication\Entity\ReplicationSettings;
+
+/**
+ * Test operations on ReplicationSettings config entity.
+ *
+ * @group replication
+ */
+class ReplicationSettingsTest extends KernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $strictConfigSchema = FALSE;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'user',
+    'serialization',
+    'key_value',
+    'multiversion',
+    'replication',
+  ];
+
+  /**
+   * Test creation of ReplicationSettings config entity.
+   */
+  public function testCreation() {
+    $this->installEntitySchema('replication_settings');
+    $entityTypeManager = $this->container->get('entity_type.manager');
+    $entity = $entityTypeManager->getStorage('replication_settings')->create([
+      'id' => 'test',
+      'label' => 'Replication settings test',
+      'filter_id' => 'entity_type',
+      'parameters' => ['entity_type_id' => 'node', 'bundle' => 'article'],
+    ]);
+    $this->assertTrue($entity instanceof ReplicationSettings, 'Replication Settings entity was created.');
+    $entity->save();
+
+    $entity = $entityTypeManager->getStorage('replication_settings')->load('test');
+
+    $this->assertEquals($entity->id(), 'test', 'Test replication settings config entity successfully saved.');
+  }
+
+}
