diff --git a/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php b/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php
index 0ad5523..92bd17b 100644
--- a/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php
+++ b/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php
@@ -178,7 +178,7 @@ class CoreNodeSearchFacetSource extends FacetSourcePluginBase implements CoreSea
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state, FacetInterface $facet, FacetSourcePluginInterface $facet_source) {
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
 
     $form['field_identifier'] = [
       '#type' => 'select',
@@ -186,7 +186,7 @@ class CoreNodeSearchFacetSource extends FacetSourcePluginBase implements CoreSea
       '#title' => $this->t('Facet field'),
       '#description' => $this->t('Choose the indexed field.'),
       '#required' => TRUE,
-      '#default_value' => $facet->getFieldIdentifier(),
+      '#default_value' => $this->facet->getFieldIdentifier(),
     ];
 
     return $form;
diff --git a/src/Entity/Facet.php b/src/Entity/Facet.php
index 6e3de73..808e8f7 100644
--- a/src/Entity/Facet.php
+++ b/src/Entity/Facet.php
@@ -411,7 +411,7 @@ class Facet extends ConfigEntityBase implements FacetInterface {
     if (!$this->facet_source_instance && $this->facet_source_id) {
       /* @var $facet_source_plugin_manager \Drupal\facets\FacetSource\FacetSourcePluginManager */
       $facet_source_plugin_manager = \Drupal::service('plugin.manager.facets.facet_source');
-      $this->facet_source_instance = $facet_source_plugin_manager->createInstance($this->facet_source_id);
+      $this->facet_source_instance = $facet_source_plugin_manager->createInstance($this->facet_source_id, ['facet' => $this]);
     }
 
     return $this->facet_source_instance;
diff --git a/src/FacetSource/FacetSourcePluginBase.php b/src/FacetSource/FacetSourcePluginBase.php
index 104ad21..8cf6b8e 100644
--- a/src/FacetSource/FacetSourcePluginBase.php
+++ b/src/FacetSource/FacetSourcePluginBase.php
@@ -7,8 +7,10 @@
 
 namespace Drupal\facets\FacetSource;
 
+use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
 use Drupal\Component\Plugin\PluginBase;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\facets\Exception\InvalidProcessorException;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\Facets\FacetInterface;
 use Drupal\Core\Form\FormStateInterface;
@@ -45,16 +47,22 @@ abstract class FacetSourcePluginBase extends PluginBase implements FacetSourcePl
   protected $keys;
 
   /**
+   * The facet we're editing for.
+   *
+   * @var \Drupal\facets\FacetInterface
+   */
+  protected $facet;
+
+  /**
    * {@inheritdoc}
    */
-  public function __construct(
-    array $configuration,
-    $plugin_id,
-    $plugin_definition,
-    $query_type_plugin_manager
-  ) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, $query_type_plugin_manager) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
     $this->queryTypePluginManager = $query_type_plugin_manager;
+
+    if (isset($configuration['facet'])) {
+      $this->facet = $configuration['facet'];
+    }
   }
 
   /**
@@ -107,10 +115,17 @@ abstract class FacetSourcePluginBase extends PluginBase implements FacetSourcePl
   /**
    * {@inheritdoc}
    */
-  public function submitConfigurationForm(FormStateInterface $form_state, FacetInterface &$facet) {
-    $facet_source_id = $facet->getFacetSourceId();
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
+    return TRUE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $facet_source_id = $this->facet->getFacetSourceId();
     $field_identifier = $form_state->getValue('facet_source_configs')[$facet_source_id]['field_identifier'];
-    $facet->setFieldIdentifier($field_identifier);
+    $this->facet->setFieldIdentifier($field_identifier);
   }
 
 }
diff --git a/src/FacetSource/FacetSourcePluginInterface.php b/src/FacetSource/FacetSourcePluginInterface.php
index 976f3dd..91a519f 100644
--- a/src/FacetSource/FacetSourcePluginInterface.php
+++ b/src/FacetSource/FacetSourcePluginInterface.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\facets\FacetSource;
 
-use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Plugin\PluginFormInterface;
 use Drupal\facets\FacetInterface;
 
 /**
@@ -19,29 +19,7 @@ use Drupal\facets\FacetInterface;
  *
  * @see plugin_api
  */
