diff --git a/config/install/diff.settings.yml b/config/install/diff.settings.yml
index 5c9b846..c753262 100644
--- a/config/install/diff.settings.yml
+++ b/config/install/diff.settings.yml
@@ -3,3 +3,13 @@ general_settings:
   context_lines_leading: 1
   context_lines_trailing: 1
   revision_pager_limit: 50
+  layout_plugins:
+    classic:
+      enabled: true
+      weight: 0
+    markdown:
+      enabled: true
+      weight: 1
+    single_column:
+      enabled: true
+      weight: 2
diff --git a/config/schema/diff.schema.yml b/config/schema/diff.schema.yml
index 8321192..d0ebbe7 100644
--- a/config/schema/diff.schema.yml
+++ b/config/schema/diff.schema.yml
@@ -18,6 +18,19 @@ diff.settings:
         revision_pager_limit:
           type: integer
           label: 'Revisions per page to be displayed in diff pager'
+        layout_plugins:
+          type: sequence
+          label: 'Plugins'
+          sequence:
+            type: mapping
+            label: 'Layout plugins configuration'
+            mapping:
+              enabled:
+                type: boolean
+                label: 'Enabled'
+              weight:
+                type: integer
+                label: 'Weight'
     entity:
       type: sequence
       label: 'Entities'
diff --git a/diff.install b/diff.install
index 22a55b7..072a5dc 100644
--- a/diff.install
+++ b/diff.install
@@ -35,3 +35,16 @@ function diff_update_8003() {
   $config->clear('general_settings.theme');
   $config->save();
 }
+
+/**
+ * Enable all layout plugins to be used.
+ */
+function diff_update_8004() {
+  $config = \Drupal::configFactory()->getEditable('diff.settings');
+  $plugins = \Drupal::service('plugin.manager.diff.layout')->getDefinitions();
+  foreach ($plugins as $key => $value) {
+    $plugin_options[$key] = $value['label'];
+    $config->set('general_settings.layout_plugins.' . $key . '.enabled', TRUE);
+  }
+  $config->save();
+}
\ No newline at end of file
diff --git a/diff.routing.yml b/diff.routing.yml
index b79153e..c3314dd 100644
--- a/diff.routing.yml
+++ b/diff.routing.yml
@@ -3,7 +3,6 @@ diff.revisions_diff:
   defaults:
     _controller: '\Drupal\diff\Controller\NodeRevisionController::compareNodeRevisions'
     _title: Diff General Settings
-    filter: 'classic'
   requirements:
     _access_node_revision: 'view'
   options:
