diff --git a/app/code/Magento/Catalog/Helper/Product/View.php b/app/code/Magento/Catalog/Helper/Product/View.php
index 1973e8fbf09519027f1ce8e14c38b7b86177d5c0..8b38045df59d69aac367b3d30a3b6b976a10d683 100644
--- a/app/code/Magento/Catalog/Helper/Product/View.php
+++ b/app/code/Magento/Catalog/Helper/Product/View.php
@@ -116,24 +116,26 @@ class View extends \Magento\Framework\App\Helper\AbstractHelper
             $pageConfig->setPageLayout($settings->getPageLayout());
         }
 
+        $urlSafeSku = rawurlencode($product->getSku());
+
         // Load default page handles and page configurations
         if ($params && $params->getBeforeHandles()) {
             foreach ($params->getBeforeHandles() as $handle) {
                 $resultPage->addPageLayoutHandles(
-                    ['id' => $product->getId(), 'sku' => $product->getSku(), 'type' => $product->getTypeId()],
+                    ['id' => $product->getId(), 'sku' => $urlSafeSku, 'type' => $product->getTypeId()],
                     $handle
                 );
             }
         }
 
         $resultPage->addPageLayoutHandles(
-            ['id' => $product->getId(), 'sku' => $product->getSku(), 'type' => $product->getTypeId()]
+            ['id' => $product->getId(), 'sku' => $urlSafeSku, 'type' => $product->getTypeId()]
         );
 
         if ($params && $params->getAfterHandles()) {
             foreach ($params->getAfterHandles() as $handle) {
                 $resultPage->addPageLayoutHandles(
-                    ['id' => $product->getId(), 'sku' => $product->getSku(), 'type' => $product->getTypeId()],
+                    ['id' => $product->getId(), 'sku' => $urlSafeSku, 'type' => $product->getTypeId()],
                     $handle
                 );
             }
diff --git a/app/code/Magento/PageCache/Model/Observer/ProcessLayoutRenderElement.php b/app/code/Magento/PageCache/Model/Observer/ProcessLayoutRenderElement.php
index fd266341f782b1a41ce9bd366aa51dcc408eee2e..159afc6e90ed4107e4364c4ed086e38f21fbe535 100644
--- a/app/code/Magento/PageCache/Model/Observer/ProcessLayoutRenderElement.php
+++ b/app/code/Magento/PageCache/Model/Observer/ProcessLayoutRenderElement.php
@@ -37,7 +37,7 @@ class ProcessLayoutRenderElement
             'page_cache/block/esi',
             [
                 'blocks' => json_encode([$block->getNameInLayout()]),
-                'handles' => urlencode(json_encode($layout->getUpdate()->getHandles()))
+                'handles' => json_encode($layout->getUpdate()->getHandles())
             ]
         );
         return sprintf('<esi:include src="%s" />', $url);
diff --git a/app/code/Magento/Review/Controller/Product/ListAction.php b/app/code/Magento/Review/Controller/Product/ListAction.php
index 9669b04f91c7c683749aad291f3f4dacbfd05b47..9774547e52779a5de78e4053a5b8b4613cf19596 100644
--- a/app/code/Magento/Review/Controller/Product/ListAction.php
+++ b/app/code/Magento/Review/Controller/Product/ListAction.php
@@ -25,8 +25,10 @@ class ListAction extends \Magento\Review\Controller\Product
             $pageConfig->setPageLayout($product->getPageLayout());
         }
         $update = $this->_view->getLayout()->getUpdate();
+
+        $urlSafeSku = rawurlencode($product->getSku());
         $this->_view->addPageLayoutHandles(
-            ['id' => $product->getId(), 'sku' => $product->getSku(), 'type' => $product->getTypeId()]
+            ['id' => $product->getId(), 'sku' => $urlSafeSku, 'type' => $product->getTypeId()]
         );
 
         $this->_view->loadLayoutUpdates();
