diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/widget/link/link_inline.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/widget/link/link_inline.phtml
index 262bc431e158efc4abd8da807744bcbdce34b986..386400d7b901cd0bdabda3f706e65f8358547058 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/widget/link/link_inline.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/widget/link/link_inline.phtml
@@ -6,6 +6,6 @@
 
 // @codingStandardsIgnoreFile
 ?>
-<div class="widget block block-product-link-inline">
+<span class="widget block block-product-link-inline">
     <a <?php /* @escapeNotVerified */ echo $block->getLinkAttributes() ?>><span><?php echo $block->escapeHtml($block->getLabel()) ?></span></a>
-</div>
+</span>
diff --git a/app/code/Magento/Cms/view/frontend/templates/widget/link/link_inline.phtml b/app/code/Magento/Cms/view/frontend/templates/widget/link/link_inline.phtml
index 68aafe5973d0ad3fddbb74b9765236d7325dd3e1..382b492db3da5c815530d87f13ee959d82e2c083 100644
--- a/app/code/Magento/Cms/view/frontend/templates/widget/link/link_inline.phtml
+++ b/app/code/Magento/Cms/view/frontend/templates/widget/link/link_inline.phtml
@@ -4,8 +4,8 @@
  * See COPYING.txt for license details.
  */
 ?>
-<div class="widget block block-cms-link-inline">
+<span class="widget block block-cms-link-inline">
     <a <?php /* @escapeNotVerified */ echo $block->getLinkAttributes() ?>>
         <span><?php echo $block->escapeHtml($block->getLabel()) ?></span>
     </a>
-</div>
+</span>
diff --git a/app/code/Magento/Deploy/Model/DeployManager.php b/app/code/Magento/Deploy/Model/DeployManager.php
index c54aa38f5a33ab21283537c90c717f3844d08a0e..57c6a78e6b572026cc451a4cf28bfc6e8c450e2d 100644
--- a/app/code/Magento/Deploy/Model/DeployManager.php
+++ b/app/code/Magento/Deploy/Model/DeployManager.php
@@ -12,6 +12,9 @@ use Magento\Deploy\Console\Command\DeployStaticOptionsInterface as Options;
 use Magento\Deploy\Model\Deploy\TemplateMinifier;
 use Magento\Framework\App\State;
 
+/**
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 class DeployManager
 {
     /**
@@ -108,6 +111,9 @@ class DeployManager
     {
         if ($this->idDryRun) {
             $this->output->writeln('Dry run. Nothing will be recorded to the target directory.');
+        } else {
+            $version = (new \DateTime())->getTimestamp();
+            $this->versionStorage->save($version);
         }
 
         /** @var DeployStrategyProvider $strategyProvider */
@@ -133,7 +139,9 @@ class DeployManager
         }
 
         $this->minifyTemplates();
-        $this->saveDeployedVersion();
+        if (!$this->idDryRun) {
+            $this->output->writeln("New version of deployed files: {$version}");
+        }
 
         return $result;
     }
@@ -197,17 +205,4 @@ class DeployManager
     {
         return isset($this->options[Options::JOBS_AMOUNT]) ? (int)$this->options[Options::JOBS_AMOUNT] : 0;
     }
-
-    /**
-     * Save version of deployed files
-     * @return void
-     */
-    private function saveDeployedVersion()
-    {
-        if (!$this->idDryRun) {
-            $version = (new \DateTime())->getTimestamp();
-            $this->output->writeln("New version of deployed files: {$version}");
-            $this->versionStorage->save($version);
-        }
-    }
 }
