diff --git a/diff.routing.yml b/diff.routing.yml
index 2d7fb1c..c858606 100644
--- a/diff.routing.yml
+++ b/diff.routing.yml
@@ -1,5 +1,5 @@
 diff.revisions_diff:
-  path: '/node/{node}/revisions/view/{left_vid}/{right_vid}/{filter}'
+  path: '/node/{node}/revisions/view/{left_revision}/{right_revision}/{filter}'
   defaults:
     _controller: '\Drupal\diff\Controller\NodeRevisionController::compareNodeRevisions'
     _title: Diff General Settings
diff --git a/src/Controller/GenericRevisionController.php b/src/Controller/GenericRevisionController.php
index 78f4e82..c1300fd 100644
--- a/src/Controller/GenericRevisionController.php
+++ b/src/Controller/GenericRevisionController.php
@@ -210,8 +210,9 @@ class GenericRevisionController extends EntityComparisonBase {
           '#account' => $revision->uid->entity,
         );
         $revision_date = $this->date->format($revision->getRevisionCreationTime(), 'short');
+        $route_name = $entity_type_id != 'node' ? "entity.$entity_type_id.revisions_diff": 'entity.node.revision';
         $revision_link = $this->t($revision_log . '@date', array(
-            '@date' => $this->l($revision_date, Url::fromRoute("entity.$entity_type_id.revision", array(
+            '@date' => $this->l($revision_date, Url::fromRoute($route_name, array(
               $entity_type_id => $revision->id(),
               $entity_type_id . '_revision' => $revision->getRevisionId(),
           ))),
@@ -245,8 +246,6 @@ class GenericRevisionController extends EntityComparisonBase {
    * Returns the navigation row for diff table.
    */
   protected function buildRevisionsNavigation(EntityInterface $entity, $vids, $left_vid, $right_vid) {
-    $entity_type_id = $entity->getEntityTypeId();
-    $entity_id = $entity->id();
     $revisions_count = count($vids);
     $i = 0;
 
@@ -259,13 +258,7 @@ class GenericRevisionController extends EntityComparisonBase {
       // Second column.
       $row[] = array(
         'data' => $this->l(
-          $this->t('< Previous difference'),
-          Url::fromRoute("entity.$entity_type_id.revisions_diff",
-            array(
-              $entity_type_id => $entity_id,
-              'left_revision' => $vids[$i - 1],
-              'right_revision' => $left_vid,
-            ))
+          $this->t('< Previous difference'), $this->diff_route($entity, $vids[$i - 1], $left_vid)
         ),
         'colspan' => 2,
         'class' => 'rev-navigation',
@@ -286,13 +279,7 @@ class GenericRevisionController extends EntityComparisonBase {
       // Forth column.
       $row[] = array(
         'data' => $this->l(
-          $this->t('Next difference >'),
-          Url::fromRoute("entity.$entity_type_id.revisions_diff",
-            array(
-              $entity_type_id => $entity_id,
-              'left_revision' => $right_vid,
-              'right_revision' => $vids[$i],
-            ))
+          $this->t('Next difference >'), $this->diff_route($entity, $right_vid, $vids[$i])
         ),
         'colspan' => 2,
         'class' => 'rev-navigation',
@@ -316,24 +303,13 @@ class GenericRevisionController extends EntityComparisonBase {
    * Builds a table row with navigation between raw and raw-plain formats.
    */
   protected function buildMarkdownNavigation(EntityInterface $entity, $left_vid, $right_vid, $active_filter) {
-    $entity_type_id = $entity->getEntityTypeId();
-
     $links['raw'] = array(
       'title' => $this->t('Standard'),
-      'url' => Url::fromRoute("entity.$entity_type_id.revisions_diff", array(
-        $entity_type_id => $entity->id(),
-        'left_revision' => $left_vid,
-        'right_revision' => $right_vid,
-      )),
+      'url' => $this->diff_route($entity, $left_vid, $right_vid),
     );
     $links['raw_plain'] = array(
       'title' => $this->t('Markdown'),
-      'url' => Url::fromRoute("entity.$entity_type_id.revisions_diff", array(
-        $entity_type_id => $entity->id(),
-        'left_revision' => $left_vid,
-        'right_revision' => $right_vid,
-        'filter' => 'raw-plain',
-      )),
+      'url' => $this->diff_route($entity, $left_vid, $right_vid, TRUE),
     );
 
     // Set as the first element the current filter.
@@ -351,4 +327,39 @@ class GenericRevisionController extends EntityComparisonBase {
 
     return $row;
   }
+
+  /**
+   * Creates an url object for diff.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity to be compared.
+   * @param $left_vid
+   *   Vid of the left revision.
+   * @param $right_vid
+   *   Vid of the right revision.
+   * @param boolean $raw_plain
+   *   Flag to determinate if the route should add a raw_plain filter.
+   *
+   * @return \Drupal\Core\Url
+   *   The URL object.
+   */
+  protected function diff_route(EntityInterface $entity, $left_vid, $right_vid, $raw_plain = FALSE) {
+    $entity_type_id = $entity->getEntityTypeId();
+    // @todo Remove the diff.revisions_diff route so we avoid adding extra cases.
+    if ($entity->getEntityTypeId() == 'node') {
+      $route_name = 'diff.revisions_diff';
+    }
+    else {
+      $route_name = "entity.$entity_type_id.revisions_diff";
+    }
+    $route_parameters = [
+      $entity_type_id => $entity->id(),
+      'left_revision' => $left_vid,
+      'right_revision' => $right_vid,
+    ];
+    if ($raw_plain) {
+      $route_parameters['filter'] = 'raw-plain';
+    }
+    return Url::fromRoute($route_name, $route_parameters);
+  }
 }
diff --git a/src/Controller/NodeRevisionController.php b/src/Controller/NodeRevisionController.php
index 4f889da..9e04643 100644
--- a/src/Controller/NodeRevisionController.php
+++ b/src/Controller/NodeRevisionController.php
@@ -10,7 +10,7 @@ use Drupal\Component\Utility\Xss;
 /**
  * Returns responses for Node Revision routes.
  */
-class NodeRevisionController extends EntityComparisonBase {
+class NodeRevisionController extends GenericRevisionController {
 
   /**
    * Returns a form for revision overview page.
@@ -33,9 +33,9 @@ class NodeRevisionController extends EntityComparisonBase {
    *
    * @param NodeInterface $node
    *   The node whose revisions are compared.
-   * @param $left_vid
+   * @param $left_revision
    *   Vid of the node revision from the left.
-   * @param $right_vid
+   * @param $right_revision
    *   Vid of the node revision from the right.
    * @param $filter
    *   If $filter == 'raw' raw text is compared (including html tags)
@@ -44,285 +44,14 @@ class NodeRevisionController extends EntityComparisonBase {
    * @return array
    *   Table showing the diff between the two node revisions.
    */
-  public function compareNodeRevisions(NodeInterface $node, $left_vid, $right_vid, $filter) {
-    $diff_rows = array();
-    $build = array(
-      '#title' => $this->t('Revisions for %title', array('%title' => $node->label())),
-    );
-    if (!in_array($filter, array('raw', 'raw-plain'))) {
-      $filter = 'raw';
-    }
-    elseif ($filter == 'raw-plain') {
-      $filter = 'raw_plain';
-    }
-    // Node storage service.
-    $storage = $this->entityManager()->getStorage('node');
-    $left_revision = $storage->loadRevision($left_vid);
-    $right_revision = $storage->loadRevision($right_vid);
-    $langcode = $node->language()->getId();
-    $vids = [];
-    // Filter revisions of current translation and where the translation is
-    // affected.
-    foreach ($storage->revisionIds($node) as $vid) {
-      $revision = $storage->loadRevision($vid);
-      if ($revision->hasTranslation($langcode) && $revision->getTranslation($langcode)->isRevisionTranslationAffected()) {
-        $vids[] = $vid;
-      }
-    }
-    $diff_rows[] = $this->buildRevisionsNavigation($node->id(), $vids, $left_vid, $right_vid);
-    $diff_rows[] = $this->buildMarkdownNavigation($node->id(), $left_vid, $right_vid, $filter);
-    $diff_header = $this->buildTableHeader($left_revision, $right_revision);
-
-    // Perform comparison only if both node revisions loaded successfully.
-    if ($left_revision != FALSE && $right_revision != FALSE) {
-      $fields = $this->compareRevisions($left_revision, $right_revision);
-      $node_base_fields = $this->entityManager()->getBaseFieldDefinitions('node');
-      // Check to see if we need to display certain fields or not based on
-      // selected view mode display settings.
-      foreach ($fields as $field_name => $field) {
-        // If we are dealing with nodes only compare those fields
-        // set as visible from the selected view mode.
-        $view_mode = $this->config->get('content_type_settings.' . $node->getType() . '.view_mode');
-        // If no view mode is selected use the default view mode.
-        if ($view_mode == NULL) {
-          $view_mode = 'default';
-        }
-        list(, $field_machine_name) = explode('.', $field_name);
-        $visible = entity_get_display('node', $node->getType(), $view_mode)->getComponent($field_machine_name);
-        if ($visible == NULL && !array_key_exists($field_name, $node_base_fields)) {
-          unset($fields[$field_name]);
-        }
-      }
-      // Build the diff rows for each field and append the field rows
-      // to the table rows.
-      foreach ($fields as $field) {
-        $field_label_row = '';
-        if (!empty($field['#name'])) {
-          $field_label_row = array(
-            'data' => $this->t('Changes to %name', array('%name' => $field['#name'])),
-            'colspan' => 4,
-            'class' => array('field-name'),
-          );
-        }
-        $field_diff_rows = $this->getRows(
-          $field['#states'][$filter]['#left'],
-          $field['#states'][$filter]['#right']
-        );
-
-        // Add the field label to the table only if there are changes to that field.
-        if (!empty($field_diff_rows) && !empty($field_label_row)) {
-          $diff_rows[] = array($field_label_row);
-        }
-
-        // Add field diff rows to the table rows.
-        $diff_rows = array_merge($diff_rows, $field_diff_rows);
-      }
-
-      // Add the CSS for the diff.
-      $build['#attached']['library'][] = 'diff/diff.general';
-      $theme = $this->config->get('general_settings.theme');
-      if ($theme) {
-        if ($theme == 'default') {
-          $build['#attached']['library'][] = 'diff/diff.default';
-        }
-        elseif ($theme == 'github') {
-          $build['#attached']['library'][] = 'diff/diff.github';
-        }
-      }
-      // If the setting could not be loaded or is missing use the default theme.
-      elseif ($theme == NULL) {
-        $build['#attached']['library'][] = 'diff/diff.github';
-      }
-
-      $build['diff'] = array(
-        '#type' => 'table',
-        '#header' => $diff_header,
-        '#rows' => $diff_rows,
-        '#empty' => $this->t('No visible changes'),
-        '#attributes' => array(
-          'class' => array('diff'),
-        ),
-      );
-
-      $build['back'] = array(
-        '#type' => 'link',
-        '#attributes' => array(
-          'class' => array(
-            'button',
-            'diff-button',
-          ),
-        ),
-        '#title' => $this->t('Back to Revision Overview'),
-        '#url' => Url::fromRoute('entity.node.version_history', ['node' => $node->id()]),
-      );
-
-      return $build;
-    }
-    else {
-      // @todo When task 'Convert drupal_set_message() to a service' (2278383)
-      //   will be merged use the corresponding service instead.
-      drupal_set_message($this->t('Selected node revisions could not be loaded.'), 'error');
-    }
-  }
-
-  /**
-   * Build the header for the diff table.
-   *
-   * @param $left_revision
-   *   Revision from the left hand side.
-   * @param $right_revision
-   *   Revision from the right hand side.
-   *
-   * @return array
-   *   Header for Diff table.
-   */
-  protected function buildTableHeader($left_revision, $right_revision) {
-    $revisions = array($left_revision, $right_revision);
-    $header = array();
-
-    foreach ($revisions as $revision) {
-      $revision_log = $this->nonBreakingSpace;
-
-      if ($revision->revision_log->value != '') {
-        $revision_log = Xss::filter($revision->revision_log->value);
-      }
-      $username = array(
-        '#theme' => 'username',
-        '#account' => $revision->uid->entity,
-      );
-      $revision_date = $this->date->format($revision->getRevisionCreationTime(), 'short');
-      $revision_link = $this->t($revision_log . '@date', array(
-        '@date' => $this->l($revision_date, Url::fromRoute('entity.node.revision', array(
-          'node' => $revision->id(),
-          'node_revision' => $revision->getRevisionId(),
-        ))),
-      ));
-      // @todo When theming think about where in the table to integrate this
-      //   link to the revision user. There is some issue about multi-line headers
-      //   for theme table.
-      // $header[] = array(
-      //   'data' => $this->t('by' . '!username', array('!username' => drupal_render($username))),
-      //   'colspan' => 1,
-      // );
-      $header[] = array(
-        'data' => array('#markup' => $this->nonBreakingSpace),
-        'colspan' => 1,
-      );
-      $header[] = array(
-        'data' => array('#markup' => $revision_link),
-        'colspan' => 1,
-      );
-    }
-
-    return $header;
+  public function compareNodeRevisions(NodeInterface $node, $left_revision, $right_revision, $filter) {
+    $storage = $this->entityTypeManager()->getStorage('node');
+    $route_match = \Drupal::routeMatch();
+    $left_revision = $storage->loadRevision($left_revision);
+    $right_revision = $storage->loadRevision($right_revision);
+    $build = $this->compareEntityRevisions($route_match, $left_revision, $right_revision, $filter);
+    return $build;
   }
 
-  /**
-   * Returns the navigation row for diff table.
-   */
-  protected function buildRevisionsNavigation($nid, $vids, $left_vid, $right_vid) {
-    $revisions_count = count($vids);
-    $i = 0;
-
-    $row = array();
-    // Find the previous revision.
-    while ($left_vid > $vids[$i]) {
-      $i += 1;
-    }
-    if ($i != 0) {
-      // Second column.
-      $row[] = array(
-        'data' => $this->l(
-          $this->t('< Previous difference'),
-          Url::fromRoute('diff.revisions_diff',
-          array(
-            'node' => $nid,
-            'left_vid' => $vids[$i - 1],
-            'right_vid' => $left_vid,
-          ))
-        ),
-        'colspan' => 2,
-        'class' => 'rev-navigation',
-      );
-    }
-    else {
-      // Second column.
-      $row[] = $this->nonBreakingSpace;
-    }
-    // Third column.
-    $row[] = $this->nonBreakingSpace;
-    // Find the next revision.
-    $i = 0;
-    while ($i < $revisions_count && $right_vid >= $vids[$i]) {
-      $i += 1;
-    }
-    if ($revisions_count != $i && $vids[$i - 1] != $vids[$revisions_count - 1]) {
-      // Forth column.
-      $row[] = array(
-        'data' => $this->l(
-          $this->t('Next difference >'),
-          Url::fromRoute('diff.revisions_diff',
-          array(
-            'node' => $nid,
-            'left_vid' => $right_vid,
-            'right_vid' => $vids[$i],
-          ))
-        ),
-        'colspan' => 2,
-        'class' => 'rev-navigation',
-      );
-    }
-    else {
-      // Forth column.
-      $row[] = $this->nonBreakingSpace;
-    }
-
-    // If there are only 2 revision return an empty row.
-    if ($revisions_count == 2) {
-      return array();
-    }
-    else {
-      return $row;
-    }
-  }
-
-  /**
-   * Builds a table row with navigation between raw and raw-plain formats.
-   */
-  protected function buildMarkdownNavigation($nid, $left_vid, $right_vid, $active_filter) {
-
-    $links['raw'] = array(
-      'title' => $this->t('Standard'),
-      'url' => Url::fromRoute('diff.revisions_diff', array(
-        'node' => $nid,
-        'left_vid' => $left_vid,
-        'right_vid' => $right_vid,
-      )),
-    );
-    $links['raw_plain'] = array(
-      'title' => $this->t('Markdown'),
-      'url' => Url::fromRoute('diff.revisions_diff', array(
-        'node' => $nid,
-        'left_vid' => $left_vid,
-        'right_vid' => $right_vid,
-        'filter' => 'raw-plain',
-      )),
-    );
-
-    // Set as the first element the current filter.
-    $filter = $links[$active_filter];
-    unset($links[$active_filter]);
-    array_unshift($links, $filter);
-
-    $row[] = array(
-      'data' => array(
-        '#type' => 'operations',
-        '#links' => $links,
-      ),
-      'colspan' => 4,
-    );
-
-    return $row;
-  }
 
 }
diff --git a/src/Form/RevisionOverviewForm.php b/src/Form/RevisionOverviewForm.php
index df76714..fe9ef76 100755
--- a/src/Form/RevisionOverviewForm.php
+++ b/src/Form/RevisionOverviewForm.php
@@ -346,8 +346,8 @@ class RevisionOverviewForm extends FormBase {
       'diff.revisions_diff',
       array(
         'node' => $nid,
-        'left_vid' => $vid_left,
-        'right_vid' => $vid_right,
+        'left_revision' => $vid_left,
+        'right_revision' => $vid_right,
       )
     );
     $form_state->setRedirectUrl($redirect_url);
diff --git a/src/Plugin/views/field/DiffFrom.php b/src/Plugin/views/field/DiffFrom.php
index 072af8f..fbb402d 100644
--- a/src/Plugin/views/field/DiffFrom.php
+++ b/src/Plugin/views/field/DiffFrom.php
@@ -71,7 +71,7 @@ class DiffFrom extends DiffPluginBase {
       $entity_type_id = $diff_from_entity->getEntityTypeId();
 
       if ($diff_from_entity instanceof NodeInterface) {
-        $form_state->setRedirect('diff.revisions_diff', [$entity_type_id => $diff_from_entity->id(),'left_vid' => $diff_from_entity->getRevisionId(), 'right_vid' => $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()], $options);
       }
       else {
         $route_name = 'entity.' . $entity_type_id . '.revisions_diff';
diff --git a/src/Tests/DiffViewsTest.php b/src/Tests/DiffViewsTest.php
index 3bad92e..7df9613 100644
--- a/src/Tests/DiffViewsTest.php
+++ b/src/Tests/DiffViewsTest.php
@@ -60,8 +60,8 @@ class DiffViewsTest extends ViewTestBase {
       // Route parameters
       [
         'node' => $node->id(),
-        'left_vid' => 1,
-        'right_vid' => 2,
+        'left_revision' => 1,
+        'right_revision' => 2,
       ],
       // Additional route options
       [
