diff --git a/COPYING.txt b/COPYING.txt
index d2cbcd01539dd7b2e6db5fe0e363f627befefb7a..2ba7d78d58a25298063b9f46ae944f882af86448 100644
--- a/COPYING.txt
+++ b/COPYING.txt
@@ -1,4 +1,4 @@
-Copyright © 2013-2017 Magento, Inc.
+Copyright © 2013-2018 Magento, Inc.
 
 Each Magento source file included in this distribution is licensed under OSL 3.0 or the Magento Enterprise Edition (MEE) license
 
diff --git a/app/code/Magento/Backend/etc/adminhtml/system.xml b/app/code/Magento/Backend/etc/adminhtml/system.xml
index 27fd16cc920dc587da14585cdc397c613889c555..b6324416d26d54a31c20334268e58ccf227e09c2 100644
--- a/app/code/Magento/Backend/etc/adminhtml/system.xml
+++ b/app/code/Magento/Backend/etc/adminhtml/system.xml
@@ -215,7 +215,7 @@
                     <label>European Union Countries</label>
                     <source_model>Magento\Directory\Model\Config\Source\Country</source_model>
                 </field>
-                <field id="destinations" translate="label" type="multiselect" sortOrder="40" showInDefault="1" showInWebsite="0" showInStore="0">
+                <field id="destinations" translate="label" type="multiselect" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1">
                     <label>Top destinations</label>
                     <source_model>Magento\Directory\Model\Config\Source\Country</source_model>
                 </field>
diff --git a/app/code/Magento/Backup/Model/Db.php b/app/code/Magento/Backup/Model/Db.php
index 776141249f92bc40dc448ff50fe443f7affd8891..98b04149cc7ead396c968b09168a6a319402846b 100644
--- a/app/code/Magento/Backup/Model/Db.php
+++ b/app/code/Magento/Backup/Model/Db.php
@@ -173,6 +173,7 @@ class Db implements \Magento\Framework\Backup\Db\BackupDbInterface
             }
         }
         $backup->write($this->getResource()->getTableForeignKeysSql());
+        $backup->write($this->getResource()->getTableTriggersSql());
         $backup->write($this->getResource()->getFooter());
 
         $this->getResource()->commitTransaction();
diff --git a/app/code/Magento/Backup/Model/ResourceModel/Db.php b/app/code/Magento/Backup/Model/ResourceModel/Db.php
index 3fbaf44ebb063bc275c735cf7479d64a1b81305f..f50a3c5b091ad2a7b5b891cfb0143d0055e51092 100644
--- a/app/code/Magento/Backup/Model/ResourceModel/Db.php
+++ b/app/code/Magento/Backup/Model/ResourceModel/Db.php
@@ -114,6 +114,30 @@ class Db
         return $fkScript;
     }
 
+    /**
+     * Return triggers fro table(s)
+     *
+     * @param string|null $tableName
+     * @param bool $addDropIfExists
+     * @return string
+     */
+    public function getTableTriggersSql($tableName = null, $addDropIfExists = true)
+    {
+        $triggerScript = '';
+        if (!$tableName) {
+            $tables = $this->getTables();
+            foreach ($tables as $table) {
+                $tableTriggerScript = $this->_resourceHelper->getTableTriggersSql($table, $addDropIfExists);
+                if (!empty($tableTriggerScript)) {
+                    $triggerScript .= "\n" . $tableTriggerScript;
+                }
+            }
+        } else {
+            $triggerScript = $this->getTableTriggersSql($tableName, $addDropIfExists);
+        }
+        return $triggerScript;
+    }
+
     /**
      * Retrieve table status
      *
diff --git a/app/code/Magento/Backup/Model/ResourceModel/Helper.php b/app/code/Magento/Backup/Model/ResourceModel/Helper.php
index b5418865339c34fb3826cde0672fc2cb4c5a9891..6d7084a87546c189034b79b3da6f6a560cc9ebe3 100644
--- a/app/code/Magento/Backup/Model/ResourceModel/Helper.php
+++ b/app/code/Magento/Backup/Model/ResourceModel/Helper.php
@@ -337,4 +337,40 @@ class Helper extends \Magento\Framework\DB\Helper
     {
         $this->getConnection()->query('SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ');
     }
+
+    /**
+     * Get create script for triggers
+     *
+     * @param string $tableName
+     * @param boolean $addDropIfExists
+     * @param boolean $stripDefiner
+     * @return string
+     */
+    public function getTableTriggersSql($tableName, $addDropIfExists = false, $stripDefiner = true)
+    {
+        $script = "--\n-- Triggers structure for table `{$tableName}`\n--\n";
+        $triggers = $this->getConnection()->query('SHOW TRIGGERS LIKE \''. $tableName . '\'')->fetchAll();
+
+        if (!$triggers) {
+            return '';
+        }
+        foreach ($triggers as $trigger) {
+            if ($addDropIfExists) {
+                $script .= 'DROP TRIGGER IF EXISTS ' . $trigger['Trigger'] . ";\n";
+            }
+            $script .= "delimiter ;;\n";
+
+            $triggerData = $this->getConnection()->query('SHOW CREATE TRIGGER '. $trigger['Trigger'])->fetch();
+            if ($stripDefiner) {
+                $cleanedScript = preg_replace('/DEFINER=[^\s]*/', '', $triggerData['SQL Original Statement']);
+                $script .= $cleanedScript . "\n";
+            } else {
+                $script .= $triggerData['SQL Original Statement'] . "\n";
+            }
+            $script .= ";;\n";
+            $script .= "delimiter ;\n";
+        }
+
+        return $script;
+    }
 }
diff --git a/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml b/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml
index b4c2c00e5ac4381379d52f3f123bfd25673e36c5..b9d075966c5d16a10c88e674777c7c99c2bbf370 100644
--- a/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml
+++ b/app/code/Magento/Bundle/view/frontend/templates/sales/order/creditmemo/items/renderer.phtml
@@ -12,7 +12,6 @@
 
 <?php $items = $block->getChildren($parentItem) ?>
 <?php $_order = $block->getItem()->getOrderItem()->getOrder() ?>
-<?php $_count = count($items) ?>
 <?php $_index = 0 ?>
 
 <?php $_prevOptionId = '' ?>
