diff --git a/amp.module b/amp.module
index 3961e24..637b2a8 100644
--- a/amp.module
+++ b/amp.module
@@ -54,7 +54,7 @@ function amp_entity_view_alter(array &$build, EntityInterface $entity, EntityVie
             $build['#attached']['html_head_link'][] = array(
               array(
                 'rel' => 'amphtml',
-                'href' => $config[0]['href'] . '/amp',
+                'href' => $config[0]['href'] . '?amp',
               ),
               TRUE,
             );
@@ -314,7 +314,7 @@ function amp_node_form_submit(&$form, FormStateInterface $form_state) {
   // Redirect to the alias if it exists, otherwise use the node URL.
   $url = !empty($path[0]['alias']) ? $path[0]['alias'] : $path[0]['source'];
   if (isset($url)) {
-    $amp_path = $url . "/amp";
+    $amp_path = $url . "?amp";
     $response = new RedirectResponse($amp_path);
     $response->send();
   }
@@ -329,75 +329,41 @@ function amp_node_form_submit_with_warn(&$form, FormStateInterface $form_state)
   // Redirect to the alias if it exists, otherwise use the node URL.
   $url = !empty($path[0]['alias']) ? $path[0]['alias'] : $path[0]['source'];
   if (isset($url)) {
-    $amp_path = $url . "/amp?warnfix";
+    $amp_path = $url . "?amp&warnfix";
     $response = new RedirectResponse($amp_path);
     $response->send();
   }
 }
 
 /**
- * Implements hook_entity_insert().
- */
-function amp_entity_insert(EntityInterface $entity) {
-  amp_create_amp_alias($entity);
-}
+<<<<<<< HEAD
+* Implements hook_form_BASE_FORM_ID_alter().
+*/
+function amp_form_node_type_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) {
+  $enabled = node_type_get_names();
+  $node_type = $form['type']['#default_value'];
+
+  $form['workflow']['amp'] = array(
+    '#type' => 'select',
+    '#title' => t('Enable AMP pages for this content type'),
+    '#options' => array(
+      0 => t('No'),
+      1 => t('Yes'),
+    ),
+    '#default_value' => !empty($enabled[$node_type]) ? 1 : 0,
+  );
 
-/**
- * Implements hook_entity_update().
- */
-function amp_entity_update(EntityInterface $entity) {
-  // Delete any old AMP aliases.
-  amp_delete_amp_alias($entity);
-  // Create a new AMP alias.
-  amp_create_amp_alias($entity);
+  $form['actions']['submit']['#submit'][] = 'amp_node_settings_submit';
 }
 
-/**
- * Implements hook_entity_delete().
- */
-function amp_entity_delete(EntityInterface $entity) {
-  amp_delete_amp_alias($entity);
-}
-
-/**
- * Helper function to create an alias.
- * TODO: Consider moving amp_create_amp_alias and amp_delete_amp_alias functions
- * to their own class and determine how that might affect the D7 module.
- */
-function amp_create_amp_alias(EntityInterface $entity) {
-  if ($entity instanceof EntityViewDisplay) {
-    return;
-  }
-  if ($entity->hasLinkTemplate('canonical')) {
-    $path = '/' . $entity->toUrl('canonical')->getInternalPath();
-    $langcode = $entity->language()->getId();
-    // First check to see if there is an alias for the node.
-    if ($alias = \Drupal::service('path.alias_storage')->lookupPathAlias($path, $langcode)) {
-
-      // Get a list of all AMP-enabled node types.
-      $amp_entity_type_service = \Drupal::service('amp.entity_type');
-      $enabled_types = $amp_entity_type_service->getAmpEnabledTypes();
-      $type = $entity->getType();
-      // Check if the content is AMP enabled.
-      if ($enabled_types[$type] === $type) {
-        // Save an AMP version of the alias.
-        \Drupal::service('path.alias_storage')->save($path . "/amp", $alias . "/amp", $langcode);
-      }
-    }
-  }
-}
-
-/**
- * Helper function to delete an alias.
- */
-function amp_delete_amp_alias(EntityInterface $entity) {
-  if ($entity instanceof EntityViewDisplay) {
-    return;
-  }
-  if ($entity->hasLinkTemplate('canonical')) {
-    $amp_path = '/' . $entity->toUrl('canonical')->getInternalPath() . "/amp";
-    \Drupal::service('path.alias_storage')->delete(array('source' => $amp_path));
-  }
+function amp_node_settings_submit(&$form, FormStateInterface $form_state) {
+  $amp_enabled = $form_state->getValue('amp');
+  $content_type = $form['type']['#default_value'];
+  $config = \Drupal::service('config.factory')->getEditable('amp.settings');
+  // Like on the configuration screen, use the content type for the value
+  // if it is set to true.
+  $config->set('node_types.' . $content_type, !empty($amp_enabled) ? $content_type : 0);
+  $config->save();
 }
 
 /**
@@ -423,24 +389,11 @@ function amp_view_modes_submit(&$form, \Drupal\Core\Form\FormStateInterface $for
   }
   $removed = array_diff($old_values, $new_values);
   $added = array_diff($new_values, $old_values);
-  $type = $form['#bundle'];
-  // Load all nodes of the type being edited.
-  $storage = \Drupal::entityManager()->getStorage('node');
-  $nids = Drupal::entityQuery('node')->condition('type', $type)->execute();
-  $amp_nodes = $storage->loadMultiple($nids);
-  if (is_array($removed) && in_array('amp', $removed) && isset($type)) {
-    // Remove all AMP aliases for the content type.
-    foreach ($amp_nodes as $amp_node) {
-      amp_delete_amp_alias($amp_node);
-    }
+  if (is_array($removed) && in_array('amp', $removed) && $type = $form['#bundle']) {
     // If the AMP view was removed, clear cache of AMP-enabled content.
     \Drupal::cache()->delete('amp_enabled_types');
   }
-  if (is_array($added) && in_array('amp', $added) && isset($type)) {
-    // Create all AMP aliases for the content type.
-    foreach ($amp_nodes as $amp_node) {
-      amp_create_amp_alias($amp_node);
-    }
+  if (is_array($added) && in_array('amp', $added)) {
     // If the AMP view was added, clear cache of AMP-enabled content.
     \Drupal::cache()->delete('amp_enabled_types');
   }
diff --git a/amp.routing.yml b/amp.routing.yml
index a8828f6..b3c1f7f 100644
--- a/amp.routing.yml
+++ b/amp.routing.yml
@@ -7,12 +7,13 @@ amp.settings:
     _permission: 'administer site configuration'
 
 amp.node_amp_page:
-  path: '/node/{node}/amp'
+  path: '/node/{node}/revisions/{node_revision}/view'
   defaults:
-    _controller: '\Drupal\amp\Controller\ampPage::amp'
-    _title: 'AMP Page'
+    _controller: '\Drupal\amp\Controller\ampNodeController::revisionShow'
+    _title_callback: '\Drupal\node\Controller\NodeController::revisionPageTitle'
   requirements:
     _permission: 'access content'
+    node: \d+
   options:
     _amp_route: FALSE
 
diff --git a/src/Controller/ampNodeController.php b/src/Controller/ampNodeController.php
new file mode 100644
index 0000000..0062897
--- /dev/null
+++ b/src/Controller/ampNodeController.php
@@ -0,0 +1,141 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\amp\Controller\ampNodeController.
+ */
+
+namespace Drupal\amp\Controller;
+
+use Drupal\amp\Routing\AmpContext;
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Datetime\DateFormatterInterface;
+use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Drupal\Core\Render\RendererInterface;
+use Drupal\node\Controller\NodeController;
+use Drupal\node\Controller\NodeViewController;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\Request;
+use Drupal\Core\Cache\Cache;
+
+/**
+ * Class ampNodeController.
+ *
+ * @package Drupal\amp\Controller
+ */
+class ampNodeController extends NodeController {
+
+  /**
+   * The AMP context service.
+   *
+   * @var AmpContext $ampContext
+   */
+  protected $ampContext;
+
+  /**
+   * The config factory interface.
+   *
+   * @var ConfigFactoryInterface $configFactory
+   */
+  protected $configFactory;
+
+  /**
+   * The date formatter service.
+   *
+   * @var \Drupal\Core\Datetime\DateFormatterInterface
+   */
+  protected $dateFormatter;
+
+  /**
+   * The renderer service.
+   *
+   * @var \Drupal\Core\Render\RendererInterface
+   */
+  protected $renderer;
+
+  /**
+   * Constructs a NodeController object.
+   *
+   * @param \Drupal\amp\Routing\AmpContext; $amp_context
+   *   The AMP context.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface; $config_factory_interface
+   *   The config factory.
+   * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
+   *   The date formatter service.
+   * @param \Drupal\Core\Render\RendererInterface $renderer
+   *   The renderer service.
+   */
+  public function __construct(AmpContext $amp_context, ConfigFactoryInterface
+  $config_factory_interface, DateFormatterInterface $date_formatter, RendererInterface $renderer) {
+    parent::__construct($date_formatter, $renderer);
+    $this->ampContext = $amp_context;
+    $this->configFactory = $config_factory_interface;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('router.amp_context'),
+      $container->get('config.factory'),
+      $container->get('date.formatter'),
+      $container->get('renderer')
+    );
+  }
+
+  public function warningsOn()
+  {
+    // First check the config if library warnings are on
+    $amp_config = $this->configFactory->get('amp.settings');
+    if ($amp_config->get('amp_library_warnings_display')) {
+      return true;
+    }
+
+    // Then check the URL if library warnings are enabled
+    /** @var Request $request */
+    $request = \Drupal::request();
+    $user_wants_amp_library_warnings = $request->get('warnfix');
+    if (isset($user_wants_amp_library_warnings)) {
+      return true;
+    }
+
+    return false;
+  }
+
+  /**
+   * Displays an AMP node revision.
+   *
+   * @param int $node_revision
+   *   The node revision ID.
+   *
+   * @return array
+   *   An array suitable for drupal_render().
+   */
+  public function revisionShow($node_revision) {
+    // Only use the AMP view mode for content that is AMP enabled.
+    if ($this->ampContext->isAmpRoute()) {
+      $node = $this->entityManager()->getStorage('node')->loadRevision($node_revision);
+      $node_view_controller = new NodeViewController($this->entityManager, $this->renderer);
+
+      $page = $node_view_controller->view($node, 'amp');
+
+      // Otherwise adding a ?warnfix query parameter at the end of URL will have no effect
+      $page['#cache']['contexts'] = Cache::mergeContexts($page['#cache']['contexts'], ['url.query_args:warnfix']);
+      if ($this->warningsOn()) {
+        $page['#cache']['keys'][] = 'amp-warnings-on';
+      }
+      else {
+        $page['#cache']['keys'][] = 'amp-warnings-off';
+      }
+
+      unset($page['nodes'][$node->id()]['#cache']);
+    }
+    // Otherwise return the default view mode.
+    else {
+      $page = parent::revisionShow($node_revision);
+    }
+
+    return $page;
+  }
+}
diff --git a/src/Controller/ampPage.php b/src/Controller/ampPage.php
deleted file mode 100644
index 9852809..0000000
--- a/src/Controller/ampPage.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\amp\Controller\ampPage.
- */
-
-namespace Drupal\amp\Controller;
-
-use Drupal\amp\EntityTypeInfo;
-use Drupal\Core\Config\ConfigFactoryInterface;
-use Drupal\Core\Controller\ControllerBase;
-use Drupal\Core\Entity\EntityManagerInterface;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-use Drupal\Core\Render\RendererInterface;
-use Drupal\node\Controller\NodeViewController;
-use Drupal\Core\Cache\Cache;
-
-/**
- * Class ampPage.
- *
- * @package Drupal\amp\Controller
- */
-class ampPage extends ControllerBase {
-
-  /**
-   * Information about AMP-enabled content types.
-   *
-   * @var \Drupal\amp\EntityTypeInfo
-   */
-  protected $entityTypeInfo;
-
-  /** @var EntityManagerInterface  */
-  protected $entity_manager;
-
-  /**
-   * The renderer service.
-   *
-   * @var \Drupal\Core\Render\RendererInterface
-   */
-  protected $renderer;
-
-  /** @var ConfigFactoryInterface $configFactory */
-  protected $configFactory;
-
-  /**
-   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
-   *   The entity manager service.
-   * @param \Drupal\Core\Render\RendererInterface $renderer
-   *   The renderer service.
-   * @param \Drupal\Core\Config\ConfigFactoryInterface; $configFactoryInterface
-   *   The config factory.
-   * @param \Drupal\amp\EntityTypeInfo $entity_type_info
-   *   Information about AMP-enabled content types.
-   */
-  public function __construct(EntityManagerInterface $entity_manager, RendererInterface $renderer, ConfigFactoryInterface
-  $configFactoryInterface, EntityTypeInfo $entity_type_info) {
-    $this->entity_manager = $entity_manager;
-    $this->renderer = $renderer;
-    $this->configFactory = $configFactoryInterface;
-    $this->entityTypeInfo = $entity_type_info;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('entity.manager'),
-      $container->get('renderer'),
-      $container->get('config.factory'),
-      $container->get('amp.entity_type')
-    );
-  }
-
-  public function warningsOn()
-  {
-    // First check the config if library warnings are on
-    $amp_config = $this->configFactory->get('amp.settings');
-    if ($amp_config->get('amp_library_warnings_display')) {
-      return true;
-    }
-
-    // Then check the URL if library warnings are enabled
-    /** @var Request $request */
-    $request = \Drupal::request();
-    $user_wants_amp_library_warnings = $request->get('warnfix');
-    if (isset($user_wants_amp_library_warnings)) {
-      return true;
-    }
-
-    return false;
-  }
-
-  /**
-   * Amp page display.
-   *
-   * @return render array.
-   */
-  public function amp($node) {
-
-    // Copied from the revisionShow() method on the NodeController.
-    // The node_view_controller also sets the canonical link to the primary node.
-    $node = $this->entity_manager->getStorage('node')->load($node);
-    $node_view_controller = new NodeViewController($this->entity_manager, $this->renderer);
-
-    // Get a list of content types that are AMP enabled.
-    $enabled_types = $this->entityTypeInfo->getAmpEnabledTypes();
-    $type = $node->getType();
-
-    // Only use the AMP view mode for content that is AMP enabled.
-    if ($enabled_types[$type] === $type) {
-      $page = $node_view_controller->view($node, 'amp');
-    }
-    // Otherwise return the default view mode.
-    else {
-      $page = $node_view_controller->view($node, 'full');
-    }
-
-    // Otherwise adding a ?warnfix query parameter at the end of URL will have no effect
-    $page['#cache']['contexts'] = Cache::mergeContexts($page['#cache']['contexts'], ['url.query_args:warnfix']);
-    if ($this->warningsOn()) {
-      $page['#cache']['keys'][] = 'amp-warnings-on';
-    }
-    else {
-      $page['#cache']['keys'][] = 'amp-warnings-off';
-    }
-
-    // @todo is this required?
-    unset($page['nodes'][$node->id()]['#cache']);
-    return $page;
-  }
-
-}
diff --git a/src/Routing/AmpContext.php b/src/Routing/AmpContext.php
index 805775d..5003ec8 100644
--- a/src/Routing/AmpContext.php
+++ b/src/Routing/AmpContext.php
@@ -67,9 +67,8 @@ class AmpContext {
       return TRUE;
     }
 
-    // We only want to consider URLs that end with 'amp'.
-    $current_path = \Drupal::service('path.current')->getPath();
-    if (substr($current_path, -3) != 'amp') {
+    // We only want to consider path with amp in the query string.
+    if (!(isset($_GET['amp']))) {
       return FALSE;
     }
 