diff --git a/src/Controller/PluginRevisionController.php b/src/Controller/PluginRevisionController.php
index 43f0140..9277599 100644
--- a/src/Controller/PluginRevisionController.php
+++ b/src/Controller/PluginRevisionController.php
@@ -159,9 +159,10 @@ class PluginRevisionController extends ControllerBase {
    */
   protected function buildLayoutNavigation(EntityInterface $entity, $left_revision_id, $right_revision_id, $active_filter) {
     $links = [];
-    foreach ($this->diffLayoutManager->getDefinitions() as $key => $value) {
+    $layouts = $this->diffLayoutManager->getPluginOptions();
+    foreach ($layouts as $key => $value) {
       $links[$key] = array(
-        'title' => $value['label'],
+        'title' => $value,
         'url' => $this->diffRoute($entity, $left_revision_id, $right_revision_id, $key),
       );
     }
diff --git a/src/DiffLayoutManager.php b/src/DiffLayoutManager.php
index d58a1a5..35c3431 100644
--- a/src/DiffLayoutManager.php
+++ b/src/DiffLayoutManager.php
@@ -57,4 +57,42 @@ class DiffLayoutManager extends DefaultPluginManager {
     $this->layoutPluginsConfig =  $configFactory->get('diff.layout_plugins');
   }
 
+  /**
+   * Gets the applicable layout plugins.
+   *
+   * Loop over the plugins that can be used to display the diff comparison
+   * sorting them by the weight.
+   *
+   * @return array
+   *   The layout plugin options.
+   */
+  public function getPluginOptions() {
+    $plugins = $this->config->get('general_settings' . '.' . 'layout_plugins');
+    $plugin_options = [];
+    // Get the plugins sorted and build an array keyed by the plugin id.
+    if ($plugins) {
+      // Sort the plugins based on their weight.
+      uasort($plugins, 'Drupal\Component\Utility\SortArray::sortByWeightElement');
+      foreach ($plugins as $key => $value) {
+        $plugin = $this->getDefinition($key);
+        if ($value['enabled']) {
+          $plugin_options[$key] = $plugin['label'];
+        }
+      }
+    }
+    return $plugin_options;
+  }
+
+  /**
+   * Gets the default layout plugin selected.
+   *
+   * Take the first option of the array returned by getPluginOptions.
+   *
+   * @return string
+   *   The id of the default plugin.
+   */
+  public function getDefaultLayout() {
+    $plugins = array_keys($this->getPluginOptions());
+    return reset($plugins);
+  }
 }
diff --git a/src/Form/GeneralSettingsForm.php b/src/Form/GeneralSettingsForm.php
index c15e6a2..9a48cc9 100644
--- a/src/Form/GeneralSettingsForm.php
+++ b/src/Form/GeneralSettingsForm.php
@@ -4,10 +4,38 @@ namespace Drupal\diff\Form;
 
 use Drupal\Core\Form\ConfigFormBase;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\diff\DiffLayoutManager;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 class GeneralSettingsForm extends ConfigFormBase {
 
   /**
+   * The field diff layout plugin manager service.
+   *
+   * @var \Drupal\diff\DiffLayoutManager
+   */
+  protected $diffLayoutManager;
+
+  /**
+   * GeneralSettingsForm constructor.
+   *
+   * @param \Drupal\diff\DiffLayoutManager $diff_layout_manager
+   *   The diff layout manager service.
+   */
+  public function __construct(DiffLayoutManager $diff_layout_manager) {
+    $this->diffLayoutManager = $diff_layout_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('plugin.manager.diff.layout')
+    );
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function getFormId() {
@@ -58,6 +86,57 @@ class GeneralSettingsForm extends ConfigFormBase {
       '#options' => $options,
     );
 
+    $layout_plugins = $this->diffLayoutManager->getDefinitions();
+    $weight = count($layout_plugins) + 1;
+    $layout_plugins_order = [];
+    foreach ($layout_plugins as $id => $layout_plugin) {
+      $layout_plugins_order[$id] = [
+        'label' => $layout_plugin['label'],
+        'enabled' => $config->get('general_settings' . '.' . 'layout_plugins')[$id]['enabled'],
+        'weight' => $config->get('general_settings' . '.' . 'layout_plugins')[$id]['weight'] ?: $weight,
+      ];
+      $weight++;
+    }
+
+    $form['layout_plugins'] = [
+      '#type' => 'table',
+      '#header' => [t('Layout'), t('Weight')],
+      '#empty' => t('There are no items yet. Add an item.'),
+      '#suffix' => '<div class="description">' . $this->t('The layout plugins that are enabled for displaying the diff comparison.') .'</div>',
+      '#tabledrag' => [
+        [
+          'action' => 'order',
+          'relationship' => 'sibling',
+          'group' => 'diff-layout-plugins-order-weight',
+        ],
+      ],
+    ];
+
+    uasort($layout_plugins_order, 'Drupal\Component\Utility\SortArray::sortByWeightElement');
+
+    foreach ($layout_plugins_order as $id => $layout_plugin) {
+      $form['layout_plugins'][$id]['#attributes']['class'][] = 'draggable';
+      $form['layout_plugins'][$id]['enabled'] = [
+        '#type' => 'checkbox',
+        '#title' => $layout_plugin['label'],
+        '#title_display' => 'after',
+        '#default_value' => $layout_plugin['enabled'],
+      ];
+      $form['layout_plugins'][$id]['weight'] = [
+        '#type' => 'weight',
+        '#title' => t('Weight for @title', ['@title' => $layout_plugin['label']]),
+        '#title_display' => 'invisible',
+        '#delta' => 50,
+        '#default_value' => (int) $layout_plugin['weight'],
+        '#array_parents' => [
+          'settings',
+          'sites',
+          $id
+        ],
+        '#attributes' => ['class' => ['diff-layout-plugins-order-weight']],
+      ];
+    }
+
     return parent::buildForm($form, $form_state);
   }
 
@@ -71,6 +150,7 @@ class GeneralSettingsForm extends ConfigFormBase {
       'radio_behavior',
       'context_lines_leading',
       'context_lines_trailing',
+      'layout_plugins',
     );
     foreach ($keys as $key) {
       $config->set('general_settings.' . $key, $form_state->getValue($key));
diff --git a/src/Form/RevisionOverviewForm.php b/src/Form/RevisionOverviewForm.php
index fe9ef76..fdef4f3 100755
--- a/src/Form/RevisionOverviewForm.php
+++ b/src/Form/RevisionOverviewForm.php
@@ -3,6 +3,7 @@
 namespace Drupal\diff\Form;
 
 use Drupal\Core\Language\LanguageManagerInterface;
+use Drupal\diff\DiffLayoutManager;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Form\FormBase;
@@ -58,6 +59,12 @@ class RevisionOverviewForm extends FormBase {
    */
   protected $config;
 
+  /**
+   * The field diff layout plugin manager service.
+   *
+   * @var \Drupal\diff\DiffLayoutManager
+   */
+  protected $diffLayoutManager;
 
   /**
    * Constructs a RevisionOverviewForm object.
@@ -72,14 +79,17 @@ class RevisionOverviewForm extends FormBase {
    *   The renderer service.
    * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
    *   The language manager.
+   * @param DiffLayoutManager $diff_layout_manager
+   *   DiffLayoutManager service.
    */
-  public function __construct(EntityManagerInterface $entityManager, AccountInterface $currentUser, DateFormatter $date, RendererInterface $renderer, LanguageManagerInterface $language_manager) {
+  public function __construct(EntityManagerInterface $entityManager, AccountInterface $currentUser, DateFormatter $date, RendererInterface $renderer, LanguageManagerInterface $language_manager, DiffLayoutManager $diff_layout_manager) {
     $this->entityManager = $entityManager;
     $this->currentUser = $currentUser;
     $this->date = $date;
     $this->renderer = $renderer;
     $this->languageManager = $language_manager;
     $this->config = $this->config('diff.settings');
+    $this->diffLayoutManager = $diff_layout_manager;
   }
 
   /**
@@ -91,7 +101,8 @@ class RevisionOverviewForm extends FormBase {
       $container->get('current_user'),
       $container->get('date.formatter'),
       $container->get('renderer'),
-      $container->get('language_manager')
+      $container->get('language_manager'),
+      $container->get('plugin.manager.diff.layout')
     );
   }
 
@@ -348,6 +359,7 @@ class RevisionOverviewForm extends FormBase {
         'node' => $nid,
         'left_revision' => $vid_left,
         'right_revision' => $vid_right,
+        'filter' => $this->diffLayoutManager->getDefaultLayout(),
       )
     );
     $form_state->setRedirectUrl($redirect_url);
diff --git a/src/Plugin/views/field/DiffFrom.php b/src/Plugin/views/field/DiffFrom.php
index fbb402d..b7a224c 100644
--- a/src/Plugin/views/field/DiffFrom.php
+++ b/src/Plugin/views/field/DiffFrom.php
@@ -70,12 +70,13 @@ class DiffFrom extends DiffPluginBase {
       );
       $entity_type_id = $diff_from_entity->getEntityTypeId();
 
+      $filter = \Drupal::service('plugin.manager.diff.layout')->getDefaultLayout();
       if ($diff_from_entity instanceof NodeInterface) {
-        $form_state->setRedirect('diff.revisions_diff', [$entity_type_id => $diff_from_entity->id(),'left_revision' => $diff_from_entity->getRevisionId(), 'right_revision' => $diff_to_entity->getRevisionId()], $options);
+        $form_state->setRedirect('diff.revisions_diff', [$entity_type_id => $diff_from_entity->id(),'left_revision' => $diff_from_entity->getRevisionId(), 'right_revision' => $diff_to_entity->getRevisionId(), 'filter' => $filter], $options);
       }
       else {
         $route_name = 'entity.' . $entity_type_id . '.revisions_diff';
-        $form_state->setRedirect($route_name, [$entity_type_id => $diff_from_entity->id(), 'left_revision' => $diff_from_entity->getRevisionId(), 'right_revision' => $diff_to_entity->getRevisionId()], $options);
+        $form_state->setRedirect($route_name, [$entity_type_id => $diff_from_entity->id(), 'left_revision' => $diff_from_entity->getRevisionId(), 'right_revision' => $diff_to_entity->getRevisionId(), 'filter' => $filter], $options);
       }
     }
   }
diff --git a/src/Tests/AdminFormsTest.php b/src/Tests/AdminFormsTest.php
index 7a10616..6dd9fe8 100644
--- a/src/Tests/AdminFormsTest.php
+++ b/src/Tests/AdminFormsTest.php
@@ -70,4 +70,71 @@ class AdminFormsTest extends DiffTestBase {
     $this->assertText('The content type Article has been updated.');
   }
 
+  /**
+   * Tests the Compare Revisions vertical tab.
+   */
+  public function testPluginWeight() {
+    $edit = [
+      'layout_plugins[markdown][weight]' => '10',
+    ];
+    $this->drupalPostForm('admin/config/content/diff/general', $edit, t('Save configuration'));
+    // Create a node with a revision.
+    $edit = [
+      'title[0][value]' => 'great_title',
+      'body[0][value]' => '<p>great_body</p>',
+    ];
+    $this->drupalPostForm('node/add/article', $edit, t('Save and publish'));
+    $this->clickLink('Edit');
+    $edit = [
+      'title[0][value]' => 'greater_title',
+      'body[0][value]' => '<p>greater_body</p>',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save and keep published'));
+
+    // Assert the diff display uses the classic layout.
+    $node = $this->getNodeByTitle('greater_title');
+    $this->drupalGet('node/' . $node->id() . '/revisions');
+    $this->drupalPostForm(NULL, [], t('Compare'));
+    $this->assertLink('Single Column');
+    $this->assertLink('Markdown');
+    $this->assertLink('Standard');
+    $text = $this->xpath('//tbody/tr[4]/td[2]');
+    $this->assertEqual(htmlspecialchars_decode(strip_tags($text[0]->asXML())), '<p>great_body</p>');
+
+    // Change the settings of the layouts, disable the single column.
+    $edit = [
+      'layout_plugins[classic][weight]' => '11',
+      'layout_plugins[single_column][enabled]' => FALSE,
+    ];
+    $this->drupalPostForm('admin/config/content/diff/general', $edit, t('Save configuration'));
+
+    // Assert the diff display uses the markdown layout.
+    $this->drupalGet('node/' . $node->id() . '/revisions');
+    $this->drupalPostForm(NULL, [], t('Compare'));
+    $this->assertResponse(200);
+    $this->assertNoLink('Single Column');
+    $this->assertLink('Markdown');
+    $this->assertLink('Standard');
+    $text = $this->xpath('//tbody/tr[4]/td[2]');
+    $this->assertEqual(htmlspecialchars_decode(strip_tags($text[0]->asXML())), 'great_body');
+
+    // Change the settings of the layouts, enable single column.
+    $edit = [
+      'layout_plugins[single_column][enabled]' => TRUE,
+      'layout_plugins[classic][enabled]' => FALSE,
+      'layout_plugins[markdown][enabled]' => FALSE,
+    ];
+    $this->drupalPostForm('admin/config/content/diff/general', $edit, t('Save configuration'));
+
+    // Assert the diff display uses the single column layout.
+    $this->drupalGet('node/' . $node->id() . '/revisions');
+    $this->drupalPostForm(NULL, [], t('Compare'));
+    $this->assertResponse(200);
+    $this->assertLink('Single Column');
+    $this->assertNoLink('Markdown');
+    $this->assertNoLink('Standard');
+    $text = $this->xpath('//tbody/tr[5]/td[2]');
+    $this->assertEqual(htmlspecialchars_decode(strip_tags($text[0]->asXML())), '<p>great_body</p>');
+  }
+
 }
diff --git a/src/Tests/DiffLocaleTest.php b/src/Tests/DiffLocaleTest.php
index 9a0e446..31373f8 100644
--- a/src/Tests/DiffLocaleTest.php
+++ b/src/Tests/DiffLocaleTest.php
@@ -80,12 +80,12 @@ class DiffLocaleTest extends DiffTestBase {
 
     // View differences between revisions. Check that they don't mix up.
     $this->drupalGet('node/' . $english_node->id() . '/revisions');
-    $this->drupalGet('node/' . $english_node->id() . '/revisions/view/1/2');
+    $this->drupalGet('node/' . $english_node->id() . '/revisions/view/1/2/classic');
     $this->assertText('Title');
     $this->assertText('English node');
     $this->assertText('Updated title');
     $this->drupalGet('fr/node/' . $english_node->id() . '/revisions');
-    $this->drupalGet('fr/node/' . $english_node->id() . '/revisions/view/1/3');
+    $this->drupalGet('fr/node/' . $english_node->id() . '/revisions/view/1/3/classic');
     $this->assertText('Title');
     $this->assertNoText('English node');
     $this->assertNoText('Updated title');
@@ -147,7 +147,7 @@ class DiffLocaleTest extends DiffTestBase {
     $french_node->save();
 
     // Compare first two revisions.
-    $this->drupalGet('node/' . $node->id() . '/revisions/view/1/2');
+    $this->drupalGet('node/' . $node->id() . '/revisions/view/1/2/classic');
     $diffs = $this->xpath('//span[@class="diffchange"]');
     $this->assertEqual($diffs[0], 'english_revision_0');
     $this->assertEqual($diffs[1], 'english_revision_1');
@@ -192,7 +192,7 @@ class DiffLocaleTest extends DiffTestBase {
     $this->assertEqual(count($element), 4);
 
     // Compare the first two revisions.
-    $this->drupalGet('node/' . $node->id() . '/revisions/view/1/2');
+    $this->drupalGet('node/' . $node->id() . '/revisions/view/1/2/classic');
     $diffs = $this->xpath('//span[@class="diffchange"]');
     $this->assertEqual($diffs[0], 'undefined_language_revision_0');
     $this->assertEqual($diffs[1], 'undefined_language_revision_1');
diff --git a/src/Tests/DiffViewsTest.php b/src/Tests/DiffViewsTest.php
index 7df9613..6211793 100644
--- a/src/Tests/DiffViewsTest.php
+++ b/src/Tests/DiffViewsTest.php
@@ -62,6 +62,7 @@ class DiffViewsTest extends ViewTestBase {
         'node' => $node->id(),
         'left_revision' => 1,
         'right_revision' => 2,
+        'filter' => 'classic',
       ],
       // Additional route options
       [