diff --git a/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml b/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml
index f3866d7b1b6827ddd34f62d35278ab1bd5069bfe..e18d75ce77b9c79cf8843203dd220ec6ee89e5f1 100644
--- a/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml
+++ b/app/code/Magento/Bundle/view/frontend/templates/sales/order/invoice/items/renderer.phtml
@@ -12,7 +12,6 @@
 <?php $_order = $block->getItem()->getOrderItem()->getOrder() ?>
 
 <?php $items = $block->getChildren($parentItem) ?>
-<?php $_count = count($items) ?>
 <?php $_index = 0 ?>
 
 <?php $_prevOptionId = '' ?>
diff --git a/app/code/Magento/Bundle/view/frontend/templates/sales/order/items/renderer.phtml b/app/code/Magento/Bundle/view/frontend/templates/sales/order/items/renderer.phtml
index 84cbd54d3bdcc842ee72605170e62ed0a44b0bfb..063d66edb9e700928006c0b1fd0e89992d46938b 100644
--- a/app/code/Magento/Bundle/view/frontend/templates/sales/order/items/renderer.phtml
+++ b/app/code/Magento/Bundle/view/frontend/templates/sales/order/items/renderer.phtml
@@ -10,7 +10,6 @@
 ?>
 <?php $parentItem = $block->getItem() ?>
 <?php $items = array_merge([$parentItem], $parentItem->getChildrenItems()); ?>
-<?php $_count = count($items) ?>
 <?php $_index = 0 ?>
 
 <?php $_prevOptionId = '' ?>
diff --git a/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml b/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml
index bd99afc59a8c040d245b0d56e6ad2fec4757f86e..0cd39156b251314444acabeef54ab03d136b1218 100644
--- a/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml
+++ b/app/code/Magento/Bundle/view/frontend/templates/sales/order/shipment/items/renderer.phtml
@@ -12,7 +12,6 @@
 <?php $parentItem = $block->getItem() ?>
 <?php $items = array_merge([$parentItem->getOrderItem()], $parentItem->getOrderItem()->getChildrenItems()) ?>
 <?php $shipItems = $block->getChildren($parentItem) ?>
