diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 144882b9b..4eacb0b 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -2281,7 +2281,7 @@ function template_preprocess_page(&$variables) {
     );
   }
 
-  if ($node = menu_get_object()) {
+  if ($node = \Drupal::request()->attributes->get('node')) {
     $variables['node'] = $node;
   }
 
diff --git a/core/modules/book/lib/Drupal/book/Plugin/Block/BookNavigationBlock.php b/core/modules/book/lib/Drupal/book/Plugin/Block/BookNavigationBlock.php
index 3fd3f64..571a91e 100644
--- a/core/modules/book/lib/Drupal/book/Plugin/Block/BookNavigationBlock.php
+++ b/core/modules/book/lib/Drupal/book/Plugin/Block/BookNavigationBlock.php
@@ -8,6 +8,9 @@
 namespace Drupal\book\Plugin\Block;
 
 use Drupal\block\BlockBase;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\Request;
 
 /**
  * Provides a 'Book navigation' block.
@@ -18,7 +21,44 @@
  *   category = @Translation("Menus")
  * )
  */
-class BookNavigationBlock extends BlockBase {
+class BookNavigationBlock extends BlockBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * The request object.
+   *
+   * @var \Symfony\Component\HttpFoundation\Request
+   */
+  protected $request;
+
+  /**
+   * Constructs a Drupal\Component\Plugin\PluginBase object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param array $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The request object.
+   */
+  public function __construct(array $configuration, $plugin_id, array $plugin_definition, Request $request) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+
+    $this->request = $request;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('request')
+    );
+  }
 
   /**
    * {@inheritdoc}
@@ -61,7 +101,7 @@ public function blockSubmit($form, &$form_state) {
    */
   public function build() {
     $current_bid = 0;
-    if ($node = menu_get_object()) {
+    if ($node = $this->request->get('node')) {
       $current_bid = empty($node->book['bid']) ? 0 : $node->book['bid'];
     }
     if ($this->configuration['block_mode'] == 'all pages') {
diff --git a/core/modules/node/lib/Drupal/node/Plugin/views/argument_default/Node.php b/core/modules/node/lib/Drupal/node/Plugin/views/argument_default/Node.php
index 9845450..59d66ce 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/views/argument_default/Node.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/views/argument_default/Node.php
@@ -8,9 +8,12 @@
 namespace Drupal\node\Plugin\views\argument_default;
 
 use Drupal\views\Plugin\views\argument_default\ArgumentDefaultPluginBase;
+use Drupal\node\NodeInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\Request;
 
 /**
- * Default argument plugin to extract a node via menu_get_object
+ * Default argument plugin to extract a node.
  *
  * This plugin actually has no options so it odes not need to do a great deal.
  *
@@ -21,17 +24,49 @@
  */
 class Node extends ArgumentDefaultPluginBase {
 
-  public function getArgument() {
-    foreach (range(1, 3) as $i) {
-      $node = menu_get_object('node', $i);
-      if (!empty($node)) {
-        return $node->id();
-      }
-    }
+  /**
+   * The request object.
+   *
+   * @var \Symfony\Component\HttpFoundation\Request
+   */
+  protected $request;
 
-    if (arg(0) == 'node' && is_numeric(arg(1))) {
-      return arg(1);
-    }
+  /**
+   * Constructs a default argument User object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param array $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The request object.
+   */
+  public function __construct(array $configuration, $plugin_id, array $plugin_definition, Request $request) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+
+    $this->request = $request;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('request')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getArgument() {
+    if (($node = $this->request->attributes->get('node')) && $node instanceof NodeInterface) {
+      return $node->id();
+    }
+  }
 }
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php
index 7bcde78..49fb5d9 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php
@@ -138,6 +138,9 @@ public function testRecentNodeBlock() {
     // Create a page node.
     $node5 = $this->drupalCreateNode(array('uid' => $this->adminUser->id(), 'type' => 'page'));
 
+    $this->drupalLogout();
+    $this->drupalLogin($this->webUser);
+
     // Verify visibility rules.
     $this->drupalGet('');
     $label = $block->label();
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index c22abe3..af74f75 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -21,6 +21,7 @@
 use Drupal\Core\Entity\Display\EntityFormDisplayInterface;
 use Drupal\Core\Template\Attribute;
 use Drupal\file\Entity\File;
+use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 
 /**
  * Denotes that the node is not published.
@@ -581,7 +582,10 @@ function node_revision_delete($revision_id) {
  *   The ID of the node if this is a full page view, otherwise FALSE.
  */
 function node_is_page(EntityInterface $node) {
-  $page_node = menu_get_object();
+  $request = \Drupal::request();
+  if ($request->attributes->get(RouteObjectInterface::ROUTE_NAME) == 'node.view') {
+    $page_node = $request->attributes->get('node');
+  }
   return (!empty($page_node) ? $page_node->id() == $node->id() : FALSE);
 }
 
@@ -590,7 +594,7 @@ function node_is_page(EntityInterface $node) {
  */
 function node_preprocess_html(&$variables) {
   // If on an individual node page, add the node type to body classes.
-  if ($node = menu_get_object()) {
+  if (($node = \Drupal::request()->attributes->get('node')) && $node instanceof NodeInterface) {
     $variables['attributes']['class'][] = drupal_html_class('node-type-' . $node->getType());
   }
 }
@@ -1159,26 +1163,23 @@ function node_block_access($block) {
       // @see node_form_block_form_alter()
       return;
     }
-    $node = menu_get_object();
-    $node_types = node_type_get_types();
-    if (arg(0) == 'node' && arg(1) == 'add' && arg(2)) {
-      $node_add_arg = strtr(arg(2), '-', '_');
-    }
 
     // For blocks with node types associated, if the node type does not match
     // the settings from this block, deny access to it.
-    if (!empty($node)) {
-      // This is a node or node edit page.
+    $request = \Drupal::request();
+    if ($node = $request->attributes->get('node')) {
+      // Page has node.
       return in_array($node->bundle(), $allowed_types);
     }
-    elseif (isset($node_add_arg) && isset($node_types[$node_add_arg])) {
-      // This is a node creation page
-      return in_array($node_add_arg, $allowed_types);
-    }
-    else {
-      // This page does not match the $allowed_types so deny access.
-      return FALSE;
+    // This is a node creation page.
+    // $request->attributes->has('node_type') would also match administration
+    // configuration pages, which the previous URI path options did not.
+    if ($request->attributes->get(RouteObjectInterface::ROUTE_NAME) == 'node.add') {
+      $node_type = $request->attributes->get('node_type');
+      return in_array($node_type->id(), $allowed_types);
     }
+
+    return FALSE;
   }
 }
 
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_default/Tid.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_default/Tid.php
index 57ad428..f94efd1 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_default/Tid.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_default/Tid.php
@@ -10,6 +10,9 @@
 use Drupal\views\ViewExecutable;
 use Drupal\views\Plugin\views\display\DisplayPluginBase;
 use Drupal\views\Plugin\views\argument_default\ArgumentDefaultPluginBase;
+use Drupal\node\NodeInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\Request;
 
 /**
  * Taxonomy tid default argument.
@@ -22,6 +25,42 @@
 class Tid extends ArgumentDefaultPluginBase {
 
   /**
+   * The request object.
+   *
+   * @var \Symfony\Component\HttpFoundation\Request
+   */
+  protected $request;
+
+  /**
+   * Constructs a default argument User object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param array $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The request object.
+   */
+  public function __construct(array $configuration, $plugin_id, array $plugin_definition, Request $request) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->request = $request;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('request')
+    );
+  }
+
+  /**
    * Overrides \Drupal\views\Plugin\views\Plugin\views\PluginBase::init().
    */
   public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
@@ -114,6 +153,9 @@ public function submitOptionsForm(&$form, &$form_state, &$options = array()) {
     $options['vids'] = array_filter($options['vids']);
   }
 
+  /**
+   * {@inheritdoc}
+   */
   public function getArgument() {
     // Load default argument from taxonomy page.
     if (!empty($this->options['term_page'])) {
@@ -123,14 +165,8 @@ public function getArgument() {
     }
     // Load default argument from node.
     if (!empty($this->options['node'])) {
-      foreach (range(1, 3) as $i) {
-        $node = menu_get_object('node', $i);
-        if (!empty($node)) {
-          break;
-        }
-      }
       // Just check, if a node could be detected.
-      if ($node) {
+      if (($node = $this->request->attributes->has('node')) && $node instanceof NodeInterface) {
         $taxonomy = array();
         $instances = field_info_instances('node', $node->getType());
         foreach ($instances as $instance) {
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/argument/Date.php b/core/modules/views/lib/Drupal/views/Plugin/views/argument/Date.php
index 3bf75ef..3ac31eb 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/argument/Date.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/argument/Date.php
@@ -8,6 +8,9 @@
 namespace Drupal\views\Plugin\views\argument;
 
 use Drupal\Core\Database\Database;
+use Drupal\node\NodeInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\Request;
 
 /**
  * Abstract argument handler for dates.
@@ -41,16 +44,53 @@ class Date extends Formula {
    */
   protected $argFormat = 'Y-m-d';
 
+  /**
+   * The request object.
+   *
+   * @var \Symfony\Component\HttpFoundation\Request
+   */
+  protected $request;
+
   var $option_name = 'default_argument_date';
 
   /**
+   * Constructs a default argument User object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param array $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The request object.
+   */
+  public function __construct(array $configuration, $plugin_id, array $plugin_definition, Request $request) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->request = $request;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('request')
+    );
+  }
+
+  /**
    * Add an option to set the default value to the current date.
    */
   public function defaultArgumentForm(&$form, &$form_state) {
     parent::defaultArgumentForm($form, $form_state);
-    $form['default_argument_type']['#options'] += array('date' => t('Current date'));
-    $form['default_argument_type']['#options'] += array('node_created' => t("Current node's creation time"));
-    $form['default_argument_type']['#options'] += array('node_changed' => t("Current node's update time"));  }
+    $form['default_argument_type']['#options'] += array('date' => $this->t('Current date'));
+    $form['default_argument_type']['#options'] += array('node_created' => $this->t("Current node's creation time"));
+    $form['default_argument_type']['#options'] += array('node_changed' => $this->t("Current node's update time"));
+  }
 
   /**
    * Set the empty argument value to the current date,
@@ -61,18 +101,9 @@ public function getDefaultArgument($raw = FALSE) {
       return date($this->argFormat, REQUEST_TIME);
     }
     elseif (!$raw && in_array($this->options['default_argument_type'], array('node_created', 'node_changed'))) {
-      foreach (range(1, 3) as $i) {
-        $node = menu_get_object('node', $i);
-        if (!empty($node)) {
-          continue;
-        }
-      }
-
-      if (arg(0) == 'node' && is_numeric(arg(1))) {
-        $node = node_load(arg(1));
-      }
+      $node = $this->request->attributes->get('node');
 
-      if (empty($node)) {
+      if (!($node instanceof NodeInterface)) {
         return parent::getDefaultArgument();
       }
       elseif ($this->options['default_argument_type'] == 'node_created') {
@@ -90,7 +121,7 @@ public function getDefaultArgument($raw = FALSE) {
    * {@inheritdoc}
    */
   public function getSortName() {
-    return t('Date', array(), array('context' => 'Sort order'));
+    return $this->t('Date', array(), array('context' => 'Sort order'));
   }
 
   /**