diff --git a/lib/internal/Magento/Framework/View/Layout/Reader/Container.php b/lib/internal/Magento/Framework/View/Layout/Reader/Container.php
index cf392399edb8cbb5e1dec8d4821eb30a984f9751..230e6bd9c6cd5e778c65c52c749cd362ff6c7ebe 100644
--- a/lib/internal/Magento/Framework/View/Layout/Reader/Container.php
+++ b/lib/internal/Magento/Framework/View/Layout/Reader/Container.php
@@ -86,7 +86,8 @@ class Container implements Layout\ReaderInterface
             default:
                 break;
         }
-        return $this->readerPool->interpret($readerContext, $currentElement);
+        $this->readerPool->interpret($readerContext, $currentElement);
+        return $this;
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/View/Layout/Reader/Move.php b/lib/internal/Magento/Framework/View/Layout/Reader/Move.php
index 9d0fe73d2b066118b3447bd99077d77c91be285e..e9b1c6185838bba3e8b0b43b2c996bf9c4ce443c 100644
--- a/lib/internal/Magento/Framework/View/Layout/Reader/Move.php
+++ b/lib/internal/Magento/Framework/View/Layout/Reader/Move.php
@@ -34,7 +34,7 @@ class Move implements Layout\ReaderInterface
     public function interpret(Context $readerContext, Layout\Element $currentElement)
     {
         $this->scheduleMove($readerContext->getScheduledStructure(), $currentElement);
-        return false;
+        return $this;
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/View/Layout/Reader/Remove.php b/lib/internal/Magento/Framework/View/Layout/Reader/Remove.php
index 3d0a9522e1146d04fc4ea63ca44314b6d8b4b661..3f5cfcce00093459553cd8c26201ac426b63c30f 100644
--- a/lib/internal/Magento/Framework/View/Layout/Reader/Remove.php
+++ b/lib/internal/Magento/Framework/View/Layout/Reader/Remove.php
@@ -36,6 +36,6 @@ class Remove implements Layout\ReaderInterface
     {
         $scheduledStructure = $readerContext->getScheduledStructure();
         $scheduledStructure->setElementToRemoveList((string)$currentElement->getAttribute('name'));
-        return false;
+        return $this;
     }
 }
diff --git a/lib/internal/Magento/Framework/View/Page/Config/Reader/Body.php b/lib/internal/Magento/Framework/View/Page/Config/Reader/Body.php
index 95311e008f5875e21fbbc4961ca47895c2e11c50..2d779eb0fb10f110b03800631c25e051bbfda02d 100644
--- a/lib/internal/Magento/Framework/View/Page/Config/Reader/Body.php
+++ b/lib/internal/Magento/Framework/View/Page/Config/Reader/Body.php
@@ -63,10 +63,11 @@ class Body implements Layout\ReaderInterface
         /** @var \Magento\Framework\View\Layout\Element $element */
         foreach ($bodyElement as $element) {
             if ($element->getName() === self::BODY_ATTRIBUTE) {
-                $this->setBodyAttributeTosStructure($readerContext, $element);
+                $this->setBodyAttributeToStructure($readerContext, $element);
             }
         }
-        return $this->readerPool->interpret($readerContext, $bodyElement);
+        $this->readerPool->interpret($readerContext, $bodyElement);
+        return $this;
     }
 
     /**
@@ -76,7 +77,7 @@ class Body implements Layout\ReaderInterface
      * @param Layout\Element $element
      * @return $this
      */
-    protected function setBodyAttributeTosStructure(Layout\Reader\Context $readerContext, Layout\Element $element)
+    protected function setBodyAttributeToStructure(Layout\Reader\Context $readerContext, Layout\Element $element)
     {
         if ($element->getAttribute('name') == PageConfig::BODY_ATTRIBUTE_CLASS) {
             $readerContext->getPageConfigStructure()->setBodyClass($element->getAttribute('value'));