-<?php $_count = count($items) ?>
 <?php $_index = 0 ?>
 
 <?php $_prevOptionId = '' ?>
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-save-processor/payload-extender.js b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-save-processor/payload-extender.js
index 9a082a056a3824545ee7afc5fc361255e3f6d62c..dcd4340774af473dba75f29d113f3698c53c7ec1 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-save-processor/payload-extender.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-save-processor/payload-extender.js
@@ -1,5 +1,5 @@
 /**
- * Copyright © 2013-2017 Magento, Inc. All rights reserved.
+ * Copyright © Magento, Inc. All rights reserved.
  * See COPYING.txt for license details.
  */
 define(function () {
diff --git a/app/code/Magento/Cms/Api/GetUtilityPageIdentifiersInterface.php b/app/code/Magento/Cms/Api/GetUtilityPageIdentifiersInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..c6bf4c840470125319d5f07da23ad6529e4c1201
--- /dev/null
+++ b/app/code/Magento/Cms/Api/GetUtilityPageIdentifiersInterface.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Copyright © Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Api;
+
+/**
+ * Utility Cms Pages
+ *
+ * @api
+ */
+interface GetUtilityPageIdentifiersInterface
+{
+    /**
+     * Get List Page Identifiers
+     * @return array
+     */
+    public function execute();
+}
diff --git a/app/code/Magento/Cms/Model/GetUtilityPageIdentifiers.php b/app/code/Magento/Cms/Model/GetUtilityPageIdentifiers.php
new file mode 100644
index 0000000000000000000000000000000000000000..09c68ee9cf82d7bd1851788f9863e04638ad0ff5
--- /dev/null
+++ b/app/code/Magento/Cms/Model/GetUtilityPageIdentifiers.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Copyright © Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Model;
+
+use Magento\Cms\Api\GetUtilityPageIdentifiersInterface;
+use Magento\Framework\App\Config\ScopeConfigInterface;
+use Magento\Store\Model\ScopeInterface;
+
+/**
+ * Utility Cms Pages
+ */
+class GetUtilityPageIdentifiers implements GetUtilityPageIdentifiersInterface
+{
+    /**
+     * @var ScopeConfigInterface
+     */
+    private $scopeConfig;
+
+    /**
+     * UtilityCmsPage constructor.
+     * @param ScopeConfigInterface $scopeConfig
+     */
+    public function __construct(
+        ScopeConfigInterface $scopeConfig
+    ) {
+        $this->scopeConfig = $scopeConfig;
+    }
+
+    /**
+     * Get List Page Identifiers
+     * @return array
+     */
+    public function execute()
+    {
+        $homePageIdentifier = $this->scopeConfig->getValue(
+            'web/default/cms_home_page',
+            ScopeInterface::SCOPE_STORE
+        );
+        $noRouteIdentifier  = $this->scopeConfig->getValue(
+            'web/default/cms_no_route',
+            ScopeInterface::SCOPE_STORE
+        );
+
+        $noCookieIdentifier = $this->scopeConfig->getValue(
+            'web/default/cms_no_cookies',
+            ScopeInterface::SCOPE_STORE
+        );
+
+        return [$homePageIdentifier, $noRouteIdentifier, $noCookieIdentifier];
+    }
+}
diff --git a/app/code/Magento/Cms/etc/di.xml b/app/code/Magento/Cms/etc/di.xml
index 8309e3b5b615042999daf62acdf7084b884a9ac8..d262ebca1591c6ef90e8079dac96660247de1b97 100644
--- a/app/code/Magento/Cms/etc/di.xml
+++ b/app/code/Magento/Cms/etc/di.xml
@@ -14,6 +14,7 @@
     <preference for="Magento\Cms\Api\Data\BlockInterface" type="Magento\Cms\Model\Block" />
     <preference for="Magento\Cms\Api\BlockRepositoryInterface" type="Magento\Cms\Model\BlockRepository" />
     <preference for="Magento\Cms\Api\PageRepositoryInterface" type="Magento\Cms\Model\PageRepository" />
+    <preference for="Magento\Cms\Api\GetUtilityPageIdentifiersInterface" type="Magento\Cms\Model\GetUtilityPageIdentifiers" />
     <type name="Magento\Cms\Model\Wysiwyg\Config">
         <arguments>
             <argument name="windowSize" xsi:type="array">
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Save.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Save.php
index 44eba83d96d7e44e3a7fc95dcd80398f8210a309..12732f81f78a0cb2b20628861d0023377b79fdc5 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Save.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Save.php
@@ -13,6 +13,9 @@ use Magento\Customer\Model\EmailNotificationInterface;
 use Magento\Customer\Model\Metadata\Form;
 use Magento\Framework\Exception\LocalizedException;
 
+/**
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 class Save extends \Magento\Customer\Controller\Adminhtml\Index
 {
     /**
@@ -268,6 +271,15 @@ class Save extends \Magento\Customer\Controller\Adminhtml\Index
                 $this->_addSessionErrorMessages($messages);
                 $this->_getSession()->setCustomerFormData($originalRequestData);
                 $returnToEdit = true;
+            } catch (\Magento\Framework\Exception\AbstractAggregateException $exception) {
+                $errors = $exception->getErrors();
+                $messages = [];
+                foreach ($errors as $error) {
+                    $messages[] = $error->getMessage();
+                }
+                $this->_addSessionErrorMessages($messages);
+                $this->_getSession()->setCustomerFormData($originalRequestData);
+                $returnToEdit = true;
             } catch (LocalizedException $exception) {
                 $this->_addSessionErrorMessages($exception->getMessage());
                 $this->_getSession()->setCustomerFormData($originalRequestData);
diff --git a/app/code/Magento/Customer/Setup/UpgradeData.php b/app/code/Magento/Customer/Setup/UpgradeData.php
index b5aba18a92f2871b442393246cc7d0dab78dddeb..0ad36b1d6d11c35f55f2ebc15d05a8a36cd60ac1 100644
--- a/app/code/Magento/Customer/Setup/UpgradeData.php
+++ b/app/code/Magento/Customer/Setup/UpgradeData.php
@@ -159,6 +159,10 @@ class UpgradeData implements UpgradeDataInterface
             $this->upgradeVersionTwoZeroTwelve($customerSetup);
         }
 
+        if (version_compare($context->getVersion(), '2.0.13', '<')) {
+            $this->upgradeVersionTwoZeroThirteen($customerSetup);
+        }
+
         $indexer = $this->indexerRegistry->get(Customer::CUSTOMER_GRID_INDEXER_ID);
         $indexer->reindexAll();
         $this->eavConfig->clear();
@@ -663,4 +667,36 @@ class UpgradeData implements UpgradeDataInterface
             ['path = ?' => \Magento\Customer\Model\Customer::XML_PATH_CUSTOMER_RESET_PASSWORD_LINK_EXPIRATION_PERIOD]
         );
     }
+
+    /**
+     * @param CustomerSetup $customerSetup
+     */
+    private function upgradeVersionTwoZeroThirteen(CustomerSetup $customerSetup)
+    {
+        $entityAttributes = [
+            'customer_address' => [
+                'firstname' => [
+                    'input_filter' => 'trim'
+                ],
+                'lastname' => [
+                    'input_filter' => 'trim'
+                ],
+                'middlename' => [
+                    'input_filter' => 'trim'
+                ],
+            ],
+            'customer' => [
+                'firstname' => [
+                    'input_filter' => 'trim'
+                ],
+                'lastname' => [
+                    'input_filter' => 'trim'
+                ],
+                'middlename' => [
+                    'input_filter' => 'trim'
+                ],
+            ],
+        ];
+        $this->upgradeAttributes($entityAttributes, $customerSetup);
+    }
 }
diff --git a/app/code/Magento/Customer/etc/module.xml b/app/code/Magento/Customer/etc/module.xml
index 3f0d42b12649ae4e096808e126566498289ce19a..2dfe561d0da8fb8afb17db8e8ddd24f96938acbf 100644
--- a/app/code/Magento/Customer/etc/module.xml
+++ b/app/code/Magento/Customer/etc/module.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
-    <module name="Magento_Customer" setup_version="2.0.12">
+    <module name="Magento_Customer" setup_version="2.0.13">
         <sequence>
             <module name="Magento_Eav"/>
             <module name="Magento_Directory"/>
diff --git a/app/code/Magento/Customer/view/frontend/web/js/invalidation-processor.js b/app/code/Magento/Customer/view/frontend/web/js/invalidation-processor.js
index d99574ec3dfbf7f836d7b604ad728d4bc82cb9ea..a6ae8ff043aa8944bc3d17a201880b2ee5543ea4 100644
--- a/app/code/Magento/Customer/view/frontend/web/js/invalidation-processor.js
+++ b/app/code/Magento/Customer/view/frontend/web/js/invalidation-processor.js
@@ -1,5 +1,5 @@
 /**
- * Copyright © 2013-2017 Magento, Inc. All rights reserved.
+ * Copyright © Magento, Inc. All rights reserved.
  * See COPYING.txt for license details.
  */
 define([
diff --git a/app/code/Magento/Customer/view/frontend/web/js/invalidation-rules/website-rule.js b/app/code/Magento/Customer/view/frontend/web/js/invalidation-rules/website-rule.js
index eb7f101a6d47e0fff2c0aff12a0cb76ef4eaf10f..846edb2c836fad83cbee73230cbaf9a50800efc8 100644
--- a/app/code/Magento/Customer/view/frontend/web/js/invalidation-rules/website-rule.js
+++ b/app/code/Magento/Customer/view/frontend/web/js/invalidation-rules/website-rule.js
@@ -1,5 +1,5 @@
 /**
- * Copyright © 2013-2017 Magento, Inc. All rights reserved.
+ * Copyright © Magento, Inc. All rights reserved.
  * See COPYING.txt for license details.
  */
 define([
diff --git a/app/code/Magento/Directory/etc/adminhtml/system.xml b/app/code/Magento/Directory/etc/adminhtml/system.xml
index 21eccd5bd521e3257696e51ea3755361cab86ec4..15a82e006bffee8bc7c50abf22b00088bff74d89 100644
--- a/app/code/Magento/Directory/etc/adminhtml/system.xml
+++ b/app/code/Magento/Directory/etc/adminhtml/system.xml
@@ -109,6 +109,7 @@
                 <field id="state_required" translate="label" type="multiselect" sortOrder="1" showInDefault="1" showInWebsite="0" showInStore="0">
                     <label>State is Required for</label>
                     <source_model>Magento\Directory\Model\Config\Source\Country</source_model>
+                    <can_be_empty>1</can_be_empty>
                 </field>
                 <field id="display_all" translate="label" type="select" sortOrder="8" showInDefault="1" showInWebsite="0" showInStore="0">
                     <label>Allow to Choose State if It is Optional for Country</label>
diff --git a/app/code/Magento/Indexer/Model/Message/Invalid.php b/app/code/Magento/Indexer/Model/Message/Invalid.php
index e13a5709e2362ce73206e64e37ec1ce0e72d7f26..5a3f879b0ad8033d380c86fd4f0c3da33335a6c7 100644
--- a/app/code/Magento/Indexer/Model/Message/Invalid.php
+++ b/app/code/Magento/Indexer/Model/Message/Invalid.php
@@ -71,7 +71,7 @@ class Invalid implements \Magento\Framework\Notification\MessageInterface
         return __(
             'One or more <a href="%1">indexers are invalid</a>. Make sure your <a href="%2" target="_blank">Magento cron job</a> is running.',
             $url,
-            'http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-cron.html#config-cli-cron-bkg'
+            'http://devdocs.magento.com/guides/v2.2/config-guide/cli/config-cli-subcommands-cron.html#create-or-remove-the-magento-crontab'
         );
         //@codingStandardsIgnoreEnd
     }
diff --git a/app/code/Magento/Payment/view/adminhtml/templates/info/substitution.phtml b/app/code/Magento/Payment/view/adminhtml/templates/info/substitution.phtml
index ad24b113ffdead50ef0443fa609123b42b5e063f..582b8ca8a24bec1d5646812a38d77ee61d39f2ff 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/info/substitution.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/info/substitution.phtml
@@ -10,6 +10,8 @@
  */
 ?>
 <div>
-    <?php $block->escapeHtml($block->getMethod()->getTitle());?>
+    <?= $block->getMethod()->getTitle()
+        ? $block->escapeHtml($block->getMethod()->getTitle())
+        : $block->escapeHtml(__('Payment method')); ?>
     <?= $block->escapeHtml(__(' is not available. You still can process offline actions.')) ?>
 </div>
diff --git a/app/code/Magento/Quote/Setup/UpgradeSchema.php b/app/code/Magento/Quote/Setup/UpgradeSchema.php
index 1bb20a669bdf2693ce65f0ae97c6809da998de61..e9221895e18dc70a0d9698b77902627f5e6410ae 100644
--- a/app/code/Magento/Quote/Setup/UpgradeSchema.php
+++ b/app/code/Magento/Quote/Setup/UpgradeSchema.php
@@ -5,6 +5,7 @@
  */
 namespace Magento\Quote\Setup;
 
+use Magento\Framework\DB\Ddl\Table;
 use Magento\Framework\Setup\UpgradeSchemaInterface;
 use Magento\Framework\Setup\ModuleContextInterface;
 use Magento\Framework\Setup\SchemaSetupInterface;
@@ -40,7 +41,7 @@ class UpgradeSchema implements UpgradeSchemaInterface
                 'street',
                 'street',
                 [
-                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                    'type' => Table::TYPE_TEXT,
                     'length' => 255,
                     'comment' => 'Street'
                 ]
@@ -61,7 +62,7 @@ class UpgradeSchema implements UpgradeSchemaInterface
                 $setup->getTable('quote_address', self::$connectionName),
                 'shipping_method',
                 [
-                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                    'type' => Table::TYPE_TEXT,
                     'length' => 120
                 ]
             );
@@ -72,33 +73,53 @@ class UpgradeSchema implements UpgradeSchemaInterface
                 $setup->getTable('quote_address', self::$connectionName),
                 'firstname',
                 [
-                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                    'type' => Table::TYPE_TEXT,
                     'length' => 255,
                 ]
             )->modifyColumn(
                 $setup->getTable('quote_address', self::$connectionName),
                 'middlename',
                 [
-                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                    'type' => Table::TYPE_TEXT,
                     'length' => 40,
                 ]
             )->modifyColumn(
                 $setup->getTable('quote_address', self::$connectionName),
                 'lastname',
                 [
-                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                    'type' => Table::TYPE_TEXT,
                     'length' => 255,
                 ]
             )->modifyColumn(
                 $setup->getTable('quote', self::$connectionName),
                 'updated_at',
                 [
-                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
+                    'type' => Table::TYPE_TIMESTAMP,
                     'nullable' => false,
-                    'default' => \Magento\Framework\DB\Ddl\Table::TIMESTAMP_INIT_UPDATE,
+                    'default' => Table::TIMESTAMP_INIT_UPDATE,
                 ]
             );
         }
+        if (version_compare($context->getVersion(), '2.0.7', '<')) {
+            $connection = $setup->getConnection(self::$connectionName);
+            $connection->modifyColumn(
+                $setup->getTable('quote_address', self::$connectionName),
+                'telephone',
+                ['type' => Table::TYPE_TEXT, 'length' => 255]
+            )->modifyColumn(
+                $setup->getTable('quote_address', self::$connectionName),
+                'fax',
+                ['type' => Table::TYPE_TEXT, 'length' => 255]
+            )->modifyColumn(
+                $setup->getTable('quote_address', self::$connectionName),
+                'region',
+                ['type' => Table::TYPE_TEXT, 'length' => 255]
+            )->modifyColumn(
+                $setup->getTable('quote_address', self::$connectionName),
+                'city',
+                ['type' => Table::TYPE_TEXT, 'length' => 255]
+            );
+        }
         $setup->endSetup();
     }
 }
