diff --git a/lib/internal/Magento/Framework/ObjectManager/Config/Compiled.php b/lib/internal/Magento/Framework/ObjectManager/Config/Compiled.php
index a3ed3b941844eec7497eb233d1c43e74045c45e1..779e8cf0a0e5ecf15b0fcb6da1e48b80a5bb3072 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Config/Compiled.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Config/Compiled.php
@@ -1,15 +1,15 @@
 <?php
 /**
- *
  * Copyright © 2016 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
 namespace Magento\Framework\ObjectManager\Config;
 
+use Magento\Framework\ObjectManager\ConfigInterface;
 use Magento\Framework\ObjectManager\ConfigCacheInterface;
 use Magento\Framework\ObjectManager\RelationsInterface;
 
-class Compiled implements \Magento\Framework\ObjectManager\ConfigInterface
+class Compiled implements ConfigInterface
 {
     /**
      * @var array
@@ -129,9 +129,15 @@ class Compiled implements \Magento\Framework\ObjectManager\ConfigInterface
      */
     public function extend(array $configuration)
     {
-        $this->arguments = $configuration['arguments'];
-        $this->virtualTypes = $configuration['instanceTypes'];
-        $this->preferences = $configuration['preferences'];
+        $this->arguments = isset($configuration['arguments'])
+            ? array_replace($this->arguments, $configuration['arguments'])
+            : $this->arguments;
+        $this->virtualTypes = isset($configuration['instanceTypes'])
+            ? array_replace($this->virtualTypes, $configuration['instanceTypes'])
+            : $this->virtualTypes;
+        $this->preferences = isset($configuration['preferences'])
+            ? array_replace($this->preferences, $configuration['preferences'])
+            : $this->preferences;
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/Test/Unit/ObjectManager/Config/CompiledTest.php b/lib/internal/Magento/Framework/Test/Unit/ObjectManager/Config/CompiledTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..3dd9f5065a1421ec822d4a81377ea81a5c3f8f52
--- /dev/null
+++ b/lib/internal/Magento/Framework/Test/Unit/ObjectManager/Config/CompiledTest.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\Test\Unit\ObjectManager\Config;
+
+use Magento\Framework\ObjectManager\Config\Compiled as CompiledConfig;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
+
+class CompiledTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var ObjectManagerHelper
+     */
+    private $objectManagerHelper;
+
+    protected function setUp()
+    {
+        $this->objectManagerHelper = new ObjectManagerHelper($this);
+    }
+
+    /**
+     * @param array $initialData
+     * @param array $configuration
+     * @param array $expectedArguments
+     * @param array $expectedVirtualTypes
+     * @param array $expectedPreferences
+     *
+     * @dataProvider extendDataProvider
+     */
+    public function testExtend(
+        array $initialData,
+        array $configuration,
+        array $expectedArguments,
+        array $expectedVirtualTypes,
+        array $expectedPreferences
+    ) {
+        /** @var CompiledConfig $compiledConfig */
+        $compiledConfig = $this->objectManagerHelper->getObject(CompiledConfig::class, ['data' => $initialData]);
+        $compiledConfig->extend($configuration);
+
+        foreach ($expectedArguments as $type => $arguments) {
+            $this->assertEquals($arguments, $compiledConfig->getArguments($type));
+        }
+
+        $this->assertEquals($expectedVirtualTypes, $compiledConfig->getVirtualTypes());
+        $this->assertEquals($expectedPreferences, $compiledConfig->getPreferences());
+    }
+
+    /**
+     * @return array
+     */
+    public function extendDataProvider()
+    {
+        return [
+            [
+                'initialData' => [
+                    'arguments' => [
+                        'type1' => serialize(['argument1_1' => 'argumentValue1_1', 'argument1_2' => 'argumentValue1_2'])
+                    ],
+                    'instanceTypes' => [
+                        'instanceType1' => 'instanceTypeValue1', 'instanceType2' => 'instanceTypeValue2'
+                    ],
+                    'preferences' => ['preference1' => 'preferenceValue1', 'preference2' => 'preferenceValue2']
+                ],
+                'configuration' => [
+                    'arguments' => [
+                        'type1' => serialize(['argument1_1' => 'newArgumentValue1_1']),
+                        'type2' => serialize(['argument2_1' => 'newArgumentValue2_1'])
+                    ],
+                    'instanceTypes' => [
+                        'instanceType2' => 'newInstanceTypeValue2', 'instanceType3' => 'newInstanceTypeValue3'
+                    ],
+                    'preferences' => ['preference1' => 'newPreferenceValue1']
+                ],
+                'expectedArguments' => [
+                    'type1' => ['argument1_1' => 'newArgumentValue1_1'],
+                    'type2' => ['argument2_1' => 'newArgumentValue2_1']
+                ],
+                'expectedVirtualTypes' => [
+                    'instanceType1' => 'instanceTypeValue1', 'instanceType2' => 'newInstanceTypeValue2',
+                    'instanceType3' => 'newInstanceTypeValue3'
+                ],
+                'expectedPreferences' => [
+                    'preference1' => 'newPreferenceValue1', 'preference2' => 'preferenceValue2'
+                ]
+            ]
+        ];
+    }
+}