-interface FacetSourcePluginInterface {
-
-  /**
-   * Adds a configuration form for this facet source.
-   *
-   * @param array $form
-   *   The configuration form definition.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   The current form state.
-   * @param \Drupal\facets\FacetInterface $facet
-   *   The facet being edited.
-   * @param \Drupal\facets\FacetSource\FacetSourcePluginInterface $facet_source
-   *   The facet source being edited.
-   */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state, FacetInterface $facet, FacetSourcePluginInterface $facet_source);
-
-  /**
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   The current form state.
-   * @param \Drupal\facets\FacetInterface $facet
-   *   The facet being edited.
-   */
-  public function submitConfigurationForm(FormStateInterface $form_state, FacetInterface &$facet);
+interface FacetSourcePluginInterface extends PluginFormInterface {
 
   /**
    * Fill in facet data in to the configured facets.
@@ -52,14 +30,6 @@ interface FacetSourcePluginInterface {
   public function fillFacetsWithResults($facets);
 
   /**
-   * Returns the path where a facet should link to.
-   *
-   * @return string
-   *   The path of the facet.
-   */
-  public function getPath();
-
-  /**
    * Get the allowed query types for a given facet for the facet source.
    *
    * @param \Drupal\facets\FacetInterface $facet
@@ -74,6 +44,14 @@ interface FacetSourcePluginInterface {
   public function getQueryTypesForFacet(FacetInterface $facet);
 
   /**
+   * Returns the path where a facet should link to.
+   *
+   * @return string
+   *   The path of the facet.
+   */
+  public function getPath();
+
+  /**
    * Returns true if the Facet source is being rendered in the current request.
    *
    * This function will define if all facets for this facet source are shown
diff --git a/src/Form/FacetForm.php b/src/Form/FacetForm.php
index 872c520..e654717 100644
--- a/src/Form/FacetForm.php
+++ b/src/Form/FacetForm.php
@@ -256,9 +256,9 @@ class FacetForm extends EntityForm {
 
     if (!is_null($facet_source_id) && $facet_source_id !== '') {
       /** @var \Drupal\facets\FacetSource\FacetSourcePluginInterface $facet_source */
-      $facet_source = $this->getFacetSourcePluginManager()->createInstance($facet_source_id);
+      $facet_source = $this->getFacetSourcePluginManager()->createInstance($facet_source_id, ['facet' => $this->getEntity()]);
 
-      if ($config_form = $facet_source->buildConfigurationForm([], $form_state, $this->getEntity(), $facet_source)) {
+      if ($config_form = $facet_source->buildConfigurationForm([], $form_state)) {
         $form['facet_source_configs'][$facet_source_id]['#type'] = 'container';
         $form['facet_source_configs'][$facet_source_id]['#title'] = $this->t('%plugin settings', ['%plugin' => $facet_source->getPluginDefinition()['label']]);
         $form['facet_source_configs'][$facet_source_id] += $config_form;
@@ -315,8 +315,8 @@ class FacetForm extends EntityForm {
     $facet_source_id = $form_state->getValue('facet_source_id');
     if (!is_null($facet_source_id) && $facet_source_id !== '') {
       /** @var \Drupal\facets\FacetSource\FacetSourcePluginInterface $facet_source */
-      $facet_source = $this->getFacetSourcePluginManager()->createInstance($facet_source_id);
-      $facet_source->submitConfigurationForm($form_state, $facet);
+      $facet_source = $this->getFacetSourcePluginManager()->createInstance($facet_source_id, ['facet' => $this->getEntity()]);
+      $facet_source->submitConfigurationForm($form, $form_state);
     }
     $facet->save();
 
diff --git a/src/Plugin/facets/facet_source/SearchApiBaseFacetSource.php b/src/Plugin/facets/facet_source/SearchApiBaseFacetSource.php
index 74e98c8..882600f 100644
--- a/src/Plugin/facets/facet_source/SearchApiBaseFacetSource.php
+++ b/src/Plugin/facets/facet_source/SearchApiBaseFacetSource.php
@@ -10,7 +10,6 @@ use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\facets\Exception\InvalidQueryTypeException;
 use Drupal\facets\FacetInterface;
-use Drupal\facets\FacetSource\FacetSourcePluginInterface;
 use Drupal\search_api\Backend\BackendInterface;
 use Drupal\facets\FacetSource\FacetSourcePluginBase;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -65,7 +64,7 @@ abstract class SearchApiBaseFacetSource extends FacetSourcePluginBase {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state, FacetInterface $facet, FacetSourcePluginInterface $facet_source) {
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
 
     $form['field_identifier'] = [
       '#type' => 'select',
@@ -73,7 +72,7 @@ abstract class SearchApiBaseFacetSource extends FacetSourcePluginBase {
       '#title' => $this->t('Facet field'),
       '#description' => $this->t('Choose the indexed field.'),
       '#required' => TRUE,
-      '#default_value' => $facet->getFieldIdentifier(),
+      '#default_value' => $this->facet->getFieldIdentifier(),
     ];
 
     return $form;
diff --git a/src/Tests/UrlIntegrationTest.php b/src/Tests/UrlIntegrationTest.php
index 64ef7b2..fcee288 100644
--- a/src/Tests/UrlIntegrationTest.php
+++ b/src/Tests/UrlIntegrationTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\facets\Tests;
 
 use Drupal\Core\Url;
+use Drupal\facets\FacetInterface;
 use Drupal\facets\Tests\WebTestBase as FacetWebTestBase;
 use Drupal\facets\Entity\Facet;
 use Drupal\facets\FacetSourceInterface;
@@ -81,6 +82,7 @@ class UrlIntegrationTest extends FacetWebTestBase {
 
     /** @var \Drupal\facets\FacetInterface $facet */
     $facet = Facet::load($id);
+    $this->assertTrue($facet instanceof FacetInterface);
     $config = $facet->getFacetSourceConfig();
     $this->assertTrue($config instanceof FacetSourceInterface);
     $this->assertEqual(NULL, $config->getFilterKey());