diff --git a/app/code/Magento/Quote/etc/module.xml b/app/code/Magento/Quote/etc/module.xml
index f682568e63d02156b619867b835c1388d24f1c93..6607dea5809b1236d42c9f4012cc637bdb42069b 100644
--- a/app/code/Magento/Quote/etc/module.xml
+++ b/app/code/Magento/Quote/etc/module.xml
@@ -6,6 +6,6 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
-    <module name="Magento_Quote" setup_version="2.0.6">
+    <module name="Magento_Quote" setup_version="2.0.7">
     </module>
 </config>
diff --git a/app/code/Magento/Sales/view/frontend/templates/email/creditmemo/items.phtml b/app/code/Magento/Sales/view/frontend/templates/email/creditmemo/items.phtml
index 297e31d6d2c981151b1b7f6c5edbd109782d763e..8cef5d57664a9c139a1f3fd423f6d69d2523734c 100644
--- a/app/code/Magento/Sales/view/frontend/templates/email/creditmemo/items.phtml
+++ b/app/code/Magento/Sales/view/frontend/templates/email/creditmemo/items.phtml
@@ -25,14 +25,11 @@
             </tr>
         </thead>
         <?php foreach ($_creditmemo->getAllItems() as $_item): ?>
-            <?php
-                if ($_item->getOrderItem()->getParentItem()) {
-                    continue;
-                }
-            ?>
-            <tbody>
-                <?= $block->getItemHtml($_item) ?>
-            </tbody>
+            <?php if (!$_item->getOrderItem()->getParentItem())  : ?>
+                <tbody>
+                    <?= $block->getItemHtml($_item) ?>
+                </tbody>
+            <?php endif; ?>
         <?php endforeach; ?>
         <tfoot class="order-totals">
             <?= $block->getChildHtml('creditmemo_totals') ?>