diff --git a/app/code/Magento/Theme/etc/config.xml b/app/code/Magento/Theme/etc/config.xml
index 5fa88578183d453339cf0bd9a529eb82402b3b1f..98df41096daef12e399e2ec67a93bbf94ff5b62c 100644
--- a/app/code/Magento/Theme/etc/config.xml
+++ b/app/code/Magento/Theme/etc/config.xml
@@ -64,5 +64,10 @@ Disallow: /*SID=
                 </allowed_resources>
             </media_storage_configuration>
         </system>
+        <dev>
+            <static>
+                <sign>1</sign>
+            </static>
+        </dev>
     </default>
 </config>
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/ImageTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/ImageTest.php
index 688dc42958b0bacd41e99db0b8575a232e651ba2..88fd7797e768fb5fb227a8fc888ad481794d4347 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/ImageTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/ImageTest.php
@@ -46,7 +46,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase
     public function testGetUrlPlaceholder($model)
     {
         $this->assertStringMatchesFormat(
-            'http://localhost/pub/static/frontend/%s/Magento_Catalog/images/product/placeholder/image.jpg',
+            'http://localhost/pub/static/%s/frontend/%s/Magento_Catalog/images/product/placeholder/image.jpg',
             $model->getUrl()
         );
     }
diff --git a/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/ConfigTest.php
index a5f5718d17c1eb05b98b1fbc9b8daae4e6a7bb3b..fac6a3b48b4a6603201d18f551ac6c8baf6daeb3 100644
--- a/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/ConfigTest.php
+++ b/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/ConfigTest.php
@@ -42,7 +42,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     public function testGetConfigCssUrls()
     {
         $config = $this->_model->getConfig();
-        $publicPathPattern = 'http://localhost/pub/static/adminhtml/Magento/backend/en_US/mage/%s';
+        $publicPathPattern = 'http://localhost/pub/static/%s/adminhtml/Magento/backend/en_US/mage/%s';
         $this->assertStringMatchesFormat($publicPathPattern, $config->getPopupCss());
         $this->assertStringMatchesFormat($publicPathPattern, $config->getContentCss());
     }
diff --git a/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php b/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php
index 40a97894fc55c2e840384ea1cd5d35d33450ec90..3211bacc613a4dc0dc768061f0a6810e790ac59b 100644
--- a/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php
+++ b/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php
@@ -58,7 +58,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase
             $this->assertInstanceOf(\Magento\Framework\DataObject::class, $item);
             $this->assertStringEndsWith('/1.swf', $item->getUrl());
             $this->assertStringMatchesFormat(
-                'http://%s/static/adminhtml/%s/%s/Magento_Cms/images/placeholder_thumbnail.jpg',
+                'http://%s/static/%s/adminhtml/%s/%s/Magento_Cms/images/placeholder_thumbnail.jpg',
                 $item->getThumbUrl()
             );
             return;
diff --git a/dev/tests/integration/testsuite/Magento/Email/Model/Template/FilterTest.php b/dev/tests/integration/testsuite/Magento/Email/Model/Template/FilterTest.php
index a6527a6c66936b794b9eb38588e335e9076b8880..be9c2afe32f42cc0da7ebc591fc144cae8ad39e2 100644
--- a/dev/tests/integration/testsuite/Magento/Email/Model/Template/FilterTest.php
+++ b/dev/tests/integration/testsuite/Magento/Email/Model/Template/FilterTest.php
@@ -283,6 +283,7 @@ class FilterTest extends \PHPUnit_Framework_TestCase
      * @magentoComponentsDir Magento/Email/Model/_files/design
      * @magentoAppIsolation enabled
      * @magentoDbIsolation enabled
+     * @magentoConfigFixture default_store dev/static/sign 0
      * @dataProvider inlinecssDirectiveDataProvider
      *
      * @param string $templateText
diff --git a/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php b/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php
index 700346fe0aed17d09c669fdf5f8c27a8c7b922b0..15dca70b27a5e4e14e06a8bac09093ed3ce17533 100644
--- a/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php
+++ b/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php
@@ -122,7 +122,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
             ->getArea(Area::AREA_FRONTEND)
             ->load();
 
-        $expectedViewUrl = 'static/frontend/Magento/blank/en_US/Magento_Theme/favicon.ico';
+        $expectedViewUrl = '/frontend/Magento/blank/en_US/Magento_Theme/favicon.ico';
         $this->model->setDesignConfig([
             'area' => 'frontend',
             'store' => $this->objectManager->get(\Magento\Store\Model\StoreManagerInterface::class)
@@ -578,7 +578,6 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
             ->getArea(Area::AREA_FRONTEND)
             ->load();
 
-        $expectedViewUrl = 'static/frontend/Magento/blank/en_US/Magento_Theme/favicon.ico';
         $this->model->setTemplateSubject('{{view url="Magento_Theme::favicon.ico"}}');
         $this->model->setDesignConfig([
             'area' => 'frontend',
@@ -588,10 +587,16 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
         ]);
 
         $this->setNotDefaultThemeForFixtureStore();
-        $this->assertStringEndsNotWith($expectedViewUrl, $this->model->getProcessedTemplateSubject([]));
+        $this->assertStringMatchesFormat(
+            '%s/frontend/Magento/luma/en_US/Magento_Theme/favicon.ico',
+            $this->model->getProcessedTemplateSubject([])
+        );
 
         $this->setDefaultThemeForFixtureStore();
-        $this->assertStringEndsWith($expectedViewUrl, $this->model->getProcessedTemplateSubject([]));
+        $this->assertStringMatchesFormat(
+            '%s/frontend/Magento/blank/en_US/Magento_Theme/favicon.ico',
+            $this->model->getProcessedTemplateSubject([])
+        );
     }
 
     /**
@@ -605,7 +610,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
             ->load();
 
         $this->assertStringEndsWith(
-            'static/frontend/Magento/luma/en_US/Magento_Email/logo_email.png',
+            '/frontend/Magento/luma/en_US/Magento_Email/logo_email.png',
             $this->model->getDefaultEmailLogo()
         );
     }
diff --git a/dev/tests/integration/testsuite/Magento/Framework/View/Element/AbstractBlockTest.php b/dev/tests/integration/testsuite/Magento/Framework/View/Element/AbstractBlockTest.php
index 6cd132378258860fc875308b8fb85f8cd6d94e6e..1846d25f2db390c33e3180a67471382099adfd7a 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/View/Element/AbstractBlockTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/View/Element/AbstractBlockTest.php
@@ -477,7 +477,10 @@ class AbstractBlockTest extends \PHPUnit_Framework_TestCase
     public function testGetViewFileUrl()
     {
         $actualResult = $this->_block->getViewFileUrl('css/styles.css');
-        $this->assertStringMatchesFormat('http://localhost/pub/static/frontend/%s/en_US/css/styles.css', $actualResult);
+        $this->assertStringMatchesFormat(
+            'http://localhost/pub/static/%s/frontend/%s/en_US/css/styles.css',
+            $actualResult
+        );
     }
 
     public function testGetModuleName()
diff --git a/dev/tests/integration/testsuite/Magento/Review/Controller/ProductTest.php b/dev/tests/integration/testsuite/Magento/Review/Controller/ProductTest.php
index 35d83ef500077c32be0a6f3c76370e38389a0386..9c54835d3c51188907802ced500b4d1b146c08c6 100644
--- a/dev/tests/integration/testsuite/Magento/Review/Controller/ProductTest.php
+++ b/dev/tests/integration/testsuite/Magento/Review/Controller/ProductTest.php
@@ -18,6 +18,6 @@ class ProductTest extends \Magento\TestFramework\TestCase\AbstractController
         $this->getRequest()->setParam('id', $product->getId());
         $this->dispatch('review/product/listAction');
         $result = $this->getResponse()->getBody();
-        $this->assertContains("static/frontend/Magento/blank/en_US/Magento_Theme/favicon.ico", $result);
+        $this->assertContains("/frontend/Magento/blank/en_US/Magento_Theme/favicon.ico", $result);
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Variable/Model/Variable/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Variable/Model/Variable/ConfigTest.php
index d41bae33c54df10ec53d7ce51055e3d69def77f6..4828cb68190e13d5f1b6d9d40c5a4003477052b3 100644
--- a/dev/tests/integration/testsuite/Magento/Variable/Model/Variable/ConfigTest.php
+++ b/dev/tests/integration/testsuite/Magento/Variable/Model/Variable/ConfigTest.php
@@ -20,7 +20,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
+        $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
             \Magento\Variable\Model\Variable\Config::class
         );
     }
@@ -28,8 +28,9 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     public function testGetWysiwygJsPluginSrc()
     {
         $src = $this->_model->getWysiwygJsPluginSrc();
-        $this->assertStringStartsWith('http://localhost/pub/static/adminhtml/Magento/backend/en_US/mage/adminhtml/',
-            $src);
-        $this->assertStringEndsWith('editor_plugin.js', $src);
+        $this->assertStringMatchesFormat(
+            'http://localhost/pub/static/%s/adminhtml/Magento/backend/en_US/mage/adminhtml/%s/editor_plugin.js',
+            $src
+        );
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Widget/Model/Widget/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Widget/Model/Widget/ConfigTest.php
index 91aca8173d6f3d13a92ec513e618dba8ae71cda0..368aa34604a508aa2cadec46e25f49a04cf556ac 100644
--- a/dev/tests/integration/testsuite/Magento/Widget/Model/Widget/ConfigTest.php
+++ b/dev/tests/integration/testsuite/Magento/Widget/Model/Widget/ConfigTest.php
@@ -43,8 +43,10 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
         $this->assertArrayHasKey('widget_window_url', $settings);
 
         $jsFilename = $settings['widget_plugin_src'];
-        $this->assertStringStartsWith('http://localhost/pub/static/adminhtml/Magento/backend/en_US/', $jsFilename);
-        $this->assertStringEndsWith('editor_plugin.js', $jsFilename);
+        $this->assertStringMatchesFormat(
+            'http://localhost/pub/static/%s/adminhtml/Magento/backend/en_US/%s/editor_plugin.js',
+            $jsFilename
+        );
 
         $this->assertInternalType('array', $settings['widget_placeholders']);
 
diff --git a/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd b/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd
index 4966d7f88ffbc9a0a6dc05996f15a0fafa36f323..401bf2e93f3665365cd45cdbe9ee29d2364dbd3f 100755
--- a/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd
+++ b/lib/internal/Magento/Framework/View/Layout/etc/elements.xsd
@@ -140,7 +140,7 @@
 
     <xs:simpleType name="elementNameType">
         <xs:restriction base="xs:string">
-            <xs:pattern value="[a-zA-Z][a-zA-Z\d\-_\.]*"/>
+            <xs:pattern value="[a-zA-Z0-9][a-zA-Z\d\-_\.]*"/>
         </xs:restriction>
     </xs:simpleType>