diff --git a/composer.json b/composer.json
index 173691990657c7be851d6108becd67b357828f0e..1f3d182813998e861f2326733bed5a6d4ffb5b17 100644
--- a/composer.json
+++ b/composer.json
@@ -28,7 +28,7 @@
             "include": [
                 "core/composer.json"
             ],
-            "recurse": false,
+            "recurse": true,
             "replace": false,
             "merge-extra": false
         },
diff --git a/composer.lock b/composer.lock
index 878ac44adceb349c46e1e63a7bdf44a9a1ead9fd..020aea9c7c539027f318d9e87e113ce856cd162f 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "content-hash": "fdc8e2afb49b5917c7bb593a3a8746d3",
+    "content-hash": "e64d8398c963abb6a608286320ff0d0c",
     "packages": [
         {
             "name": "asm89/stack-cors",
diff --git a/core/composer.json b/core/composer.json
index 064fc2b90eee4a89d6673a46bf749b5dbbb910e6..1f60805ffb11346a3c47f2eb1a050b9d880656c1 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -155,6 +155,37 @@
         "drupal/views_ui": "self.version",
         "drupal/workflows": "self.version"
     },
+    "extra": {
+        "merge-plugin": {
+            "require": [
+                "core/lib/Drupal/Component/Annotation/composer.json",
+                "core/lib/Drupal/Component/Assertion/composer.json",
+                "core/lib/Drupal/Component/Bridge/composer.json",
+                "core/lib/Drupal/Component/ClassFinder/composer.json",
+                "core/lib/Drupal/Component/Datetime/composer.json",
+                "core/lib/Drupal/Component/DependencyInjection/composer.json",
+                "core/lib/Drupal/Component/Diff/composer.json",
+                "core/lib/Drupal/Component/Discovery/composer.json",
+                "core/lib/Drupal/Component/EventDispatcher/composer.json",
+                "core/lib/Drupal/Component/FileCache/composer.json",
+                "core/lib/Drupal/Component/FileSystem/composer.json",
+                "core/lib/Drupal/Component/Gettext/composer.json",
+                "core/lib/Drupal/Component/Graph/composer.json",
+                "core/lib/Drupal/Component/HttpFoundation/composer.json",
+                "core/lib/Drupal/Component/PhpStorage/composer.json",
+                "core/lib/Drupal/Component/Plugin/composer.json",
+                "core/lib/Drupal/Component/ProxyBuilder/composer.json",
+                "core/lib/Drupal/Component/Render/composer.json",
+                "core/lib/Drupal/Component/Serialization/composer.json",
+                "core/lib/Drupal/Component/Transliteration/composer.json",
+                "core/lib/Drupal/Component/Utility/composer.json",
+                "core/lib/Drupal/Component/Uuid/composer.json"
+            ],
+            "recurse": false,
+            "replace": false,
+            "merge-extra": false
+        }
+    },
     "minimum-stability": "dev",
     "prefer-stable": true,
     "autoload": {
diff --git a/core/lib/Drupal/Component/Annotation/composer.json b/core/lib/Drupal/Component/Annotation/composer.json
index 193ad48f1d7e5afab80befa9141b9ed0823a8b94..51e7d25b00b355adf685f570b6aa34732a69e51a 100644
--- a/core/lib/Drupal/Component/Annotation/composer.json
+++ b/core/lib/Drupal/Component/Annotation/composer.json
@@ -6,7 +6,7 @@
   "license": "GPL-2.0-or-later",
   "require": {
     "php": ">=5.5.9",
-    "doctrine/common": "2.5.*",
+    "doctrine/common": "^2.5",
     "doctrine/annotations": "1.2.*",
     "drupal/core-file-cache": "^8.2",
     "drupal/core-plugin": "^8.2",
diff --git a/core/lib/Drupal/Component/ClassFinder/composer.json b/core/lib/Drupal/Component/ClassFinder/composer.json
index bba825432c5d77a041cb2381dc7af4089a7c3234..c5a97b09f1c25e0d48f195f98276b3238d97f095 100644
--- a/core/lib/Drupal/Component/ClassFinder/composer.json
+++ b/core/lib/Drupal/Component/ClassFinder/composer.json
@@ -6,7 +6,7 @@
   "license": "GPL-2.0-or-later",
   "require": {
     "php": ">=5.5.9",
-    "doctrine/common": "2.5.*"
+    "doctrine/common": "^2.5"
   },
   "autoload": {
     "psr-4": {
diff --git a/core/lib/Drupal/Component/DependencyInjection/composer.json b/core/lib/Drupal/Component/DependencyInjection/composer.json
index 56864cb19e8528104de5565bd692366d8c8a733d..846034affae87fcb386b4f11aeacf7e2b186f961 100644
--- a/core/lib/Drupal/Component/DependencyInjection/composer.json
+++ b/core/lib/Drupal/Component/DependencyInjection/composer.json
@@ -12,7 +12,7 @@
   },
   "require": {
     "php": ">=5.5.9",
-    "symfony/dependency-injection": "^2.8"
+    "symfony/dependency-injection": ">=2.8 <4.0.0"
   },
   "suggest": {
     "symfony/expression-language": "For using expressions in service container configuration"
diff --git a/core/lib/Drupal/Component/EventDispatcher/composer.json b/core/lib/Drupal/Component/EventDispatcher/composer.json
index 8039bb7e371b715ff7f127f9413f7573ec90d5bf..cfbcc72e3f71978d25a82b0eed9fdadbd71cfa1b 100644
--- a/core/lib/Drupal/Component/EventDispatcher/composer.json
+++ b/core/lib/Drupal/Component/EventDispatcher/composer.json
@@ -6,8 +6,8 @@
   "license": "GPL-2.0-or-later",
   "require": {
     "php": ">=5.5.9",
-    "symfony/dependency-injection": "^2.8",
-    "symfony/event-dispatcher": "^2.7"
+    "symfony/dependency-injection": ">=2.8 <4.0.0",
+    "symfony/event-dispatcher": ">=2.7 <4.0.0"
   },
   "autoload": {
     "psr-4": {
diff --git a/core/lib/Drupal/Component/HttpFoundation/composer.json b/core/lib/Drupal/Component/HttpFoundation/composer.json
index f82c2524e88e7fa3d95660ca8074b98ca0a2e0e0..910a648a2115d212691fbd5ebc7ed50fa4a53c4c 100644
--- a/core/lib/Drupal/Component/HttpFoundation/composer.json
+++ b/core/lib/Drupal/Component/HttpFoundation/composer.json
@@ -6,7 +6,7 @@
   "license": "GPL-2.0-or-later",
   "require": {
     "php": ">=5.5.9",
-    "symfony/http-foundation": "^2.7"
+    "symfony/http-foundation": ">=2.7 <4.0.0"
   },
   "autoload": {
     "psr-4": {
diff --git a/core/lib/Drupal/Component/Plugin/composer.json b/core/lib/Drupal/Component/Plugin/composer.json
index d9a5f0276d6ad753c46d4061fd24b74fedc1dee4..77f02d6fb1c2ddf42e9c18216ba9b9063938272a 100644
--- a/core/lib/Drupal/Component/Plugin/composer.json
+++ b/core/lib/Drupal/Component/Plugin/composer.json
@@ -6,7 +6,7 @@
   "license": "GPL-2.0-or-later",
   "require": {
     "php": ">=5.5.9",
-    "symfony/validator": "^2.7"
+    "symfony/validator": ">=2.7 <4.0.0"
   },
   "autoload": {
     "psr-4": {
diff --git a/core/lib/Drupal/Component/Serialization/composer.json b/core/lib/Drupal/Component/Serialization/composer.json
index e618363948c84365f01df46b8ecb2a80f6a844b4..3439f5863980f955443f35a0c8688b122df28c16 100644
--- a/core/lib/Drupal/Component/Serialization/composer.json
+++ b/core/lib/Drupal/Component/Serialization/composer.json
@@ -6,7 +6,7 @@
   "license": "GPL-2.0-or-later",
   "require": {
     "php": ">=5.5.9",
-    "symfony/yaml": "^2.7"
+    "symfony/yaml": ">=2.7 <4.0.0"
   },
   "autoload": {
     "psr-4": {