diff --git a/app/code/Magento/Sales/view/frontend/templates/email/invoice/items.phtml b/app/code/Magento/Sales/view/frontend/templates/email/invoice/items.phtml
index 10e07d1365470ed9a2de75a4c9e220d35fd27784..4c377dea47da2768d1443172dd8ceb1f8063ddcc 100644
--- a/app/code/Magento/Sales/view/frontend/templates/email/invoice/items.phtml
+++ b/app/code/Magento/Sales/view/frontend/templates/email/invoice/items.phtml
@@ -25,14 +25,11 @@
             </tr>
         </thead>
         <?php foreach ($_invoice->getAllItems() as $_item): ?>
-            <?php
-                if ($_item->getOrderItem()->getParentItem()) {
-                    continue;
-                }
-            ?>
-            <tbody>
-                <?= $block->getItemHtml($_item) ?>
-            </tbody>
+            <?php if (!$_item->getOrderItem()->getParentItem()) : ?>
+                <tbody>
+                    <?= $block->getItemHtml($_item) ?>
+                </tbody>
+            <?php endif; ?>
         <?php endforeach; ?>
         <tfoot class="order-totals">
             <?= $block->getChildHtml('invoice_totals') ?>
diff --git a/app/code/Magento/Sales/view/frontend/templates/email/items.phtml b/app/code/Magento/Sales/view/frontend/templates/email/items.phtml
index 358264463d49a67f1c83b3ab6fb0215af1bca77c..37469582865dc8e3c6288d97cef14fc792e0c038 100644
--- a/app/code/Magento/Sales/view/frontend/templates/email/items.phtml
+++ b/app/code/Magento/Sales/view/frontend/templates/email/items.phtml
@@ -25,14 +25,11 @@
             </tr>
         </thead>
         <?php foreach ($_items as $_item): ?>
-            <?php
-                if ($_item->getParentItem()) {
-                    continue;
-                }
-            ?>
-            <tbody>
-                <?= $block->getItemHtml($_item) ?>
-            </tbody>
+            <?php if (!$_item->getParentItem()) : ?>
+                <tbody>
+                    <?= $block->getItemHtml($_item) ?>
+                </tbody>
+            <?php endif; ?>
         <?php endforeach; ?>
         <tfoot class="order-totals">
             <?= $block->getChildHtml('order_totals') ?>
diff --git a/app/code/Magento/Sales/view/frontend/templates/email/shipment/items.phtml b/app/code/Magento/Sales/view/frontend/templates/email/shipment/items.phtml
index 2d2b7b2c2b26ee5afcdb0f49150e3f5584571db7..022511ae3cfd0304b93195144c319d93d99d1988 100644
--- a/app/code/Magento/Sales/view/frontend/templates/email/shipment/items.phtml
+++ b/app/code/Magento/Sales/view/frontend/templates/email/shipment/items.phtml
@@ -22,14 +22,11 @@
             </tr>
         </thead>
         <?php foreach ($_shipment->getAllItems() as $_item): ?>
-            <?php
-                if ($_item->getOrderItem()->getParentItem()) {
-                    continue;
-                }
-            ?>
-            <tbody>
-                <?= $block->getItemHtml($_item) ?>
-            </tbody>
+            <?php if (!$_item->getOrderItem()->getParentItem()) : ?>
+                <tbody>
+                    <?= $block->getItemHtml($_item) ?>
+                </tbody>
+            <?php endif; ?>
         <?php endforeach; ?>
     </table>
 <?php endif; ?>
diff --git a/app/code/Magento/Sales/view/frontend/templates/order/creditmemo/items.phtml b/app/code/Magento/Sales/view/frontend/templates/order/creditmemo/items.phtml
index a90300efaf5c96c7b7436ec316c1b1b59b553c3e..dc2cf2433ac8dd6cb1962ac4843769913f774a52 100644
--- a/app/code/Magento/Sales/view/frontend/templates/order/creditmemo/items.phtml
+++ b/app/code/Magento/Sales/view/frontend/templates/order/creditmemo/items.phtml
@@ -40,14 +40,12 @@
             </tr>
         </thead>
         <?php $_items = $_creditmemo->getAllItems(); ?>
-        <?php $_count = count($_items) ?>
         <?php foreach ($_items as $_item): ?>
-        <?php if ($_item->getOrderItem()->getParentItem()) {
-    continue;
-} ?>
-        <tbody>
-            <?= $block->getItemHtml($_item) ?>
-        </tbody>
+            <?php if (!$_item->getOrderItem()->getParentItem()): ?>
+                <tbody>
+                    <?= $block->getItemHtml($_item) ?>
+                </tbody>
+            <?php endif; ?>
         <?php endforeach; ?>
         <tfoot>
             <?= $block->getTotalsHtml($_creditmemo) ?>
