diff --git a/app/code/Magento/Translation/Console/Command/UninstallLanguageCommand.php b/app/code/Magento/Translation/Console/Command/UninstallLanguageCommand.php
index b84237bb2cd32233a96cabb23f16ebf6ea0d06b4..a8c360f6444fa331a317fd9995f419b013597c45 100644
--- a/app/code/Magento/Translation/Console/Command/UninstallLanguageCommand.php
+++ b/app/code/Magento/Translation/Console/Command/UninstallLanguageCommand.php
@@ -19,6 +19,8 @@ use Magento\Framework\Setup\BackupRollbackFactory;
 
 /**
  * Command for uninstalling language and backup-code feature
+ * 
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class UninstallLanguageCommand extends Command
 {
@@ -151,7 +153,7 @@ class UninstallLanguageCommand extends Command
      */
     private function validate($package)
     {
-        $installedPackages = $this->composerInfo->getRootRequiredPackagesAndTypes();
+        $installedPackages = $this->composerInfo->getRootRequiredPackageTypesByName();
 
         if (isset($installedPackages[$package]) && $installedPackages[$package] === 'magento2-language') {
             return true;
diff --git a/app/code/Magento/Translation/Test/Unit/Console/Command/UninstallLanguageCommandTest.php b/app/code/Magento/Translation/Test/Unit/Console/Command/UninstallLanguageCommandTest.php
index 2f0cd02c6c9ea0f0e58128c6a999c6d86136fdf7..9ccb47dd1e92b4ac454e2228e5b78844f8e130d1 100644
--- a/app/code/Magento/Translation/Test/Unit/Console/Command/UninstallLanguageCommandTest.php
+++ b/app/code/Magento/Translation/Test/Unit/Console/Command/UninstallLanguageCommandTest.php
@@ -93,7 +93,7 @@ class UninstallLanguageCommandTest extends \PHPUnit_Framework_TestCase
             ->willReturn($dependencies);
 
         $this->composerInfo->expects($this->once())
-            ->method('getRootRequiredPackagesAndTypes')
+            ->method('getRootRequiredPackageTypesByName')
             ->willReturn(
                 [
                     'vendor/language-ua_ua' => 'magento2-language'
@@ -123,7 +123,7 @@ class UninstallLanguageCommandTest extends \PHPUnit_Framework_TestCase
             ->willReturn($dependencies);
 
         $this->composerInfo->expects($this->once())
-            ->method('getRootRequiredPackagesAndTypes')
+            ->method('getRootRequiredPackageTypesByName')
             ->willReturn(
                 [
                     'vendor/language-ua_ua' => 'magento2-language'
@@ -148,7 +148,7 @@ class UninstallLanguageCommandTest extends \PHPUnit_Framework_TestCase
             ->willReturn($dependencies);
 
         $this->composerInfo->expects($this->once())
-            ->method('getRootRequiredPackagesAndTypes')
+            ->method('getRootRequiredPackageTypesByName')
             ->willReturn(
                 [
                     'vendor/language-ua_ua' => 'magento2-language'
@@ -178,7 +178,7 @@ class UninstallLanguageCommandTest extends \PHPUnit_Framework_TestCase
             ->willReturn($dependencies);
 
         $this->composerInfo->expects($this->once())
-            ->method('getRootRequiredPackagesAndTypes')
+            ->method('getRootRequiredPackageTypesByName')
             ->willReturn(
                 [
                     'vendor/language-ua_ua' => 'library'
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Model/ComposerInformationTest.php b/dev/tests/integration/testsuite/Magento/Framework/Composer/ComposerInformationTest.php
similarity index 83%
rename from dev/tests/integration/testsuite/Magento/Setup/Model/ComposerInformationTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/Composer/ComposerInformationTest.php
index cdcf2ca0817ffc06a9d5fc2793344ca3b535dacf..1fa911de8e967300eddd85a7c73390d011ce4f82 100644
--- a/dev/tests/integration/testsuite/Magento/Setup/Model/ComposerInformationTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/ComposerInformationTest.php
@@ -4,10 +4,10 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Setup\Model;
+namespace Magento\Framework\Composer;
 
 /**
- * Tests Magento\Setup\Model\ComposerInformation
+ * Tests Magento\Framework\ComposerInformation
  */
 class ComposerInformationTest extends \PHPUnit_Framework_TestCase
 {
@@ -84,6 +84,22 @@ class ComposerInformationTest extends \PHPUnit_Framework_TestCase
         }
     }
 
+    /**
+     * @param $composerDir string Directory under _files that contains composer files
+     *
+     * @dataProvider getRequiredPhpVersionDataProvider
+     */
+    public function testGetRootRequiredPackagesAndTypes($composerDir)
+    {
+        $this->setupDirectoryMock($composerDir);
+        $composerInfo = new ComposerInformation($this->filesystemMock, $this->ioMock);
+
+        $requiredPackagesAndTypes = $composerInfo->getRootRequiredPackageTypesByName();
+
+        $this->assertArrayHasKey('composer/composer', $requiredPackagesAndTypes);
+        $this->assertEquals('library', $requiredPackagesAndTypes['composer/composer']);
+    }
+
     /**
      * Data provider that returns directories containing different types of composer files.
      *
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Model/_files/testFromClone/composer.json b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.json
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Setup/Model/_files/testFromClone/composer.json
rename to dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.json
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Model/_files/testFromClone/composer.lock b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.lock
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Setup/Model/_files/testFromClone/composer.lock
rename to dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.lock
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Model/_files/testFromClone/vendor/README b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/vendor/README
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Setup/Model/_files/testFromClone/vendor/README
rename to dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/vendor/README
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Model/_files/testFromCreateProject/composer.json b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.json
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Setup/Model/_files/testFromCreateProject/composer.json
rename to dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.json
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Model/_files/testFromCreateProject/composer.lock b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.lock
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Setup/Model/_files/testFromCreateProject/composer.lock
rename to dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.lock
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Model/_files/testFromCreateProject/vendor/README b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/vendor/README
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Setup/Model/_files/testFromCreateProject/vendor/README
rename to dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/vendor/README
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Model/_files/testSkeleton/composer.json b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/composer.json
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Setup/Model/_files/testSkeleton/composer.json
rename to dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/composer.json
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Model/_files/testSkeleton/composer.lock b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/composer.lock
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Setup/Model/_files/testSkeleton/composer.lock
rename to dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/composer.lock
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Model/_files/testSkeleton/vendor/README b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/vendor/README
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Setup/Model/_files/testSkeleton/vendor/README
rename to dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/vendor/README
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Model/_files/vendor_path.php b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/vendor_path.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Setup/Model/_files/vendor_path.php
rename to dev/tests/integration/testsuite/Magento/Framework/Composer/_files/vendor_path.php
diff --git a/lib/internal/Magento/Framework/Composer/ComposerInformation.php b/lib/internal/Magento/Framework/Composer/ComposerInformation.php
index 5ba195f386dba1d3e489993b423c00bde17aa295..852ef6aebef3fcfea1214a46b696715a1d58b52d 100644
--- a/lib/internal/Magento/Framework/Composer/ComposerInformation.php
+++ b/lib/internal/Magento/Framework/Composer/ComposerInformation.php
@@ -7,6 +7,8 @@
 namespace Magento\Framework\Composer;
 
 use Composer\Factory as ComposerFactory;
+use Composer\IO\BufferIO;
+use Composer\Package\Link;
 use Composer\Package\PackageInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\Filesystem;
@@ -30,15 +32,28 @@ class ComposerInformation
      * Constructor
      *
      * @param Filesystem $filesystem
+     * @param BufferIO $io
+     * @throws \Exception
      */
     public function __construct(
-        Filesystem $filesystem
+        Filesystem $filesystem,
+        BufferIO $io
     ) {
-        $vendor = $filesystem->getDirectoryRead(DirectoryList::CONFIG)->getAbsolutePath('vendor_path.php');
-        $vendorPath = $filesystem->getDirectoryRead(DirectoryList::ROOT)->getAbsolutePath() . include $vendor;
+        // composer.json is in same directory as vendor
+        $vendorPath = $filesystem->getDirectoryRead(DirectoryList::CONFIG)->getAbsolutePath('vendor_path.php');
+        $vendorDir = require "{$vendorPath}";
+        $composerJson = $filesystem->getDirectoryRead(DirectoryList::ROOT)->getAbsolutePath()
+            . "/{$vendorDir}/../composer.json";
+
+        $composerJsonRealPath = realpath($composerJson);
+        if ($composerJsonRealPath === false) {
+            throw new \Exception('Composer file not found: ' . $composerJson);
+        }
+
+        putenv('COMPOSER_HOME=' . $filesystem->getDirectoryRead(DirectoryList::COMPOSER_HOME)->getAbsolutePath());
+
         // Create Composer
-        $io = new \Composer\IO\BufferIO();
-        $this->composer = ComposerFactory::create($io, $vendorPath . '/../composer.json');
+        $this->composer = ComposerFactory::create($io, $composerJson);
         $this->locker = $this->composer->getLocker();
     }
 
@@ -55,12 +70,16 @@ class ComposerInformation
             $requiredPhpVersion =  $allPlatformReqs['php']->getPrettyConstraint();
         } else {
             $packages = $this->locker->getLockedRepository()->getPackages();
+            /** @var PackageInterface $package */
             foreach ($packages as $package) {
-                /** @var \Composer\Package\CompletePackage $package */
-                $packageName = $package->getPrettyName();
-                if ($packageName === 'magento/product-community-edition') {
-                    $phpRequirementLink = $package->getRequires()['php'];
-                    $requiredPhpVersion = $phpRequirementLink->getPrettyConstraint();
+                if ($package instanceof PackageInterface) {
+                    $packageName = $package->getPrettyName();
+                    if ($packageName === 'magento/product-community-edition') {
+                        $phpRequirementLink = $package->getRequires()['php'];
+                        if ($phpRequirementLink instanceof Link) {
+                            $requiredPhpVersion = $phpRequirementLink->getPrettyConstraint();
+                        }
+                    }
                 }
             }
         }
@@ -81,32 +100,23 @@ class ComposerInformation
      */
     public function getRequiredExtensions()
     {
-        if ($this->isMagentoRoot()) {
-            $allPlatformReqs = $this->locker->getPlatformRequirements(true);
-            foreach ($allPlatformReqs as $reqIndex => $constraint) {
-                if (substr($reqIndex, 0, 4) === 'ext-') {
-                    $requiredExtensions[] = substr($reqIndex, 4);
-                }
-            }
-        } else {
-            $requiredExtensions = [];
+        $requiredExtensions = [];
+        $allPlatformReqs = array_keys($this->locker->getPlatformRequirements(true));
 
+        if (!$this->isMagentoRoot()) {
             /** @var \Composer\Package\CompletePackage $package */
             foreach ($this->locker->getLockedRepository()->getPackages() as $package) {
-                $requires = $package->getRequires();
-                $requires = array_merge($requires, $package->getDevRequires());
-                foreach ($requires as $reqIndex => $constraint) {
-                    if (substr($reqIndex, 0, 4) === 'ext-') {
-                        $requiredExtensions[] = substr($reqIndex, 4);
-                    }
-                }
+                $requires = array_keys($package->getRequires());
+                $requires = array_merge($requires, array_keys($package->getDevRequires()));
+                $allPlatformReqs = array_merge($allPlatformReqs, $requires);
             }
         }
-
-        if (!isset($requiredExtensions)) {
-            throw new \Exception('Cannot find extensions in \'composer.lock\' file');
+        foreach ($allPlatformReqs as $reqIndex) {
+            if (substr($reqIndex, 0, 4) === 'ext-') {
+                $requiredExtensions[] = substr($reqIndex, 4);
+            }
         }
-        return $requiredExtensions;
+        return array_unique($requiredExtensions);
     }
 
     /**
@@ -129,7 +139,7 @@ class ComposerInformation
      *
      * @return array
      */
-    public function getRootRequiredPackagesAndTypes()
+    public function getRootRequiredPackageTypesByName()
     {
         $packages = [];
         /** @var PackageInterface $package */
@@ -147,6 +157,7 @@ class ComposerInformation
     private function isMagentoRoot()
     {
         $rootPackage = $this->composer->getPackage();
-        return ('magento/magento2ce' == $rootPackage->getName());
+
+        return preg_match('/magento\/magento2.e/', $rootPackage->getName());
     }
 }
diff --git a/setup/src/Magento/Setup/Controller/Environment.php b/setup/src/Magento/Setup/Controller/Environment.php
index e88ed5e59602a0485f5bbfc2bf42bbdc69404b8f..1be039847995bec34c7366efc63413b0876de890 100644
--- a/setup/src/Magento/Setup/Controller/Environment.php
+++ b/setup/src/Magento/Setup/Controller/Environment.php
@@ -8,7 +8,7 @@ namespace Magento\Setup\Controller;
 use Composer\Package\Version\VersionParser;
 use Zend\Mvc\Controller\AbstractActionController;
 use Zend\View\Model\JsonModel;
-use Magento\Setup\Model\ComposerInformation;
+use Magento\Framework\Composer\ComposerInformation;
 use Magento\Setup\Model\PhpInformation;
 use Magento\Setup\Model\FilePermissions;
 
diff --git a/setup/src/Magento/Setup/Model/ComposerInformation.php b/setup/src/Magento/Setup/Model/ComposerInformation.php
deleted file mode 100644
index 431f4c8243f7b800ac9c07729c0d52d017e11de5..0000000000000000000000000000000000000000
--- a/setup/src/Magento/Setup/Model/ComposerInformation.php
+++ /dev/null
@@ -1,133 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Setup\Model;
-
-use Composer\Factory as ComposerFactory;
-use Composer\IO\BufferIO;
-use Composer\Package\Link;
-use Composer\Package\PackageInterface;
-use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Filesystem;
-
-/**
- * Class ComposerInformation uses Composer to determine dependency information.
- */
-class ComposerInformation
-{
-    /**
-     * @var \Composer\Composer
-     */
-    private $composer;
-
-    /**
-     * @var \Composer\Package\Locker
-     */
-    private $locker;
-
-    /**
-     * Constructor
-     *
-     * @param Filesystem $filesystem
-     * @param BufferIO $io
-     * @throws \Exception
-     */
-    public function __construct(
-        Filesystem $filesystem,
-        BufferIO $io
-    ) {
-        // composer.json is in same directory as vendor
-        $vendorPath = $filesystem->getDirectoryRead(DirectoryList::CONFIG)->getAbsolutePath('vendor_path.php');
-        $vendorDir = require "{$vendorPath}";
-        $composerJson = $filesystem->getDirectoryRead(DirectoryList::ROOT)->getAbsolutePath()
-            . "/{$vendorDir}/../composer.json";
-
-        $composerJsonRealPath = realpath($composerJson);
-        if ($composerJsonRealPath === false) {
-            throw new \Exception('Composer file not found: ' . $composerJson);
-        }
-
-        putenv('COMPOSER_HOME=' . $filesystem->getDirectoryRead(DirectoryList::COMPOSER_HOME)->getAbsolutePath());
-
-        // Create Composer
-        $this->composer = ComposerFactory::create($io, $composerJson);
-        $this->locker = $this->composer->getLocker();
-    }
-
-    /**
-     * Retrieves required php version
-     *
-     * @return string
-     * @throws \Exception If attributes are missing in composer.lock file.
-     */
-    public function getRequiredPhpVersion()
-    {
-        if ($this->isMagentoRoot()) {
-            $allPlatformReqs = $this->locker->getPlatformRequirements(true);
-            $requiredPhpVersion =  $allPlatformReqs['php']->getPrettyConstraint();
-        } else {
-            $packages = $this->locker->getLockedRepository()->getPackages();
-            /** @var PackageInterface $package */
-            foreach ($packages as $package) {
-                if ($package instanceof PackageInterface) {
-                    $packageName = $package->getPrettyName();
-                    if ($packageName === 'magento/product-community-edition') {
-                        $phpRequirementLink = $package->getRequires()['php'];
-                        if ($phpRequirementLink instanceof Link) {
-                            $requiredPhpVersion = $phpRequirementLink->getPrettyConstraint();
-                        }
-                    }
-                }
-            }
-        }
-
-        if (!isset($requiredPhpVersion)) {
-            throw new \Exception('Cannot find php version requirement in \'composer.lock\' file');
-        }
-        return $requiredPhpVersion;
-    }
-
-    /**
-     * Retrieve list of required extensions
-     *
-     * Collect required extensions from composer.lock file
-     *
-     * @return array
-     * @throws \Exception If attributes are missing in composer.lock file.
-     */
-    public function getRequiredExtensions()
-    {
-        $requiredExtensions = [];
-        $allPlatformReqs = array_keys($this->locker->getPlatformRequirements(true));
-
-        if (!$this->isMagentoRoot()) {
-            /** @var \Composer\Package\CompletePackage $package */
-            foreach ($this->locker->getLockedRepository()->getPackages() as $package) {
-                $requires = array_keys($package->getRequires());
-                $requires = array_merge($requires, array_keys($package->getDevRequires()));
-                $allPlatformReqs = array_merge($allPlatformReqs, $requires);
-            }
-        }
-        foreach ($allPlatformReqs as $reqIndex) {
-            if (substr($reqIndex, 0, 4) === 'ext-') {
-                $requiredExtensions[] = substr($reqIndex, 4);
-            }
-        }
-        return array_unique($requiredExtensions);
-    }
-
-    /**
-     * Determines if Magento is the root package or it is included as a requirement.
-     *
-     * @return bool
-     */
-    private function isMagentoRoot()
-    {
-        $rootPackage = $this->composer->getPackage();
-
-        return preg_match('/magento\/magento2.e/', $rootPackage->getName());
-    }
-}