diff --git a/app/code/Magento/Sales/view/frontend/templates/order/invoice/items.phtml b/app/code/Magento/Sales/view/frontend/templates/order/invoice/items.phtml
index 980710569fa3b9ab61d0f2df74665625a2c298d1..0f3236ec25bc30b20ed8061923dda5b13bb09014 100644
--- a/app/code/Magento/Sales/view/frontend/templates/order/invoice/items.phtml
+++ b/app/code/Magento/Sales/view/frontend/templates/order/invoice/items.phtml
@@ -37,14 +37,12 @@
             </tr>
         </thead>
         <?php $_items = $_invoice->getAllItems(); ?>
-        <?php $_count = count($_items) ?>
         <?php foreach ($_items as $_item): ?>
-        <?php if ($_item->getOrderItem()->getParentItem()) {
-    continue;
-} ?>
-        <tbody>
-            <?= $block->getItemHtml($_item) ?>
-        </tbody>
+            <?php if (!$_item->getOrderItem()->getParentItem()) : ?>
+                <tbody>
+                    <?= $block->getItemHtml($_item) ?>
+                </tbody>
+            <?php endif; ?>
         <?php endforeach; ?>
         <tfoot>
             <?= $block->getInvoiceTotalsHtml($_invoice) ?>
diff --git a/app/code/Magento/Sales/view/frontend/templates/order/print/creditmemo.phtml b/app/code/Magento/Sales/view/frontend/templates/order/print/creditmemo.phtml
index d68b4cdb62fccfac957deddf2f64d2b0404a62ec..567dfc20f2de270ec5d03a84d0fc3b9d6ea6c7b7 100644
--- a/app/code/Magento/Sales/view/frontend/templates/order/print/creditmemo.phtml
+++ b/app/code/Magento/Sales/view/frontend/templates/order/print/creditmemo.phtml
@@ -34,14 +34,12 @@
                 </tr>
             </thead>
             <?php $_items = $_creditmemo->getAllItems(); ?>
-            <?php $_count = count($_items); ?>
             <?php foreach ($_items as $_item): ?>
-            <?php if ($_item->getOrderItem()->getParentItem()) {
-    continue;
-} ?>
-            <tbody>
-                <?= $block->getItemHtml($_item) ?>
-            </tbody>
+                <?php if (!$_item->getOrderItem()->getParentItem()): ?>
+                    <tbody>
+                        <?= $block->getItemHtml($_item) ?>
+                    </tbody>
+                <?php endif; ?>
             <?php endforeach; ?>
             <tfoot>
                 <?= $block->getTotalsHtml($_creditmemo) ?>
diff --git a/app/code/Magento/Sales/view/frontend/templates/order/print/invoice.phtml b/app/code/Magento/Sales/view/frontend/templates/order/print/invoice.phtml
index 5aa1cab686e2c0221879e85aaf8c76536c08a5e0..6fe6da9e7520962da97e7a67b9b1f36c8113d204 100644
--- a/app/code/Magento/Sales/view/frontend/templates/order/print/invoice.phtml
+++ b/app/code/Magento/Sales/view/frontend/templates/order/print/invoice.phtml
@@ -32,14 +32,12 @@
             </tr>
             </thead>
             <?php $_items = $_invoice->getItemsCollection(); ?>
-            <?php $_count = $_items->count(); ?>
             <?php foreach ($_items as $_item): ?>
-            <?php if ($_item->getOrderItem()->getParentItem()) {
-    continue;
-} ?>
-            <tbody>
-                <?= $block->getItemHtml($_item) ?>
-            </tbody>
+                <?php if (!$_item->getOrderItem()->getParentItem()): ?>
+                    <tbody>
+                        <?= $block->getItemHtml($_item) ?>
+                    </tbody>
+                <?php endif; ?>
             <?php endforeach; ?>
             <tfoot>
                 <?= $block->getInvoiceTotalsHtml($_invoice) ?>
diff --git a/app/code/Magento/Shipping/view/frontend/templates/items.phtml b/app/code/Magento/Shipping/view/frontend/templates/items.phtml
index 1f4958d1775fb3140c56c65373ce127dafa5c673..ebc6163a7bd06dfe4427444fc66f46bed46cf40b 100644
--- a/app/code/Magento/Shipping/view/frontend/templates/items.phtml
+++ b/app/code/Magento/Shipping/view/frontend/templates/items.phtml
@@ -66,14 +66,12 @@
             </tr>
         </thead>
         <?php $_items = $_shipment->getAllItems(); ?>
-        <?php $_count = count($_items) ?>
         <?php foreach ($_items as $_item): ?>
-        <?php if ($_item->getOrderItem()->getParentItem()) {
-    continue;
-} ?>
-        <tbody>
-            <?= $block->getItemHtml($_item) ?>
-        </tbody>
+            <?php if (!$_item->getOrderItem()->getParentItem()) : ?>
+                <tbody>
+                    <?= $block->getItemHtml($_item) ?>
+                </tbody>
+            <?php endif; ?>
         <?php endforeach; ?>
     </table>
 </div>
diff --git a/app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php b/app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php
index d050ea84ecccb8ac25aa246ef9f1f5c53042cbcc..01addd0c19666fb0e8b80346167108bd0d4d96b5 100644
--- a/app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php
+++ b/app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php
@@ -6,12 +6,15 @@
 namespace Magento\Sitemap\Model\ResourceModel\Cms;
 
 use Magento\Cms\Api\Data\PageInterface;
-use Magento\Framework\EntityManager\MetadataPool;
-use Magento\Framework\Model\ResourceModel\Db\Context;
-use Magento\Framework\Model\AbstractModel;
+use Magento\Cms\Api\GetUtilityPageIdentifiersInterface;
 use Magento\Cms\Model\Page as CmsPage;
+use Magento\Framework\App\ObjectManager;
 use Magento\Framework\DB\Select;
 use Magento\Framework\EntityManager\EntityManager;
+use Magento\Framework\EntityManager\MetadataPool;
+use Magento\Framework\Model\AbstractModel;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\Context;
 
 /**
  * Sitemap cms page collection model
@@ -19,7 +22,7 @@ use Magento\Framework\EntityManager\EntityManager;
  * @api
  * @since 100.0.2
  */
-class Page extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
+class Page extends AbstractDb
 {
     /**
      * @var MetadataPool
@@ -34,19 +37,29 @@ class Page extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
     protected $entityManager;
 
     /**
-     * @param Context $context
-     * @param MetadataPool $metadataPool
-     * @param EntityManager $entityManager
-     * @param string $connectionName
+     * @var GetUtilityPageIdentifiersInterface
+     * @since 100.2.0
+     */
+    private $getUtilityPageIdentifiers;
+
+    /**
+     * @param Context                            $context
+     * @param MetadataPool                       $metadataPool
+     * @param EntityManager                      $entityManager
+     * @param string                             $connectionName
+     * @param GetUtilityPageIdentifiersInterface $getUtilityPageIdentifiers
      */
     public function __construct(
         Context $context,
         MetadataPool $metadataPool,
         EntityManager $entityManager,
-        $connectionName = null
+        $connectionName = null,
+        GetUtilityPageIdentifiersInterface $getUtilityPageIdentifiers = null
     ) {
-        $this->metadataPool = $metadataPool;
-        $this->entityManager = $entityManager;
+        $this->metadataPool      = $metadataPool;
+        $this->entityManager     = $entityManager;
+        $this->getUtilityPageIdentifiers = $getUtilityPageIdentifiers ?:
+            ObjectManager::getInstance()->get(GetUtilityPageIdentifiersInterface::class);
         parent::__construct($context, $connectionName);
     }
 
@@ -90,8 +103,8 @@ class Page extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
         )->where(
             'main_table.is_active = 1'
         )->where(
-            'main_table.identifier != ?',
-            \Magento\Cms\Model\Page::NOROUTE_PAGE_ID
+            'main_table.identifier NOT IN (?)',
+            $this->getUtilityPageIdentifiers->execute()
         )->where(
             'store_table.store_id IN(?)',
             [0, $storeId]
diff --git a/app/code/Magento/Sitemap/etc/module.xml b/app/code/Magento/Sitemap/etc/module.xml
index 0edfcf84f644fb2e818fecd00c9cfa1a77bf515c..0cfe3d551d162b13f916032687f7ff306962adcc 100644
--- a/app/code/Magento/Sitemap/etc/module.xml
+++ b/app/code/Magento/Sitemap/etc/module.xml
@@ -9,6 +9,7 @@
     <module name="Magento_Sitemap" setup_version="2.0.0">
         <sequence>
             <module name="Magento_Robots"/>
+            <module name="Magento_Cms"/>
             <module name="Magento_Catalog"/>
         </sequence>
     </module>
diff --git a/app/code/Magento/Theme/Block/Html/Topmenu.php b/app/code/Magento/Theme/Block/Html/Topmenu.php
index 7747576988077c0311a287232cd36d1c46d9d827..ed3445e1173314a0634212dd0c998b3bf3aa81fd 100644
--- a/app/code/Magento/Theme/Block/Html/Topmenu.php
+++ b/app/code/Magento/Theme/Block/Html/Topmenu.php
@@ -235,7 +235,13 @@ class Topmenu extends Template implements IdentityInterface
 
             if ($childLevel == 0 && $outermostClass) {
                 $outermostClassCode = ' class="' . $outermostClass . '" ';
-                $child->setClass($outermostClass);
+                $currentClass = $child->getClass();
+
+                if (empty($currentClass)) {
+                    $child->setClass($outermostClass);
+                } else {
+                    $child->setClass($currentClass . ' ' . $outermostClass);
+                }
             }
 
             if (count($colBrakes) && $colBrakes[$counter]['colbrake']) {
diff --git a/app/code/Magento/Theme/etc/config.xml b/app/code/Magento/Theme/etc/config.xml
index 925b906af952335c193342c0da8f1a3edc851956..8b740bc8d09aecb0f2fe226923a0dc35730a4bf7 100644
--- a/app/code/Magento/Theme/etc/config.xml
+++ b/app/code/Magento/Theme/etc/config.xml
@@ -45,7 +45,7 @@ Disallow: /*SID=
                 <welcome>Default welcome msg!</welcome>
             </header>
             <footer translate="copyright">
-                <copyright>Copyright &#169; 2013-2017 Magento, Inc. All rights reserved.</copyright>
+                <copyright>Copyright &#169; 2013-2018 Magento, Inc. All rights reserved.</copyright>
             </footer>
         </design>
         <theme>
diff --git a/app/code/Magento/Theme/i18n/en_US.csv b/app/code/Magento/Theme/i18n/en_US.csv
index 16cc5596b3a9302df61584f23c1b72a80732604f..daa5c27e75fccec0a767a125ccfaf74dbac6e58a 100644
--- a/app/code/Magento/Theme/i18n/en_US.csv
+++ b/app/code/Magento/Theme/i18n/en_US.csv
@@ -142,7 +142,7 @@ Empty,Empty
 "1 column","1 column"
 Configuration,Configuration
 "Default welcome msg!","Default welcome msg!"
-"Copyright © 2013-2017 Magento, Inc. All rights reserved.","Copyright © 2013-2017 Magento, Inc. All rights reserved."
+"Copyright © 2013-2018 Magento, Inc. All rights reserved.","Copyright © 2013-2018 Magento, Inc. All rights reserved."
 "Design Config Grid","Design Config Grid"
 "Rebuild design config grid index","Rebuild design config grid index"
 "Admin empty","Admin empty"
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/region.js b/app/code/Magento/Ui/view/base/web/js/form/element/region.js
index 1b2ce8889af10112ddcd654a875e73c4823576ea..0edb4c1966b54e7f81fe921177e0d26f198d3697 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/element/region.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/region.js
@@ -35,6 +35,11 @@ define([
                 return;
             }
             option = options[value];
+
+            if (typeof option === 'undefined') {
+                return;
+            }
+
             defaultPostCodeResolver.setUseDefaultPostCode(!option['is_zipcode_optional']);
 
             if (this.skipValidation) {
diff --git a/app/code/Magento/Weee/Ui/DataProvider/Product/Form/Modifier/Manager/Website.php b/app/code/Magento/Weee/Ui/DataProvider/Product/Form/Modifier/Manager/Website.php
index c5990c8a80b4ed82964e1043c776b8e494958f59..2374e2e57a5432cb5b11cf1d08f41aaa4f07c94d 100644
--- a/app/code/Magento/Weee/Ui/DataProvider/Product/Form/Modifier/Manager/Website.php
+++ b/app/code/Magento/Weee/Ui/DataProvider/Product/Form/Modifier/Manager/Website.php
@@ -68,7 +68,7 @@ class Website
         if ($storeId = $this->locator->getStore()->getId()) {
             /** @var WebsiteInterface $website */
             $website = $this->storeManager->getStore($storeId)->getWebsite();
-            $websites[$website->getId()] = [
+            $websites[] = [
                 'value' => $website->getId(),
                 'label' => $this->formatLabel(
                     $website->getName(),
@@ -81,7 +81,7 @@ class Website
                 if (!in_array($website->getId(), $product->getWebsiteIds())) {
                     continue;
                 }
-                $websites[$website->getId()] = [
+                $websites[] = [
                     'value' => $website->getId(),
                     'label' => $this->formatLabel(
                         $website->getName(),
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_structure.less b/app/design/adminhtml/Magento/backend/web/css/source/_structure.less
index 098d43e25757efe6ea6dd04ab468e86db4a0f08e..a74642152ec33dbf907b85e4cd258bacea856513 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_structure.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/_structure.less
@@ -36,6 +36,7 @@ body {
 //  ToDo UI: should be moved to messages
 .notices-wrapper {
     margin: 0 3rem;
+    min-height: 5rem;
     .messages {
         margin-bottom: 0;
     }
diff --git a/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less
index 51b02a76d0d49dcd78b159e8f636242224e6926b..2dd8463308a2cecf51ebe52f27bc7e2c5a044ef7 100644
--- a/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less
@@ -497,6 +497,16 @@
         }
     }
 
+    //
+    //  Category page 1 column layout
+    //  ---------------------------------------------
+
+    .catalog-category-view.page-layout-1column {
+        .column.main {
+            min-height: inherit;
+        }
+    }
+
 }
 
 //
diff --git a/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less
index 92225804ecc044166f2792ced298159ebb0bd617..6f7da202c16e62f7c303627781ef7902f1b834a8 100644
--- a/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less
@@ -566,6 +566,16 @@
             }
         }
     }
+
+    //
+    //  Category page 1 column layout
+    //  ---------------------------------------------
+
+    .catalog-category-view.page-layout-1column {
+        .column.main {
+            min-height: inherit;
+        }
+    }
 }
 
 //
diff --git a/app/design/frontend/Magento/luma/Magento_Newsletter/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Newsletter/web/css/source/_module.less
index 94d7c7e4e5bff5618351cf61e2b8f54176f57197..9ccd6c190ec0ef480f1cf5ba0ce6322b11ef3f87 100644
--- a/app/design/frontend/Magento/luma/Magento_Newsletter/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_Newsletter/web/css/source/_module.less
@@ -67,6 +67,7 @@
             border-bottom-left-radius: 0;
             border-top-left-radius: 0;
             margin-left: -1px;
+            white-space: nowrap;
         }
     }
 }
diff --git a/dev/tests/api-functional/testsuite/Magento/Customer/Api/CustomerMetadataTest.php b/dev/tests/api-functional/testsuite/Magento/Customer/Api/CustomerMetadataTest.php
index 4ee936f83f537c0940f04fb2dae19680ae8d2736..f2632aa1481e4752e47e2af03ace6e51660c2a97 100644
--- a/dev/tests/api-functional/testsuite/Magento/Customer/Api/CustomerMetadataTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Customer/Api/CustomerMetadataTest.php
@@ -63,7 +63,7 @@ class CustomerMetadataTest extends WebapiAbstract
                 Customer::FIRSTNAME,
                 [
                     AttributeMetadata::FRONTEND_INPUT   => 'text',
-                    AttributeMetadata::INPUT_FILTER     => '',
+                    AttributeMetadata::INPUT_FILTER     => 'trim',
                     AttributeMetadata::STORE_LABEL      => 'First Name',
                     AttributeMetadata::MULTILINE_COUNT  => 0,
                     AttributeMetadata::VALIDATION_RULES => [
diff --git a/dev/tests/integration/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/Config/SaveTest.php b/dev/tests/integration/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/Config/SaveTest.php
index a55ca821cba6082fe963d7e7ae33973d5ec73286..333ffb01b24ec0133b43f5a8a8cb99fc5feaa19a 100644
--- a/dev/tests/integration/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/Config/SaveTest.php
+++ b/dev/tests/integration/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/Config/SaveTest.php
@@ -67,7 +67,7 @@ class SaveTest extends AbstractBackendController
             'header_logo_height' => '',
             'header_logo_alt' => '',
             'header_welcome' => 'Default welcome msg!',
-            'footer_copyright' => 'Copyright © 2013-2017 Magento, Inc. All rights reserved.',
+            'footer_copyright' => 'Copyright © 2013-2018 Magento, Inc. All rights reserved.',
             'footer_absolute_footer' => '',
             'default_robots' => 'INDEX,FOLLOW',
             'custom_instructions' => '',
diff --git a/lib/internal/Magento/Framework/Data/Form/Filter/Trim.php b/lib/internal/Magento/Framework/Data/Form/Filter/Trim.php
new file mode 100644
index 0000000000000000000000000000000000000000..0dbbcf6dbf8d056902f8be9193c2b7b0ed65d363
--- /dev/null
+++ b/lib/internal/Magento/Framework/Data/Form/Filter/Trim.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Copyright © Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+/**
+ * Form Input/Output Trim Filter
+ *
+ * @author      Magento Core Team <core@magentocommerce.com>
+ */
+namespace Magento\Framework\Data\Form\Filter;
+
+class Trim implements \Magento\Framework\Data\Form\Filter\FilterInterface
+{
+    /**
+     * Returns the result of filtering $value
+     *
+     * @param string $value
+     * @return string
+     */
+    public function inputFilter($value)
+    {
+        return trim($value, ' ');
+    }
+
+    /**
+     * Returns the result of filtering $value
+     *
+     * @param string $value
+     * @return string
+     */
+    public function outputFilter($value)
+    {
+        return $value;
+    }
+}