diff --git a/app/code/Magento/Backend/Console/Command/AbstractCacheCommand.php b/app/code/Magento/Backend/Console/Command/AbstractCacheCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..55cecac162335817125de204e9657bf4be3868fc
--- /dev/null
+++ b/app/code/Magento/Backend/Console/Command/AbstractCacheCommand.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Backend\Console\Command;
+
+use Magento\Framework\App\Cache\Manager;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputOption;
+
+abstract class AbstractCacheCommand extends Command
+{
+    /**
+     * Input option bootsrap
+     */
+    const INPUT_KEY_BOOTSTRAP = 'bootstrap';
+
+    /**
+     * CacheManager
+     *
+     * @var Manager
+     */
+    protected $cacheManager;
+
+    /**
+     * Constructor
+     *
+     * @param Manager $cacheManager
+     */
+    public function __construct(Manager $cacheManager)
+    {
+        $this->cacheManager = $cacheManager;
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->addOption(
+            self::INPUT_KEY_BOOTSTRAP,
+            null,
+            InputOption::VALUE_REQUIRED,
+            'add or override parameters of the bootstrap'
+        );
+    }
+}
diff --git a/app/code/Magento/Backend/Console/Command/AbstractCacheManageCommand.php b/app/code/Magento/Backend/Console/Command/AbstractCacheManageCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..0644e7d41de44aee1d95449a8bc68eb63363b7fd
--- /dev/null
+++ b/app/code/Magento/Backend/Console/Command/AbstractCacheManageCommand.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Backend\Console\Command;
+
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+
+abstract class AbstractCacheManageCommand extends AbstractCacheCommand
+{
+    /**
+     * Input argument types
+     */
+    const INPUT_KEY_TYPES = 'types';
+
+    /**
+     * Input key all
+     */
+    const INPUT_KEY_ALL = 'all';
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->addArgument(
+            self::INPUT_KEY_TYPES,
+            InputArgument::IS_ARRAY,
+            'List of cache types, space separated. If omitted, all caches will be affected'
+        );
+        $this->addOption(
+            self::INPUT_KEY_ALL,
+            null,
+            InputOption::VALUE_NONE,
+            'All cache types'
+        );
+        parent::configure();
+    }
+
+
+    /**
+     * Get requested cache types
+     *
+     * @param InputInterface $input
+     * @return array
+     */
+    protected function getRequestedTypes(InputInterface $input)
+    {
+        $requestedTypes = [];
+        if ($input->getArgument(self::INPUT_KEY_TYPES)) {
+            $requestedTypes = $input->getArgument(self::INPUT_KEY_TYPES);
+            $requestedTypes = array_filter(array_map('trim', $requestedTypes), 'strlen');
+        }
+        if (empty($requestedTypes)) {
+            return [];
+        } else {
+            $availableTypes = $this->cacheManager->getAvailableTypes();
+            $unsupportedTypes = array_diff($requestedTypes, $availableTypes);
+            if ($unsupportedTypes) {
+                throw new \InvalidArgumentException(
+                    "The following requested cache types are not supported: '" . join("', '", $unsupportedTypes)
+                    . "'." . PHP_EOL . 'Supported types: ' . join(", ", $availableTypes)
+                );
+            }
+            return array_values(array_intersect($availableTypes, $requestedTypes));
+        }
+    }
+}
diff --git a/app/code/Magento/Backend/Console/Command/AbstractCacheSetCommand.php b/app/code/Magento/Backend/Console/Command/AbstractCacheSetCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..b1330c0de2d05f840c84c3b7f0135d1489cd5847
--- /dev/null
+++ b/app/code/Magento/Backend/Console/Command/AbstractCacheSetCommand.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Backend\Console\Command;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+abstract class AbstractCacheSetCommand extends AbstractCacheManageCommand
+{
+    /**
+     * Is enable cache or not
+     *
+     * @return bool
+     */
+    abstract protected function isEnable();
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $isEnable = $this->isEnable();
+        if ($input->getOption(self::INPUT_KEY_ALL)) {
+            $types = $this->cacheManager->getAvailableTypes();
+        } else {
+            $types = $this->getRequestedTypes($input);
+        }
+        $changedTypes = $this->cacheManager->setEnabled($types, $isEnable);
+        if ($changedTypes) {
+            $output->writeln('Changed cache status:');
+            foreach ($changedTypes as $type) {
+                $output->writeln(sprintf('%30s: %d -> %d', $type, !$isEnable, $isEnable));
+            }
+        } else {
+            $output->writeln('There is nothing to change in cache status');
+        }
+        if (!empty($changedTypes) && $isEnable) {
+            $this->cacheManager->clean($changedTypes);
+            $output->writeln('Cleaned cache types:');
+            $output->writeln(join(PHP_EOL, $changedTypes));
+        }
+    }
+}
diff --git a/app/code/Magento/Backend/Console/Command/AbstractCacheTypeManageCommand.php b/app/code/Magento/Backend/Console/Command/AbstractCacheTypeManageCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..79583c2f08a2a6bcd62a0619192d179316bf8fb0
--- /dev/null
+++ b/app/code/Magento/Backend/Console/Command/AbstractCacheTypeManageCommand.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Backend\Console\Command;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+abstract class AbstractCacheTypeManageCommand extends AbstractCacheManageCommand
+{
+    /**
+     * Perform a cache management action on cache types
+     *
+     * @param array $cacheTypes
+     * @return void
+     */
+    abstract protected function performAction(array $cacheTypes);
+
+    /**
+     * Get display message
+     *
+     * @return string
+     */
+    abstract protected function getDisplayMessage();
+
+    /**
+     * Perform cache management action
+     *
+     * @param InputInterface $input
+     * @param OutputInterface $output
+     * @return void
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        if ($input->getOption(self::INPUT_KEY_ALL)) {
+            $types = $this->cacheManager->getAvailableTypes();
+        } else {
+            $types = $this->getRequestedTypes($input);
+        }
+        $this->performAction($types);
+        $output->writeln($this->getDisplayMessage());
+        $output->writeln(join(PHP_EOL, $types));
+    }
+}
diff --git a/app/code/Magento/Backend/Console/Command/CacheCleanCommand.php b/app/code/Magento/Backend/Console/Command/CacheCleanCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..ab57f0ff7b578611ee3a64402650aa07ba52219e
--- /dev/null
+++ b/app/code/Magento/Backend/Console/Command/CacheCleanCommand.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Backend\Console\Command;
+
+/**
+ * Command for cleaning cache
+ */
+class CacheCleanCommand extends AbstractCacheTypeManageCommand
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('cache:clean');
+        $this->setDescription('Cleans cache type(s)');
+        parent::configure();
+    }
+
+    /**
+     * Cleans cache types
+     *
+     * @param array $cacheTypes
+     * @return void
+     */
+    protected function performAction(array $cacheTypes)
+    {
+        $this->cacheManager->clean($cacheTypes);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getDisplayMessage()
+    {
+        return 'Cleaned cache types:';
+    }
+}
diff --git a/app/code/Magento/Backend/Console/Command/CacheDisableCommand.php b/app/code/Magento/Backend/Console/Command/CacheDisableCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..a3d94e0b44cc3871d29a24537e427f59ed0bbaef
--- /dev/null
+++ b/app/code/Magento/Backend/Console/Command/CacheDisableCommand.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Backend\Console\Command;
+
+/**
+ * Command for disabling cache
+ */
+class CacheDisableCommand extends AbstractCacheSetCommand
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('cache:disable');
+        $this->setDescription('Disables cache type(s)');
+        parent::configure();
+    }
+
+    /**
+     * Is Disable cache
+     *
+     * @return bool
+     */
+    protected function isEnable()
+    {
+        return false;
+    }
+}
diff --git a/app/code/Magento/Backend/Console/Command/CacheEnableCommand.php b/app/code/Magento/Backend/Console/Command/CacheEnableCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..3109cd650e793e23d04992d6836c6078d2bf015a
--- /dev/null
+++ b/app/code/Magento/Backend/Console/Command/CacheEnableCommand.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Backend\Console\Command;
+
+/**
+ * Command for enabling cache
+ */
+class CacheEnableCommand extends AbstractCacheSetCommand
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('cache:enable');
+        $this->setDescription('Enables cache type(s)');
+        parent::configure();
+    }
+
+    /**
+     * Is enable cache
+     *
+     * @return bool
+     */
+    protected function isEnable()
+    {
+        return true;
+    }
+}
diff --git a/app/code/Magento/Backend/Console/Command/CacheFlushCommand.php b/app/code/Magento/Backend/Console/Command/CacheFlushCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..c847204de9043e84ded25607e890273441ec0e4e
--- /dev/null
+++ b/app/code/Magento/Backend/Console/Command/CacheFlushCommand.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Backend\Console\Command;
+
+/**
+ * Command for flushing cache
+ */
+class CacheFlushCommand extends AbstractCacheTypeManageCommand
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('cache:flush');
+        $this->setDescription('Flushes cache storage used by cache type(s)');
+        parent::configure();
+    }
+
+    /**
+     * Flushes cache types
+     *
+     * @param array $cacheTypes
+     * @return void
+     */
+    protected function performAction(array $cacheTypes)
+    {
+        $this->cacheManager->flush($cacheTypes);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getDisplayMessage()
+    {
+        return 'Flushed cache types:';
+    }
+}
diff --git a/app/code/Magento/Backend/Console/Command/CacheStatusCommand.php b/app/code/Magento/Backend/Console/Command/CacheStatusCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..445cf42a4cd016cb0d8924e6fdf47fd8aa1c153c
--- /dev/null
+++ b/app/code/Magento/Backend/Console/Command/CacheStatusCommand.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Backend\Console\Command;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Command for checking cache status
+ */
+class CacheStatusCommand extends AbstractCacheCommand
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('cache:status');
+        $this->setDescription('Checks cache status');
+        parent::configure();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $output->writeln('Current status:');
+        foreach ($this->cacheManager->getStatus() as $cache => $status) {
+            $output->writeln(sprintf('%30s: %d', $cache, $status));
+        }
+    }
+}
diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheCleanCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheCleanCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5177df7711e43ef9a90f1072ebfe5b482abe0e1c
--- /dev/null
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheCleanCommandTest.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Backend\Test\Unit\Console\Command;
+
+use Magento\Backend\Console\Command\CacheCleanCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+class CacheCleanCommandTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Framework\App\Cache\Manager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $cacheManager;
+
+    /**
+     * @var CacheCleanCommand
+     */
+    private $command;
+
+    public function setUp()
+    {
+        $this->cacheManager = $this->getMock('Magento\Framework\App\Cache\Manager', [], [], '', false);
+        $this->command = new CacheCleanCommand($this->cacheManager);
+    }
+
+    public function testExecute()
+    {
+        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $this->cacheManager->expects($this->once())->method('clean')->with(['A', 'B']);
+        $param = ['types' => ['A', 'B']];
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute($param);
+        $expect = 'Cleaned cache types:' . PHP_EOL . 'A' . PHP_EOL . 'B' . PHP_EOL;
+        $this->assertEquals($expect, $commandTester->getDisplay());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage The following requested cache types are not supported:
+     */
+    public function testExecuteInvalidCacheType()
+    {
+        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $param = ['types' => ['A', 'D']];
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute($param);
+    }
+
+    public function testExecuteAllCacheType()
+    {
+        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $this->cacheManager->expects($this->once())->method('clean')->with(['A', 'B', 'C']);
+        $param = ['--all' => true];
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute($param);
+        $expect = 'Cleaned cache types:' . PHP_EOL . 'A' . PHP_EOL . 'B' . PHP_EOL . 'C' . PHP_EOL;
+        $this->assertEquals($expect, $commandTester->getDisplay());
+    }
+}
diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheDisableCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheDisableCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..82a477ad924571be565534cc9976e80e0ce2b1ab
--- /dev/null
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheDisableCommandTest.php
@@ -0,0 +1,97 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Backend\Test\Unit\Console\Command;
+
+use Magento\Backend\Console\Command\CacheDisableCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+class CacheDisableCommandTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Framework\App\Cache\Manager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $cacheManager;
+
+    /**
+     * @var CacheDisableCommand
+     */
+    private $command;
+
+    public function setUp()
+    {
+        $this->cacheManager = $this->getMock('Magento\Framework\App\Cache\Manager', [], [], '', false);
+        $this->command = new CacheDisableCommand($this->cacheManager);
+    }
+
+    public function testExecute()
+    {
+        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $this->cacheManager
+            ->expects($this->once())
+            ->method('setEnabled')
+            ->with(['A', 'B'], false)
+            ->willReturn(['A', 'B']);
+        $param = ['types' => ['A', 'B']];
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute($param);
+
+        $expect = 'Changed cache status:' . PHP_EOL;
+        foreach (['A', 'B'] as $cacheType) {
+            $expect .= sprintf('%30s: %d -> %d', $cacheType, true, false) . PHP_EOL;
+        }
+
+        $this->assertEquals($expect, $commandTester->getDisplay());
+    }
+
+    public function testExecuteAll()
+    {
+        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $this->cacheManager
+            ->expects($this->once())
+            ->method('setEnabled')
+            ->with(['A', 'B', 'C'], false)
+            ->willReturn(['A', 'B', 'C']);
+        $param = ['--all' => true];
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute($param);
+
+        $expect = 'Changed cache status:' . PHP_EOL;
+        foreach (['A', 'B', 'C'] as $cacheType) {
+            $expect .= sprintf('%30s: %d -> %d', $cacheType, true, false) . PHP_EOL;
+        }
+        $this->assertEquals($expect, $commandTester->getDisplay());
+    }
+
+    public function testExecuteNoChanges()
+    {
+        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $this->cacheManager
+            ->expects($this->once())
+            ->method('setEnabled')
+            ->with(['A', 'B'], false)
+            ->willReturn([]);
+        $this->cacheManager->expects($this->never())->method('clean');
+        $param = ['types' => ['A', 'B']];
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute($param);
+
+        $expect = 'There is nothing to change in cache status' . PHP_EOL;
+        $this->assertEquals($expect, $commandTester->getDisplay());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage The following requested cache types are not supported:
+     */
+    public function testExecuteInvalidCacheType()
+    {
+        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $param = ['types' => ['A', 'D']];
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute($param);
+    }
+}
diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheEnableCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheEnableCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f5b9ea8e8ec4fa5a88b2aa6a6a7a9fb51b219308
--- /dev/null
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheEnableCommandTest.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Backend\Test\Unit\Console\Command;
+
+use Magento\Backend\Console\Command\CacheEnableCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+class CacheEnableCommandTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Framework\App\Cache\Manager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $cacheManager;
+
+    /**
+     * @var CacheEnableCommand
+     */
+    private $command;
+
+    public function setUp()
+    {
+        $this->cacheManager = $this->getMock('Magento\Framework\App\Cache\Manager', [], [], '', false);
+        $this->command = new CacheEnableCommand($this->cacheManager);
+    }
+
+    public function testExecute()
+    {
+        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $this->cacheManager
+            ->expects($this->once())
+            ->method('setEnabled')
+            ->with(['A', 'B'], true)
+            ->willReturn(['A', 'B']);
+        $this->cacheManager->expects($this->once())->method('clean')->with(['A', 'B']);
+        $param = ['types' => ['A', 'B']];
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute($param);
+
+        $expect = 'Changed cache status:' . PHP_EOL;
+        foreach (['A', 'B'] as $cacheType) {
+            $expect .= sprintf('%30s: %d -> %d', $cacheType, false, true) . PHP_EOL;
+        }
+        $expect .= 'Cleaned cache types:' . PHP_EOL;
+        $expect .= 'A' . PHP_EOL . 'B' . PHP_EOL;
+        $this->assertEquals($expect, $commandTester->getDisplay());
+    }
+
+    public function testExecuteAll()
+    {
+        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $this->cacheManager
+            ->expects($this->once())
+            ->method('setEnabled')
+            ->with(['A', 'B', 'C'], true)
+            ->willReturn(['A', 'B', 'C']);
+        $this->cacheManager->expects($this->once())->method('clean')->with(['A', 'B', 'C']);
+        $param = ['--all' => true];
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute($param);
+
+        $expect = 'Changed cache status:' . PHP_EOL;
+        foreach (['A', 'B', 'C'] as $cacheType) {
+            $expect .= sprintf('%30s: %d -> %d', $cacheType, false, true) . PHP_EOL;
+        }
+        $expect .= 'Cleaned cache types:' . PHP_EOL;
+        $expect .= 'A' . PHP_EOL . 'B' . PHP_EOL . 'C' . PHP_EOL;
+        $this->assertEquals($expect, $commandTester->getDisplay());
+    }
+
+    public function testExecuteNoChanges()
+    {
+        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $this->cacheManager
+            ->expects($this->once())
+            ->method('setEnabled')
+            ->with(['A', 'B'], true)
+            ->willReturn([]);
+        $this->cacheManager->expects($this->never())->method('clean');
+        $param = ['types' => ['A', 'B']];
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute($param);
+
+        $expect = 'There is nothing to change in cache status' . PHP_EOL;
+        $this->assertEquals($expect, $commandTester->getDisplay());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage The following requested cache types are not supported:
+     */
+    public function testExecuteInvalidCacheType()
+    {
+        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $param = ['types' => ['A', 'D']];
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute($param);
+    }
+}
diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheFlushCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheFlushCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b443efd1a93e0c07eeb9e8ea526e4d0812e7e913
--- /dev/null
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheFlushCommandTest.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Backend\Test\Unit\Console\Command;
+
+use Magento\Backend\Console\Command\CacheFlushCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+class CacheFlushCommandTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Framework\App\Cache\Manager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $cacheManager;
+
+    /**
+     * @var CacheFlushCommand
+     */
+    private $command;
+
+    public function setUp()
+    {
+        $this->cacheManager = $this->getMock('Magento\Framework\App\Cache\Manager', [], [], '', false);
+        $this->command = new CacheFlushCommand($this->cacheManager);
+    }
+
+    public function testExecute()
+    {
+        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $this->cacheManager->expects($this->once())->method('flush')->with(['A', 'B']);
+        $param = ['types' => ['A', 'B']];
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute($param);
+        $expect = 'Flushed cache types:' . PHP_EOL . 'A' . PHP_EOL . 'B' . PHP_EOL;
+        $this->assertEquals($expect, $commandTester->getDisplay());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage The following requested cache types are not supported:
+     */
+    public function testExecuteInvalidCacheType()
+    {
+        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $param = ['types' => ['A', 'D']];
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute($param);
+    }
+
+    public function testExecuteAllCacheType()
+    {
+        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $this->cacheManager->expects($this->once())->method('flush')->with(['A', 'B', 'C']);
+        $param = ['--all' => true];
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute($param);
+        $expect = 'Flushed cache types:' . PHP_EOL . 'A' . PHP_EOL . 'B' . PHP_EOL . 'C' . PHP_EOL;
+        $this->assertEquals($expect, $commandTester->getDisplay());
+    }
+}
diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheStatusCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheStatusCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..158c2a7783c906bc0ec6181e91985cbd18cc9b6f
--- /dev/null
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheStatusCommandTest.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Backend\Test\Unit\Console\Command;
+
+use Magento\Backend\Console\Command\CacheStatusCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+class CacheStatusCommandTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Framework\App\Cache\Manager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $cacheManager;
+
+    /**
+     * @var CacheStatusCommand
+     */
+    private $command;
+
+    public function setUp()
+    {
+        $this->cacheManager = $this->getMock('Magento\Framework\App\Cache\Manager', [], [], '', false);
+        $this->command = new CacheStatusCommand($this->cacheManager);
+    }
+
+    public function testExecute()
+    {
+        $cacheTypes = ['A' => 0, 'B' => 1, 'C' => 1];
+        $this->cacheManager->expects($this->once())->method('getStatus')->willReturn($cacheTypes);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute([]);
+        $expect = 'Current status:' . PHP_EOL;
+        foreach ($cacheTypes as $cacheType => $status) {
+            $expect .= sprintf('%30s: %d', $cacheType, $status) . PHP_EOL;
+        }
+        $this->assertEquals($expect, $commandTester->getDisplay());
+    }
+}
diff --git a/app/code/Magento/Backend/etc/di.xml b/app/code/Magento/Backend/etc/di.xml
index 7660919372b99c4f6b1b7128a8faac43d07b2a1a..a0617b8e645a4ac8bbcfadba57fcb8e139d5a639 100644
--- a/app/code/Magento/Backend/etc/di.xml
+++ b/app/code/Magento/Backend/etc/di.xml
@@ -149,4 +149,15 @@
             <argument name="storage" xsi:type="object">Magento\Backend\Model\Session\Quote\Storage</argument>
         </arguments>
     </type>
+    <type name="Magento\Framework\Console\CommandList">
+        <arguments>
+            <argument name="commands" xsi:type="array">
+                <item name="cacheEnableCommand" xsi:type="object">Magento\Backend\Console\Command\CacheEnableCommand</item>
+                <item name="cacheDisableCommand" xsi:type="object">Magento\Backend\Console\Command\CacheDisableCommand</item>
+                <item name="cacheFlushCommand" xsi:type="object">Magento\Backend\Console\Command\CacheFlushCommand</item>
+                <item name="cacheCleanCommand" xsi:type="object">Magento\Backend\Console\Command\CacheCleanCommand</item>
+                <item name="cacheStatusCommand" xsi:type="object">Magento\Backend\Console\Command\CacheStatusCommand</item>
+            </argument>
+        </arguments>
+    </type>
 </config>
diff --git a/app/code/Magento/Developer/Console/Command/CssDeployCommand.php b/app/code/Magento/Developer/Console/Command/CssDeployCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..cb9a34ae543cab553d8ed8a992022df83f75e961
--- /dev/null
+++ b/app/code/Magento/Developer/Console/Command/CssDeployCommand.php
@@ -0,0 +1,235 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Developer\Console\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Magento\Framework\Filesystem;
+use Magento\Framework\View\Asset\Source;
+use Magento\Framework\App\State;
+use Magento\Framework\View\Asset\Repository;
+use Magento\Framework\ObjectManagerInterface;
+use Magento\Framework\App\ObjectManager\ConfigLoader;
+use Magento\Framework\View\Asset\SourceFileGeneratorPool;
+use Magento\Framework\View\Asset\PreProcessor\ChainFactoryInterface;
+use Magento\Framework\App\Filesystem\DirectoryList;
+
+/**
+ * Class CssDeployCommand - collects, processes and publishes source files like LESS or SASS
+ * @SuppressWarnings("PMD.CouplingBetweenObjects")
+ */
+class CssDeployCommand extends Command
+{
+    /**
+     * Locale option key
+     */
+    const LOCALE_OPTION = 'locale';
+
+    /**
+     * Area option key
+     */
+    const AREA_OPTION = 'area';
+
+    /**
+     * Theme option key
+     */
+    const THEME_OPTION = 'theme';
+
+    /**
+     * Type argument key
+     */
+    const TYPE_ARGUMENT = 'type';
+
+    /**
+     * Files argument key
+     */
+    const FILE_ARGUMENT = 'file';
+
+    /**
+     * @var ObjectManagerInterface
+     */
+    private $objectManager;
+
+    /**
+     * @var Repository
+     */
+    private $assetRepo;
+
+    /**
+     * @var ConfigLoader
+     */
+    private $configLoader;
+
+    /**
+     * @var State
+     */
+    private $state;
+
+    /**
+     * @var SourceFileGeneratorPool
+     */
+    private $sourceFileGeneratorPool;
+
+    /**
+     * @var Source
+     */
+    private $assetSource;
+
+    /**
+     * @var ChainFactoryInterface
+     */
+    private $chainFactory;
+
+    /**
+     * @var Filesystem
+     */
+    private $filesystem;
+
+    /**
+     * Inject dependencies
+     *
+     * @param ObjectManagerInterface $objectManager
+     * @param Repository $assetRepo
+     * @param ConfigLoader $configLoader
+     * @param State $state
+     * @param Source $assetSource
+     * @param SourceFileGeneratorPool $sourceFileGeneratorPoll
+     * @param ChainFactoryInterface $chainFactory
+     * @param Filesystem $filesystem
+     */
+    public function __construct(
+        ObjectManagerInterface $objectManager,
+        Repository $assetRepo,
+        ConfigLoader $configLoader,
+        State $state,
+        Source $assetSource,
+        SourceFileGeneratorPool $sourceFileGeneratorPoll,
+        ChainFactoryInterface $chainFactory,
+        Filesystem $filesystem
+    ) {
+        $this->state = $state;
+        $this->objectManager = $objectManager;
+        $this->configLoader = $configLoader;
+        $this->assetRepo = $assetRepo;
+        $this->sourceFileGeneratorPool = $sourceFileGeneratorPoll;
+        $this->assetSource = $assetSource;
+        $this->chainFactory = $chainFactory;
+        $this->filesystem = $filesystem;
+
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('dev:css:deploy')
+            ->setDescription('Collects, processes and publishes source files like LESS or SASS')
+            ->setDefinition([
+                new InputArgument(
+                    self::TYPE_ARGUMENT,
+                    InputArgument::REQUIRED,
+                    'Type of dynamic stylesheet language: [less|sass]'
+                ),
+                new InputArgument(
+                    self::FILE_ARGUMENT,
+                    InputArgument::IS_ARRAY,
+                    'Files to pre-process (file should be specified without extension)',
+                    ['css/styles-m']
+                ),
+                new InputOption(
+                    self::LOCALE_OPTION,
+                    null,
+                    InputOption::VALUE_REQUIRED,
+                    'Locale',
+                    'en_US'
+                ),
+                new InputOption(
+                    self::AREA_OPTION,
+                    null,
+                    InputOption::VALUE_REQUIRED,
+                    'Area, one of [frontend|adminhtml|doc]',
+                    'frontend'
+                ),
+                new InputOption(
+                    self::THEME_OPTION,
+                    null,
+                    InputOption::VALUE_REQUIRED,
+                    'Theme in format Vendor/theme',
+                    'Magento/blank'
+                ),
+
+            ]);
+
+        parent::configure();
+    }
+
+    /**
+     * {@inheritdoc}
+     * @throws \InvalidArgumentException
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $locale = $input->getOption(self::LOCALE_OPTION);
+
+        if (!preg_match('/^[a-z]{2}_[A-Z]{2}$/', $locale)) {
+            throw new \InvalidArgumentException(
+                $locale . ' argument has invalid value format'
+            );
+        }
+
+        $area = $input->getOption(self::AREA_OPTION);
+        $theme = $input->getOption(self::THEME_OPTION);
+
+        $type = $input->getArgument(self::TYPE_ARGUMENT);
+
+        $this->state->setAreaCode($area);
+        $this->objectManager->configure($this->configLoader->load($area));
+
+        $sourceFileGenerator = $this->sourceFileGeneratorPool->create($type);
+
+        foreach ($input->getArgument(self::FILE_ARGUMENT) as $file) {
+            $file .= '.' . $type;
+
+            $output->writeln("<info>Gathering {$file} sources.</info>");
+
+            $asset = $this->assetRepo->createAsset(
+                $file,
+                [
+                    'area' => $area,
+                    'theme' => $theme,
+                    'locale' => $locale,
+                ]
+            );
+
+            $sourceFile = $this->assetSource->findSource($asset);
+            $content = \file_get_contents($sourceFile);
+
+            $chain = $this->chainFactory->create(
+                [
+                    'asset'           => $asset,
+                    'origContent'     => $content,
+                    'origContentType' => $asset->getContentType()
+                ]
+            );
+
+            $processedCoreFile = $sourceFileGenerator->generateFileTree($chain);
+
+            $targetDir = $this->filesystem->getDirectoryWrite(DirectoryList::STATIC_VIEW);
+            $rootDir = $this->filesystem->getDirectoryWrite(DirectoryList::ROOT);
+            $source = $rootDir->getRelativePath($processedCoreFile);
+            $destination = $asset->getPath();
+            $rootDir->copyFile($source, $destination, $targetDir);
+
+            $output->writeln("<info>Successfully processed LESS and/or SASS files</info>");
+        }
+    }
+}
diff --git a/app/code/Magento/Developer/Console/Command/DevTestsRunCommand.php b/app/code/Magento/Developer/Console/Command/DevTestsRunCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..a5f5ecf2b744fce4565f49368898371763ff090f
--- /dev/null
+++ b/app/code/Magento/Developer/Console/Command/DevTestsRunCommand.php
@@ -0,0 +1,148 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Developer\Console\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Class DevTestsRunCommand
+ *
+ * Runs tests (unit, static, integration, etc.)
+ */
+class DevTestsRunCommand extends Command
+{
+    /**
+     * input parameter parameter
+     */
+    const INPUT_ARG_TYPE = 'type';
+
+    /**
+     * command name
+     */
+    const COMMAND_NAME = 'dev:tests:run';
+
+    /**
+     * Maps types (from user input) to phpunit test names
+     *
+     * @var array
+     */
+    private $types;
+
+    /**
+     * Maps phpunit test names to directory and target name
+     *
+     * @var array
+     */
+    private $commands;
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setupTestInfo();
+        $this->setName(self::COMMAND_NAME)
+            ->setDescription('Runs tests');
+
+        $this->addArgument(
+            self::INPUT_ARG_TYPE,
+            InputArgument::OPTIONAL,
+            'Type of test to run. Available types: ' . implode(', ', array_keys($this->types)),
+            'default'
+        );
+
+        parent::configure();
+    }
+
+    /**
+     * Run the tests
+     *
+     * @param InputInterface $input
+     * @param OutputInterface $output
+     * @return int Non zero if invalid type, 0 otherwise
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        /* Validate type argument is valid */
+        $type = $input->getArgument(self::INPUT_ARG_TYPE);
+        if (!isset($this->types[$type])) {
+            $output->writeln(
+                'Invalid type: "' . $type . '". Available types: ' . implode(', ', array_keys($this->types))
+            );
+            return 1;
+        }
+
+        $vendorDir = require BP . '/app/etc/vendor_path.php';
+
+        $failures = [];
+        $runCommands = $this->types[$type];
+        foreach ($runCommands as $key) {
+            list($dir, $options) = $this->commands[$key];
+            $dirName = realpath(BP . '/dev/tests/' . $dir);
+            chdir($dirName);
+            $command = 'php '. BP . '/' . $vendorDir . '/phpunit/phpunit/phpunit ' . $options;
+            $message = $dirName . '> ' . $command;
+            $output->writeln(['', str_pad("---- {$message} ", 70, '-'), '']);
+            passthru($command, $returnVal);
+            if ($returnVal) {
+                $failures[] = $message;
+            }
+        }
+
+        $output->writeln(str_repeat('-', 70));
+        if ($failures) {
+            $output->writeln("FAILED - " . count($failures) . ' of ' . count($runCommands) . ":");
+            foreach ($failures as $message) {
+                $output->writeln(' - ' . $message);
+            }
+        } else {
+            $output->writeln('PASSED (' . count($runCommands) . ')');
+        }
+        return 0;
+    }
+
+    /**
+     * Fills in arrays that link test types to php unit tests and directories.
+     *
+     * @return void
+     */
+    private function setupTestInfo()
+    {
+        $this->commands = [
+            'unit'                   => ['../tests/unit', ''],
+            'unit-performance'       => ['../tests/performance/framework/tests/unit', ''],
+            'unit-static'            => ['../tests/static/framework/tests/unit', ''],
+            'unit-integration'       => ['../tests/integration/framework/tests/unit', ''],
+            'integration'            => ['../tests/integration', ''],
+            'integration-integrity'  => ['../tests/integration', ' testsuite/Magento/Test/Integrity'],
+            'static-default'         => ['../tests/static', ''],
+            'static-legacy'          => ['../tests/static', ' testsuite/Magento/Test/Legacy'],
+            'static-integration-php' => ['../tests/static', ' testsuite/Magento/Test/Php/Exemplar'],
+            'static-integration-js'  => ['../tests/static', ' testsuite/Magento/Test/Js/Exemplar'],
+        ];
+        $this->types = [
+            'all'             => array_keys($this->commands),
+            'unit'            => ['unit', 'unit-performance', 'unit-static', 'unit-integration'],
+            'integration'     => ['integration'],
+            'integration-all' => ['integration', 'integration-integrity'],
+            'static'          => ['static-default'],
+            'static-all'      => ['static-default', 'static-legacy', 'static-integration-php', 'static-integration-js'],
+            'integrity'       => ['static-default', 'static-legacy', 'integration-integrity'],
+            'legacy'          => ['static-legacy'],
+            'default'         => [
+                'unit',
+                'unit-performance',
+                'unit-static',
+                'unit-integration',
+                'integration',
+                'static-default',
+            ],
+        ];
+    }
+}
diff --git a/app/code/Magento/Developer/Test/Unit/Console/Command/CssDeployCommandTest.php b/app/code/Magento/Developer/Test/Unit/Console/Command/CssDeployCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..e740800579f632a6be6df09193a32dce67e62c82
--- /dev/null
+++ b/app/code/Magento/Developer/Test/Unit/Console/Command/CssDeployCommandTest.php
@@ -0,0 +1,164 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Developer\Test\Unit\Console\Command;
+
+use Magento\Framework\Filesystem;
+use Magento\Framework\View\Asset\Source;
+use Magento\Framework\App\State;
+use Magento\Framework\View\Asset\Repository;
+use Magento\Framework\ObjectManagerInterface;
+use Magento\Framework\App\ObjectManager\ConfigLoader;
+use Magento\Framework\View\Asset\SourceFileGeneratorPool;
+use Magento\Framework\View\Asset\PreProcessor\ChainFactoryInterface;
+use Magento\Developer\Console\Command\CssDeployCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+class CssDeployCommandTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var CssDeployCommand
+     */
+    private $command;
+
+    /**
+     * @var ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $objectManager;
+
+    /**
+     * @var Repository|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $assetRepo;
+
+    /**
+     * @var ConfigLoader|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $configLoader;
+
+    /**
+     * @var State|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $state;
+
+    /**
+     * @var SourceFileGeneratorPool|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $sourceFileGeneratorPool;
+
+    /**
+     * @var Source|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $assetSource;
+
+    /**
+     * @var ChainFactoryInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $chainFactory;
+
+    /**
+     * @var Filesystem|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $filesystem;
+
+    public function setUp()
+    {
+        $this->objectManager = $this->getMockForAbstractClass('Magento\Framework\ObjectManagerInterface');
+        $this->assetRepo = $this->getMock('Magento\Framework\View\Asset\Repository', [], [], '', false);
+        $this->configLoader = $this->getMock('Magento\Framework\App\ObjectManager\ConfigLoader', [], [], '', false);
+        $this->state = $this->getMock('Magento\Framework\App\State', [], [], '', false);
+        $this->assetSource = $this->getMock('Magento\Framework\View\Asset\Source', [], [], '', false);
+        $this->sourceFileGeneratorPool = $this->getMock(
+            'Magento\Framework\View\Asset\SourceFileGeneratorPool',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->chainFactory = $this->getMockForAbstractClass(
+            'Magento\Framework\View\Asset\PreProcessor\ChainFactoryInterface'
+        );
+        $this->filesystem = $this->getMock('Magento\Framework\Filesystem', [], [], '', false);
+
+        $this->command = new CssDeployCommand(
+            $this->objectManager,
+            $this->assetRepo,
+            $this->configLoader,
+            $this->state,
+            $this->assetSource,
+            $this->sourceFileGeneratorPool,
+            $this->chainFactory,
+            $this->filesystem
+        );
+    }
+
+    public function testExecute()
+    {
+        $file = 'css/styles-m' . '.less';
+
+        $this->configLoader->expects($this->once())->method('load')->with('frontend')->willReturn([]);
+        $this->objectManager->expects($this->once())->method('configure');
+        $this->sourceFileGeneratorPool->expects($this->once())
+            ->method('create')
+            ->with('less')
+            ->willReturn($this->getMock('Magento\Framework\Less\FileGenerator', [], [], '', false));
+        $this->assetRepo->expects($this->once())
+            ->method('createAsset')
+            ->with(
+                $file,
+                [
+                    'area' => 'frontend',
+                    'theme' => 'Magento/blank',
+                    'locale' => 'en_US'
+                ]
+            )
+            ->willReturn(
+                $this->getMockForAbstractClass('Magento\Framework\View\Asset\LocalInterface')
+            );
+        $this->assetSource->expects($this->once())->method('findSource')->willReturn('/dev/null');
+
+        $this->chainFactory->expects($this->once())->method('create')->willReturn(
+            $this->getMock('Magento\Framework\View\Asset\PreProcessor\Chain', [], [], '', false)
+        );
+
+        $this->filesystem->expects($this->atLeastOnce())->method('getDirectoryWrite')->willReturn(
+            $this->getMock('\Magento\Framework\Filesystem\Directory\WriteInterface', [], [], '', false)
+        );
+
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute(
+            [
+                'type' => 'less'
+            ]
+        );
+        $this->assertContains('Successfully processed LESS and/or SASS files', $commandTester->getDisplay());
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Not enough arguments
+     */
+    public function testExecuteWithoutParameters()
+    {
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute([]);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage WRONG_LOCALE argument has invalid value format
+     */
+    public function testExecuteWithWrongFormat()
+    {
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute(
+            [
+                'type' => 'less',
+                '--locale' => 'WRONG_LOCALE'
+            ]
+        );
+    }
+}
diff --git a/app/code/Magento/Developer/Test/Unit/Console/Command/DevTestsRunCommandTest.php b/app/code/Magento/Developer/Test/Unit/Console/Command/DevTestsRunCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d5db9dc5a65fbeb5e2f3611832ec470c5874205f
--- /dev/null
+++ b/app/code/Magento/Developer/Test/Unit/Console/Command/DevTestsRunCommandTest.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Developer\Test\Unit\Console\Command;
+
+use Magento\Developer\Console\Command\DevTestsRunCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+/**
+ * Class DevTestsRunCommandTest
+ *
+ * Tests dev:tests:run command.  Only tests error case because DevTestsRunCommand calls phpunit with
+ * passthru, so there is no good way to mock out running the tests.
+ */
+class DevTestsRunCommandTest extends \PHPUnit_Framework_TestCase
+{
+
+    /**
+     * @var DevTestsRunCommand
+     */
+    private $command;
+
+    public function setUp()
+    {
+        $this->command = new DevTestsRunCommand();
+    }
+
+    public function testExecuteBadType()
+    {
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute([DevTestsRunCommand::INPUT_ARG_TYPE => 'bad']);
+        $this->assertContains('Invalid type: "bad"', $commandTester->getDisplay());
+    }
+}
diff --git a/app/code/Magento/Developer/etc/di.xml b/app/code/Magento/Developer/etc/di.xml
index 1a21f191e09094fc0f9275ddabd632807fbdc1ff..94be2446cc1404c4c37cc2c1a740773ba7ba84f1 100644
--- a/app/code/Magento/Developer/etc/di.xml
+++ b/app/code/Magento/Developer/etc/di.xml
@@ -26,4 +26,12 @@
             </argument>
         </arguments>
     </type>
+    <type name="Magento\Framework\Console\CommandList">
+        <arguments>
+            <argument name="commands" xsi:type="array">
+                <item name="dev_tests_run" xsi:type="object">Magento\Developer\Console\Command\DevTestsRunCommand</item>
+                <item name="dev_css_deploy" xsi:type="object">Magento\Developer\Console\Command\CssDeployCommand</item>
+            </argument>
+        </arguments>
+    </type>
 </config>
diff --git a/app/code/Magento/Indexer/App/Shell.php b/app/code/Magento/Indexer/App/Shell.php
deleted file mode 100644
index 4fc81d4145176d652472e2f08fc49c4d809620c5..0000000000000000000000000000000000000000
--- a/app/code/Magento/Indexer/App/Shell.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Indexer\App;
-
-use Magento\Framework\App\Bootstrap;
-
-class Shell implements \Magento\Framework\AppInterface
-{
-    /**
-     * Filename of the entry point script
-     *
-     * @var string
-     */
-    protected $entryFileName;
-
-    /**
-     * @var \Magento\Framework\App\Console\Response
-     */
-    protected $response;
-
-    /**
-     * @var \Magento\Indexer\Model\ShellFactory
-     */
-    protected $shellFactory;
-
-    /**
-     * @param string $entryFileName
-     * @param \Magento\Indexer\Model\ShellFactory $shellFactory
-     * @param \Magento\Framework\App\Console\Response $response
-     */
-    public function __construct(
-        $entryFileName,
-        \Magento\Indexer\Model\ShellFactory $shellFactory,
-        \Magento\Framework\App\Console\Response $response
-    ) {
-        $this->entryFileName = $entryFileName;
-        $this->shellFactory = $shellFactory;
-        $this->response = $response;
-    }
-
-    /**
-     * Run application
-     *
-     * @return \Magento\Framework\App\ResponseInterface
-     */
-    public function launch()
-    {
-        /** @var $shell \Magento\Indexer\Model\Shell */
-        $shell = $this->shellFactory->create(['entryPoint' => $this->entryFileName]);
-        $shell->run();
-        if ($shell->hasErrors()) {
-            $this->response->setCode(-1);
-        } else {
-            $this->response->setCode(0);
-        }
-        return $this->response;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function catchException(Bootstrap $bootstrap, \Exception $exception)
-    {
-        return false;
-    }
-}
diff --git a/app/code/Magento/Indexer/Console/Command/AbstractIndexerCommand.php b/app/code/Magento/Indexer/Console/Command/AbstractIndexerCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..36f9ec1dd5b273cb2b94efaa0266afb2495e09e8
--- /dev/null
+++ b/app/code/Magento/Indexer/Console/Command/AbstractIndexerCommand.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Indexer\Console\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Magento\Indexer\Model\IndexerFactory;
+use Magento\Indexer\Model\Indexer\CollectionFactory;
+use Magento\Indexer\Model\IndexerInterface;
+use Magento\Indexer\Model\Indexer;
+use Magento\Store\Model\StoreManager;
+use Magento\Framework\App\ObjectManagerFactory;
+
+/**
+ * An Abstract class for Indexer related commands.
+ */
+abstract class AbstractIndexerCommand extends Command
+{
+    /**#@+
+     * Names of input arguments or options
+     */
+    const INPUT_KEY_ALL = 'all';
+    const INPUT_KEY_INDEXERS = 'index';
+    /**#@- */
+
+    /**
+     * Collection of Indexers factory
+     *
+     * @var CollectionFactory
+     */
+    protected $collectionFactory;
+
+    /**
+     * Indexer factory
+     *
+     * @var IndexerFactory
+     */
+    protected $indexerFactory;
+
+    /**
+     * Constructor
+     * @param ObjectManagerFactory $objectManagerFactory
+     */
+    public function __construct(ObjectManagerFactory $objectManagerFactory)
+    {
+        $params = $_SERVER;
+        $params[StoreManager::PARAM_RUN_CODE] = 'admin';
+        $params[StoreManager::PARAM_RUN_TYPE] = 'store';
+        $objectManager = $objectManagerFactory->create($params);
+        $this->collectionFactory = $objectManager->create('Magento\Indexer\Model\Indexer\CollectionFactory');
+        $this->indexerFactory = $objectManager->create('Magento\Indexer\Model\IndexerFactory');
+        parent::__construct();
+    }
+
+    /**
+     * Returns all indexers
+     *
+     * @return IndexerInterface[]
+     */
+    protected function getAllIndexers()
+    {
+        /** @var Indexer[] $indexers */
+        return $this->collectionFactory->create()->getItems();
+    }
+}
diff --git a/app/code/Magento/Indexer/Console/Command/AbstractIndexerManageCommand.php b/app/code/Magento/Indexer/Console/Command/AbstractIndexerManageCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..0105728d25404c8673aa2221f7f0e6cf6cc38753
--- /dev/null
+++ b/app/code/Magento/Indexer/Console/Command/AbstractIndexerManageCommand.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Indexer\Console\Command;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+use Magento\Indexer\Model\IndexerInterface;
+
+/**
+ * An Abstract class for all Indexer related commands.
+ */
+abstract class AbstractIndexerManageCommand extends AbstractIndexerCommand
+{
+    /**
+     * Gets list of indexers
+     *
+     * @param InputInterface $input
+     * @param OutputInterface $output
+     * @return IndexerInterface[]
+     */
+    protected function getIndexers(InputInterface $input, OutputInterface $output)
+    {
+        $inputArguments = $input->getArgument(self::INPUT_KEY_INDEXERS);
+        if (isset($inputArguments) && sizeof($inputArguments)>0) {
+            $indexers = [];
+            foreach ($inputArguments as $code) {
+                $indexer = $this->indexerFactory->create();
+                try {
+                    $indexer->load($code);
+                    $indexers[] = $indexer;
+                } catch (\Exception $e) {
+                    $output->writeln('Warning: Unknown indexer with code ' . trim($code));
+                }
+            }
+        } else {
+            $indexers = $this->getAllIndexers();
+        }
+        return $indexers;
+    }
+
+    /**
+     * Get list of options and arguments for the command
+     *
+     * @return mixed
+     */
+    public function getInputList()
+    {
+        return [
+            new InputOption(self::INPUT_KEY_ALL, 'a', InputOption::VALUE_NONE, 'All Indexes'),
+            new InputArgument(
+                self::INPUT_KEY_INDEXERS,
+                InputArgument::OPTIONAL | InputArgument::IS_ARRAY,
+                'List of Indexes'
+            ),
+        ];
+    }
+}
diff --git a/app/code/Magento/Indexer/Console/Command/IndexerInfoCommand.php b/app/code/Magento/Indexer/Console/Command/IndexerInfoCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..e0b724a2b1e82e098d15e6ad19ea8a45ca1a3421
--- /dev/null
+++ b/app/code/Magento/Indexer/Console/Command/IndexerInfoCommand.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Indexer\Console\Command;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Command for displaying information related to indexers.
+ */
+class IndexerInfoCommand extends AbstractIndexerCommand
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('indexer:info')->setDescription('Shows allowed Indexers');
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $indexers = $this->getAllIndexers();
+        foreach ($indexers as $indexer) {
+            $output->writeln(sprintf('%-40s %s', $indexer->getId(), $indexer->getTitle()));
+        }
+    }
+}
diff --git a/app/code/Magento/Indexer/Console/Command/IndexerReindexCommand.php b/app/code/Magento/Indexer/Console/Command/IndexerReindexCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..b52d1da6154e1288a14c414d8b2765a2afcb653d
--- /dev/null
+++ b/app/code/Magento/Indexer/Console/Command/IndexerReindexCommand.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Indexer\Console\Command;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Command for reindexing indexers.
+ */
+class IndexerReindexCommand extends AbstractIndexerManageCommand
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('indexer:reindex')
+            ->setDescription(
+                'Reindexes Data'
+            )->setDefinition($this->getInputList());
+        parent::configure();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $indexers = $this->getIndexers($input, $output);
+        foreach ($indexers as $indexer) {
+            try {
+                $startTime = microtime(true);
+                $indexer->reindexAll();
+                $resultTime = microtime(true) - $startTime;
+                $output->writeln(
+                    $indexer->getTitle() . ' index has been rebuilt successfully in ' . gmdate('H:i:s', $resultTime)
+                );
+            } catch (\Magento\Framework\Exception\LocalizedException $e) {
+                $output->writeln($e->getMessage());
+            } catch (\Exception $e) {
+                $output->writeln($indexer->getTitle() . ' indexer process unknown error:');
+                $output->writeln($e->getMessage());
+            }
+        }
+    }
+}
diff --git a/app/code/Magento/Indexer/Console/Command/IndexerSetModeCommand.php b/app/code/Magento/Indexer/Console/Command/IndexerSetModeCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..e5901edc53d588da92892863b25d821298df3064
--- /dev/null
+++ b/app/code/Magento/Indexer/Console/Command/IndexerSetModeCommand.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Indexer\Console\Command;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+
+/**
+ * Command for setting index mode for indexers.
+ */
+class IndexerSetModeCommand extends AbstractIndexerManageCommand
+{
+    /**#@+
+     * Names of input arguments or options
+     */
+    const INPUT_KEY_MODE = 'mode';
+    const INPUT_KEY_REALTIME = 'realtime';
+    const INPUT_KEY_SCHEDULE = 'schedule';
+    /**#@- */
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('indexer:set-mode')
+            ->setDescription(
+                'Sets index mode type'
+            )->setDefinition($this->getInputList());
+        parent::configure();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $errors = $this->validate($input);
+        if ($errors) {
+            throw new \InvalidArgumentException(implode("\n", $errors));
+        }
+
+        $indexers = $this->getIndexers($input, $output);
+
+        foreach ($indexers as $indexer) {
+            try {
+                $previousStatus = $indexer->isScheduled() ? 'Update by Schedule' : 'Update on Save';
+                $indexer->setScheduled($input->getArgument(self::INPUT_KEY_MODE) === self::INPUT_KEY_SCHEDULE);
+                $currentStatus = $indexer->isScheduled() ? 'Update by Schedule' : 'Update on Save';
+                if ($previousStatus !== $currentStatus) {
+                    $output->writeln(
+                        'Index mode for Indexer ' . $indexer->getTitle() . ' was changed from \''
+                        . $previousStatus . '\' to \'' . $currentStatus . '\''
+                    );
+                } else {
+                    $output->writeln('Index mode for Indexer ' . $indexer->getTitle() . ' has not been changed');
+                }
+            } catch (\Magento\Framework\Exception\LocalizedException $e) {
+                $output->writeln($e->getMessage() . PHP_EOL);
+            } catch (\Exception $e) {
+                $output->writeln($indexer->getTitle() . " indexer process unknown error:" . PHP_EOL);
+                $output->writeln($e->getMessage() . PHP_EOL);
+            }
+        }
+
+        return $this;
+    }
+
+    /**
+     * Get list of arguments for the command
+     *
+     * @return InputOption[]
+     */
+    public function getInputList()
+    {
+        $modeOptions[] = new InputArgument(
+            self::INPUT_KEY_MODE,
+            InputArgument::OPTIONAL,
+            'Indexer mode type ['. self::INPUT_KEY_REALTIME . '|' . self::INPUT_KEY_SCHEDULE .']'
+        );
+        $optionsList = array_merge($modeOptions, parent::getInputList());
+        return $optionsList;
+    }
+
+    /**
+     * Check if all admin options are provided
+     *
+     * @param InputInterface $input
+     * @return string[]
+     */
+    public function validate(InputInterface $input)
+    {
+        $errors = [];
+        $acceptedValues = ' Accepted values for ' . self::INPUT_KEY_MODE . ' are \''
+            . self::INPUT_KEY_REALTIME . '\' or \'' . self::INPUT_KEY_SCHEDULE . '\'';
+
+        $inputMode = $input->getArgument(self::INPUT_KEY_MODE);
+        if (!$inputMode) {
+            $errors[] = 'Missing argument \'' . self::INPUT_KEY_MODE .'\'.' . $acceptedValues;
+        } elseif (!in_array($inputMode, [self::INPUT_KEY_REALTIME, self::INPUT_KEY_SCHEDULE])) {
+            $errors[] = $acceptedValues;
+        }
+        return $errors;
+    }
+}
diff --git a/app/code/Magento/Indexer/Console/Command/IndexerShowModeCommand.php b/app/code/Magento/Indexer/Console/Command/IndexerShowModeCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..35c3886de1e72fff56b3ec7013a599cab4956282
--- /dev/null
+++ b/app/code/Magento/Indexer/Console/Command/IndexerShowModeCommand.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Indexer\Console\Command;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Command for displaying current index mode for indexers.
+ */
+class IndexerShowModeCommand extends AbstractIndexerManageCommand
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('indexer:show-mode')
+            ->setDescription('Shows Index Mode')
+            ->setDefinition($this->getInputList());
+        parent::configure();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $indexers = $this->getIndexers($input, $output);
+        foreach ($indexers as $indexer) {
+            $status = $indexer->isScheduled() ? 'Update by Schedule' : 'Update on Save';
+            $output->writeln(sprintf('%-50s ', $indexer->getTitle() . ':') . $status);
+        }
+    }
+}
diff --git a/app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php b/app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..6eda0f852453d7278c818c85f23628b817c31143
--- /dev/null
+++ b/app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Indexer\Console\Command;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Command for displaying status of indexers.
+ */
+class IndexerStatusCommand extends AbstractIndexerManageCommand
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('indexer:status')
+            ->setDescription('Shows status of Indexer')
+            ->setDefinition($this->getInputList());
+        parent::configure();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $indexers = $this->getIndexers($input, $output);
+        foreach ($indexers as $indexer) {
+            $status = 'unknown';
+            switch ($indexer->getStatus()) {
+                case \Magento\Indexer\Model\Indexer\State::STATUS_VALID:
+                    $status = 'Ready';
+                    break;
+                case \Magento\Indexer\Model\Indexer\State::STATUS_INVALID:
+                    $status = 'Reindex required';
+                    break;
+                case \Magento\Indexer\Model\Indexer\State::STATUS_WORKING:
+                    $status = 'Processing';
+                    break;
+            }
+            $output->writeln(sprintf('%-50s ', $indexer->getTitle() . ':') . $status);
+        }
+    }
+}
diff --git a/app/code/Magento/Indexer/Model/Shell.php b/app/code/Magento/Indexer/Model/Shell.php
deleted file mode 100644
index 37509102c38f05e49c954d9465b455b62cbf9f69..0000000000000000000000000000000000000000
--- a/app/code/Magento/Indexer/Model/Shell.php
+++ /dev/null
@@ -1,248 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Indexer\Model;
-
-class Shell extends \Magento\Framework\App\AbstractShell
-{
-    /**
-     * Error status - whether errors have happened
-     *
-     * @var bool
-     */
-    protected $hasErrors = false;
-
-    /**
-     * @var Indexer\CollectionFactory
-     */
-    protected $indexersFactory;
-
-    /**
-     * @var IndexerFactory
-     */
-    protected $indexerFactory;
-
-    /**
-     * @param \Magento\Framework\Filesystem $filesystem
-     * @param string $entryPoint
-     * @param Indexer\CollectionFactory $indexersFactory
-     * @param IndexerFactory $indexerFactory
-     */
-    public function __construct(
-        \Magento\Framework\Filesystem $filesystem,
-        $entryPoint,
-        Indexer\CollectionFactory $indexersFactory,
-        IndexerFactory $indexerFactory
-    ) {
-        $this->indexersFactory = $indexersFactory;
-        $this->indexerFactory = $indexerFactory;
-        parent::__construct($filesystem, $entryPoint);
-    }
-
-    /**
-     * Run this model, assumed to be run by command-line
-     *
-     * @return \Magento\Indexer\Model\Shell
-     */
-    public function run()
-    {
-        if ($this->_showHelp()) {
-            return $this;
-        }
-
-        if ($this->getArg('info')) {
-            $this->runShowInfo();
-        } elseif ($this->getArg('status') || $this->getArg('mode')) {
-            $this->runShowStatusOrMode();
-        } elseif ($this->getArg('mode-realtime') || $this->getArg('mode-schedule')) {
-            $this->runSetMode();
-        } elseif ($this->getArg('reindex') || $this->getArg('reindexall')) {
-            $this->runReindex();
-        } else {
-            echo $this->getUsageHelp();
-        }
-
-        return $this;
-    }
-
-    /**
-     * Show information about indexes
-     *
-     * @return \Magento\Indexer\Model\Shell
-     */
-    protected function runShowInfo()
-    {
-        $indexers = $this->parseIndexerString('all');
-        foreach ($indexers as $indexer) {
-            echo sprintf('%-40s', $indexer->getId());
-            echo $indexer->getTitle() . PHP_EOL;
-        }
-
-        return $this;
-    }
-
-    /**
-     * Show information about statuses or modes
-     *
-     * @return \Magento\Indexer\Model\Shell
-     */
-    protected function runShowStatusOrMode()
-    {
-        if ($this->getArg('status')) {
-            $indexers = $this->parseIndexerString($this->getArg('status'));
-        } else {
-            $indexers = $this->parseIndexerString($this->getArg('mode'));
-        }
-
-        foreach ($indexers as $indexer) {
-            $status = 'unknown';
-            if ($this->getArg('status')) {
-                switch ($indexer->getStatus()) {
-                    case \Magento\Indexer\Model\Indexer\State::STATUS_VALID:
-                        $status = 'Ready';
-                        break;
-                    case \Magento\Indexer\Model\Indexer\State::STATUS_INVALID:
-                        $status = 'Reindex required';
-                        break;
-                    case \Magento\Indexer\Model\Indexer\State::STATUS_WORKING:
-                        $status = 'Processing';
-                        break;
-                }
-            } else {
-                $status = $indexer->isScheduled() ? 'Update by Schedule' : 'Update on Save';
-            }
-            echo sprintf('%-50s ', $indexer->getTitle() . ':') . $status . PHP_EOL;
-        }
-
-        return $this;
-    }
-
-    /**
-     * Set new mode for indexers
-     *
-     * @return \Magento\Indexer\Model\Shell
-     */
-    protected function runSetMode()
-    {
-        if ($this->getArg('mode-realtime')) {
-            $method = 'turnViewOff';
-            $indexers = $this->parseIndexerString($this->getArg('mode-realtime'));
-        } else {
-            $method = 'turnViewOn';
-            $indexers = $this->parseIndexerString($this->getArg('mode-schedule'));
-        }
-
-        foreach ($indexers as $indexer) {
-            try {
-                $indexer->{$method}();
-                echo $indexer->getTitle() . " indexer was successfully changed index mode" . PHP_EOL;
-            } catch (\Magento\Framework\Exception\LocalizedException $e) {
-                echo $e->getMessage() . PHP_EOL;
-                $this->hasErrors = true;
-            } catch (\Exception $e) {
-                echo $indexer->getTitle() . " indexer process unknown error:" . PHP_EOL;
-                echo $e . PHP_EOL;
-                $this->hasErrors = true;
-            }
-        }
-
-        return $this;
-    }
-
-    /**
-     * Reindex indexer(s)
-     *
-     * @return \Magento\Indexer\Model\Shell
-     */
-    protected function runReindex()
-    {
-        if ($this->getArg('reindex')) {
-            $indexers = $this->parseIndexerString($this->getArg('reindex'));
-        } else {
-            $indexers = $this->parseIndexerString('all');
-        }
-
-        foreach ($indexers as $indexer) {
-            try {
-                $startTime = microtime(true);
-                $indexer->reindexAll();
-                $resultTime = microtime(true) - $startTime;
-                echo $indexer->getTitle() . ' index has been rebuilt successfully in '
-                    . gmdate('H:i:s', $resultTime) . PHP_EOL;
-            } catch (\Magento\Framework\Exception\LocalizedException $e) {
-                echo $e->getMessage() . PHP_EOL;
-                $this->hasErrors = true;
-            } catch (\Exception $e) {
-                echo $indexer->getTitle() . ' indexer process unknown error:' . PHP_EOL;
-                echo $e . PHP_EOL;
-                $this->hasErrors = true;
-            }
-        }
-
-        return $this;
-    }
-
-    /**
-     * Parses string with indexers and return array of indexer instances
-     *
-     * @param string $string
-     * @return IndexerInterface[]
-     */
-    protected function parseIndexerString($string)
-    {
-        $indexers = [];
-        if ($string == 'all') {
-            /** @var Indexer[] $indexers */
-            $indexers = $this->indexersFactory->create()->getItems();
-        } elseif (!empty($string)) {
-            $codes = explode(',', $string);
-            foreach ($codes as $code) {
-                $indexer = $this->indexerFactory->create();
-                try {
-                    $indexer->load($code);
-                    $indexers[] = $indexer;
-                } catch (\Exception $e) {
-                    echo 'Warning: Unknown indexer with code ' . trim($code) . PHP_EOL;
-                    $this->hasErrors = true;
-                }
-            }
-        }
-        return $indexers;
-    }
-
-    /**
-     * Return whether there errors have happened
-     *
-     * @return bool
-     */
-    public function hasErrors()
-    {
-        return $this->hasErrors;
-    }
-
-    /**
-     * Retrieves usage help message
-     *
-     * @return string
-     */
-    public function getUsageHelp()
-    {
-        return <<<USAGE
-Usage:  php -f {$this->_entryPoint} -- [options]
-
-  --status <indexer>            Show Indexer(s) Status
-  --mode <indexer>              Show Indexer(s) Index Mode
-  --mode-realtime <indexer>     Set index mode type "Update on Save"
-  --mode-schedule <indexer>     Set index mode type "Update by Schedule"
-  --reindex <indexer>           Reindex Data
-  info                          Show allowed indexers
-  reindexall                    Reindex Data by all indexers
-  help                          This help
-
-  <indexer>     Comma separated indexer codes or value "all" for all indexers
-
-USAGE;
-    }
-}
diff --git a/app/code/Magento/Indexer/Test/Unit/App/ShellTest.php b/app/code/Magento/Indexer/Test/Unit/App/ShellTest.php
deleted file mode 100644
index d86b89477a9e78a8da96bc3f70d6c469fc39d099..0000000000000000000000000000000000000000
--- a/app/code/Magento/Indexer/Test/Unit/App/ShellTest.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Indexer\Test\Unit\App;
-
-class ShellTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var \Magento\Indexer\App\Shell
-     */
-    protected $entryPoint;
-
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $shellFactoryMock;
-
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $responseMock;
-
-    protected function setUp()
-    {
-        $this->shellFactoryMock = $this->getMock(
-            'Magento\Indexer\Model\ShellFactory',
-            ['create'],
-            [],
-            '',
-            false
-        );
-        $this->responseMock = $this->getMock('Magento\Framework\App\Console\Response', [], [], '', false);
-        $this->entryPoint = new \Magento\Indexer\App\Shell(
-            'indexer.php',
-            $this->shellFactoryMock,
-            $this->responseMock
-        );
-    }
-
-    /**
-     * @param boolean $shellHasErrors
-     * @dataProvider processRequestDataProvider
-     */
-    public function testProcessRequest($shellHasErrors)
-    {
-        $shell = $this->getMock('Magento\Indexer\Model\Shell', [], [], '', false);
-        $shell->expects($this->once())->method('hasErrors')->will($this->returnValue($shellHasErrors));
-        $shell->expects($this->once())->method('run');
-        $this->shellFactoryMock->expects($this->any())->method('create')->will($this->returnValue($shell));
-
-        $this->entryPoint->launch();
-    }
-
-    /**
-     * @return array
-     */
-    public function processRequestDataProvider()
-    {
-        return [[true], [false]];
-    }
-
-    public function testCatchException()
-    {
-        $bootstrap = $this->getMock('Magento\Framework\App\Bootstrap', [], [], '', false);
-        $this->assertFalse($this->entryPoint->catchException($bootstrap, new \Exception()));
-    }
-}
diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerCommandCommonTestSetup.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerCommandCommonTestSetup.php
new file mode 100644
index 0000000000000000000000000000000000000000..323e8c9be7a45d5520311a6fc00e13d07073ef56
--- /dev/null
+++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerCommandCommonTestSetup.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Indexer\Test\Unit\Console\Command;
+
+use Magento\Framework\App\ObjectManagerFactory;
+
+class IndexerCommandCommonTestSetup extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|IndexerFactory
+     */
+    protected $indexerFactory;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|CollectionFactory
+     */
+    protected $collectionFactory;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|ObjectManagerFactory
+     */
+    protected $objectManagerFactory;
+
+    protected function setUp()
+    {
+        $this->objectManagerFactory = $this->getMock('Magento\Framework\App\ObjectManagerFactory', [], [], '', false);
+        $objectManager = $this->getMockForAbstractClass('Magento\Framework\ObjectManagerInterface');
+
+        $this->collectionFactory = $this->getMock(
+            'Magento\Indexer\Model\Indexer\CollectionFactory',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->indexerFactory = $this->getMock('Magento\Indexer\Model\IndexerFactory', [], [], '', false);
+
+        $objectManager
+            ->expects($this->exactly(2))
+            ->method('create')
+            ->will($this->returnValueMap([
+                ['Magento\Indexer\Model\Indexer\CollectionFactory', [], $this->collectionFactory],
+                ['Magento\Indexer\Model\IndexerFactory', [], $this->indexerFactory],
+            ]));
+
+        $this->objectManagerFactory->expects($this->once())->method('create')->willReturn($objectManager);
+    }
+}
diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerInfoCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerInfoCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2f6da06042dd634065895283c8250a8234684180
--- /dev/null
+++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerInfoCommandTest.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Indexer\Test\Unit\Console\Command;
+
+use Magento\Indexer\Console\Command\IndexerInfoCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+class IndexerInfoCommandTest extends IndexerCommandCommonTestSetup
+{
+    /**
+     * Command being tested
+     *
+     * @var IndexerInfoCommand
+     */
+    private $command;
+
+    public function testExecute()
+    {
+        $collection = $this->getMock('Magento\Indexer\Model\Indexer\Collection', [], [], '', false);
+        $indexerOne = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $indexerOne->expects($this->once())->method('getId')->willReturn('id_indexerOne');
+        $indexerOne->expects($this->once())->method('getTitle')->willReturn('Title_indexerOne');
+        $collection->expects($this->once())->method('getItems')->willReturn([$indexerOne]);
+
+        $this->collectionFactory->expects($this->once())->method('create')->will($this->returnValue($collection));
+        $this->indexerFactory->expects($this->never())->method('create');
+        $this->command = new IndexerInfoCommand($this->objectManagerFactory);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute([]);
+        $actualValue = $commandTester->getDisplay();
+        $this->assertSame(sprintf('%-40s %s', 'id_indexerOne', 'Title_indexerOne') . PHP_EOL, $actualValue);
+    }
+}
diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerReindexCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerReindexCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..80eb1d9c2f84fc87da14881672f91c48be33e90e
--- /dev/null
+++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerReindexCommandTest.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Indexer\Test\Unit\Console\Command;
+
+use Magento\Indexer\Console\Command\IndexerReindexCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+class IndexerReindexCommandTest extends IndexerCommandCommonTestSetup
+{
+    /**
+     * Command being tested
+     *
+     * @var IndexerReindexCommand
+     */
+    private $command;
+
+    public function testGetOptions()
+    {
+        $this->command = new IndexerReindexCommand($this->objectManagerFactory);
+        $optionsList = $this->command->getInputList();
+        $this->assertSame(2, sizeof($optionsList));
+        $this->assertSame('all', $optionsList[0]->getName());
+        $this->assertSame('index', $optionsList[1]->getName());
+    }
+
+    public function testExecuteAll()
+    {
+        $collection = $this->getMock('Magento\Indexer\Model\Indexer\Collection', [], [], '', false);
+        $indexerOne = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $indexerOne->expects($this->once())->method('getTitle')->willReturn('Title_indexerOne');
+        $collection->expects($this->once())->method('getItems')->willReturn([$indexerOne]);
+
+        $this->collectionFactory->expects($this->once())->method('create')->will($this->returnValue($collection));
+        $this->indexerFactory->expects($this->never())->method('create');
+        $this->command = new IndexerReindexCommand($this->objectManagerFactory);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute([]);
+        $actualValue = $commandTester->getDisplay();
+        $this->assertStringStartsWith('Title_indexerOne index has been rebuilt successfully in', $actualValue);
+    }
+
+    public function testExecuteWithIndex()
+    {
+        $indexerOne = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $indexerOne->expects($this->once())->method('reindexAll');
+        $indexerOne->expects($this->once())->method('getTitle')->willReturn('Title_indexerOne');
+        $indexerOne->expects($this->once())->method('load')->with('id_indexerOne')->willReturn($indexerOne);
+
+        $indexerTwo = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $indexerTwo->expects($this->once())->method('reindexAll');
+        $indexerTwo->expects($this->once())->method('getTitle')->willReturn('Title_indexerTwo');
+        $indexerTwo->expects($this->once())->method('load')->with('id_indexerTwo')->willReturn($indexerTwo);
+
+        $this->collectionFactory->expects($this->never())->method('create');
+        $this->indexerFactory->expects($this->at(0))->method('create')->willReturn($indexerOne);
+        $this->indexerFactory->expects($this->at(1))->method('create')->willReturn($indexerTwo);
+        $this->command = new IndexerReindexCommand($this->objectManagerFactory);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute(['index' => ['id_indexerOne', 'id_indexerTwo']]);
+        $actualValue = $commandTester->getDisplay();
+        $this->assertStringStartsWith('Title_indexerOne index has been rebuilt successfully in', $actualValue);
+    }
+
+    public function testExecuteWithLocalizedException()
+    {
+        $indexerOne = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $localizedException = new \Magento\Framework\Exception\LocalizedException(__('Some Exception Message'));
+        $indexerOne->expects($this->once())->method('reindexAll')->will($this->throwException($localizedException));
+        $this->collectionFactory->expects($this->never())->method('create');
+        $this->indexerFactory->expects($this->once())->method('create')->willReturn($indexerOne);
+        $this->command = new IndexerReindexCommand($this->objectManagerFactory);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute(['index' => ['id_indexerOne']]);
+        $actualValue = $commandTester->getDisplay();
+        $this->assertStringStartsWith('Some Exception Message', $actualValue);
+    }
+
+    public function testExecuteWithException()
+    {
+        $indexerOne = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $exception = new \Exception();
+        $indexerOne->expects($this->once())->method('reindexAll')->will($this->throwException($exception));
+        $indexerOne->expects($this->once())->method('getTitle')->willReturn('Title_indexerOne');
+        $this->collectionFactory->expects($this->never())->method('create');
+        $this->indexerFactory->expects($this->once())->method('create')->willReturn($indexerOne);
+        $this->command = new IndexerReindexCommand($this->objectManagerFactory);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute(['index' => ['id_indexerOne']]);
+        $actualValue = $commandTester->getDisplay();
+        $this->assertStringStartsWith('Title_indexerOne indexer process unknown error:', $actualValue);
+    }
+
+    public function testExecuteWithExceptionInLoad()
+    {
+        $indexerOne = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $exception = new \Exception();
+        $indexerOne->expects($this->once())->method('load')->will($this->throwException($exception));
+        $indexerOne->expects($this->never())->method('getTitle');
+        $this->collectionFactory->expects($this->never())->method('create');
+        $this->indexerFactory->expects($this->once())->method('create')->willReturn($indexerOne);
+        $this->command = new IndexerReindexCommand($this->objectManagerFactory);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute(['index' => ['id_indexerOne']]);
+        $actualValue = $commandTester->getDisplay();
+        $this->assertStringStartsWith('Warning: Unknown indexer with code', $actualValue);
+    }
+}
diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerSetModeCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerSetModeCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..dcd345dc6ffe505a1f3049c48faff5f784d39fcb
--- /dev/null
+++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerSetModeCommandTest.php
@@ -0,0 +1,176 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Indexer\Test\Unit\Console\Command;
+
+use Magento\Indexer\Console\Command\IndexerSetModeCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+/**
+ * Command for updating installed application after the code base has changed
+ */
+class IndexerSetModeCommandTest extends IndexerCommandCommonTestSetup
+{
+    /**
+     * Command being tested
+     *
+     * @var IndexerSetModeCommand
+     */
+    private $command;
+
+    public function testGetOptions()
+    {
+        $this->command = new IndexerSetModeCommand($this->objectManagerFactory);
+        $optionsList = $this->command->getInputList();
+        $this->assertSame(3, sizeof($optionsList));
+        $this->assertSame('mode', $optionsList[0]->getName());
+        $this->assertSame('all', $optionsList[1]->getName());
+        $this->assertSame('index', $optionsList[2]->getName());
+    }
+
+    /**
+     * @expectedException InvalidArgumentException
+     * @expectedExceptionMessage Missing argument 'mode'. Accepted values for mode are 'realtime' or 'schedule'
+     */
+    public function testExecuteInvalidArgument()
+    {
+        $this->command = new IndexerSetModeCommand($this->objectManagerFactory);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute([]);
+    }
+
+    /**
+     * @expectedException InvalidArgumentException
+     * @expectedExceptionMessage Accepted values for mode are 'realtime' or 'schedule'
+     */
+    public function testExecuteInvalidMode()
+    {
+        $this->command = new IndexerSetModeCommand($this->objectManagerFactory);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute(['mode' => 'wrong_mode']);
+    }
+
+    public function testExecuteAll()
+    {
+        $collection = $this->getMock('Magento\Indexer\Model\Indexer\Collection', [], [], '', false);
+        $indexerOne = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+
+        $indexerOne->expects($this->at(0))->method('isScheduled')->willReturn(true);
+        $indexerOne->expects($this->at(2))->method('isScheduled')->willReturn(false);
+
+        $indexerOne->expects($this->once())->method('setScheduled')->with(false);
+        $indexerOne->expects($this->once())->method('getTitle')->willReturn('Title_indexerOne');
+        $collection->expects($this->once())->method('getItems')->willReturn([$indexerOne]);
+
+        $this->collectionFactory->expects($this->once())->method('create')->will($this->returnValue($collection));
+        $this->indexerFactory->expects($this->never())->method('create');
+        $this->command = new IndexerSetModeCommand($this->objectManagerFactory);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute(['mode' => 'realtime']);
+        $actualValue = $commandTester->getDisplay();
+        $this->assertSame(
+            'Index mode for Indexer Title_indexerOne was changed from '. '\'Update by Schedule\' to \'Update on Save\''
+            . PHP_EOL,
+            $actualValue
+        );
+    }
+
+    /**
+     * @param bool $isScheduled
+     * @param bool $previous
+     * @param bool $current
+     * @param string $mode
+     * @param $expectedValue
+     * @dataProvider executeWithIndexDataProvider
+     */
+    public function testExecuteWithIndex($isScheduled, $previous, $current, $mode, $expectedValue)
+    {
+        $indexerOne = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $indexerOne->expects($this->once())->method('getTitle')->willReturn('Title_indexerOne');
+        $indexerOne->expects($this->once())->method('load')->with('id_indexerOne')->willReturn($indexerOne);
+        $indexerOne->expects($this->once())->method('setScheduled')->with($isScheduled);
+        $indexerOne->expects($this->at(1))->method('isScheduled')->willReturn($previous);
+        $indexerOne->expects($this->at(3))->method('isScheduled')->willReturn($current);
+
+        $this->collectionFactory->expects($this->never())->method('create');
+        $this->indexerFactory->expects($this->once())->method('create')->willReturn($indexerOne);
+
+        $this->command = new IndexerSetModeCommand($this->objectManagerFactory);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute(['mode' => $mode, 'index' => ['id_indexerOne']]);
+        $actualValue = $commandTester->getDisplay();
+        $this->assertSame($expectedValue, $actualValue);
+    }
+
+    /**
+     * @return array
+     */
+    public function executeWithIndexDataProvider()
+    {
+        return [
+            [
+                false,
+                true,
+                false,
+                'realtime',
+                'Index mode for Indexer Title_indexerOne was changed from \'Update by Schedule\' to \'Update on Save\''
+                . PHP_EOL
+            ],
+            [
+                false,
+                false,
+                false,
+                'realtime',
+                'Index mode for Indexer Title_indexerOne has not been changed'
+                . PHP_EOL
+            ],
+            [
+                true,
+                true,
+                true,
+                'schedule',
+                'Index mode for Indexer Title_indexerOne has not been changed'
+                . PHP_EOL
+            ],
+            [
+                true,
+                false,
+                true,
+                'schedule',
+                'Index mode for Indexer Title_indexerOne was changed from \'Update on Save\' to \'Update by Schedule\''
+                . PHP_EOL
+            ],
+        ];
+    }
+
+    public function testExecuteWithLocalizedException()
+    {
+        $indexerOne = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $localizedException = new \Magento\Framework\Exception\LocalizedException(__('Some Exception Message'));
+        $indexerOne->expects($this->once())->method('setScheduled')->will($this->throwException($localizedException));
+        $this->collectionFactory->expects($this->never())->method('create');
+        $this->indexerFactory->expects($this->once())->method('create')->willReturn($indexerOne);
+        $this->command = new IndexerSetModeCommand($this->objectManagerFactory);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute(['mode' => 'schedule', 'index' => ['id_indexerOne']]);
+        $actualValue = $commandTester->getDisplay();
+        $this->assertStringStartsWith('Some Exception Message', $actualValue);
+    }
+
+    public function testExecuteWithException()
+    {
+        $indexerOne = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $exception = new \Exception();
+        $indexerOne->expects($this->once())->method('setScheduled')->will($this->throwException($exception));
+        $indexerOne->expects($this->once())->method('getTitle')->willReturn('Title_indexerOne');
+        $this->collectionFactory->expects($this->never())->method('create');
+        $this->indexerFactory->expects($this->once())->method('create')->willReturn($indexerOne);
+        $this->command = new IndexerSetModeCommand($this->objectManagerFactory);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute(['mode' => 'schedule', 'index' => ['id_indexerOne']]);
+        $actualValue = $commandTester->getDisplay();
+        $this->assertStringStartsWith('Title_indexerOne indexer process unknown error:', $actualValue);
+    }
+}
diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerShowModeCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerShowModeCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8c7a527ae4392a66f3e0b350099e2e73a5e472ef
--- /dev/null
+++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerShowModeCommandTest.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Indexer\Test\Unit\Console\Command;
+
+use Magento\Indexer\Console\Command\IndexerShowModeCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+class IndexerShowModeCommandTest extends IndexerCommandCommonTestSetup
+{
+    /**
+     * Command being tested
+     *
+     * @var IndexerShowModeCommand
+     */
+    private $command;
+
+    public function testGetOptions()
+    {
+        $this->command = new IndexerShowModeCommand($this->objectManagerFactory);
+        $optionsList = $this->command->getInputList();
+        $this->assertSame(2, sizeof($optionsList));
+        $this->assertSame('all', $optionsList[0]->getName());
+        $this->assertSame('index', $optionsList[1]->getName());
+    }
+
+    public function testExecuteAll()
+    {
+
+        $collection = $this->getMock('Magento\Indexer\Model\Indexer\Collection', [], [], '', false);
+        $indexerOne = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $indexerOne->expects($this->once())->method('getTitle')->willReturn('Title_indexerOne');
+        $indexerOne->expects($this->once())->method('isScheduled')->willReturn(true);
+        $indexerTwo = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $indexerTwo->expects($this->once())->method('getTitle')->willReturn('Title_indexerTwo');
+        $indexerTwo->expects($this->once())->method('isScheduled')->willReturn(false);
+        $collection->expects($this->once())->method('getItems')->willReturn([$indexerOne, $indexerTwo]);
+
+        $this->collectionFactory->expects($this->once())->method('create')->will($this->returnValue($collection));
+        $this->indexerFactory->expects($this->never())->method('create');
+
+        $this->command = new IndexerShowModeCommand($this->objectManagerFactory);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute([]);
+        $actualValue = $commandTester->getDisplay();
+        $expectedValue = sprintf('%-50s ', 'Title_indexerOne' . ':') . 'Update by Schedule' . PHP_EOL
+            . sprintf('%-50s ', 'Title_indexerTwo' . ':') . 'Update on Save';
+        $this->assertStringStartsWith($expectedValue, $actualValue);
+    }
+
+    public function testExecuteWithIndex()
+    {
+        $indexerOne = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $indexerOne->expects($this->once())->method('getTitle')->willReturn('Title_indexerOne');
+        $indexerOne->expects($this->once())->method('isScheduled')->willReturn(true);
+        $indexerTwo = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $indexerTwo->expects($this->once())->method('getTitle')->willReturn('Title_indexerTwo');
+        $indexerTwo->expects($this->once())->method('isScheduled')->willReturn(false);
+        $indexerThree = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $indexerThree->expects($this->never())->method('getTitle')->willReturn('Title_indexer3');
+        $indexerThree->expects($this->never())->method('isScheduled')->willReturn(false);
+
+        $this->collectionFactory->expects($this->never())->method('create');
+        $this->indexerFactory->expects($this->at(0))->method('create')->willReturn($indexerOne);
+        $this->indexerFactory->expects($this->at(1))->method('create')->willReturn($indexerTwo);
+
+        $this->command = new IndexerShowModeCommand($this->objectManagerFactory);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute(['index' => ['id_indexerOne', 'id_indexerTwo']]);
+        $actualValue = $commandTester->getDisplay();
+        $expectedValue = sprintf('%-50s ', 'Title_indexerOne' . ':') . 'Update by Schedule' . PHP_EOL
+            . sprintf('%-50s ', 'Title_indexerTwo' . ':') . 'Update on Save';
+        $this->assertStringStartsWith($expectedValue, $actualValue);
+    }
+}
diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b5fd291e330c07b5080b74e3764927d739d03bd3
--- /dev/null
+++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Indexer\Test\Unit\Console\Command;
+
+use Magento\Indexer\Console\Command\IndexerStatusCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+class IndexerStatusCommandTest extends IndexerCommandCommonTestSetup
+{
+    /**
+     * Command being tested
+     *
+     * @var IndexerStatusCommand
+     */
+    private $command;
+
+    public function testExecuteAll()
+    {
+        $collection = $this->getMock('Magento\Indexer\Model\Indexer\Collection', [], [], '', false);
+        $indexerOne = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $indexerOne->expects($this->once())->method('getTitle')->willReturn('Title_indexerOne');
+        $indexerOne
+            ->expects($this->once())
+            ->method('getStatus')
+            ->willReturn(\Magento\Indexer\Model\Indexer\State::STATUS_VALID);
+        $indexerTwo = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $indexerTwo->expects($this->once())->method('getTitle')->willReturn('Title_indexerTwo');
+        $indexerTwo
+            ->expects($this->once())
+            ->method('getStatus')
+            ->willReturn(\Magento\Indexer\Model\Indexer\State::STATUS_INVALID);
+        $indexerThree = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $indexerThree->expects($this->once())->method('getTitle')->willReturn('Title_indexerThree');
+        $indexerThree
+            ->expects($this->once())
+            ->method('getStatus')
+            ->willReturn(\Magento\Indexer\Model\Indexer\State::STATUS_WORKING);
+        $indexerFour = $this->getMock('Magento\Indexer\Model\Indexer', [], [], '', false);
+        $indexerFour->expects($this->once())->method('getTitle')->willReturn('Title_indexerFour');
+        $collection
+            ->expects($this->once())
+            ->method('getItems')
+            ->willReturn([$indexerOne, $indexerTwo, $indexerThree, $indexerFour]);
+
+        $this->collectionFactory->expects($this->once())->method('create')->will($this->returnValue($collection));
+        $this->indexerFactory->expects($this->never())->method('create');
+        $this->command = new IndexerStatusCommand($this->objectManagerFactory);
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute([]);
+        $actualValue = $commandTester->getDisplay();
+        $expectedValue = sprintf('%-50s ', 'Title_indexerOne' . ':') . 'Ready' . PHP_EOL
+            . sprintf('%-50s ', 'Title_indexerTwo' . ':') . 'Reindex required' . PHP_EOL
+            . sprintf('%-50s ', 'Title_indexerThree' . ':') . 'Processing' . PHP_EOL
+            . sprintf('%-50s ', 'Title_indexerFour' . ':') . 'unknown' . PHP_EOL;
+
+        $this->assertStringStartsWith($expectedValue, $actualValue);
+    }
+}
diff --git a/app/code/Magento/Indexer/Test/Unit/Model/ShellTest.php b/app/code/Magento/Indexer/Test/Unit/Model/ShellTest.php
deleted file mode 100644
index 1a73b3de682eda8c3c754a201db7e1aee38b473e..0000000000000000000000000000000000000000
--- a/app/code/Magento/Indexer/Test/Unit/Model/ShellTest.php
+++ /dev/null
@@ -1,226 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Indexer\Test\Unit\Model;
-
-class ShellTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var \Magento\Indexer\Model\Shell
-     */
-    protected $model;
-
-    /**
-     * @var \Magento\Framework\Filesystem|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $filesystemMock;
-
-    /**
-     * @var \Magento\Indexer\Model\Indexer\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $indexersFactoryMock;
-
-    /**
-     * @var \Magento\Indexer\Model\IndexerFactory|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $indexerFactoryMock;
-
-    /**
-     * Set up test
-     */
-    protected function setUp()
-    {
-        $entryPoint = '';
-
-        $this->filesystemMock = $this->getMock(
-            '\Magento\Framework\Filesystem',
-            ['getDirectoryRead'],
-            [],
-            '',
-            false
-        );
-        $this->indexerFactoryMock = $this->getMock(
-            'Magento\Indexer\Model\IndexerFactory',
-            ['create', 'load', 'reindexAll', 'getTitle'],
-            [],
-            '',
-            false
-        );
-        $this->indexersFactoryMock = $this->getMock(
-            'Magento\Indexer\Model\Indexer\CollectionFactory',
-            ['create', 'getItems'],
-            [],
-            '',
-            false
-        );
-        $readInterfaceMock = $this->getMockForAbstractClass(
-            '\Magento\Framework\Filesystem\Directory\ReadInterface',
-            [],
-            '',
-            false,
-            false,
-            true,
-            []
-        );
-
-        $this->filesystemMock->expects($this->once())->method('getDirectoryRead')->will(
-            $this->returnValue($readInterfaceMock)
-        );
-
-        $this->model = new \Magento\Indexer\Model\Shell(
-            $this->filesystemMock,
-            $entryPoint,
-            $this->indexersFactoryMock,
-            $this->indexerFactoryMock
-        );
-    }
-
-    /**
-     * @param string $args
-     * @param string $status
-     * @dataProvider runDataProvider
-     */
-    public function testRun($args, $status = null)
-    {
-        $withItems = [
-            'info',
-            'status',
-            'mode',
-            '--mode-realtime',
-            '--mode-schedule',
-            'reindex',
-            'reindexall'
-        ];
-        $this->model->setRawArgs(['testme.php', '--', $args]);
-        
-        $indexerMock = $this->getMock(
-            '\Magento\Indexer\Model\Indexer',
-            ['getStatus', 'isScheduled', 'reindexAll', 'turnViewOff', 'turnViewOn'],
-            [],
-            '',
-            false
-        );
-
-        if (in_array($args, $withItems)) {
-            if ($args == 'status') {
-                $indexerMock->expects($this->any())->method('getStatus')->will(
-                    $this->returnValue($status)
-                );
-            }
-            $this->indexersFactoryMock->expects($this->once())->method('create')->will($this->returnSelf());
-            $this->indexersFactoryMock->expects($this->once())->method('getItems')->will(
-                $this->returnValue([$indexerMock])
-            );
-        }
-        if ($args == '--reindex=price') {
-            $this->indexerFactoryMock->expects($this->once())->method('create')->will($this->returnSelf());
-            $this->indexerFactoryMock->expects($this->any())->method('load')->will(
-                $this->returnValue($indexerMock)
-            );
-        }
-
-        ob_start();
-        $this->assertInstanceOf('\Magento\Indexer\Model\Shell', $this->model->run());
-        ob_end_clean();
-    }
-
-    /**
-     * @return array
-     */
-    public function runDataProvider()
-    {
-        return [
-            ['h'],
-            ['info'],
-            ['mode'],
-            ['status', \Magento\Indexer\Model\Indexer\State::STATUS_VALID],
-            ['status', \Magento\Indexer\Model\Indexer\State::STATUS_INVALID],
-            ['status', \Magento\Indexer\Model\Indexer\State::STATUS_WORKING],
-            ['--mode-realtime'],
-            ['--mode-schedule'],
-            ['reindex'],
-            ['reindexall'],
-            ['--reindex=price'],
-            ['other']
-        ];
-    }
-
-    /**
-     * @param string $args
-     * @dataProvider runExceptionDataProvider
-     */
-    public function testRunException($args)
-    {
-        $indexerMock = $this->getMock(
-            '\Magento\Indexer\Model\Indexer',
-            ['reindexAll', 'turnViewOff', 'turnViewOn'],
-            [],
-            '',
-            false
-        );
-
-        $this->model->setRawArgs(['testme.php', '--', $args]);
-
-        if ($args == 'reindex') {
-            $indexerMock->expects($this->any())->method('reindexAll')->will(
-                $this->throwException(new \Exception())
-            );
-        }
-        if ($args == '--mode-realtime') {
-            $indexerMock->expects($this->any())->method('turnViewOff')->will(
-                $this->throwException(new \Exception())
-            );
-        }
-        if ($args == 'reindexall') {
-            $indexerMock->expects($this->any())->method('reindexAll')->will(
-                $this->throwException(
-                    new \Magento\Framework\Exception\LocalizedException(
-                        __('Something went wrong during reindexing all.')
-                    )
-                )
-            );
-        }
-        if ($args == '--mode-schedule') {
-            $indexerMock->expects($this->any())->method('turnViewOn')->will(
-                $this->throwException(
-                    new \Magento\Framework\Exception\LocalizedException(
-                        __('Something went wrong during turning view on.')
-                    )
-                )
-            );
-        }
-        if ($args == '--reindex=price') {
-            $this->indexerFactoryMock->expects($this->once())->method('create')->will($this->returnSelf());
-            $this->indexerFactoryMock->expects($this->any())->method('load')->will(
-                $this->throwException(new \Exception())
-            );
-        } else {
-            $this->indexersFactoryMock->expects($this->once())->method('create')->will($this->returnSelf());
-            $this->indexersFactoryMock->expects($this->once())->method('getItems')->will(
-                $this->returnValue([$indexerMock])
-            );
-        }
-
-        ob_start();
-        $this->assertInstanceOf('\Magento\Indexer\Model\Shell', $this->model->run());
-        ob_end_clean();
-
-        $this->assertEquals(true, $this->model->hasErrors());
-    }
-
-    /**
-     * @return array
-     */
-    public function runExceptionDataProvider()
-    {
-        return [
-            ['reindex'],
-            ['reindexall'],
-            ['--mode-realtime'],
-            ['--mode-schedule'],
-            ['--reindex=price']
-        ];
-    }
-}
diff --git a/app/code/Magento/Indexer/composer.json b/app/code/Magento/Indexer/composer.json
index dc50f4ea54aa7305e118a771a6a57ce857a7d7ee..b346637038367b28a5ad2c08d5d57e1bed717eaa 100644
--- a/app/code/Magento/Indexer/composer.json
+++ b/app/code/Magento/Indexer/composer.json
@@ -3,6 +3,7 @@
     "description": "N/A",
     "require": {
         "php": "~5.5.0|~5.6.0",
+        "magento/module-store": "0.74.0-beta7",
         "magento/module-backend": "0.74.0-beta7",
         "magento/module-page-cache": "0.74.0-beta7",
         "magento/framework": "0.74.0-beta7",
diff --git a/app/code/Magento/Indexer/etc/di.xml b/app/code/Magento/Indexer/etc/di.xml
index 496e19449aecfc297fd63babe067af151dc7a9aa..8c6730dffb5c959d732d78f590c366eae74ef1bb 100644
--- a/app/code/Magento/Indexer/etc/di.xml
+++ b/app/code/Magento/Indexer/etc/di.xml
@@ -34,4 +34,16 @@
         <plugin name="page-cache-indexer-reindex-invalidate"
                 type="Magento\Indexer\Model\Processor\InvalidateCache" sortOrder="10"/>
     </type>
+
+    <type name="Magento\Framework\Console\CommandList">
+        <arguments>
+            <argument name="commands" xsi:type="array">
+                <item name="info" xsi:type="object">Magento\Indexer\Console\Command\IndexerInfoCommand</item>
+                <item name="reindex" xsi:type="object">Magento\Indexer\Console\Command\IndexerReindexCommand</item>
+                <item name="set-mode" xsi:type="object">Magento\Indexer\Console\Command\IndexerSetModeCommand</item>
+                <item name="show-mode" xsi:type="object">Magento\Indexer\Console\Command\IndexerShowModeCommand</item>
+                <item name="status" xsi:type="object">Magento\Indexer\Console\Command\IndexerStatusCommand</item>
+            </argument>
+        </arguments>
+    </type>
 </config>
diff --git a/app/code/Magento/Log/App/Shell.php b/app/code/Magento/Log/App/Shell.php
deleted file mode 100644
index 1941350d0a182ef6099ba8f43480e5c6e89cb0d9..0000000000000000000000000000000000000000
--- a/app/code/Magento/Log/App/Shell.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-/**
- * Log shell application
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Log\App;
-
-use Magento\Framework\App\Bootstrap;
-use Magento\Framework\App\Console\Response;
-use Magento\Framework\AppInterface;
-
-class Shell implements AppInterface
-{
-    /**
-     * Filename of the entry point script
-     *
-     * @var string
-     */
-    protected $_entryFileName;
-
-    /**
-     * @var \Magento\Log\Model\ShellFactory
-     */
-    protected $_shellFactory;
-
-    /**
-     * @var \Magento\Framework\App\Console\Response
-     */
-    protected $_response;
-
-    /**
-     * @param string $entryFileName
-     * @param \Magento\Log\Model\ShellFactory $shellFactory
-     * @param Response $response
-     */
-    public function __construct($entryFileName, \Magento\Log\Model\ShellFactory $shellFactory, Response $response)
-    {
-        $this->_entryFileName = $entryFileName;
-        $this->_shellFactory = $shellFactory;
-        $this->_response = $response;
-    }
-
-    /**
-     * Run application
-     *
-     * @return \Magento\Framework\App\ResponseInterface
-     */
-    public function launch()
-    {
-        /** @var $shell \Magento\Log\Model\Shell */
-        $shell = $this->_shellFactory->create(['entryPoint' => $this->_entryFileName]);
-        $shell->run();
-        $this->_response->setCode(0);
-        return $this->_response;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function catchException(Bootstrap $bootstrap, \Exception $exception)
-    {
-        return false;
-    }
-}
diff --git a/app/code/Magento/Log/Console/Command/AbstractLogCommand.php b/app/code/Magento/Log/Console/Command/AbstractLogCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..d158c1538cd638ea1a85f7e7915963f45ec89d8c
--- /dev/null
+++ b/app/code/Magento/Log/Console/Command/AbstractLogCommand.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Log\Console\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Magento\Store\Model\StoreManager;
+use Magento\Framework\App\DeploymentConfig;
+use Magento\Framework\App\ObjectManagerFactory;
+use Magento\Framework\App\ObjectManager;
+
+/**
+ * Abstract class for commands related to manage Magento logs
+ */
+abstract class AbstractLogCommand extends Command
+{
+    /**
+     * Object Manager
+     *
+     * @var ObjectManager
+     */
+    protected $objectManager;
+
+    /**
+     * Constructor
+     *
+     * @param ObjectManagerFactory $objectManagerFactory
+     */
+    public function __construct(ObjectManagerFactory $objectManagerFactory)
+    {
+        $params = $_SERVER;
+        $params[StoreManager::PARAM_RUN_CODE] = 'admin';
+        $params[StoreManager::PARAM_RUN_TYPE] = 'store';
+        $this->objectManager = $objectManagerFactory->create($params);
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        parent::configure();
+    }
+}
diff --git a/app/code/Magento/Log/Console/Command/LogCleanCommand.php b/app/code/Magento/Log/Console/Command/LogCleanCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..00827c20b96c856520aa5b859e32dc73317058c5
--- /dev/null
+++ b/app/code/Magento/Log/Console/Command/LogCleanCommand.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Log\Console\Command;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Input\InputOption;
+
+/**
+ * Command for displaying status of Magento logs
+ */
+class LogCleanCommand extends AbstractLogCommand
+{
+    /**
+     * Name of input option
+     */
+    const INPUT_KEY_DAYS = 'days';
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $options = [
+            new InputOption(
+                self::INPUT_KEY_DAYS,
+                null,
+                InputOption::VALUE_REQUIRED,
+                'Save log for specified number of days',
+                '1'
+            ),
+        ];
+        $this->setName('log:clean')
+            ->setDescription('Cleans Logs')
+            ->setDefinition($options);
+        parent::configure();
+    }
+
+    /**
+     * {@inheritdoc}
+     * @throws \InvalidArgumentException
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $errorMsg = 'Invalid value for option "' . self::INPUT_KEY_DAYS
+            . '". It should be a whole number greater than 0.';
+        $days = $input->getOption(self::INPUT_KEY_DAYS);
+        if (!is_numeric($days) || (strpos($days, '.') !== false)) {
+            $output->writeln('<error>' . $errorMsg . '</error>');
+            return;
+        }
+        $days = (int) $days;
+        if ($days <= 0) {
+            $output->writeln('<error>' . $errorMsg . '</error>');
+            return;
+        }
+        /** @var \Magento\Framework\App\Config\MutableScopeConfigInterface $mutableConfig */
+        $mutableConfig = $this->objectManager->create('Magento\Framework\App\Config\MutableScopeConfigInterface');
+        $mutableConfig->setValue(
+            \Magento\Log\Model\Log::XML_LOG_CLEAN_DAYS,
+            $days,
+            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+        );
+        /** @var \Magento\Log\Model\LogFactory $logFactory */
+        $logFactory = $this->objectManager->create('Magento\Log\Model\LogFactory');
+        /** @var \Magento\Log\Model\Log $model */
+        $model = $logFactory->create();
+        $model->clean();
+        $output->writeln('<info>' . 'Log cleaned.' . '</info>');
+    }
+}
diff --git a/app/code/Magento/Log/Model/Shell/Command/Status.php b/app/code/Magento/Log/Console/Command/LogStatusCommand.php
similarity index 52%
rename from app/code/Magento/Log/Model/Shell/Command/Status.php
rename to app/code/Magento/Log/Console/Command/LogStatusCommand.php
index 8ac5c4817bf6b13b69e28bee9218a3591f1e5dd8..8ae090f76f9a67ac942db7735b13d0c4bb8f0d30 100644
--- a/app/code/Magento/Log/Model/Shell/Command/Status.php
+++ b/app/code/Magento/Log/Console/Command/LogStatusCommand.php
@@ -3,28 +3,76 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Log\Model\Shell\Command;
 
-class Status implements \Magento\Log\Model\Shell\CommandInterface
-{
-    /**
-     * @var \Magento\Log\Model\Resource\ShellFactory
-     */
-    protected $_resourceFactory;
+namespace Magento\Log\Console\Command;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
 
+/**
+ * Command for displaying status of Magento logs
+ */
+class LogStatusCommand extends AbstractLogCommand
+{
     /**
      * Output data
      *
      * @var array
      */
-    protected $_output = [];
+    private $output = [];
 
     /**
-     * @param \Magento\Log\Model\Resource\ShellFactory $resourceFactory
+     * {@inheritdoc}
      */
-    public function __construct(\Magento\Log\Model\Resource\ShellFactory $resourceFactory)
+    protected function configure()
     {
-        $this->_resourceFactory = $resourceFactory;
+        $this->setName('log:status')->setDescription('Displays statistics per log tables');
+        parent::configure();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        /** @var \Magento\Log\Model\Resource\ShellFactory $resourceFactory */
+        $resourceFactory = $this->objectManager->create('Magento\Log\Model\Resource\ShellFactory');
+        /** @var \Magento\Log\Model\Resource\Shell $resource */
+        $resource = $resourceFactory->create();
+        $tables = $resource->getTablesInfo();
+
+        $this->addRowDelimiter();
+        $line = sprintf('%-35s|', 'Table Name');
+        $line .= sprintf(' %-11s|', 'Rows');
+        $line .= sprintf(' %-11s|', 'Data Size');
+        $line .= sprintf(' %-11s|', 'Index Size');
+        $this->addOutput($line);
+        $this->addRowDelimiter();
+
+        $rows = 0;
+        $dataLength = 0;
+        $indexLength = 0;
+        foreach ($tables as $table) {
+            $rows += $table['rows'];
+            $dataLength += $table['data_length'];
+            $indexLength += $table['index_length'];
+
+            $line = sprintf('%-35s|', $table['name']);
+            $line .= sprintf(' %-11s|', $this->humanCount($table['rows']));
+            $line .= sprintf(' %-11s|', $this->humanSize($table['data_length']));
+            $line .= sprintf(' %-11s|', $this->humanSize($table['index_length']));
+            $this->addOutput($line);
+        }
+
+        $this->addRowDelimiter();
+        $line = sprintf('%-35s|', 'Total');
+        $line .= sprintf(' %-11s|', $this->humanCount($rows));
+        $line .= sprintf(' %-11s|', $this->humanSize($dataLength));
+        $line .= sprintf(' %-11s|', $this->humanSize($indexLength));
+        $this->addOutput($line);
+        $this->addRowDelimiter();
+
+        $output->writeln('<info>' . $this->getOutput() . '</info>');
     }
 
     /**
@@ -33,9 +81,9 @@ class Status implements \Magento\Log\Model\Shell\CommandInterface
      * @param string $output
      * @return void
      */
-    protected function _addOutput($output)
+    private function addOutput($output)
     {
-        $this->_output[] = $output;
+        $this->output[] = $output;
     }
 
     /**
@@ -43,9 +91,9 @@ class Status implements \Magento\Log\Model\Shell\CommandInterface
      *
      * @return string
      */
-    protected function _getOutput()
+    private function getOutput()
     {
-        return implode("\n", $this->_output);
+        return implode("\n", $this->output);
     }
 
     /**
@@ -54,7 +102,7 @@ class Status implements \Magento\Log\Model\Shell\CommandInterface
      * @param int $number
      * @return string
      */
-    protected function _humanCount($number)
+    private function humanCount($number)
     {
         if ($number < 1000) {
             return $number;
@@ -73,7 +121,7 @@ class Status implements \Magento\Log\Model\Shell\CommandInterface
      * @param int $number
      * @return string
      */
-    protected function _humanSize($number)
+    private function humanSize($number)
     {
         if ($number < 1024) {
             return sprintf('%d b', $number);
@@ -91,53 +139,8 @@ class Status implements \Magento\Log\Model\Shell\CommandInterface
      *
      * @return void
      */
-    protected function _addRowDelimiter()
+    private function addRowDelimiter()
     {
-        $this->_addOutput('-----------------------------------+------------+------------+------------+');
-    }
-
-    /**
-     * Execute command
-     *
-     * @return string
-     */
-    public function execute()
-    {
-        /** @var $resource \Magento\Log\Model\Resource\Shell */
-        $resource = $this->_resourceFactory->create();
-        $tables = $resource->getTablesInfo();
-
-        $this->_addRowDelimiter();
-        $line = sprintf('%-35s|', 'Table Name');
-        $line .= sprintf(' %-11s|', 'Rows');
-        $line .= sprintf(' %-11s|', 'Data Size');
-        $line .= sprintf(' %-11s|', 'Index Size');
-        $this->_addOutput($line);
-        $this->_addRowDelimiter();
-
-        $rows = 0;
-        $dataLength = 0;
-        $indexLength = 0;
-        foreach ($tables as $table) {
-            $rows += $table['rows'];
-            $dataLength += $table['data_length'];
-            $indexLength += $table['index_length'];
-
-            $line = sprintf('%-35s|', $table['name']);
-            $line .= sprintf(' %-11s|', $this->_humanCount($table['rows']));
-            $line .= sprintf(' %-11s|', $this->_humanSize($table['data_length']));
-            $line .= sprintf(' %-11s|', $this->_humanSize($table['index_length']));
-            $this->_addOutput($line);
-        }
-
-        $this->_addRowDelimiter();
-        $line = sprintf('%-35s|', 'Total');
-        $line .= sprintf(' %-11s|', $this->_humanCount($rows));
-        $line .= sprintf(' %-11s|', $this->_humanSize($dataLength));
-        $line .= sprintf(' %-11s|', $this->_humanSize($indexLength));
-        $this->_addOutput($line);
-        $this->_addRowDelimiter();
-
-        return $this->_getOutput();
+        $this->addOutput('-----------------------------------+------------+------------+------------+');
     }
 }
diff --git a/app/code/Magento/Log/Model/Shell.php b/app/code/Magento/Log/Model/Shell.php
deleted file mode 100644
index 30a1cf875d740cf651103974f86ab21fe717121b..0000000000000000000000000000000000000000
--- a/app/code/Magento/Log/Model/Shell.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Log\Model;
-
-/**
- * Shell model, used to work with logs via command line
- *
- * @author      Magento Core Team <core@magentocommerce.com>
- */
-class Shell extends \Magento\Framework\App\AbstractShell
-{
-    /**
-     * @var \Magento\Log\Model\Shell\Command\Factory
-     */
-    protected $_commandFactory;
-
-    /**
-     * @param \Magento\Framework\Filesystem $filesystem
-     * @param string $entryPoint
-     * @param \Magento\Log\Model\Shell\Command\Factory $commandFactory
-     */
-    public function __construct(
-        \Magento\Framework\Filesystem $filesystem,
-        $entryPoint,
-        \Magento\Log\Model\Shell\Command\Factory $commandFactory
-    ) {
-        parent::__construct($filesystem, $entryPoint);
-        $this->_commandFactory = $commandFactory;
-    }
-
-    /**
-     * Runs script
-     *
-     * @return $this
-     */
-    public function run()
-    {
-        if ($this->_showHelp()) {
-            return $this;
-        }
-
-        if ($this->getArg('clean')) {
-            $output = $this->_commandFactory->createCleanCommand($this->getArg('days'))->execute();
-        } elseif ($this->getArg('status')) {
-            $output = $this->_commandFactory->createStatusCommand()->execute();
-        } else {
-            $output = $this->getUsageHelp();
-        }
-
-        echo $output;
-
-        return $this;
-    }
-
-    /**
-     * Retrieves usage help message
-     *
-     * @return string
-     */
-    public function getUsageHelp()
-    {
-        return <<<USAGE
-Usage:  php -f {$this->_entryPoint} -- [options]
-        php -f {$this->_entryPoint} -- clean --days 1
-
-  clean             Clean Logs
-  --days <days>     Save log, days. (Minimum 1 day, if defined - ignoring system value)
-  status            Display statistics per log tables
-  help              This help
-
-USAGE;
-    }
-}
diff --git a/app/code/Magento/Log/Model/Shell/Command/Clean.php b/app/code/Magento/Log/Model/Shell/Command/Clean.php
deleted file mode 100644
index 65415c82f489bacadaf34c2dd2fae709f859d77a..0000000000000000000000000000000000000000
--- a/app/code/Magento/Log/Model/Shell/Command/Clean.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Log\Model\Shell\Command;
-
-use Magento\Log\Model\LogFactory;
-
-class Clean implements \Magento\Log\Model\Shell\CommandInterface
-{
-    /**
-     * Mutable Config
-     *
-     * @var \Magento\Framework\App\Config\MutableScopeConfigInterface
-     */
-    protected $_mutableConfig;
-
-    /**
-     * @var LogFactory
-     */
-    protected $_logFactory;
-
-    /**
-     * Clean after days count
-     *
-     * @var int
-     */
-    protected $_days;
-
-    /**
-     * @param \Magento\Framework\App\Config\MutableScopeConfigInterface $mutableConfig
-     * @param LogFactory $logFactory
-     * @param int $days
-     */
-    public function __construct(
-        \Magento\Framework\App\Config\MutableScopeConfigInterface $mutableConfig,
-        LogFactory $logFactory,
-        $days
-    ) {
-        $this->_mutableConfig = $mutableConfig;
-        $this->_logFactory = $logFactory;
-        $this->_days = $days;
-    }
-
-    /**
-     * Execute command
-     *
-     * @return string
-     */
-    public function execute()
-    {
-        if ($this->_days > 0) {
-            $this->_mutableConfig->setValue(
-                \Magento\Log\Model\Log::XML_LOG_CLEAN_DAYS,
-                $this->_days,
-                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
-            );
-        }
-        /** @var $model \Magento\Log\Model\Log */
-        $model = $this->_logFactory->create();
-        $model->clean();
-        return "Log cleaned\n";
-    }
-}
diff --git a/app/code/Magento/Log/Model/Shell/Command/Factory.php b/app/code/Magento/Log/Model/Shell/Command/Factory.php
deleted file mode 100644
index 96363024cd1023374efb9c38f6a599d94126c586..0000000000000000000000000000000000000000
--- a/app/code/Magento/Log/Model/Shell/Command/Factory.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Log\Model\Shell\Command;
-
-class Factory
-{
-    /**
-     * @var \Magento\Framework\ObjectManagerInterface
-     */
-    protected $_objectManager;
-
-    /**
-     * @param \Magento\Framework\ObjectManagerInterface $objectManager
-     */
-    public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager)
-    {
-        $this->_objectManager = $objectManager;
-    }
-
-    /**
-     * Create clean command
-     *
-     * @param int $days
-     * @return \Magento\Log\Model\Shell\CommandInterface
-     */
-    public function createCleanCommand($days)
-    {
-        return $this->_objectManager->create('Magento\Log\Model\Shell\Command\Clean', ['days' => $days]);
-    }
-
-    /**
-     * Create status command
-     *
-     * @return \Magento\Log\Model\Shell\CommandInterface
-     */
-    public function createStatusCommand()
-    {
-        return $this->_objectManager->create('Magento\Log\Model\Shell\Command\Status');
-    }
-}
diff --git a/app/code/Magento/Log/Model/Shell/CommandInterface.php b/app/code/Magento/Log/Model/Shell/CommandInterface.php
deleted file mode 100644
index 84ccdf5dde23cd0df1f9135a7f3c6af66f7aa18d..0000000000000000000000000000000000000000
--- a/app/code/Magento/Log/Model/Shell/CommandInterface.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Log\Model\Shell;
-
-interface CommandInterface
-{
-    /**
-     * Execute command
-     *
-     * @return string
-     */
-    public function execute();
-}
diff --git a/app/code/Magento/Log/Test/Unit/App/ShellTest.php b/app/code/Magento/Log/Test/Unit/App/ShellTest.php
deleted file mode 100644
index b9f28ad53b12bf80297bbee56601e975ff3a93cd..0000000000000000000000000000000000000000
--- a/app/code/Magento/Log/Test/Unit/App/ShellTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Log\Test\Unit\App;
-
-class ShellTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var \Magento\Log\App\Shell
-     */
-    protected $_model;
-
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_shellFactoryMock;
-
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_responseMock;
-
-    protected function setUp()
-    {
-        $this->_shellFactoryMock = $this->getMock(
-            'Magento\Log\Model\ShellFactory',
-            ['create'],
-            [],
-            '',
-            false
-        );
-        $this->_responseMock = $this->getMock('Magento\Framework\App\Console\Response', [], [], '', false);
-        $this->_model = new \Magento\Log\App\Shell('shell.php', $this->_shellFactoryMock, $this->_responseMock);
-    }
-
-    public function testProcessRequest()
-    {
-        $shellMock = $this->getMock('Magento\Log\App\Shell', ['run'], [], '', false);
-        $this->_shellFactoryMock->expects(
-            $this->once()
-        )->method(
-            'create'
-        )->with(
-            ['entryPoint' => 'shell.php']
-        )->will(
-            $this->returnValue($shellMock)
-        );
-        $shellMock->expects($this->once())->method('run');
-        $this->assertEquals($this->_responseMock, $this->_model->launch());
-    }
-
-    public function testCatchException()
-    {
-        $bootstrap = $this->getMock('Magento\Framework\App\Bootstrap', [], [], '', false);
-        $this->assertFalse($this->_model->catchException($bootstrap, new \Exception()));
-    }
-}
diff --git a/app/code/Magento/Log/Test/Unit/Console/Command/LogCleanCommandTest.php b/app/code/Magento/Log/Test/Unit/Console/Command/LogCleanCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0db32a17c32950dec9a9ea4ab20f6ed4827c31cd
--- /dev/null
+++ b/app/code/Magento/Log/Test/Unit/Console/Command/LogCleanCommandTest.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Log\Test\Unit\Console\Command;
+
+use Magento\Log\Console\Command\LogCleanCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+use Magento\Framework\App\ObjectManager;
+
+class LogCleanCommandTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var ObjectManager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $objectManager;
+
+    /**
+     * @var CommandTester
+     */
+    private $commandTester;
+
+    public function setUp()
+    {
+        $this->objectManager = $this->getMock('Magento\Framework\App\ObjectManager', [], [], '', false);
+        $objectManagerFactory = $this->getMock('Magento\Framework\App\ObjectManagerFactory', [], [], '', false);
+        $objectManagerFactory->expects($this->once())->method('create')->willReturn($this->objectManager);
+        $this->commandTester = new CommandTester(new LogCleanCommand($objectManagerFactory));
+    }
+
+    public function testExecute()
+    {
+        $mutableConfig = $this->getMock('Magento\Framework\App\Config\MutableScopeConfigInterface', [], [], '', false);
+        $logFactory = $this->getMock('Magento\Log\Model\LogFactory', [], [], '', false);
+        $returnValueMap = [
+            [
+                'Magento\Framework\App\Config\MutableScopeConfigInterface',
+                [],
+                $mutableConfig,
+            ],
+            [
+                'Magento\Log\Model\LogFactory',
+                [],
+                $logFactory,
+            ],
+        ];
+        $this->objectManager
+            ->expects($this->exactly(2))->method('create')
+            ->will($this->returnValueMap($returnValueMap));
+        $mutableConfig->expects($this->once())->method('setValue');
+        $log = $this->getMock('Magento\Log\Model\Log', [], [], '', false);
+        $logFactory->expects($this->once())->method('create')->willReturn($log);
+        $log->expects($this->once())->method('clean');
+        $this->commandTester->execute(['--days' => '1']);
+        $this->assertEquals('Log cleaned.' . PHP_EOL, $this->commandTester->getDisplay());
+    }
+
+    /**
+     *
+     * @param string $days
+     * @dataProvider daysDataProvider
+     */
+    public function testExecuteInvalidNegativeDays($days)
+    {
+        $this->commandTester->execute(['--days' => $days]);
+        //Invalid value for option "days". It should be a whole number greater than 0.
+        $this->assertEquals(
+            'Invalid value for option "days". It should be a whole number greater than 0.' . PHP_EOL,
+            $this->commandTester->getDisplay()
+        );
+    }
+
+    /**
+     * @return array
+     */
+    public function daysDataProvider()
+    {
+        return [['-1'], ['5.5'], ['test']];
+    }
+}
diff --git a/app/code/Magento/Log/Test/Unit/Console/Command/LogStatusCommandTest.php b/app/code/Magento/Log/Test/Unit/Console/Command/LogStatusCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..7a7df444bb6a1f88ec83718be29276d2e73872b5
--- /dev/null
+++ b/app/code/Magento/Log/Test/Unit/Console/Command/LogStatusCommandTest.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Log\Test\Unit\Console\Command;
+
+use Magento\Log\Console\Command\LogStatusCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+class LogStatusCommandTest extends \PHPUnit_Framework_TestCase
+{
+    public function testExecute()
+    {
+        $objectManagerFactory = $this->getMock('Magento\Framework\App\ObjectManagerFactory', [], [], '', false);
+        $objectManager = $this->getMock('Magento\Framework\App\ObjectManager', [], [], '', false);
+        $resourceFactory = $this->getMock('Magento\Log\Model\Resource\ShellFactory', [], [], '', false);
+        $objectManager->expects($this->once())->method('create')->willReturn($resourceFactory);
+        $resource = $this->getMock('Magento\Log\Model\Resource\Shell', [], [], '', false);
+        $resourceFactory->expects($this->once())->method('create')->willReturn($resource);
+        $resource->expects($this->once())->method('getTablesInfo')->willReturn(
+            [['name' => 'log_customer', 'rows' => '1', 'data_length' => '16384', 'index_length' => '1024']]
+        );
+        $objectManagerFactory->expects($this->once())->method('create')->willReturn($objectManager);
+        $commandTester = new CommandTester(new LogStatusCommand($objectManagerFactory));
+        $commandTester->execute([]);
+        $expectedMsg = '-----------------------------------+------------+------------+------------+' . PHP_EOL
+            . 'Table Name                         | Rows       | Data Size  | Index Size |' . PHP_EOL
+            . '-----------------------------------+------------+------------+------------+' . PHP_EOL
+            . 'log_customer                       | 1          | 16.00Kb    | 1.00Kb     |' . PHP_EOL
+            . '-----------------------------------+------------+------------+------------+' . PHP_EOL
+            . 'Total                              | 1          | 16.00Kb    | 1.00Kb     |' . PHP_EOL
+            . '-----------------------------------+------------+------------+------------+%w';
+        $this->assertStringMatchesFormat($expectedMsg, $commandTester->getDisplay());
+    }
+}
diff --git a/app/code/Magento/Log/Test/Unit/Model/Shell/Command/CleanTest.php b/app/code/Magento/Log/Test/Unit/Model/Shell/Command/CleanTest.php
deleted file mode 100644
index 1438ec7b080e134a810a1914e73c1dfb3866cc60..0000000000000000000000000000000000000000
--- a/app/code/Magento/Log/Test/Unit/Model/Shell/Command/CleanTest.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Log\Test\Unit\Model\Shell\Command;
-
-class CleanTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_mutableConfigMock;
-
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_logFactoryMock;
-
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_logMock;
-
-    protected function setUp()
-    {
-        $this->_mutableConfigMock = $this->getMock('Magento\Framework\App\Config\MutableScopeConfigInterface');
-        $this->_logFactoryMock = $this->getMock('Magento\Log\Model\LogFactory', ['create'], [], '', false);
-        $this->_logMock = $this->getMock('Magento\Log\Model\Log', [], [], '', false);
-        $this->_logFactoryMock->expects($this->once())->method('create')->will($this->returnValue($this->_logMock));
-    }
-
-    public function testExecuteWithoutDaysOffset()
-    {
-        $model = new \Magento\Log\Model\Shell\Command\Clean($this->_mutableConfigMock, $this->_logFactoryMock, 0);
-        $this->_mutableConfigMock->expects($this->never())->method('setValue');
-        $this->_logMock->expects($this->once())->method('clean');
-        $this->assertStringStartsWith('Log cleaned', $model->execute());
-    }
-
-    public function testExecuteWithDaysOffset()
-    {
-        $model = new \Magento\Log\Model\Shell\Command\Clean($this->_mutableConfigMock, $this->_logFactoryMock, 10);
-        $this->_mutableConfigMock->expects($this->once())
-            ->method('setValue')
-            ->with(
-                \Magento\Log\Model\Log::XML_LOG_CLEAN_DAYS,
-                10,
-                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
-            );
-
-        $this->_logMock->expects($this->once())->method('clean');
-        $this->assertStringStartsWith('Log cleaned', $model->execute());
-    }
-}
diff --git a/app/code/Magento/Log/Test/Unit/Model/Shell/Command/FactoryTest.php b/app/code/Magento/Log/Test/Unit/Model/Shell/Command/FactoryTest.php
deleted file mode 100644
index 0f4435fbc907dd1b6b1bda248afeb942e9c26d10..0000000000000000000000000000000000000000
--- a/app/code/Magento/Log/Test/Unit/Model/Shell/Command/FactoryTest.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Log\Test\Unit\Model\Shell\Command;
-
-class FactoryTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_objectManagerMock;
-
-    /**
-     * @var \Magento\Log\Model\Shell\Command\Factory
-     */
-    protected $_model;
-
-    protected function setUp()
-    {
-        $this->_objectManagerMock = $this->getMock('Magento\Framework\ObjectManagerInterface');
-        $this->_model = new \Magento\Log\Model\Shell\Command\Factory($this->_objectManagerMock);
-    }
-
-    public function testCreateCleanCommand()
-    {
-        $this->_objectManagerMock->expects(
-            $this->once()
-        )->method(
-            'create'
-        )->with(
-            'Magento\Log\Model\Shell\Command\Clean',
-            ['days' => 1]
-        )->will(
-            $this->returnValue($this->getMock('Magento\Log\Model\Shell\Command\Clean', [], [], '', false))
-        );
-        $this->isInstanceOf('Magento\Log\Model\Shell\CommandInterface', $this->_model->createCleanCommand(1));
-    }
-
-    public function testCreateStatusCommand()
-    {
-        $this->_objectManagerMock->expects(
-            $this->once()
-        )->method(
-            'create'
-        )->with(
-            'Magento\Log\Model\Shell\Command\Status'
-        )->will(
-            $this->returnValue($this->getMock('Magento\Log\Model\Shell\Command\Status', [], [], '', false))
-        );
-        $this->isInstanceOf('Magento\Log\Model\Shell\CommandInterface', $this->_model->createStatusCommand());
-    }
-}
diff --git a/app/code/Magento/Log/Test/Unit/Model/Shell/Command/StatusTest.php b/app/code/Magento/Log/Test/Unit/Model/Shell/Command/StatusTest.php
deleted file mode 100644
index 0482cd7faecb5aa68f8ade580b6a1e383ca92135..0000000000000000000000000000000000000000
--- a/app/code/Magento/Log/Test/Unit/Model/Shell/Command/StatusTest.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Log\Test\Unit\Model\Shell\Command;
-
-class StatusTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_factoryMock;
-
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_shellMock;
-
-    /**
-     * @var \Magento\Log\Model\Shell\Command\Status
-     */
-    protected $_model;
-
-    protected function setUp()
-    {
-        $this->_factoryMock = $this->getMock(
-            'Magento\Log\Model\Resource\ShellFactory',
-            ['create'],
-            [],
-            '',
-            false
-        );
-        $this->_shellMock = $this->getMock('Magento\Log\Model\Resource\Shell', [], [], '', false);
-        $this->_factoryMock->expects($this->once())->method('create')->will($this->returnValue($this->_shellMock));
-        $this->_model = new \Magento\Log\Model\Shell\Command\Status($this->_factoryMock);
-    }
-
-    public function testExecuteWithoutDataTotalAndHeadLinesFormatting()
-    {
-        $data = [];
-        $this->_shellMock->expects($this->once())->method('getTablesInfo')->will($this->returnValue($data));
-        $output = $this->_model->execute();
-        $total = '/Total( )+\|( )+0( )+\|( )+0 b( )+\|( )+0 b( )+\|/';
-        $this->assertRegExp($total, $output, 'Incorrect Total Line');
-
-        $head = '/Table Name( )+\|( )+Rows( )+\|( )+Data Size( )+\|( )+Index Size( )+\|/';
-        $this->assertRegExp($head, $output, 'Incorrect Head Line');
-    }
-
-    /**
-     * @param array $tableData
-     * @param string $expected
-     * @dataProvider executeDataFormatDataProvider
-     */
-    public function testExecuteWithData($tableData, $expected)
-    {
-        $data = [$tableData];
-        $this->_shellMock->expects($this->once())->method('getTablesInfo')->will($this->returnValue($data));
-        $this->assertRegExp($expected, $this->_model->execute());
-    }
-
-    public function executeDataFormatDataProvider()
-    {
-        return [
-            [
-                ['name' => 'table_1', 'rows' => 1500, 'data_length' => 1000, 'index_length' => 1024 * 1024],
-                '/table_1( )+\|( )+1\.50K( )+\|( )+1000 b( )+\|( )+1\.00Mb( )+\|/',
-            ],
-            [
-                [
-                    'name' => 'table_2',
-                    'rows' => 1500000,
-                    'data_length' => 1024 * 1024 * 1024,
-                    'index_length' => 1024 * 1024 * 1024 * 500,
-                ],
-                '/table_2( )+\|( )+1\.50M( )+\|( )+1\.00Gb( )+\|( )+500\.00Gb( )+\|/'
-            ]
-        ];
-    }
-}
diff --git a/app/code/Magento/Log/Test/Unit/Model/ShellTest.php b/app/code/Magento/Log/Test/Unit/Model/ShellTest.php
deleted file mode 100644
index 2b7071cd7a061b8ceb6a23c655c20e93f5087c19..0000000000000000000000000000000000000000
--- a/app/code/Magento/Log/Test/Unit/Model/ShellTest.php
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Log\Test\Unit\Model;
-
-class ShellTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_factoryMock;
-
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_shellMock;
-
-    /**
-     * @var \Magento\Log\Model\Shell
-     */
-    protected $_model;
-
-    protected function setUp()
-    {
-        $this->_factoryMock = $this->getMock('Magento\Log\Model\Shell\Command\Factory', [], [], '', false);
-        $filesystemMock = $this->getMock('Magento\Framework\Filesystem', [], [], '', false);
-        $this->_model = $this->getMock(
-            'Magento\Log\Model\Shell',
-            ['_applyPhpVariables'],
-            [$filesystemMock, 'entryPoint.php', $this->_factoryMock]
-        );
-    }
-
-    public function testRunWithShowHelp()
-    {
-        $this->expectOutputRegex('/Usage\:  php -f entryPoint\.php/');
-        $this->_model->setRawArgs(['h']);
-        $this->_factoryMock->expects($this->never())->method('createCleanCommand');
-        $this->_factoryMock->expects($this->never())->method('createStatusCommand');
-        $this->_model->run();
-    }
-
-    public function testRunWithCleanCommand()
-    {
-        $this->expectOutputRegex('/clean command message/');
-        $this->_model->setRawArgs(['clean', '--days', 10]);
-        $commandMock = $this->getMock('Magento\Log\Model\Shell\CommandInterface');
-        $this->_factoryMock->expects(
-            $this->once()
-        )->method(
-            'createCleanCommand'
-        )->with(
-            10
-        )->will(
-            $this->returnValue($commandMock)
-        );
-        $commandMock->expects($this->once())->method('execute')->will($this->returnValue('clean command message'));
-        $this->_factoryMock->expects($this->never())->method('createStatusCommand');
-        $this->_model->run();
-    }
-
-    public function testRunWithStatusCommand()
-    {
-        $this->expectOutputRegex('/status command message/');
-        $this->_model->setRawArgs(['status']);
-        $commandMock = $this->getMock('Magento\Log\Model\Shell\CommandInterface');
-        $this->_factoryMock->expects(
-            $this->once()
-        )->method(
-            'createStatusCommand'
-        )->will(
-            $this->returnValue($commandMock)
-        );
-        $commandMock->expects($this->once())->method('execute')->will($this->returnValue('status command message'));
-        $this->_factoryMock->expects($this->never())->method('createCleanCommand');
-        $this->_model->run();
-    }
-
-    public function testRunWithoutCommand()
-    {
-        $this->expectOutputRegex('/Usage\:  php -f entryPoint\.php/');
-        $this->_factoryMock->expects($this->never())->method('createStatusCommand');
-        $this->_factoryMock->expects($this->never())->method('createCleanCommand');
-        $this->_model->run();
-    }
-}
diff --git a/app/code/Magento/Log/etc/di.xml b/app/code/Magento/Log/etc/di.xml
index 078c0d6e4a283a5d92161651e52e0fd1c405d885..ff051483d833a93d6cd55b226558fedba642815f 100644
--- a/app/code/Magento/Log/etc/di.xml
+++ b/app/code/Magento/Log/etc/di.xml
@@ -11,4 +11,12 @@
             <argument name="storeManager" xsi:type="object">Magento\Store\Model\StoreManager\Proxy</argument>
         </arguments>
     </type>
+    <type name="Magento\Framework\Console\CommandList">
+        <arguments>
+            <argument name="commands" xsi:type="array">
+                <item name="logStatusCommand" xsi:type="object">Magento\Log\Console\Command\LogStatusCommand</item>
+                <item name="logCleanCommand" xsi:type="object">Magento\Log\Console\Command\LogCleanCommand</item>
+            </argument>
+        </arguments>
+    </type>
 </config>
diff --git a/dev/shell/cache.php b/dev/shell/cache.php
deleted file mode 100644
index 9c44a5914daa6e255fe74d66ca587da01cd4ed35..0000000000000000000000000000000000000000
--- a/dev/shell/cache.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * A CLI tool for managing Magento application caches
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Framework\App;
-
-use Magento\Framework\App\Cache\ManagerApp;
-use Magento\Framework\Shell\ComplexParameter;
-
-require __DIR__ . '/../../app/bootstrap.php';
-
-$usage = 'Usage: php -f cache.php -- [--' . ManagerApp::KEY_SET . '=1|0]'
-    . ' [--' . ManagerApp::KEY_CLEAN . ']'
-    . ' [--' . ManagerApp::KEY_STATUS . ']'
-    . ' [--' . ManagerApp::KEY_FLUSH . ']'
-    . ' [--' . ManagerApp::KEY_TYPES . '=<type1>,<type2>,...]'
-    . ' [--bootstrap=' . escapeshellarg('INIT_PARAM=foo&ANOTHER_PARAM[key]=bar') . ']
-    --' . ManagerApp::KEY_TYPES . ' - list of cache types, comma-separated. If omitted, all caches will be affected
-    --' . ManagerApp::KEY_SET . ' - enable or disable the specified cache types
-    --' . ManagerApp::KEY_CLEAN . ' - clean data of the specified cache types
-    --' . ManagerApp::KEY_STATUS . ' - display current status for each cache type
-    --' . ManagerApp::KEY_FLUSH . ' - destroy all data in storage that the specified cache types reside on
-    --bootstrap - add or override parameters of the bootstrap' . PHP_EOL;
-$longOpts = [
-    ManagerApp::KEY_SET . '::',
-    ManagerApp::KEY_CLEAN,
-    ManagerApp::KEY_STATUS,
-    ManagerApp::KEY_FLUSH,
-    ManagerApp::KEY_TYPES . '::',
-    'bootstrap::',
-];
-$opt = getopt('', $longOpts);
-if (empty($opt)) {
-    echo $usage;
-}
-
-try {
-    $bootstrapParam = new ComplexParameter('bootstrap');
-    $params = $bootstrapParam->mergeFromArgv($_SERVER, $_SERVER);
-    $params[Bootstrap::PARAM_REQUIRE_MAINTENANCE] = null;
-    $bootstrap = Bootstrap::create(BP, $params);
-    /** @var ManagerApp $app */
-    $app = $bootstrap->createApplication('Magento\Framework\App\Cache\ManagerApp', ['requestArgs' => $opt]);
-    $bootstrap->run($app);
-} catch (\Exception $e) {
-    echo $e;
-    exit(1);
-}
diff --git a/dev/shell/indexer.php b/dev/shell/indexer.php
deleted file mode 100644
index 08c6cbe77d70f0f9ef0cebc7cd720f91fa74d669..0000000000000000000000000000000000000000
--- a/dev/shell/indexer.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-use Magento\Framework\App\Bootstrap;
-use Magento\Store\Model\StoreManager;
-
-require __DIR__ . '/../../app/bootstrap.php';
-$params = $_SERVER;
-$params[StoreManager::PARAM_RUN_CODE] = 'admin';
-$params[StoreManager::PARAM_RUN_TYPE] = 'store';
-$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
-/** @var \Magento\Indexer\App\Shell $application */
-$app = $bootstrap->createApplication('Magento\Indexer\App\Shell', ['entryFileName' => basename(__FILE__)]);
-$bootstrap->run($app);
diff --git a/dev/shell/log.php b/dev/shell/log.php
deleted file mode 100644
index 181b07ac06f9f1444d5527d4d0c34ddd143f44b1..0000000000000000000000000000000000000000
--- a/dev/shell/log.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-use Magento\Framework\App\Bootstrap;
-use Magento\Store\Model\StoreManager;
-
-require __DIR__ . '/../../app/bootstrap.php';
-$params = $_SERVER;
-$params[StoreManager::PARAM_RUN_CODE] = 'admin';
-$params[StoreManager::PARAM_RUN_TYPE] = 'store';
-$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
-/** @var \Magento\Log\App\Shell $app */
-$app = $bootstrap->createApplication('Magento\Log\App\Shell', ['entryFileName' => basename(__FILE__)]);
-$bootstrap->run($app);
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Application.php b/dev/tests/integration/framework/Magento/TestFramework/Application.php
index 8059a1bf86d1e987bf7da8d5c22f547c90c5e910..41e57ac4359e8c8547ba425e15b15c8ba514571a 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Application.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Application.php
@@ -428,18 +428,18 @@ class Application
         );
 
         // enable only specified list of caches
-        $cacheScript = BP . '/dev/shell/cache.php';
         $initParamsQuery = $this->getInitParamsQuery();
-        $this->_shell->execute('php -f %s -- --set=0 --bootstrap=%s', [$cacheScript, $initParamsQuery]);
-        $cacheTypes = [
-            \Magento\Framework\App\Cache\Type\Config::TYPE_IDENTIFIER,
-            \Magento\Framework\App\Cache\Type\Layout::TYPE_IDENTIFIER,
-            \Magento\Framework\App\Cache\Type\Translate::TYPE_IDENTIFIER,
-            \Magento\Eav\Model\Cache\Type::TYPE_IDENTIFIER,
-        ];
+        $this->_shell->execute('php -f %s cache:disable --all --bootstrap=%s', [BP . '/bin/magento', $initParamsQuery]);
         $this->_shell->execute(
-            'php -f %s -- --set=1 --types=%s --bootstrap=%s',
-            [$cacheScript, implode(',', $cacheTypes), $initParamsQuery]
+            'php -f %s cache:enable %s %s %s %s --bootstrap=%s',
+            [
+                BP . '/bin/magento',
+                \Magento\Framework\App\Cache\Type\Config::TYPE_IDENTIFIER,
+                \Magento\Framework\App\Cache\Type\Layout::TYPE_IDENTIFIER,
+                \Magento\Framework\App\Cache\Type\Translate::TYPE_IDENTIFIER,
+                \Magento\Eav\Model\Cache\Type::TYPE_IDENTIFIER,
+                $initParamsQuery,
+            ]
         );
 
         // right after a clean installation, store DB dump for future reuse in tests or running the test suite again
diff --git a/dev/tests/integration/testsuite/Magento/Framework/View/Asset/MinifierTest.php b/dev/tests/integration/testsuite/Magento/Framework/View/Asset/MinifierTest.php
index da5a86c47a1496652cf53df739c93389f1c1e58c..9e64e9345c6fa2d84885c4ec01e469ed1df7277c 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/View/Asset/MinifierTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/View/Asset/MinifierTest.php
@@ -208,9 +208,8 @@ class MinifierTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($this->objectManager));
 
-        $logger = $this->objectManager->create(
-            'Magento\Tools\View\Deployer\Log',
-            ['verbosity' => \Magento\Tools\View\Deployer\Log::SILENT]
+        $output = $this->objectManager->create(
+            'Symfony\Component\Console\Output\ConsoleOutput'
         );
 
         $filesUtil = $this->getMock('\Magento\Framework\App\Utility\Files', [], [], '', false);
@@ -230,10 +229,10 @@ class MinifierTest extends \PHPUnit_Framework_TestCase
                 ]
             ));
 
-        /** @var \Magento\Tools\View\Deployer $deployer */
+        /** @var \Magento\Setup\ModelDeployer $deployer */
         $deployer = $this->objectManager->create(
-            'Magento\Tools\View\Deployer',
-            ['filesUtil' => $filesUtil, 'logger' => $logger, 'isDryRun' => false]
+            'Magento\Setup\Model\Deployer',
+            ['filesUtil' => $filesUtil, 'output' => $output, 'isDryRun' => false]
         );
 
         $deployer->deploy($omFactory, ['en_US']);
diff --git a/dev/tests/integration/testsuite/Magento/Indexer/Model/ShellTest.php b/dev/tests/integration/testsuite/Magento/Indexer/Model/ShellTest.php
deleted file mode 100644
index 9d2a1e7d0e183992397f5fa7dba6d1354dc6b1de..0000000000000000000000000000000000000000
--- a/dev/tests/integration/testsuite/Magento/Indexer/Model/ShellTest.php
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Indexer\Model;
-
-class ShellTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * Returns prepared model
-     *
-     * @param string $entryPoint
-     * @return \Magento\Indexer\Model\Shell
-     */
-    protected function getModel($entryPoint = 'fake.php')
-    {
-        return \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Indexer\Model\Shell',
-            ['entryPoint' => $entryPoint]
-        );
-    }
-
-    /**
-     * Returns result of running model - can be real model or mocked one
-     *
-     * @param \Magento\Indexer\Model\Shell $model Can be mock
-     * @return string
-     */
-    protected function runModel($model)
-    {
-        ob_start();
-        $model->run();
-        $result = ob_get_contents();
-        ob_end_clean();
-        return $result;
-    }
-
-    public function testGetUsageHelp()
-    {
-        $model = $this->getModel('testme.php');
-        $this->assertContains('testme.php', $model->getUsageHelp());
-    }
-
-    public function testRunWithoutParams()
-    {
-        $model = $this->getModel('testme.php');
-        $result = $this->runModel($model);
-        $this->assertContains('testme.php', $result);
-        $this->assertContains('index', $result); // Something about indexes
-    }
-
-    public function testRunIndexList()
-    {
-        $model = $this->getModel('testme.php');
-        $model->setRawArgs(['testme.php', '--', 'status']);
-        $result = $this->runModel($model);
-
-        $this->assertNotContains('testme.php', $result);
-        $this->assertNotContains('Usage:', $result);
-
-        /** @var \Magento\Indexer\Model\Indexer\Collection $indexerCollection */
-        $indexerCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
-            'Magento\Indexer\Model\Indexer\Collection'
-        );
-        foreach ($indexerCollection->getItems() as $indexer) {
-            /** @var \Magento\Indexer\Model\IndexerInterface $indexer */
-            $this->assertContains((string)$indexer->getTitle(), $result);
-        }
-    }
-
-    /**
-     * @param string $param
-     * @param bool $expectedHasErrors
-     *
-     * @dataProvider hasErrorsDataProvider
-     */
-    public function testHasErrors($param, $expectedHasErrors)
-    {
-        $model = $this->getModel('testme.php');
-        $model->setRawArgs(['testme.php', '--', $param]);
-        $this->runModel($model);
-
-        $this->assertEquals($expectedHasErrors, $model->hasErrors());
-    }
-
-    /**
-     * @return array
-     */
-    public function hasErrorsDataProvider()
-    {
-        return [
-            'execution without issues' => ['info', false],
-            'issue with wrong index' => ['--reindex=wrong_index_code', true]
-        ];
-    }
-}
diff --git a/dev/tests/integration/testsuite/Magento/Log/Model/ShellTest.php b/dev/tests/integration/testsuite/Magento/Log/Model/ShellTest.php
deleted file mode 100644
index 8e9159d002ec0b048fd8304cfa462518b36bc75b..0000000000000000000000000000000000000000
--- a/dev/tests/integration/testsuite/Magento/Log/Model/ShellTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Log\Model;
-
-class ShellTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * Returns prepared model
-     *
-     * @param string $entryPoint
-     * @return \Magento\Log\Model\Shell
-     */
-    protected function _getModel($entryPoint = 'fake.php')
-    {
-        return \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Log\Model\Shell',
-            ['entryPoint' => $entryPoint]
-        );
-    }
-
-    /**
-     * Returns result of running model - can be real model or mocked one
-     *
-     * @param \Magento\Log\Model\Shell $model Can be mock
-     * @return string
-     */
-    protected function _run($model)
-    {
-        ob_start();
-        $model->run();
-        $result = ob_get_contents();
-        ob_end_clean();
-        return $result;
-    }
-
-    public function testGetUsageHelp()
-    {
-        $model = $this->_getModel('testme.php');
-        $this->assertContains('testme.php', $model->getUsageHelp());
-    }
-
-    public function testRunWithoutParams()
-    {
-        $model = $this->_getModel('testme.php');
-        $result = $this->_run($model);
-        $this->assertContains('testme.php', $result);
-        $this->assertContains('log', $result); // Something about logs
-    }
-
-    public function testRunLogStatus()
-    {
-        $model = $this->_getModel('testme.php');
-        $model->setRawArgs(['testme.php', 'status']);
-        $result = $this->_run($model);
-
-        $this->assertNotContains('testme.php', $result);
-        $this->assertNotContains('Usage:', $result);
-        $this->assertContains('Table', $result);
-        $this->assertContains('Total', $result);
-        $this->assertContains('Rows', $result);
-    }
-}
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Console/Command/I18nCollectPhrasesCommandTest.php b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/I18nCollectPhrasesCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..924853df6bc0c75cb219ec88afb42317c33d4f1d
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/I18nCollectPhrasesCommandTest.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Setup\Console\Command;
+
+use Symfony\Component\Console\Tester\CommandTester;
+
+class I18nCollectPhrasesCommandTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var I18nCollectPhrasesCommand
+     */
+    private $command;
+
+    /**
+     * @var CommandTester
+     */
+    private $tester;
+
+    public function setUp()
+    {
+        $this->command = new I18nCollectPhrasesCommand();
+        $this->tester = new CommandTester($this->command);
+    }
+
+    public function tearDown()
+    {
+        $property = new \ReflectionProperty('\Magento\Setup\Module\I18n\ServiceLocator', '_dictionaryGenerator');
+        $property->setAccessible(true);
+        $property->setValue(null);
+        $property->setAccessible(false);
+    }
+
+    public function testExecuteConsoleOutput()
+    {
+        $this->tester->execute(
+            [
+                'directory' => BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/',
+            ]
+        );
+
+        $this->assertEquals('Dictionary successfully processed.' . PHP_EOL, $this->tester->getDisplay());
+    }
+
+    public function testExecuteCsvOutput()
+    {
+        $outputPath = BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/output/output.csv';
+        $this->tester->execute(
+            [
+                'directory' => BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/',
+                '--output' => $outputPath,
+            ]
+        );
+
+        $handle = fopen($outputPath, 'r');
+        $output = fread($handle, filesize($outputPath));
+        $expected = '"Hello world","Hello world"' . PHP_EOL . '"Foo bar","Foo bar"' . PHP_EOL;
+        $this->assertEquals($expected, $output);
+        unlink($outputPath);
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Specified path doesn't exist
+     */
+    public function testExecuteNonExistingPath()
+    {
+        $this->tester->execute(
+            [
+                'directory' => BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/non_exist',
+            ]
+        );
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Console/Command/I18nPackCommandTest.php b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/I18nPackCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0185b06a5376b5b20884e28a241ca9d5a76854f4
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/I18nPackCommandTest.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Setup\Console\Command;
+
+use Symfony\Component\Console\Tester\CommandTester;
+
+class I18nPackCommandTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var I18nCollectPhrasesCommand
+     */
+    private $command;
+
+    /**
+     * @var CommandTester
+     */
+    private $tester;
+
+    public function setUp()
+    {
+        $this->command = new I18nPackCommand();
+        $this->tester = new CommandTester($this->command);
+    }
+
+    public function testExecute()
+    {
+        $this->tester->execute(
+            [
+                'source' => BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/i18n.csv',
+                'pack' => BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/output/pack',
+                'locale' => 'de_DE',
+                '--allow-duplicates' => true,
+            ]
+        );
+
+        $this->assertEquals('Successfully saved de_DE language package.' . PHP_EOL, $this->tester->getDisplay());
+        $basePath = BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/output/pack/app/code';
+        $this->assertFileExists($basePath . '/Magento/A/i18n/de_DE.csv');
+        $this->assertFileExists($basePath . '/Magento/B/i18n/de_DE.csv');
+        $this->assertFileExists($basePath . '/Magento/C/i18n/de_DE.csv');
+        $this->assertFileExists($basePath . '/Magento/D/i18n/de_DE.csv');
+        unlink($basePath . '/Magento/A/i18n/de_DE.csv');
+        unlink($basePath . '/Magento/B/i18n/de_DE.csv');
+        unlink($basePath . '/Magento/C/i18n/de_DE.csv');
+        unlink($basePath . '/Magento/D/i18n/de_DE.csv');
+        $this->recursiveRmdir(BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/output/pack');
+
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Cannot open dictionary file:
+     */
+    public function testExecuteNonExistingPath()
+    {
+        $nonExistPath = BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/non_exist.csv';
+        $this->tester->execute(
+            [
+                'source' => $nonExistPath,
+                'pack' => BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/output/pack',
+                'locale' => 'de_DE',
+                '--allow-duplicates' => true,
+            ]
+        );
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Possible values for 'mode' option are 'replace' and 'merge'
+     */
+    public function testExecuteInvalidMode()
+    {
+        $this->tester->execute(
+            [
+                'source' => BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/i18n.csv',
+                'pack' => BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/output/pack',
+                'locale' => 'de_DE',
+                '--allow-duplicates' => true,
+                '--mode' => 'invalid'
+            ]
+        );
+    }
+
+    /**
+     * Removes directories recursively
+     *
+     * @param string $dir
+     * @return void
+     */
+    private function recursiveRmdir($dir)
+    {
+        if (is_dir($dir)) {
+            $subdirs = scandir($dir);
+            foreach ($subdirs as $subdir) {
+                if ($subdir !== '.' && $subdir !== '..' && filetype($dir . '/' . $subdir) === 'dir') {
+                    $this->recursiveRmdir($dir . '/' . $subdir);
+                }
+            }
+            rmdir($dir);
+        }
+    }
+}
diff --git a/dev/tools/Magento/Tools/I18n/bootstrap.php b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/Magento/TestModule/Phrases.php
similarity index 64%
rename from dev/tools/Magento/Tools/I18n/bootstrap.php
rename to dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/Magento/TestModule/Phrases.php
index 61706a7fde27c998109e16d10734951523a7deee..d55885ff96f2b8da7acce4f97c505fa2a6b8aa76 100644
--- a/dev/tools/Magento/Tools/I18n/bootstrap.php
+++ b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/Magento/TestModule/Phrases.php
@@ -3,4 +3,5 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-require_once __DIR__ . '/../../../../../app/autoload.php';
+$a = __("Hello world");
+$b = __("Foo bar");
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/i18n.csv b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/i18n.csv
new file mode 100644
index 0000000000000000000000000000000000000000..534d54c7c26bb98887ec60d9fbd122864b821c75
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/i18n.csv
@@ -0,0 +1,9 @@
+"Read Details","Read Details",module,Magento_A
+"Mark as Read","Mark as Read",module,Magento_A
+"Are you sure?","Are you sure?",module,"Magento_A,Magento_B,Magento_C"
+"Messages Inbox","Messages Inbox",module,Magento_D
+"You have %1 new system messages","You have %1 new system messages",module,Magento_A
+"You have %1 new system message","You have %1 new system message",module,Magento_B
+"Incoming Message","Incoming Message",module,Magento_C
+close,close,module,"Magento_B,Magento_C"
+"Read details","Read details",module,Magento_D
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/output/.gitignore b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/output/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/GeneratorTest.php b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/GeneratorTest.php
similarity index 78%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/GeneratorTest.php
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/GeneratorTest.php
index 04048be30c063d6d06759d5133c2fdf5492158a9..7f879a81daeffc30fad8346e7ad980789d1bb5bb 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/GeneratorTest.php
+++ b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/GeneratorTest.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Test\Tools\I18n\Dictionary;
+namespace Magento\Setup\Module\I18n\Dictionary;
 
-use Magento\Tools\I18n\ServiceLocator;
+use Magento\Setup\Module\I18n\ServiceLocator;
 
 class GeneratorTest extends \PHPUnit_Framework_TestCase
 {
@@ -30,7 +30,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
     protected $outputFileName;
 
     /**
-     * @var \Magento\Tools\I18n\Dictionary\Generator
+     * @var \Magento\Setup\Module\I18n\Dictionary\Generator
      */
     protected $generator;
 
@@ -41,6 +41,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         $this->source = $this->testDir . '/source';
         $this->outputFileName = $this->testDir . '/translate.csv';
         $this->generator = ServiceLocator::getDictionaryGenerator();
+
     }
 
     protected function tearDown()
@@ -48,6 +49,10 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         if (file_exists($this->outputFileName)) {
             unlink($this->outputFileName);
         }
+        $property = new \ReflectionProperty('Magento\Setup\Module\I18n\ServiceLocator', '_dictionaryGenerator');
+        $property->setAccessible(true);
+        $property->setValue(null);
+        $property->setAccessible(false);
     }
 
     public function testGenerationWithoutContext()
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/expected/with_context.csv b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/expected/with_context.csv
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/expected/with_context.csv
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/expected/with_context.csv
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/expected/without_context.csv b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/expected/without_context.csv
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/expected/without_context.csv
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/expected/without_context.csv
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/Helper/Helper.php b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/Helper/Helper.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/Helper/Helper.php
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/Helper/Helper.php
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/Model/Model.php b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/Model/Model.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/Model/Model.php
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/Model/Model.php
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/view/frontend/default.xml b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/view/frontend/default.xml
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/view/frontend/default.xml
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/view/frontend/default.xml
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/view/frontend/file.js b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/view/frontend/file.js
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/view/frontend/file.js
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/view/frontend/file.js
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/view/frontend/template.phtml b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/view/frontend/template.phtml
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/view/frontend/template.phtml
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/view/frontend/template.phtml
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/code/Magento/SecondModule/Model/Model.php b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/code/Magento/SecondModule/Model/Model.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/code/Magento/SecondModule/Model/Model.php
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/code/Magento/SecondModule/Model/Model.php
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/design/adminhtml/default/backend/default.xml b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/design/adminhtml/default/backend/default.xml
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/design/adminhtml/default/backend/default.xml
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/design/adminhtml/default/backend/default.xml
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/design/adminhtml/default/backend/template.phtml b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/design/adminhtml/default/backend/template.phtml
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/design/adminhtml/default/backend/template.phtml
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/design/adminhtml/default/backend/template.phtml
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/lib/web/mage/file.js b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/lib/web/mage/file.js
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/lib/web/mage/file.js
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/lib/web/mage/file.js
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/lib/web/varien/file.js b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/lib/web/varien/file.js
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/lib/web/varien/file.js
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/lib/web/varien/file.js
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/not_magento_dir/Model.php b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/not_magento_dir/Model.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/not_magento_dir/Model.php
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/not_magento_dir/Model.php
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/not_magento_dir/file.js b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/not_magento_dir/file.js
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/not_magento_dir/file.js
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/not_magento_dir/file.js
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/not_magento_dir/template.phtml b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/not_magento_dir/template.phtml
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/not_magento_dir/template.phtml
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/not_magento_dir/template.phtml
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Pack/GeneratorTest.php b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Pack/GeneratorTest.php
similarity index 92%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Pack/GeneratorTest.php
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Pack/GeneratorTest.php
index c38ce4760b52d31646ff7d8aa762ba0f5b1ee7ec..ff28ebe4eda12bc1a7555365424326188eefff0e 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Pack/GeneratorTest.php
+++ b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Pack/GeneratorTest.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Test\Tools\I18n\Pack;
+namespace Magento\Setup\Module\I18n\Pack;
 
-use Magento\Tools\I18n\ServiceLocator;
+use Magento\Setup\Module\I18n\ServiceLocator;
 
 class GeneratorTest extends \PHPUnit_Framework_TestCase
 {
@@ -40,7 +40,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
     protected $_expectedFiles;
 
     /**
-     * @var \Magento\Tools\I18n\Pack\Generator
+     * @var \Magento\Setup\Module\I18n\Pack\Generator
      */
     protected $_generator;
 
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Pack/_files/expected/app/code/Magento/FirstModule/i18n/de_DE.csv b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Pack/_files/expected/app/code/Magento/FirstModule/i18n/de_DE.csv
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Pack/_files/expected/app/code/Magento/FirstModule/i18n/de_DE.csv
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Pack/_files/expected/app/code/Magento/FirstModule/i18n/de_DE.csv
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Pack/_files/expected/app/code/Magento/SecondModule/i18n/de_DE.csv b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Pack/_files/expected/app/code/Magento/SecondModule/i18n/de_DE.csv
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Pack/_files/expected/app/code/Magento/SecondModule/i18n/de_DE.csv
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Pack/_files/expected/app/code/Magento/SecondModule/i18n/de_DE.csv
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Pack/_files/expected/app/design/adminhtml/default/i18n/de_DE.csv b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Pack/_files/expected/app/design/adminhtml/default/i18n/de_DE.csv
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Pack/_files/expected/app/design/adminhtml/default/i18n/de_DE.csv
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Pack/_files/expected/app/design/adminhtml/default/i18n/de_DE.csv
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Pack/_files/expected/lib/web/i18n/de_DE.csv b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Pack/_files/expected/lib/web/i18n/de_DE.csv
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Pack/_files/expected/lib/web/i18n/de_DE.csv
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Pack/_files/expected/lib/web/i18n/de_DE.csv
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Pack/_files/source.csv b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Pack/_files/source.csv
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Pack/_files/source.csv
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Pack/_files/source.csv
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
similarity index 76%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
index 7e0f91b9e91b53e38d5f4db838bd1ade388a43a5..eda3f0f515808a7c45245bf53d2d6fabce0dd596 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
+++ b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
@@ -3,14 +3,13 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Test\Tools\I18n\Parser\Adapter\Php\Tokenizer;
+namespace Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer;
 
 use Magento\Framework\ObjectManager;
 use Magento\TestFramework\Helper\Bootstrap;
-use Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector;
 
 /**
- * @covers \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector
+ * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector
  */
 class PhraseCollectorTest extends \PHPUnit_Framework_TestCase
 {
@@ -28,12 +27,12 @@ class PhraseCollectorTest extends \PHPUnit_Framework_TestCase
     {
         $this->objectManager = Bootstrap::getObjectManager();
         $this->phraseCollector = $this->objectManager->create(
-            'Magento\\Tools\\I18n\\Parser\\Adapter\\Php\\Tokenizer\\PhraseCollector'
+            'Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector'
         );
     }
 
     /**
-     * @covers \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector::parse
+     * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector::parse
      */
     public function testParse()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Parser/Adapter/Php/Tokenizer/Translate/MethodCollectorTest.php b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Translate/MethodCollectorTest.php
similarity index 73%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Parser/Adapter/Php/Tokenizer/Translate/MethodCollectorTest.php
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Translate/MethodCollectorTest.php
index 6d401f7ce7ee767f8875d0014d13c29f330a56c6..b2d0bd34d90250af7300e12a54325c985c886819 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Parser/Adapter/Php/Tokenizer/Translate/MethodCollectorTest.php
+++ b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Translate/MethodCollectorTest.php
@@ -3,14 +3,13 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Test\Tools\I18n\Parser\Adapter\Php\Tokenizer\Translate;
+namespace Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Translate;
 
 use Magento\Framework\ObjectManager;
 use Magento\TestFramework\Helper\Bootstrap;
-use Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Translate\MethodCollector;
 
 /**
- * @covers \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Translate\MethodCollector
+ * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Translate\MethodCollector
  */
 class MethodCollectorTest extends \PHPUnit_Framework_TestCase
 {
@@ -28,12 +27,12 @@ class MethodCollectorTest extends \PHPUnit_Framework_TestCase
     {
         $this->objectManager = Bootstrap::getObjectManager();
         $this->methodCollector = $this->objectManager->create(
-            'Magento\\Tools\\I18n\\Parser\\Adapter\\Php\\Tokenizer\\Translate\\MethodCollector'
+            'Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Translate\MethodCollector'
         );
     }
 
     /**
-     * @covers \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Translate\MethodCollector::parse
+     * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Translate\MethodCollector::parse
      */
     public function testParse()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Parser/Adapter/Php/Tokenizer/_files/methodsCode.php.txt b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/_files/methodsCode.php.txt
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Parser/Adapter/Php/Tokenizer/_files/methodsCode.php.txt
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/_files/methodsCode.php.txt
diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Parser/Adapter/Php/Tokenizer/_files/objectsCode.php.txt b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/_files/objectsCode.php.txt
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Parser/Adapter/Php/Tokenizer/_files/objectsCode.php.txt
rename to dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/_files/objectsCode.php.txt
diff --git a/dev/tests/performance/framework/Magento/TestFramework/Application.php b/dev/tests/performance/framework/Magento/TestFramework/Application.php
index d236858ef259a39473edec5fc8df71fdae81d41a..bd192386c9d747fbb5b154c615a70014c1e7ead6 100644
--- a/dev/tests/performance/framework/Magento/TestFramework/Application.php
+++ b/dev/tests/performance/framework/Magento/TestFramework/Application.php
@@ -118,7 +118,7 @@ class Application
     public function reindex()
     {
         $this->_shell->execute(
-            'php -f ' . $this->_config->getApplicationBaseDir() . '/dev/shell/indexer.php -- reindexall'
+            'php -f ' . $this->_config->getApplicationBaseDir() . '/bin/magento indexer:reindex --all'
         );
         return $this;
     }
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/App/Language/TranslationFilesTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/App/Language/TranslationFilesTest.php
index c0d1f61f6b0ff1c2da92142b3345fea1b1af586c..e4e8b509da43cedb2925339ec0d57e16d40d3475 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/App/Language/TranslationFilesTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/App/Language/TranslationFilesTest.php
@@ -13,7 +13,7 @@ class TranslationFilesTest extends TranslationFiles
     /**
      * Context
      *
-     * @var \Magento\Tools\I18n\Context
+     * @var \Magento\Setup\Module\I18n\Context
      */
     protected $context;
 
@@ -45,7 +45,7 @@ class TranslationFilesTest extends TranslationFiles
     {
         $parser = $this->prepareParser();
 
-        $optionResolverFactory = new \Magento\Tools\I18n\Dictionary\Options\ResolverFactory();
+        $optionResolverFactory = new \Magento\Setup\Module\I18n\Dictionary\Options\ResolverFactory();
         $optionResolver = $optionResolverFactory->create(
             \Magento\Framework\App\Utility\Files::init()->getPathToSource(),
             true
@@ -70,7 +70,7 @@ class TranslationFilesTest extends TranslationFiles
     }
 
     /**
-     * @param \Magento\Tools\I18n\Dictionary\Phrase $phrase
+     * @param \Magento\Setup\Module\I18n\Dictionary\Phrase $phrase
      * @param array $context
      * @return string
      */
@@ -78,41 +78,41 @@ class TranslationFilesTest extends TranslationFiles
     {
         $path = $this->getContext()->buildPathToLocaleDirectoryByContext($phrase->getContextType(), $context);
         return \Magento\Framework\App\Utility\Files::init()->getPathToSource() . '/'
-        . $path . \Magento\Tools\I18n\Locale::DEFAULT_SYSTEM_LOCALE
-        . '.' . \Magento\Tools\I18n\Pack\Writer\File\Csv::FILE_EXTENSION;
+        . $path . \Magento\Setup\Module\I18n\Locale::DEFAULT_SYSTEM_LOCALE
+        . '.' . \Magento\Setup\Module\I18n\Pack\Writer\File\Csv::FILE_EXTENSION;
     }
 
     /**
-     * @return \Magento\Tools\I18n\Context
+     * @return \Magento\Setup\Module\I18n\Context
      */
     protected function getContext()
     {
         if ($this->context === null) {
-            $this->context = new \Magento\Tools\I18n\Context();
+            $this->context = new \Magento\Setup\Module\I18n\Context();
         }
         return $this->context;
     }
 
     /**
-     * @return \Magento\Tools\I18n\Parser\Contextual
+     * @return \Magento\Setup\Module\I18n\Parser\Contextual
      */
     protected function prepareParser()
     {
-        $filesCollector = new \Magento\Tools\I18n\FilesCollector();
+        $filesCollector = new \Magento\Setup\Module\I18n\FilesCollector();
 
-        $phraseCollector = new \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector(
-            new \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer()
+        $phraseCollector = new \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector(
+            new \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer()
         );
         $adapters = [
-            'php' => new \Magento\Tools\I18n\Parser\Adapter\Php($phraseCollector),
-            'js' =>  new \Magento\Tools\I18n\Parser\Adapter\Js(),
-            'xml' => new \Magento\Tools\I18n\Parser\Adapter\Xml(),
+            'php' => new \Magento\Setup\Module\I18n\Parser\Adapter\Php($phraseCollector),
+            'js' =>  new \Magento\Setup\Module\I18n\Parser\Adapter\Js(),
+            'xml' => new \Magento\Setup\Module\I18n\Parser\Adapter\Xml(),
         ];
 
-        $parserContextual = new \Magento\Tools\I18n\Parser\Contextual(
+        $parserContextual = new \Magento\Setup\Module\I18n\Parser\Contextual(
             $filesCollector,
-            new \Magento\Tools\I18n\Factory(),
-            new \Magento\Tools\I18n\Context()
+            new \Magento\Setup\Module\I18n\Factory(),
+            new \Magento\Setup\Module\I18n\Context()
         );
         foreach ($adapters as $type => $adapter) {
             $parserContextual->addAdapter($type, $adapter);
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php
index 780e83022c4aa53c7d9bd05fcec9514cd5966448..23fcd366b3325a1789c9c05f5645ffdc91603ad1 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Di/CompilerTest.php
@@ -68,10 +68,18 @@ class CompilerTest extends \PHPUnit_Framework_TestCase
         $basePath = \Magento\Framework\App\Utility\Files::init()->getPathToSource();
         $basePath = str_replace('\\', '/', $basePath);
 
+
         $this->_tmpDir = realpath(__DIR__) . '/tmp';
         $this->_generationDir = $this->_tmpDir . '/generation';
+        if (!file_exists($this->_generationDir)) {
+            mkdir($this->_generationDir, 0777, true);
+        }
         $this->_compilationDir = $this->_tmpDir . '/di';
-        $this->_command = 'php ' . $basePath . '/dev/tools/Magento/Tools/Di/compiler.php --generation=%s --di=%s';
+        if (!file_exists($this->_compilationDir)) {
+            mkdir($this->_compilationDir, 0777, true);
+        }
+
+        $this->_command = 'php ' . $basePath . '/bin/magento setup:di:compile-multi-tenant --generation=%s --di=%s';
 
         $booleanUtils = new \Magento\Framework\Stdlib\BooleanUtils();
         $constInterpreter = new \Magento\Framework\Data\Argument\Interpreter\Constant();
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/AbstractTestCase.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/AbstractTestCase.php
index ec48f6e8a1a25e95939ed472fb4f27700cdd2a87..fdd1a38c2753d971e4bfa460f7943d413eb10cb0 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/AbstractTestCase.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/AbstractTestCase.php
@@ -9,7 +9,7 @@
  */
 namespace Magento\Test\Integrity\Phrase;
 
-use Magento\Tools\I18n\FilesCollector;
+use Magento\Setup\Module\I18n\FilesCollector;
 
 class AbstractTestCase extends \PHPUnit_Framework_TestCase
 {
@@ -27,7 +27,7 @@ class AbstractTestCase extends \PHPUnit_Framework_TestCase
      */
     protected function _getFiles()
     {
-        $filesCollector = new \Magento\Tools\I18n\FilesCollector();
+        $filesCollector = new \Magento\Setup\Module\I18n\FilesCollector();
 
         return $filesCollector->getFiles(
             [\Magento\Framework\App\Utility\Files::init()->getPathToSource()],
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/ArgumentsTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/ArgumentsTest.php
index 77b1c099f1cc4a7eef7f91c7d2081a1cd54766b0..514f39e7180c4dcec384f6cf3cc15bce62e1f466 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/ArgumentsTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/ArgumentsTest.php
@@ -10,12 +10,12 @@
  */
 namespace Magento\Test\Integrity\Phrase;
 
-use Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer;
+use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer;
 
 class ArgumentsTest extends \Magento\Test\Integrity\Phrase\AbstractTestCase
 {
     /**
-     * @var \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector
+     * @var \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector
      */
     protected $_phraseCollector;
 
@@ -29,8 +29,8 @@ class ArgumentsTest extends \Magento\Test\Integrity\Phrase\AbstractTestCase
 
     protected function setUp()
     {
-        $this->_phraseCollector = new \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector(
-            new \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer()
+        $this->_phraseCollector = new \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector(
+            new \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer()
         );
 
         $rootDir = \Magento\Framework\App\Utility\Files::init()->getPathToSource();
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/Legacy/SignatureTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/Legacy/SignatureTest.php
index 0cec004de647fc17f31e8d8c402fc110069a271d..ba905c42fe0cdf739e1d402165dff0c137228ae1 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/Legacy/SignatureTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/Legacy/SignatureTest.php
@@ -9,20 +9,20 @@
  */
 namespace Magento\Test\Integrity\Phrase\Legacy;
 
-use Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer;
-use Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Translate\MethodCollector;
+use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer;
+use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Translate\MethodCollector;
 
 class SignatureTest extends \Magento\Test\Integrity\Phrase\AbstractTestCase
 {
     /**
-     * @var \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Translate\MethodCollector
+     * @var \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Translate\MethodCollector
      */
     protected $_phraseCollector;
 
     protected function setUp()
     {
-        $this->_phraseCollector = new \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Translate\MethodCollector(
-            new \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer()
+        $this->_phraseCollector = new MethodCollector(
+            new Tokenizer()
         );
     }
 
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/namespace.txt b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/namespace.txt
index 1c00c272708bd0ec91a8cdd3b6f4ff1df4637715..f15f6f424a7c8311ffc4ca22503c61e32ee7efb5 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/namespace.txt
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/namespace.txt
@@ -1,7 +1,3 @@
-dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/Model/Test.php
-dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/Helper/Test.php
-dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/Element.php
-dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/ElementFactory.php
 lib/internal/Magento/Framework/Code/Test/Unit/_files/app/code/Magento/SomeModule/Model/Proxy.php
 lib/internal/Magento/Framework/Code/Test/Unit/_files/app/code/Magento/SomeModule/Model/ElementFactory.php
 lib/internal/Magento/Framework/Code/Test/Unit/_files/app/code/Magento/SomeModule/Model/One/Test.php
@@ -21,13 +17,13 @@ lib/internal/Magento/Framework/ObjectManager/Test/Unit/_files/Aggregate/Aggregat
 lib/internal/Magento/Framework/ObjectManager/Test/Unit/_files/Aggregate/Child.php
 lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/_files/Sample.php
 lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/_files/ExtensibleSample.php
-dev/tools/Magento/Tools/I18n/Zend/Exception.php
-dev/tools/Magento/Tools/I18n/Zend/Console/Getopt/Exception.php
-dev/tools/Magento/Tools/I18n/Zend/Console/Getopt.php
-dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/Model/Model.php
-dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/code/Magento/SecondModule/Model/Model.php
-dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/not_magento_dir/Model.php
-dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/Helper/Helper.php
+setup/src/Magento/Setup/Module/I18n/Zend/Exception.php
+setup/src/Magento/Setup/Module/I18n/Zend/Console/Getopt/Exception.php
+setup/src/Magento/Setup/Module/I18n/Zend/Console/Getopt.php
+dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/Model/Model.php
+dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/code/Magento/SecondModule/Model/Model.php
+dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/not_magento_dir/Model.php
+dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/source/app/code/Magento/FirstModule/Helper/Helper.php
 dev/tests/integration/testsuite/Magento/Framework/Api/_files/Magento/Wonderland/Api/Data/FakeAddressInterface.php
 dev/tests/integration/testsuite/Magento/Framework/Api/_files/Magento/Wonderland/Api/Data/FakeExtensibleOneInterface.php
 dev/tests/integration/testsuite/Magento/Framework/Api/_files/Magento/Wonderland/Api/Data/FakeExtensibleTwoInterface.php
@@ -96,3 +92,7 @@ dev/tests/integration/testsuite/Magento/Test/Tools/Dependency/_files/code/Magent
 dev/tests/integration/testsuite/Magento/Framework/Code/_expected/SourceClassWithNamespaceFactory.php
 dev/tests/integration/testsuite/Magento/Framework/Code/_expected/SourceClassWithNamespaceInterceptor.php
 dev/tests/integration/testsuite/Magento/Framework/Code/_expected/SourceClassWithNamespaceProxy.php
+setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Model/Test.php
+setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Helper/Test.php
+setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Element.php
+setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/ElementFactory.php
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
index 57cd1b6a4c81734430ee2dca24c68aa4ff61b623..59cf16d245655b3613dbf2bcedbf296ef0ed4330 100755
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
@@ -2875,7 +2875,7 @@ return [
     ['Magento\Tax\Service\V1\Data\TaxDetails\AppliedTaxRate', 'Magento\Tax\Api\Data\AppliedTaxRateInterface'],
     ['Magento\Tax\Service\V1\Data\TaxDetails\Item', 'Magento\Tax\Api\Data\TaxDetailsItemInterface'],
     ['Magento\Tax\Service\V1\OrderTaxServiceInterface', 'Magento\Tax\Api\OrderTaxManagementInterface'],
-    ['Magento\Tools\I18n\Code', 'Magento\Tools\I18n'],
+    ['Magento\Tools\I18n\Code', 'Magento\Setup\Module\I18n'],
     ['Magento\TestFramework\Utility\AggregateInvoker', 'Magento\Framework\App\Utility\AggregateInvoker'],
     ['Magento\TestFramework\Utility\Classes', 'Magento\Framework\App\Utility\Classes'],
     ['Magento\TestFramework\Utility\Files', 'Magento\Framework\App\Utility\Files'],
@@ -3161,4 +3161,177 @@ return [
     ['Magento\Framework\Exception\File\ValidatorException'],
     ['Magento\Framework\Filesystem\FilesystemException', 'Magento\Framework\Exception\FileSystemException'],
     ['Magento\Shipping\Exception'],
+    ['Magento\Log\Model\Shell'],
+    ['Magento\Log\App\Shell'],
+    ['Magento\Framework\App\Cache\ManagerApp'],
+    ['Magento\Log\Model\Shell\Command\Factory'],
+    ['Magento\Tools\Di\App\Compiler'],
+    ['Magento\Indexer\App\Shell'],
+    ['Magento\Indexer\Model\Shell'],
+    ['Magento\Tools\I18n\Context', 'Magento\Setup\Module\I18n\Context'],
+    ['Magento\Tools\I18n\Dictionary\Generator', 'Magento\Setup\Module\I18n\Dictionary\Generator'],
+    [
+        'Magento\Tools\I18n\Dictionary\Loader\File\AbstractFile',
+        'Magento\Setup\Module\I18n\Dictionary\Loader\File\AbstractFile'
+    ],
+    ['Magento\Tools\I18n\Dictionary\Loader\File\Csv', 'Magento\Setup\Module\I18n\Dictionary\Loader\File\Csv'],
+    ['Magento\Tools\I18n\Dictionary\Loader\FileInterface', 'Magento\Setup\Module\I18n\Dictionary\Loader\FileInterface'],
+    ['Magento\Tools\I18n\Dictionary\Options\Resolver', 'Magento\Setup\Module\I18n\Dictionary\Options\Resolver'],
+    [
+        'Magento\Tools\I18n\Dictionary\Options\ResolverFactory',
+        'Magento\Setup\Module\I18n\Dictionary\Options\ResolverFactory'
+    ],
+    [
+        'Magento\Tools\I18n\Dictionary\Options\ResolverInterface',
+        'Magento\Setup\Module\I18n\Dictionary\Options\ResolverInterface'
+    ],
+    ['Magento\Tools\I18n\Dictionary\Phrase', 'Magento\Setup\Module\I18n\Dictionary\Phrase'],
+    ['Magento\Tools\I18n\Dictionary\Writer\Csv\Stdo', 'Magento\Setup\Module\I18n\Dictionary\Writer\Csv\Stdo'],
+    ['Magento\Tools\I18n\Dictionary\Writer\Csv', 'Magento\Setup\Module\I18n\Dictionary\Writer\Csv'],
+    ['Magento\Tools\I18n\Dictionary\WriterInterface', 'Magento\Setup\Module\I18n\Dictionary\WriterInterface'],
+    ['Magento\Tools\I18n\Dictionary', 'Magento\Setup\Module\I18n\Dictionary'],
+    ['Magento\Tools\I18n\Factory', 'Magento\Setup\Module\I18n\Factory'],
+    ['Magento\Tools\I18n\FilesCollector', 'Magento\Setup\Module\I18n\FilesCollector'],
+    ['Magento\Tools\I18n\Locale', 'Magento\Setup\Module\I18n\Locale'],
+    ['Magento\Tools\I18n\Pack\Generator', 'Magento\Setup\Module\I18n\Pack\Generator'],
+    ['Magento\Tools\I18n\Pack\Writer\File\AbstractFile', 'Magento\Setup\Module\I18n\Pack\Writer\File\AbstractFile'],
+    ['Magento\Tools\I18n\Pack\Writer\File\Csv', 'Magento\Setup\Module\I18n\Pack\Writer\File\Csv'],
+    ['Magento\Tools\I18n\Pack\WriterInterface', 'Magento\Setup\Module\I18n\Pack\WriterInterface'],
+    ['Magento\Tools\I18n\Parser\AbstractParser', 'Magento\Setup\Module\I18n\Parser\AbstractParser'],
+    ['Magento\Tools\I18n\Parser\Adapter\AbstractAdapter', 'Magento\Setup\Module\I18n\Parser\Adapter\AbstractAdapter'],
+    ['Magento\Tools\I18n\Parser\Adapter\Js', 'Magento\Setup\Module\I18n\Parser\Adapter\Js'],
+    [
+        'Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector',
+        'Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector'
+    ],
+    [
+        'Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Token',
+        'Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token'
+    ],
+    [
+        'Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Translate',
+        'Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Translate'
+    ],
+    [
+        'Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Translate\MethodCollector',
+        'Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Translate\MethodCollector'
+    ],
+    ['Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer', 'Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer'],
+    ['Magento\Tools\I18n\Parser\Adapter\Php', 'Magento\Setup\Module\I18n\Parser\Adapter\Php'],
+    ['Magento\Tools\I18n\Parser\Adapter\Xml', 'Magento\Setup\Module\I18n\Parser\Adapter\Xml'],
+    ['Magento\Tools\I18n\Parser\AdapterInterface', 'Magento\Setup\Module\I18n\Parser\AdapterInterface'],
+    ['Magento\Tools\I18n\Parser\Contextual', 'Magento\Setup\Module\I18n\Parser\Contextual'],
+    ['Magento\Tools\I18n\Parser\Parser', 'Magento\Setup\Module\I18n\Parser\Parser'],
+    ['Magento\Tools\I18n\ParserInterface', 'Magento\Setup\Module\I18n\ParserInterface'],
+    ['Magento\Tools\I18n\ServiceLocator', 'Magento\Setup\Module\I18n\ServiceLocator'],
+    ['Magento\Tools\Di\App\Task\Manager', 'Magento\Setup\Module\Di\App\Task\Manager'],
+    [
+        'Magento\Tools\Di\App\Task\Operation\ApplicationCodeGenerator',
+        'Magento\Setup\Module\Di\App\Task\Operation\ApplicationCodeGenerator'
+    ],
+    ['Magento\Tools\Di\App\Task\Operation\Area', 'Magento\Setup\Module\Di\App\Task\Operation\Area'],
+    ['Magento\Tools\Di\App\Task\Operation\Interception', 'Magento\Setup\Module\Di\App\Task\Operation\Interception'],
+    [
+        'Magento\Tools\Di\App\Task\Operation\InterceptionCache',
+        'Magento\Setup\Module\Di\App\Task\Operation\InterceptionCache'
+    ],
+    [
+        'Magento\Tools\Di\App\Task\Operation\RepositoryGenerator',
+        'Magento\Setup\Module\Di\App\Task\Operation\RepositoryGenerator'
+    ],
+    ['Magento\Tools\Di\App\Task\OperationException', 'Magento\Setup\Module\Di\App\Task\OperationException'],
+    ['Magento\Tools\Di\App\Task\OperationFactory', 'Magento\Setup\Module\Di\App\Task\OperationFactory'],
+    ['Magento\Tools\Di\App\Task\OperationInterface', 'Magento\Setup\Module\Di\App\Task\OperationInterface'],
+    [
+        'Magento\Tools\Di\Code\Generator\InterceptionConfigurationBuilder',
+        'Magento\Setup\Module\Di\Code\Generator\InterceptionConfigurationBuilder'
+    ],
+    ['Magento\Tools\Di\Code\Generator\Interceptor', 'Magento\Setup\Module\Di\Code\Generator\Interceptor'],
+    ['Magento\Tools\Di\Code\Generator\PluginList', 'Magento\Setup\Module\Di\Code\Generator\PluginList'],
+    ['Magento\Tools\Di\Code\Generator', 'Magento\Setup\Module\Di\Code\Generator'],
+    ['Magento\Tools\Di\Code\GeneratorFactory', 'Magento\Setup\Module\Di\Code\GeneratorFactory'],
+    ['Magento\Tools\Di\Code\Reader\ClassesScanner', 'Magento\Setup\Module\Di\Code\Reader\ClassesScanner'],
+    [
+        'Magento\Tools\Di\Code\Reader\ClassesScannerInterface',
+        'Magento\Setup\Module\Di\Code\Reader\ClassesScannerInterface'
+    ],
+    ['Magento\Tools\Di\Code\Reader\ClassReaderDecorator', 'Magento\Setup\Module\Di\Code\Reader\ClassReaderDecorator'],
+    ['Magento\Tools\Di\Code\Reader\Decorator\Area', 'Magento\Setup\Module\Di\Code\Reader\Decorator\Area'],
+    ['Magento\Tools\Di\Code\Reader\Decorator\Directory', 'Magento\Setup\Module\Di\Code\Reader\Decorator\Directory'],
+    [
+        'Magento\Tools\Di\Code\Reader\Decorator\Interceptions',
+        'Magento\Setup\Module\Di\Code\Reader\Decorator\Interceptions'
+    ],
+    ['Magento\Tools\Di\Code\Reader\Type', 'Magento\Setup\Module\Di\Code\Reader\Type'],
+    ['Magento\Tools\Di\Code\Scanner\ArrayScanner', 'Magento\Setup\Module\Di\Code\Scanner\ArrayScanner'],
+    ['Magento\Tools\Di\Code\Scanner\CompositeScanner', 'Magento\Setup\Module\Di\Code\Scanner\CompositeScanner'],
+    ['Magento\Tools\Di\Code\Scanner\DirectoryScanner', 'Magento\Setup\Module\Di\Code\Scanner\DirectoryScanner'],
+    [
+        'Magento\Tools\Di\Code\Scanner\InheritanceInterceptorScanner',
+        'Magento\Setup\Module\Di\Code\Scanner\InheritanceInterceptorScanner'
+    ],
+    [
+        'Magento\Tools\Di\Code\Scanner\InterceptedInstancesScanner',
+        'Magento\Setup\Module\Di\Code\Scanner\InterceptedInstancesScanner'
+    ],
+    ['Magento\Tools\Di\Code\Scanner\PhpScanner', 'Magento\Setup\Module\Di\Code\Scanner\PhpScanner'],
+    ['Magento\Tools\Di\Code\Scanner\PluginScanner', 'Magento\Setup\Module\Di\Code\Scanner\PluginScanner'],
+    ['Magento\Tools\Di\Code\Scanner\RepositoryScanner', 'Magento\Setup\Module\Di\Code\Scanner\RepositoryScanner'],
+    ['Magento\Tools\Di\Code\Scanner\ScannerInterface', 'Magento\Setup\Module\Di\Code\Scanner\ScannerInterface'],
+    [
+        'Magento\Tools\Di\Code\Scanner\XmlInterceptorScanner',
+        'Magento\Setup\Module\Di\Code\Scanner\XmlInterceptorScanner'
+    ],
+    ['Magento\Tools\Di\Code\Scanner\XmlScanner', 'Magento\Setup\Module\Di\Code\Scanner\XmlScanner'],
+    ['Magento\Tools\Di\Compiler\ArgumentsResolver', 'Magento\Setup\Module\Di\Compiler\ArgumentsResolver'],
+    ['Magento\Tools\Di\Compiler\ArgumentsResolverFactory', 'Magento\Setup\Module\Di\Compiler\ArgumentsResolverFactory'],
+    [
+        'Magento\Tools\Di\Compiler\Config\Chain\ArgumentsSerialization',
+        'Magento\Setup\Module\Di\Compiler\Config\Chain\ArgumentsSerialization'
+    ],
+    [
+        'Magento\Tools\Di\Compiler\Config\Chain\BackslashTrim',
+        'Magento\Setup\Module\Di\Compiler\Config\Chain\BackslashTrim'
+    ],
+    [
+        'Magento\Tools\Di\Compiler\Config\Chain\InterceptorSubstitution',
+        'Magento\Setup\Module\Di\Compiler\Config\Chain\InterceptorSubstitution'
+    ],
+    [
+        'Magento\Tools\Di\Compiler\Config\Chain\PreferencesResolving',
+        'Magento\Setup\Module\Di\Compiler\Config\Chain\PreferencesResolving'
+    ],
+    [
+        'Magento\Tools\Di\Compiler\Config\ModificationChain',
+        'Magento\Setup\Module\Di\Compiler\Config\ModificationChain'
+    ],
+    [
+        'Magento\Tools\Di\Compiler\Config\ModificationInterface',
+        'Magento\Setup\Module\Di\Compiler\Config\ModificationInterface'
+    ],
+    ['Magento\Tools\Di\Compiler\Config\Reader', 'Magento\Setup\Module\Di\Compiler\Config\Reader'],
+    ['Magento\Tools\Di\Compiler\Config\Writer\Filesystem', 'Magento\Setup\Module\Di\Compiler\Config\Writer\Filesystem'],
+    ['Magento\Tools\Di\Compiler\Config\WriterInterface', 'Magento\Setup\Module\Di\Compiler\Config\WriterInterface'],
+    ['Magento\Tools\Di\Compiler\ConstructorArgument', 'Magento\Setup\Module\Di\Compiler\ConstructorArgument'],
+    ['Magento\Tools\Di\Compiler\Log\Log', 'Magento\Setup\Module\Di\Compiler\Log\Log'],
+    ['Magento\Tools\Di\Compiler\Log\Writer\Console', 'Magento\Setup\Module\Di\Compiler\Log\Writer\Console'],
+    ['Magento\Tools\Di\Definition\Collection', 'Magento\Setup\Module\Di\Definition\Collection'],
+    ['Magento\Tools\Di\Definition\Compressor\UniqueList', 'Magento\Setup\Module\Di\Definition\Compressor\UniqueList'],
+    ['Magento\Tools\Di\Definition\Compressor', 'Magento\Setup\Module\Di\Definition\Compressor'],
+    ['Magento\Tools\Di\Definition\Serializer\Igbinary', 'Magento\Setup\Module\Di\Definition\Serializer\Igbinary'],
+    [
+        'Magento\Tools\Di\Definition\Serializer\SerializerInterface',
+        'Magento\Setup\Module\Di\Definition\Serializer\SerializerInterface'
+    ],
+    ['Magento\Tools\Di\Definition\Serializer\Standard', 'Magento\Setup\Module\Di\Definition\Serializer\Standard'],
+    ['Magento\Tools\Di\Compiler\Log\Writer\Quiet'],
+    ['Magento\Tools\Di\Compiler\Log\Writer\WriterInterface'],
+    ['Magento\Tools\View\Deployer', 'Magento\Setup\Model\Deployer'],
+    ['Magento\Tools\Webdev\CliParams'],
+    ['Magento\Tools\Webdev\App\FileAssembler'],
+    ['Magento\Tools\View\Deployer\Log'],
+    ['Magento\Log\Model\Shell\Command\Status'],
+    ['Magento\Log\Model\LogFactory\Clean'],
+    ['Magento\Log\Model\Shell\CommandInterface'],
+    ['Magento\Framework\App\Filesystem\DirectoryList\AbstractShell'],
 ];
diff --git a/dev/tools/Magento/Tools/Di/App/Compiler.php b/dev/tools/Magento/Tools/Di/App/Compiler.php
deleted file mode 100644
index 751eca2ac1c178fc5db662be4d3f5d26de48b35f..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/Di/App/Compiler.php
+++ /dev/null
@@ -1,195 +0,0 @@
-<?php
-/**
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Tools\Di\App;
-
-use Magento\Framework\App;
-use Magento\Framework\App\Console\Response;
-use Magento\Framework\ObjectManagerInterface;
-
-/**
- * Class Compiler
- * @package Magento\Tools\Di\App
- *
- */
-class Compiler implements \Magento\Framework\AppInterface
-{
-    /**
-     * @var ObjectManagerInterface
-     */
-    private $objectManager;
-
-    /**
-     * @var Task\Manager
-     */
-    private $taskManager;
-
-    /**
-     * @var Response
-     */
-    private $response;
-
-    /**
-     * @var array
-     */
-    private $compiledPathsList = [];
-
-    /**
-     * @var array
-     */
-    private $excludedPathsList = [];
-
-    /**
-     * @param Task\Manager $taskManager
-     * @param ObjectManagerInterface $objectManager
-     * @param Response $response
-     * @param array $compiledPathsList
-     * @param array $excludedPathsList
-     */
-    public function __construct(
-        Task\Manager $taskManager,
-        ObjectManagerInterface $objectManager,
-        Response $response,
-        $compiledPathsList = [],
-        $excludedPathsList = []
-    ) {
-        $this->taskManager = $taskManager;
-        $this->objectManager = $objectManager;
-        $this->response = $response;
-
-        if (empty($compiledPathsList)) {
-            $compiledPathsList = [
-                'application' => BP . '/'  . 'app/code',
-                'library' => BP . '/'  . 'lib/internal/Magento/Framework',
-                'generated_helpers' => BP . '/'  . 'var/generation'
-            ];
-        }
-        $this->compiledPathsList = $compiledPathsList;
-
-        if (empty($excludedPathsList)) {
-            $excludedPathsList = [
-                'application' => '#^' . BP . '/app/code/[\\w]+/[\\w]+/Test#',
-                'framework' => '#^' . BP . '/lib/internal/[\\w]+/[\\w]+/([\\w]+/)?Test#'
-            ];
-        }
-        $this->excludedPathsList = $excludedPathsList;
-    }
-
-    /**
-     * Launch application
-     *
-     * @return \Magento\Framework\App\ResponseInterface
-     */
-    public function launch()
-    {
-        $this->objectManager->configure(
-            [
-                'preferences' =>
-                [
-                    'Magento\Tools\Di\Compiler\Config\WriterInterface' =>
-                        'Magento\Tools\Di\Compiler\Config\Writer\Filesystem',
-                    'Magento\Tools\Di\Compiler\Log\Writer\WriterInterface' =>
-                        'Magento\Tools\Di\Compiler\Log\Writer\Console'
-                ],
-                'Magento\Tools\Di\Compiler\Config\ModificationChain' => [
-                    'arguments' => [
-                        'modificationsList' => [
-                            'BackslashTrim' =>
-                                ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\BackslashTrim'],
-                            'PreferencesResolving' =>
-                                ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\PreferencesResolving'],
-                            'InterceptorSubstitution' =>
-                                ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\InterceptorSubstitution'],
-                            'InterceptionPreferencesResolving' =>
-                                ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\PreferencesResolving'],
-                            'ArgumentsSerialization' =>
-                                ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\ArgumentsSerialization'],
-                        ]
-                    ]
-                ],
-                'Magento\Tools\Di\Code\Generator\PluginList' => [
-                    'arguments' => [
-                        'cache' => [
-                            'instance' => 'Magento\Framework\App\Interception\Cache\CompiledConfig'
-                        ]
-                    ]
-                ],
-                'Magento\Tools\Di\Code\Reader\ClassesScanner' => [
-                    'arguments' => [
-                        'excludePatterns' => $this->excludedPathsList
-                    ]
-                ]
-            ]
-        );
-
-        $operations = [
-            Task\OperationFactory::REPOSITORY_GENERATOR => [
-                'path' => $this->compiledPathsList['application'],
-                'filePatterns' => ['di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/']
-            ],
-            Task\OperationFactory::APPLICATION_CODE_GENERATOR => [
-                $this->compiledPathsList['application'],
-                $this->compiledPathsList['library'],
-                $this->compiledPathsList['generated_helpers'],
-            ],
-            Task\OperationFactory::INTERCEPTION =>
-                [
-                    'intercepted_paths' => [
-                        $this->compiledPathsList['application'],
-                        $this->compiledPathsList['library'],
-                        $this->compiledPathsList['generated_helpers'],
-                    ],
-                    'path_to_store' => $this->compiledPathsList['generated_helpers'],
-                ],
-            Task\OperationFactory::AREA_CONFIG_GENERATOR => [
-                $this->compiledPathsList['application'],
-                $this->compiledPathsList['library'],
-                $this->compiledPathsList['generated_helpers'],
-            ],
-            Task\OperationFactory::INTERCEPTION_CACHE => [
-                $this->compiledPathsList['application'],
-                $this->compiledPathsList['library'],
-                $this->compiledPathsList['generated_helpers'],
-            ]
-        ];
-
-        $responseCode = Response::SUCCESS;
-        try {
-            foreach ($operations as $operationCode => $arguments) {
-                $this->taskManager->addOperation(
-                    $operationCode,
-                    $arguments
-                );
-            }
-            $this->taskManager->process();
-
-        } catch (Task\OperationException $e) {
-            $responseCode = Response::ERROR;
-            $this->response->setBody($e->getMessage());
-        }
-
-        $this->response->setCode($responseCode);
-        return $this->response;
-    }
-
-    /**
-     * Ability to handle exceptions that may have occurred during bootstrap and launch
-     *
-     * Return values:
-     * - true: exception has been handled, no additional action is needed
-     * - false: exception has not been handled - pass the control to Bootstrap
-     *
-     * @param App\Bootstrap $bootstrap
-     * @param \Exception $exception
-     * @return bool
-     *
-     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
-     */
-    public function catchException(App\Bootstrap $bootstrap, \Exception $exception)
-    {
-        return false;
-    }
-}
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Config/Writer/Filesystem.php b/dev/tools/Magento/Tools/Di/Compiler/Config/Writer/Filesystem.php
deleted file mode 100644
index b50d6a996c8b3913e8f834b6718f6b1e5d8ef9da..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/Di/Compiler/Config/Writer/Filesystem.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-/**
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Tools\Di\Compiler\Config\Writer;
-
-use Magento\Tools\Di\Compiler\Config\WriterInterface;
-
-class Filesystem implements WriterInterface
-{
-    /**
-     * Writes config in storage
-     *
-     * @param string $key
-     * @param array $config
-     * @return void
-     */
-    public function write($key, array $config)
-    {
-        $this->initialize();
-
-        $serialized = serialize($config);
-        file_put_contents(BP . '/var/di/' . $key . '.ser', $serialized);
-    }
-
-    /**
-     * Initializes writer
-     *
-     * @return void
-     */
-    private function initialize()
-    {
-        if (!file_exists(BP . '/var/di')) {
-            mkdir(BP . '/var/di');
-        }
-    }
-}
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Log/Writer/Console.php b/dev/tools/Magento/Tools/Di/Compiler/Log/Writer/Console.php
deleted file mode 100644
index e38644559cd1921e3d24e794cd1167b7271a5c4d..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/Di/Compiler/Log/Writer/Console.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Tools\Di\Compiler\Log\Writer;
-
-use Magento\Tools\Di\Compiler\Log\Log;
-
-class Console implements WriterInterface
-{
-    /**
-     * Report messages by type
-     *
-     * @var array
-     */
-    protected $_messages = [
-        Log::GENERATION_SUCCESS => 'Generated classes:',
-        Log::GENERATION_ERROR => 'Errors during class generation:',
-        Log::COMPILATION_ERROR => 'Errors during compilation:',
-        Log::CONFIGURATION_ERROR => 'Errors during configuration scanning:',
-    ];
-
-    /**
-     * Output log data
-     *
-     * @param array $data
-     * @return void
-     */
-    public function write(array $data)
-    {
-        $errorsCount = 0;
-        foreach ($data as $type => $classes) {
-            if (!count($classes)) {
-                continue;
-            }
-            echo $this->_messages[$type] . "\n";
-            foreach ($classes as $className => $messages) {
-                if (count($messages)) {
-                    echo "\t" . $className . "\n";
-                    foreach ($messages as $message) {
-                        if ($message) {
-                            echo "\t\t - " . $message . "\n";
-                            if ($type != Log::GENERATION_SUCCESS) {
-                                $errorsCount++;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        if ($errorsCount) {
-            echo 'Total Errors Count: ' . $errorsCount . "\n";
-        }
-    }
-}
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Log/Writer/Quiet.php b/dev/tools/Magento/Tools/Di/Compiler/Log/Writer/Quiet.php
deleted file mode 100644
index 3696fb51f34305a50afb368451a60d47e5c51c4a..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/Di/Compiler/Log/Writer/Quiet.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Tools\Di\Compiler\Log\Writer;
-
-class Quiet implements WriterInterface
-{
-    /**
-     * Output log data
-     *
-     * @param array $data
-     * @return void
-     */
-    public function write(array $data)
-    {
-        // Do nothing
-    }
-}
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Log/Writer/WriterInterface.php b/dev/tools/Magento/Tools/Di/Compiler/Log/Writer/WriterInterface.php
deleted file mode 100644
index b36f3172b6c549c41217e1cce55214f16d008b0f..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/Di/Compiler/Log/Writer/WriterInterface.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Tools\Di\Compiler\Log\Writer;
-
-interface WriterInterface
-{
-    /**
-     * Output log data
-     *
-     * @param array $data
-     * @return void
-     */
-    public function write(array $data);
-}
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/App/CompilerTest.php b/dev/tools/Magento/Tools/Di/Test/Unit/App/CompilerTest.php
deleted file mode 100644
index 665e5c237a0cf58a4075b3daadcbfdd4e6118035..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/Di/Test/Unit/App/CompilerTest.php
+++ /dev/null
@@ -1,180 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Tools\Di\Test\Unit\App;
-
-use Magento\Framework\App\Console\Response;
-use Magento\Tools\Di\App\Compiler;
-use Magento\Tools\Di\App\Task;
-
-class CompilerTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var Compiler
-     */
-    private $application;
-
-    /**
-     * @var \Magento\Framework\ObjectManagerInterface | \PHPUnit_Framework_MockObject_MockObject
-     */
-    private $objectManagerMock;
-
-    /**
-     * @var \Magento\Tools\Di\App\Task\Manager | \PHPUnit_Framework_MockObject_MockObject
-     */
-    private $taskManagerMock;
-
-    /**
-     * @var Response | \PHPUnit_Framework_MockObject_MockObject
-     */
-    private $responseMock;
-
-    protected function setUp()
-    {
-        $this->objectManagerMock = $this->getMockBuilder('Magento\Framework\ObjectManagerInterface')
-            ->setMethods([])
-            ->getMock();
-        $this->taskManagerMock = $this->getMockBuilder('Magento\Tools\Di\App\Task\Manager')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-        $this->responseMock = $this->getMockBuilder('Magento\Framework\App\Console\Response')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-
-        $this->application = new Compiler(
-            $this->taskManagerMock,
-            $this->objectManagerMock,
-            $this->responseMock
-        );
-    }
-
-    public function testLaunchSuccess()
-    {
-        $this->objectManagerMock->expects($this->once())
-            ->method('configure')
-            ->with($this->getPreferences());
-        $index = 0;
-        foreach ($this->getOptions() as $code => $arguments) {
-            $this->taskManagerMock->expects($this->at($index))
-                ->method('addOperation')
-                ->with($code, $arguments);
-            $index++;
-        }
-        $this->taskManagerMock->expects($this->at($index))->method('process');
-        $this->responseMock->expects($this->once())
-            ->method('setCode')
-            ->with(Response::SUCCESS);
-
-        $this->assertInstanceOf('\Magento\Framework\App\Console\Response', $this->application->launch());
-    }
-
-    public function testLaunchException()
-    {
-        $this->objectManagerMock->expects($this->once())
-            ->method('configure')
-            ->with($this->getPreferences());
-        $code = key($this->getOptions());
-        $arguments = current($this->getOptions());
-        $exception = new Task\OperationException(
-            'Unrecognized operation',
-            Task\OperationException::UNAVAILABLE_OPERATION
-        );
-
-        $this->taskManagerMock->expects($this->once())
-            ->method('addOperation')
-            ->with($code, $arguments)
-            ->willThrowException($exception);
-
-        $this->taskManagerMock->expects($this->never())->method('process');
-        $this->responseMock->expects($this->once())
-            ->method('setCode')
-            ->with(Response::ERROR);
-
-        $this->assertInstanceOf('\Magento\Framework\App\Console\Response', $this->application->launch());
-    }
-
-    /**
-     * Returns configured preferences
-     *
-     * @return array
-     */
-    private function getPreferences()
-    {
-        return [
-            'preferences' =>
-                [
-                    'Magento\Tools\Di\Compiler\Config\WriterInterface' =>
-                        'Magento\Tools\Di\Compiler\Config\Writer\Filesystem',
-                    'Magento\Tools\Di\Compiler\Log\Writer\WriterInterface' =>
-                        'Magento\Tools\Di\Compiler\Log\Writer\Console'
-                ],
-            'Magento\Tools\Di\Compiler\Config\ModificationChain' => [
-                'arguments' => [
-                    'modificationsList' => [
-                        'BackslashTrim' =>
-                            ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\BackslashTrim'],
-                        'PreferencesResolving' =>
-                            ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\PreferencesResolving'],
-                        'InterceptorSubstitution' =>
-                            ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\InterceptorSubstitution'],
-                        'InterceptionPreferencesResolving' =>
-                            ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\PreferencesResolving'],
-                        'ArgumentsSerialization' =>
-                            ['instance' => 'Magento\Tools\Di\Compiler\Config\Chain\ArgumentsSerialization'],
-                    ]
-                ]
-            ],
-            'Magento\Tools\Di\Code\Generator\PluginList' => [
-                'arguments' => [
-                    'cache' => [
-                        'instance' => 'Magento\Framework\App\Interception\Cache\CompiledConfig'
-                    ]
-                ]
-            ],
-            'Magento\Tools\Di\Code\Reader\ClassesScanner' => [
-                'arguments' => [
-                    'excludePatterns' => [
-                        'application' => '#^' . BP . '/app/code/[\\w]+/[\\w]+/Test#',
-                        'framework' => '#^' . BP . '/lib/internal/[\\w]+/[\\w]+/([\\w]+/)?Test#'
-                    ]
-                ]
-            ]
-        ];
-    }
-
-    /**
-     * Returns options
-     *
-     * @return array
-     */
-    private function getOptions()
-    {
-        return  [
-            Task\OperationFactory::REPOSITORY_GENERATOR => [
-                'path' => BP . '/' . 'app/code',
-                'filePatterns' => ['di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/']
-            ],
-            Task\OperationFactory::APPLICATION_CODE_GENERATOR => [
-                BP . '/' . 'app/code', BP . '/' . 'lib/internal/Magento/Framework', BP . '/' . 'var/generation'
-            ],
-            Task\OperationFactory::INTERCEPTION => [
-                'intercepted_paths' => [
-                    BP . '/' . 'app/code',
-                    BP . '/' . 'lib/internal/Magento/Framework',
-                    BP . '/' . 'var/generation'
-                ],
-                'path_to_store' => BP . '/var/generation',
-            ],
-            Task\OperationFactory::AREA_CONFIG_GENERATOR => [
-                BP . '/' . 'app/code', BP . '/' . 'lib/internal/Magento/Framework', BP . '/' . 'var/generation'
-            ],
-            Task\OperationFactory::INTERCEPTION_CACHE => [
-                BP . '/' . 'app/code', BP . '/' . 'lib/internal/Magento/Framework', BP . '/' . 'var/generation'
-            ]
-        ];
-    }
-}
diff --git a/dev/tools/Magento/Tools/Di/compiler.php b/dev/tools/Magento/Tools/Di/compiler.php
deleted file mode 100644
index ced28772e7c6108f8f1a033617cf4af379687195..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/Di/compiler.php
+++ /dev/null
@@ -1,258 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-require __DIR__ . '/../../../bootstrap.php';
-
-$rootDir = realpath(__DIR__ . '/../../../../../');
-use Magento\Framework\Api\Code\Generator\Mapper;
-use Magento\Framework\Api\Code\Generator\SearchResults;
-use Magento\Framework\Autoload\AutoloaderRegistry;
-use Magento\Framework\Interception\Code\Generator\Interceptor;
-use Magento\Framework\ObjectManager\Code\Generator\Converter;
-use Magento\Framework\ObjectManager\Code\Generator\Factory;
-use Magento\Framework\ObjectManager\Code\Generator\Proxy;
-use Magento\Framework\ObjectManager\Code\Generator\Repository;
-use Magento\Framework\ObjectManager\Code\Generator\Persistor;
-use Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator;
-use Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGenerator;
-use Magento\Tools\Di\Code\Scanner;
-use Magento\Tools\Di\Compiler\Log\Log;
-use Magento\Tools\Di\Compiler\Log\Writer;
-use Magento\Tools\Di\Definition\Compressor;
-use Magento\Tools\Di\Definition\Serializer\Igbinary;
-use Magento\Tools\Di\Definition\Serializer\Standard;
-
-try {
-    $opt = new Zend_Console_Getopt(
-        [
-            'serializer=w'         => 'serializer function that should be used (serialize|igbinary) default: serialize',
-            'verbose|v'            => 'output report after tool run',
-            'extra-classes-file=s' => 'path to file with extra proxies and factories to generate',
-            'generation=s'         => 'absolute path to generated classes, <magento_root>/var/generation by default',
-            'di=s'                 => 'absolute path to DI definitions directory, <magento_root>/var/di by default',
-            'exclude-pattern=s'    => 'allows to exclude Paths from compilation (default is #[\\\\/]m1[\\\\/]#i)',
-        ]
-    );
-    $opt->parse();
-
-    $generationDir = $opt->getOption('generation') ? $opt->getOption('generation') : $rootDir . '/var/generation';
-    $diDir = $opt->getOption('di') ? $opt->getOption('di') : $rootDir . '/var/di';
-
-    $testExcludePatterns = [
-        "#^$rootDir/app/code/[\\w]+/[\\w]+/Test#",
-        "#^$rootDir/lib/internal/[\\w]+/[\\w]+/([\\w]+/)?Test#",
-        "#^$rootDir/setup/src/Magento/Setup/Test#",
-        "#^$rootDir/dev/tools/Magento/Tools/[\\w]+/Test#"
-    ];
-    $fileExcludePatterns = $opt->getOption('exclude-pattern') ?
-        [$opt->getOption('exclude-pattern')] : ['#[\\\\/]M1[\\\\/]#i'];
-    $fileExcludePatterns = array_merge($fileExcludePatterns, $testExcludePatterns);
-
-    $relationsFile = $diDir . '/relations.ser';
-    $pluginDefFile = $diDir . '/plugins.ser';
-
-    $compilationDirs = [
-        $rootDir . '/app/code',
-        $rootDir . '/lib/internal/Magento',
-        $rootDir . '/dev/tools/Magento/Tools'
-    ];
-
-    /** @var Writer\WriterInterface $logWriter Writer model for success messages */
-    $logWriter = $opt->getOption('v') ? new Writer\Console() : new Writer\Quiet();
-    $log = new Log($logWriter, new Writer\Console());
-
-    $serializer = $opt->getOption('serializer') == Igbinary::NAME ? new Igbinary() : new Standard();
-
-    AutoloaderRegistry::getAutoloader()->addPsr4('Magento\\', $generationDir . '/Magento/');
-
-    // 1 Code generation
-    // 1.1 Code scan
-    $filePatterns = ['php' => '/.*\.php$/', 'di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/'];
-    $codeScanDir = realpath($rootDir . '/app');
-    $directoryScanner = new Scanner\DirectoryScanner();
-    $files = $directoryScanner->scan($codeScanDir, $filePatterns, $fileExcludePatterns);
-    $files['additional'] = [$opt->getOption('extra-classes-file')];
-    $entities = [];
-
-    $repositoryScanner = new Scanner\RepositoryScanner();
-    $repositories = $repositoryScanner->collectEntities($files['di']);
-
-    $scanner = new Scanner\CompositeScanner();
-    $scanner->addChild(new Scanner\PhpScanner($log), 'php');
-    $scanner->addChild(new Scanner\XmlScanner($log), 'di');
-    $scanner->addChild(new Scanner\ArrayScanner(), 'additional');
-    $entities = $scanner->collectEntities($files);
-
-    $interceptorScanner = new Scanner\XmlInterceptorScanner();
-    $entities['interceptors'] = $interceptorScanner->collectEntities($files['di']);
-
-    // 1.2 Generation of Factory and Additional Classes
-    $generatorIo = new \Magento\Framework\Code\Generator\Io(
-        new \Magento\Framework\Filesystem\Driver\File(),
-        $generationDir
-    );
-    $generator = new \Magento\Framework\Code\Generator(
-        $generatorIo,
-        [
-            Interceptor::ENTITY_TYPE => 'Magento\Framework\Interception\Code\Generator\Interceptor',
-            Proxy::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Proxy',
-            Factory::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Factory',
-            Mapper::ENTITY_TYPE => 'Magento\Framework\Api\Code\Generator\Mapper',
-            Persistor::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Persistor',
-            Repository::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Repository',
-            Converter::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Converter',
-            SearchResults::ENTITY_TYPE => 'Magento\Framework\Api\Code\Generator\SearchResults',
-            ExtensionAttributesInterfaceGenerator::ENTITY_TYPE =>
-                'Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGenerator',
-            ExtensionAttributesGenerator::ENTITY_TYPE =>
-                'Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator'
-        ]
-    );
-    /** Initialize object manager for code generation based on configs */
-    $magentoObjectManagerFactory = \Magento\Framework\App\Bootstrap::createObjectManagerFactory(BP, $_SERVER);
-    $objectManager = $magentoObjectManagerFactory->create($_SERVER);
-    $generator->setObjectManager($objectManager);
-
-    $generatorAutoloader = new \Magento\Framework\Code\Generator\Autoloader($generator);
-    spl_autoload_register([$generatorAutoloader, 'load']);
-
-    foreach ($repositories as $entityName) {
-        switch ($generator->generateClass($entityName)) {
-            case \Magento\Framework\Code\Generator::GENERATION_SUCCESS:
-                $log->add(Log::GENERATION_SUCCESS, $entityName);
-                break;
-
-            case \Magento\Framework\Code\Generator::GENERATION_ERROR:
-                $log->add(Log::GENERATION_ERROR, $entityName);
-                break;
-
-            case \Magento\Framework\Code\Generator::GENERATION_SKIP:
-            default:
-                //no log
-                break;
-        }
-    }
-
-    foreach (['php', 'additional'] as $type) {
-        sort($entities[$type]);
-        foreach ($entities[$type] as $entityName) {
-            switch ($generator->generateClass($entityName)) {
-                case \Magento\Framework\Code\Generator::GENERATION_SUCCESS:
-                    $log->add(Log::GENERATION_SUCCESS, $entityName);
-                    break;
-
-                case \Magento\Framework\Code\Generator::GENERATION_ERROR:
-                    $log->add(Log::GENERATION_ERROR, $entityName);
-                    break;
-
-                case \Magento\Framework\Code\Generator::GENERATION_SKIP:
-                default:
-                    //no log
-                    break;
-            }
-        }
-    }
-
-    // 2. Compilation
-    // 2.1 Code scan
-
-    $validator = new \Magento\Framework\Code\Validator();
-    $validator->add(new \Magento\Framework\Code\Validator\ConstructorIntegrity());
-    $validator->add(new \Magento\Framework\Code\Validator\ContextAggregation());
-    $classesScanner = new \Magento\Tools\Di\Code\Reader\ClassesScanner();
-    $classesScanner->addExcludePatterns($fileExcludePatterns);
-
-    $directoryInstancesNamesList = new \Magento\Tools\Di\Code\Reader\Decorator\Directory(
-        $log,
-        new \Magento\Framework\Code\Reader\ClassReader(),
-        $classesScanner,
-        $validator,
-        $generationDir
-    );
-
-    foreach ($compilationDirs as $path) {
-        if (is_readable($path)) {
-            $directoryInstancesNamesList->getList($path);
-        }
-    }
-
-    $inheritanceScanner = new Scanner\InheritanceInterceptorScanner();
-    $entities['interceptors'] = $inheritanceScanner->collectEntities(
-        get_declared_classes(),
-        $entities['interceptors']
-    );
-
-    // 2.1.1 Generation of Proxy and Interceptor Classes
-    foreach (['interceptors', 'di'] as $type) {
-        foreach ($entities[$type] as $entityName) {
-            switch ($generator->generateClass($entityName)) {
-                case \Magento\Framework\Code\Generator::GENERATION_SUCCESS:
-                    $log->add(Log::GENERATION_SUCCESS, $entityName);
-                    break;
-
-                case \Magento\Framework\Code\Generator::GENERATION_ERROR:
-                    $log->add(Log::GENERATION_ERROR, $entityName);
-                    break;
-
-                case \Magento\Framework\Code\Generator::GENERATION_SKIP:
-                default:
-                    //no log
-                    break;
-            }
-        }
-    }
-
-    //2.1.2 Compile relations for Proxy/Interceptor classes
-    $directoryInstancesNamesList->getList($generationDir);
-
-    $relations = $directoryInstancesNamesList->getRelations();
-
-    // 2.2 Compression
-    if (!file_exists(dirname($relationsFile))) {
-        mkdir(dirname($relationsFile), 0777, true);
-    }
-    $relations = array_filter($relations);
-    file_put_contents($relationsFile, $serializer->serialize($relations));
-
-    // 3. Plugin Definition Compilation
-    $pluginScanner = new Scanner\CompositeScanner();
-    $pluginScanner->addChild(new Scanner\PluginScanner(), 'di');
-    $pluginDefinitions = [];
-    $pluginList = $pluginScanner->collectEntities($files);
-    $pluginDefinitionList = new \Magento\Framework\Interception\Definition\Runtime();
-    foreach ($pluginList as $type => $entityList) {
-        foreach ($entityList as $entity) {
-            $pluginDefinitions[ltrim($entity, '\\')] = $pluginDefinitionList->getMethodList($entity);
-        }
-    }
-
-    $output = $serializer->serialize($pluginDefinitions);
-
-    if (!file_exists(dirname($pluginDefFile))) {
-        mkdir(dirname($pluginDefFile), 0777, true);
-    }
-
-    file_put_contents($pluginDefFile, $output);
-
-    //Reporter
-    $log->report();
-
-    if ($log->hasError()) {
-        exit(1);
-    }
-
-    echo 'On *nix systems, verify the Magento application has permissions to modify files created by the compiler'
-        . ' in the "var" directory. For instance, if you run the Magento application using Apache,'
-        . ' the owner of the files in the "var" directory should be the Apache user (example command:'
-        . ' "chown -R www-data:www-data <MAGENTO_ROOT>/var" where MAGENTO_ROOT is the Magento root directory).' . "\n";
-
-} catch (Zend_Console_Getopt_Exception $e) {
-    echo $e->getUsageMessage();
-    echo 'Please, use quotes(") for wrapping strings.' . "\n";
-    exit(1);
-} catch (Exception $e) {
-    fwrite(STDERR, "Compiler failed with exception: " . $e->getMessage());
-    throw($e);
-}
diff --git a/dev/tools/Magento/Tools/Di/entity_generator.php b/dev/tools/Magento/Tools/Di/entity_generator.php
deleted file mode 100644
index 17592837a0b0c2cd7274975c478a7cd879a94ab4..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/Di/entity_generator.php
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-use Magento\Framework\Api\Code\Generator\Mapper;
-use Magento\Framework\Api\Code\Generator\SearchResults;
-use Magento\Framework\Autoload\AutoloaderRegistry;
-use Magento\Framework\Code\Generator;
-use Magento\Framework\Code\Generator\Io;
-use Magento\Framework\Exception\LocalizedException;
-use Magento\Framework\Filesystem\Driver\File;
-use Magento\Framework\Interception\Code\Generator\Interceptor;
-use Magento\Framework\ObjectManager\Code\Generator\Converter;
-use Magento\Framework\ObjectManager\Code\Generator\Factory;
-use Magento\Framework\ObjectManager\Code\Generator\Proxy;
-use Magento\Framework\ObjectManager\Code\Generator\Repository;
-use Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGenerator;
-use Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator;
-
-require __DIR__ . '/../../../../../app/bootstrap.php';
-
-// default generation dir
-$generationDir = BP . '/' . Io::DEFAULT_DIRECTORY;
-try {
-    $opt = new \Zend_Console_Getopt(
-        [
-            'type|t=w' => 'entity type(required)',
-            'class|c=s' => 'entity class name(required)',
-            'generation|g=s' => 'generation dir. Default value ' . $generationDir,
-        ]
-    );
-    $opt->parse();
-
-    $entityType = $opt->getOption('t');
-    if (empty($entityType)) {
-        throw new \Zend_Console_Getopt_Exception('type is a required parameter');
-    }
-
-    $className = $opt->getOption('c');
-    if (empty($className)) {
-        throw new \Zend_Console_Getopt_Exception('class is a required parameter');
-    }
-    $substitutions = ['proxy' => '_Proxy', 'factory' => 'Factory', 'interceptor' => '_Interceptor'];
-    if (!in_array($entityType, array_keys($substitutions))) {
-        throw new \Zend_Console_Getopt_Exception('unrecognized type: ' . $entityType);
-    }
-    $className .= $substitutions[$entityType];
-
-    if ($opt->getOption('g')) {
-        $generationDir = $opt->getOption('g');
-    }
-    AutoloaderRegistry::getAutoloader()->addPsr4('Magento\\', $generationDir . '/Magento/');
-} catch (\Zend_Console_Getopt_Exception $e) {
-    $generator = new Generator();
-    $entities = $generator->getGeneratedEntities();
-
-    $allowedTypes = 'Allowed entity types are: ' . implode(', ', $entities) . '.';
-    $example = 'Example: php -f entity_generator.php -- -t factory -c \Magento\Framework\Event\Observer ' .
-        '-g /var/mage/m2ee/generation' .
-        ' - will generate file /var/mage/m2ee/generation/Magento/Framework/Event/ObserverFactory.php';
-
-    echo $e->getMessage() . "\n";
-    echo $e->getUsageMessage() . "\n";
-    echo $allowedTypes . "\n";
-    echo 'Default generation dir is ' . $generationDir . "\n";
-    exit($example);
-}
-
-//reinit generator with correct generation path
-$io = new Io(new File(), $generationDir);
-$generator = new Generator(
-    $io,
-    [
-        Proxy::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Proxy',
-        Factory::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Factory',
-        Interceptor::ENTITY_TYPE => 'Magento\Framework\Interception\Code\Generator\Interceptor',
-        Mapper::ENTITY_TYPE => 'Magento\Framework\Api\Code\Generator\Mapper',
-        Repository::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Repository',
-        Converter::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Converter',
-        SearchResults::ENTITY_TYPE => 'Magento\Framework\Api\Code\Generator\SearchResults',
-        ExtensionAttributesInterfaceGenerator::ENTITY_TYPE =>
-            'Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGenerator',
-        ExtensionAttributesGenerator::ENTITY_TYPE => 'Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator'
-    ]
-);
-/** Initialize object manager for code generation based on configs */
-$magentoObjectManagerFactory = \Magento\Framework\App\Bootstrap::createObjectManagerFactory(BP, $_SERVER);
-$objectManager = $magentoObjectManagerFactory->create($_SERVER);
-$generator->setObjectManager($objectManager);
-
-try {
-    if (Generator::GENERATION_SUCCESS == $generator->generateClass($className)) {
-        print "Class {$className} was successfully generated.\n";
-    } else {
-        print "Can't generate class {$className}. This class either not generated entity, or it already exists.\n";
-    }
-} catch (LocalizedException $e) {
-    print "Error! {$e->getMessage()}\n";
-}
diff --git a/dev/tools/Magento/Tools/Di/singletenant_compiler.php b/dev/tools/Magento/Tools/Di/singletenant_compiler.php
deleted file mode 100644
index 39646da196ccde7e1692df39b398fdf3fa048eca..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/Di/singletenant_compiler.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-/**
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-require __DIR__ . '/../../../../../app/bootstrap.php';
-
-$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
-/** @var \Magento\Framework\App\Http $app */
-$app = $bootstrap->createApplication('Magento\Tools\Di\App\Compiler');
-$bootstrap->run($app);
diff --git a/dev/tools/Magento/Tools/I18n/generator.php b/dev/tools/Magento/Tools/I18n/generator.php
deleted file mode 100644
index d0cef23ad8649405740b8a7297768915fb3c8e46..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/I18n/generator.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-require_once __DIR__ . '/bootstrap.php';
-use Magento\Tools\I18n\ServiceLocator;
-
-try {
-    $console = new \Zend_Console_Getopt(
-        [
-            'directory|d=s' => 'Path to a directory to parse',
-            'output-file|o=s' => 'Path (with filename) to output file, '
-                . 'by default output the results into standard output stream',
-            'magento|m-s' => 'Indicates whether the specified "directory" path is a Magento root directory,'
-                . ' "no" by default',
-        ]
-    );
-    $console->parse();
-
-    if (!count($console->getOptions())) {
-        throw new \Zend_Console_Getopt_Exception(
-            'Required parameters are missed, please see usage description',
-            $console->getUsageMessage()
-        );
-    }
-    $directory = $console->getOption('directory');
-    if (empty($directory)) {
-        throw new \Zend_Console_Getopt_Exception('Directory is a required parameter.', $console->getUsageMessage());
-    }
-    $outputFilename = $console->getOption('output-file') ?: null;
-    $isMagento = in_array($console->getOption('magento'), ['y', 'yes', 'Y', 'Yes', 'YES', '1']);
-
-    $generator = ServiceLocator::getDictionaryGenerator();
-    $generator->generate($directory, $outputFilename, $isMagento);
-
-    fwrite(STDOUT, "\nDictionary successfully processed.\n");
-} catch (\Zend_Console_Getopt_Exception $e) {
-    fwrite(STDERR, $e->getMessage() . "\n\n" . $e->getUsageMessage() . "\n");
-    exit(1);
-} catch (\Exception $e) {
-    fwrite(STDERR, $e->getMessage() . "\n");
-    exit(1);
-}
diff --git a/dev/tools/Magento/Tools/I18n/pack.php b/dev/tools/Magento/Tools/I18n/pack.php
deleted file mode 100644
index 443a844d82d25a2884390b680362ffe1c959c81b..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/I18n/pack.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-require __DIR__ . '/bootstrap.php';
-use Magento\Tools\I18n\ServiceLocator;
-
-try {
-    $console = new \Zend_Console_Getopt(
-        [
-            'source|s=s' => 'Path to source dictionary file with translations',
-            'pack|p=s' => 'Path to language package',
-            'locale|l=s' => 'Target locale for dictionary, for example "de_DE"',
-            'mode|m-s' => 'Save mode for dictionary
-        - "replace" - replace language pack by new one
-        - "merge" -  merge language packages, by default "replace"',
-            'allow_duplicates|d=s' => 'Is allowed to save duplicates of translate, by default "no"',
-        ]
-    );
-    $console->parse();
-    if (!count($console->getOptions())) {
-        throw new \UnexpectedValueException(
-            'Required parameters are missed, please see usage description' . "\n\n" . $console->getUsageMessage()
-        );
-    }
-    $dictionaryPath = $console->getOption('source');
-    $packPath = $console->getOption('pack');
-    $locale = $console->getOption('locale');
-    $allowDuplicates = in_array($console->getOption('allow_duplicates'), ['y', 'Y', 'yes', 'Yes', '1']);
-    $saveMode = $console->getOption('mode');
-
-    if (!$dictionaryPath) {
-        throw new \Zend_Console_Getopt_Exception('Dictionary source path parameter is required.');
-    }
-    if (!$packPath) {
-        throw new \Zend_Console_Getopt_Exception('Pack path parameter is required.');
-    }
-    if (!$locale) {
-        throw new \Zend_Console_Getopt_Exception('Locale parameter is required.');
-    }
-
-    $generator = ServiceLocator::getPackGenerator();
-    $generator->generate($dictionaryPath, $packPath, $locale, $saveMode, $allowDuplicates);
-
-    fwrite(STDOUT, sprintf("\nSuccessfully saved %s language package.\n", $locale));
-} catch (\Zend_Console_Getopt_Exception $e) {
-    fwrite(STDERR, $e->getMessage() . "\n\n" . $e->getUsageMessage() . "\n");
-    exit(1);
-} catch (\Exception $e) {
-    fwrite(STDERR, $e->getMessage() . "\n");
-    exit(1);
-}
diff --git a/dev/tools/Magento/Tools/View/Deployer/Log.php b/dev/tools/Magento/Tools/View/Deployer/Log.php
deleted file mode 100644
index 871b8944138f26c11844b17a063e978f8d0b9ca5..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/View/Deployer/Log.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Tools\View\Deployer;
-
-/**
- * An echo-logger with separating types of messages
- */
-class Log
-{
-    /**#@+
-     * Bitmasks for verbosity level
-     */
-    const SILENT = 0;
-    const ERROR = 1;
-    const DEBUG = 2;
-    /**#@-*/
-
-    /**
-     * @var int
-     */
-    private $verbosity;
-
-    /**
-     * If last output printed inline
-     *
-     * @var bool
-     */
-    private $isInline = false;
-
-    /**
-     * @param int $verbosity
-     */
-    public function __construct($verbosity)
-    {
-        $this->verbosity = (int)$verbosity;
-    }
-
-    /**
-     * Log anything
-     *
-     * @param string $msg
-     * @return void
-     */
-    public function logMessage($msg)
-    {
-        if ($this->verbosity !== self::SILENT) {
-            $this->terminateLine();
-            echo "{$msg}\n";
-        }
-    }
-
-    /**
-     * Log an error
-     *
-     * @param string $msg
-     * @return void
-     */
-    public function logError($msg)
-    {
-        if ($this->verbosity & self::ERROR) {
-            $this->terminateLine();
-            echo "ERROR: {$msg}\n";
-        }
-    }
-
-    /**
-     * Log a debug message
-     *
-     * @param string $msg
-     * @param string $altInline Alternative message for normal mode (printed inline)
-     * @return void
-     */
-    public function logDebug($msg, $altInline = '')
-    {
-        if ($this->verbosity & self::DEBUG) {
-            $this->terminateLine();
-            echo "{$msg}\n";
-        } elseif ($altInline && $this->verbosity !== self::SILENT) {
-            echo $altInline;
-            $this->isInline = true;
-        }
-    }
-
-    /**
-     * Ensures the next log message will be printed on new line
-     *
-     * @return void
-     */
-    private function terminateLine()
-    {
-        if ($this->isInline) {
-            $this->isInline = false;
-            echo "\n";
-        }
-    }
-}
diff --git a/dev/tools/Magento/Tools/View/Test/Unit/Deployer/LogTest.php b/dev/tools/Magento/Tools/View/Test/Unit/Deployer/LogTest.php
deleted file mode 100644
index 163d6d34bb122ff6c23c37f8aac5e0a9f3c33325..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/View/Test/Unit/Deployer/LogTest.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Tools\View\Test\Unit\Deployer;
-
-use \Magento\Tools\View\Deployer\Log;
-
-class LogTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @param string $method
-     * @param int $verbosity
-     * @param string $expectedMsg
-     * @dataProvider logDataProvider
-     */
-    public function testLog($method, $verbosity, $expectedMsg)
-    {
-        $object = new Log($verbosity);
-        $object->$method('foo');
-        $this->expectOutputString($expectedMsg);
-    }
-
-    /**
-     * @return array
-     */
-    public function logDataProvider()
-    {
-        $foo = "foo\n";
-        $err = "ERROR: {$foo}";
-        return [
-            ['logMessage', Log::SILENT, ''],
-            ['logError',   Log::SILENT, ''],
-            ['logDebug',   Log::SILENT, ''],
-            ['logMessage', Log::ERROR, $foo],
-            ['logError',   Log::ERROR, $err],
-            ['logDebug',   Log::ERROR, ''],
-            ['logMessage', Log::DEBUG, $foo],
-            ['logError',   Log::DEBUG, ''],
-            ['logDebug',   Log::DEBUG, $foo],
-            ['logMessage', Log::ERROR | Log::DEBUG, $foo],
-            ['logError',   Log::ERROR | Log::DEBUG, $err],
-            ['logDebug',   Log::ERROR | Log::DEBUG, $foo],
-        ];
-    }
-
-    /**
-     * @param int $verbosity
-     * @param string $expectedMsg
-     *
-     * @dataProvider logDebugAltDataProvider
-     */
-    public function testLogDebugAlt($verbosity, $expectedMsg)
-    {
-        $object = new Log($verbosity);
-        $object->logDebug('foo', '[alt]');
-        $this->expectOutputString($expectedMsg);
-    }
-
-    /**
-     * @return array
-     */
-    public function logDebugAltDataProvider()
-    {
-        return[
-            'debug mode' => [Log::DEBUG, "foo\n"],
-            'default mode' => [Log::ERROR, '[alt]'],
-            'silent mode' => [Log::SILENT, '']
-        ];
-    }
-}
diff --git a/dev/tools/Magento/Tools/View/deploy.php b/dev/tools/Magento/Tools/View/deploy.php
deleted file mode 100644
index f380efd3f360d68738842b900cc4372a0af2ddc4..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/View/deploy.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-/**
- * A script for deploying static view files for Magento system "production mode"
- *
- * The resulting files will be recorded into pub/static directory.
- * They can be used not only by the server where Magento instance is,
- * but also can be copied to a CDN, and the Magento instance may be configured to generate base URL to the CDN.
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-use Magento\Framework\Autoload\AutoloaderRegistry;
-
-$baseName = basename(__FILE__);
-$options = getopt('', ['langs::', 'dry-run', 'verbose::', 'help']);
-define('USAGE', "USAGE:\n\tphp -f {$baseName} -- [--langs=en_US,de_DE,...] [--verbose=0|1] [--dry-run] [--help]\n");
-require __DIR__ . '/../../../../../app/bootstrap.php';
-
-AutoloaderRegistry::getAutoloader()->addPsr4('Magento\\', [BP . '/tools/Magento/']);
-
-// parse all options
-if (isset($options['help'])) {
-    echo USAGE;
-    exit(0);
-}
-$langs = ['en_US'];
-if (isset($options['langs'])) {
-    $langs = explode(',', $options['langs']);
-    foreach ($langs as $lang) {
-        if (!preg_match('/^[a-z]{2}_[A-Z]{2}$/', $lang)) {
-            echo USAGE;
-            exit(1);
-        }
-    }
-}
-$isDryRun = isset($options['dry-run']);
-$verbosity = \Magento\Tools\View\Deployer\Log::ERROR;
-if (isset($options['verbose'])) {
-    $verbosity = 0 === (int)$options['verbose'] ? \Magento\Tools\View\Deployer\Log::SILENT
-        : \Magento\Tools\View\Deployer\Log::ERROR | \Magento\Tools\View\Deployer\Log::DEBUG;
-}
-$logger = new \Magento\Tools\View\Deployer\Log($verbosity);
-
-try {
-    // run the deployment logic
-    $filesUtil = new \Magento\Framework\App\Utility\Files(BP);
-    $omFactory = \Magento\Framework\App\Bootstrap::createObjectManagerFactory(BP, []);
-    $objectManager = $omFactory->create(
-        [\Magento\Framework\App\State::PARAM_MODE => \Magento\Framework\App\State::MODE_DEFAULT]
-    );
-
-    /** @var \Magento\Framework\App\DeploymentConfig $deploymentConfig */
-    $deploymentConfig = $objectManager->get('Magento\Framework\App\DeploymentConfig');
-    $isAppInstalled = $deploymentConfig->isAvailable();
-    if (!$isAppInstalled) {
-        throw new \Exception('You need to install the Magento application before running this utility.');
-    }
-
-    /** @var \Magento\Tools\View\Deployer $deployer */
-    $deployer = $objectManager->create(
-        'Magento\Tools\View\Deployer',
-        ['filesUtil' => $filesUtil, 'logger' => $logger, 'isDryRun' => $isDryRun]
-    );
-    $deployer->deploy($omFactory, $langs);
-} catch (\Exception $e) {
-    $logger->logError($e->getMessage());
-    $logger->logDebug($e->getTraceAsString());
-    exit(1);
-}
diff --git a/dev/tools/Magento/Tools/Webdev/App/FileAssembler.php b/dev/tools/Magento/Tools/Webdev/App/FileAssembler.php
deleted file mode 100644
index 0a07540a19c94695f0a9454f0f5f4b3b86c12182..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/Webdev/App/FileAssembler.php
+++ /dev/null
@@ -1,198 +0,0 @@
-<?php
-/**
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Tools\Webdev\App;
-
-use Magento\Framework\App;
-use Magento\Framework\App\State;
-use Magento\Framework\AppInterface;
-use Magento\Framework\Filesystem;
-use Magento\Tools\Webdev\CliParams;
-use Magento\Tools\View\Deployer\Log;
-use Magento\Framework\View\Asset\Source;
-use Magento\Framework\App\Console\Response;
-use Magento\Framework\View\Asset\Repository;
-use Magento\Framework\ObjectManagerInterface;
-use Magento\Framework\App\ObjectManager\ConfigLoader;
-use Magento\Framework\View\Asset\SourceFileGeneratorPool;
-use Magento\Framework\View\Asset\PreProcessor\ChainFactoryInterface;
-use Magento\Framework\App\Filesystem\DirectoryList;
-
-/**
- * Class FileAssembler
- *
- * @package Magento\Tools\Di\App
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
-class FileAssembler implements AppInterface
-{
-    /**
-     * @var ObjectManagerInterface
-     */
-    private $objectManager;
-
-    /**
-     * @var Response
-     */
-    private $response;
-
-    /**
-     * @var CliParams
-     */
-    private $params;
-
-    /**
-     * @var Repository
-     */
-    private $assetRepo;
-
-    /**
-     * @var ConfigLoader
-     */
-    private $configLoader;
-
-    /**
-     * @var State
-     */
-    private $state;
-
-    /**
-     * @var \Magento\Framework\Less\FileGenerator
-     */
-    private $sourceFileGeneratorPool;
-
-    /**
-     * @var \Magento\Framework\View\Asset\Source
-     */
-    private $assetSource;
-
-    /**
-     * @var \Magento\Tools\View\Deployer\Log
-     */
-    private $logger;
-
-    /**
-     * @var ChainFactoryInterface
-     */
-    private $chainFactory;
-
-    /**
-     * @var Filesystem
-     */
-    private $filesystem;
-
-    /**
-     * @param ObjectManagerInterface $objectManager
-     * @param Response $response
-     * @param CliParams $params
-     * @param Repository $assetRepo
-     * @param ConfigLoader $configLoader
-     * @param State $state
-     * @param Source $assetSource
-     * @param \Magento\Framework\View\Asset\SourceFileGeneratorPool $sourceFileGeneratorPoll
-     * @param \Magento\Tools\View\Deployer\Log $logger
-     * @param ChainFactoryInterface $chainFactory
-     * @param Filesystem $filesystem
-     *
-     * @SuppressWarnings(PHPMD.ExcessiveParameterList)
-     */
-    public function __construct(
-        ObjectManagerInterface $objectManager,
-        Response $response,
-        CliParams $params,
-        Repository $assetRepo,
-        ConfigLoader $configLoader,
-        State $state,
-        Source $assetSource,
-        SourceFileGeneratorPool $sourceFileGeneratorPoll,
-        Log $logger,
-        ChainFactoryInterface $chainFactory,
-        Filesystem $filesystem
-    ) {
-        $this->response = $response;
-        $this->params = $params;
-        $this->state = $state;
-        $this->objectManager = $objectManager;
-        $this->configLoader = $configLoader;
-        $this->assetRepo = $assetRepo;
-        $this->sourceFileGeneratorPool = $sourceFileGeneratorPoll;
-        $this->assetSource = $assetSource;
-        $this->logger = $logger;
-        $this->chainFactory = $chainFactory;
-        $this->filesystem = $filesystem;
-    }
-
-    /**
-     * Launch application
-     *
-     * @return \Magento\Framework\App\ResponseInterface
-     */
-    public function launch()
-    {
-        $this->state->setAreaCode($this->params->getArea());
-        $this->objectManager->configure($this->configLoader->load($this->params->getArea()));
-
-        $sourceFileGenerator = $this->sourceFileGeneratorPool->create($this->params->getExt());
-
-        foreach ($this->params->getFiles() as $file) {
-            $file .= '.' . $this->params->getExt();
-
-            $this->logger->logMessage("Gathering {$file} sources.");
-
-            $asset = $this->assetRepo->createAsset(
-                $file,
-                [
-                    'area' => $this->params->getArea(),
-                    'theme' => $this->params->getTheme(),
-                    'locale' => $this->params->getLocale(),
-                ]
-            );
-
-            $sourceFile = $this->assetSource->findSource($asset);
-            $content = \file_get_contents($sourceFile);
-
-            $chain = $this->chainFactory->create(
-                [
-                    'asset'           => $asset,
-                    'origContent'     => $content,
-                    'origContentType' => $asset->getContentType()
-                ]
-            );
-
-            $processedCoreFile = $sourceFileGenerator->generateFileTree($chain);
-
-            $targetDir = $this->filesystem->getDirectoryWrite(DirectoryList::STATIC_VIEW);
-            $rootDir = $this->filesystem->getDirectoryWrite(DirectoryList::ROOT);
-            $source = $rootDir->getRelativePath($processedCoreFile);
-            $destination = $asset->getPath();
-            $rootDir->copyFile($source, $destination, $targetDir);
-
-            $this->logger->logMessage("Done");
-        }
-
-        $this->response->setCode(Response::SUCCESS);
-
-        return $this->response;
-    }
-
-    /**
-     * Ability to handle exceptions that may have occurred during bootstrap and launch
-     *
-     * Return values:
-     * - true: exception has been handled, no additional action is needed
-     * - false: exception has not been handled - pass the control to Bootstrap
-     *
-     * @param App\Bootstrap $bootstrap
-     * @param \Exception $exception
-     * @return bool
-     *
-     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
-     */
-    public function catchException(App\Bootstrap $bootstrap, \Exception $exception)
-    {
-        return false;
-    }
-}
diff --git a/dev/tools/Magento/Tools/Webdev/CliParams.php b/dev/tools/Magento/Tools/Webdev/CliParams.php
deleted file mode 100644
index b06560868d8a84796ef9cb4bdddcaba518cf33f7..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/Webdev/CliParams.php
+++ /dev/null
@@ -1,192 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Tools\Webdev;
-
-use Magento\Tools\View\Deployer\Log;
-
-/**
- * Class CliParams
- *
- * @package Magento\Tools\Webdev
- */
-class CliParams
-{
-    /**
-     * AREA_DOC
-     */
-    const AREA_DOC = 'doc';
-
-    /**
-     * AREA_FRONTEND
-     */
-    const AREA_FRONTEND = 'frontend';
-
-    /**
-     * AREA_ADMIN
-     */
-    const AREA_ADMIN = 'adminhtml';
-
-    /**
-     * @var string
-     */
-    private $locale = 'en_US';
-
-    /**
-     * @var string
-     */
-    private $area = self::AREA_FRONTEND;
-
-    /**
-     * @var string
-     */
-    private $theme = 'Magento/blank';
-
-    /**
-     * @var array
-     */
-    private $files = ['css/styles-m'];
-
-    /**
-     * @var string
-     */
-    private $ext;
-
-    /**
-     * @var int
-     */
-    private $verbose = Log::ERROR;
-
-    /**
-     * @param \Zend_Console_Getopt $opt
-     * @SuppressWarnings(PHPMD.NPathComplexity)
-     * @throws \Zend_Console_Getopt_Exception
-     */
-    public function __construct(\Zend_Console_Getopt $opt)
-    {
-        $this->locale = $opt->getOption('locale')? :$this->locale;
-
-        if (!$opt->getOption('ext')) {
-            throw new \Zend_Console_Getopt_Exception('Provide "ext" parameter!');
-        }
-
-        $this->ext = $opt->getOption('ext');
-
-        if (!preg_match('/^[a-z]{2}_[A-Z]{2}$/', $this->locale)) {
-            throw new \Zend_Console_Getopt_Exception('Invalid locale format');
-        }
-
-        $this->area = $opt->getOption('area')? :$this->area;
-        $this->theme = $opt->getOption('theme')? :$this->theme;
-
-        if ($opt->getOption('files')) {
-            $this->files = explode(',', $opt->getOption('files'));
-        }
-
-        if ($opt->getOption('verbose')) {
-            $this->verbose = Log::ERROR | Log::DEBUG;
-        }
-    }
-
-    /**
-     * @return string
-     */
-    public function getLocale()
-    {
-        return $this->locale;
-    }
-
-    /**
-     * @param string $locale
-     *
-     * @throws \Zend_Console_Getopt_Exception
-     *
-     * @return void
-     */
-    public function setLocale($locale)
-    {
-        $this->locale = $locale;
-    }
-
-    /**
-     * @return string
-     */
-    public function getArea()
-    {
-        return $this->area;
-    }
-
-    /**
-     * @param string $area
-     *
-     * @return void
-     */
-    public function setArea($area)
-    {
-        $this->area = $area;
-    }
-
-    /**
-     * @return string
-     */
-    public function getTheme()
-    {
-        return $this->theme;
-    }
-
-    /**
-     * @param string $theme
-     *
-     * @return void
-     */
-    public function setTheme($theme)
-    {
-        $this->theme = $theme;
-    }
-
-    /**
-     * @return array
-     */
-    public function getFiles()
-    {
-        return $this->files;
-    }
-
-    /**
-     * @param array $files
-     *
-     * @return void
-     */
-    public function setFiles($files)
-    {
-        $this->files = $files;
-    }
-
-    /**
-     * @return int
-     */
-    public function getVerbose()
-    {
-        return $this->verbose;
-    }
-
-    /**
-     * @param int $verbose
-     *
-     * @return void
-     */
-    public function setVerbose($verbose)
-    {
-        $this->verbose = $verbose;
-    }
-
-    /**
-     * @return string
-     */
-    public function getExt()
-    {
-        return $this->ext;
-    }
-}
diff --git a/dev/tools/Magento/Tools/Webdev/file_assembler.php b/dev/tools/Magento/Tools/Webdev/file_assembler.php
deleted file mode 100644
index 669ffa8d535856606b1a86ebbf5d0882aa99f353..0000000000000000000000000000000000000000
--- a/dev/tools/Magento/Tools/Webdev/file_assembler.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-/**
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-use Magento\Tools\Webdev\CliParams;
-use Magento\Tools\View\Deployer\Log;
-
-require __DIR__ . '/../../../bootstrap.php';
-
-try {
-    $opt = new \Zend_Console_Getopt(
-        [
-            'locale=s'  => 'locale, default: en_US',
-            'area=s'    => 'area, one of (frontend|adminhtml|doc), default: frontend',
-            'theme=s'   => 'theme in format Vendor/theme, default: Magento/blank',
-            'files=s'   => 'files to pre-process (accept more than one file type as comma-separate values),'
-                . ' default: css/styles-m',
-            'ext=s'     => 'dynamic stylesheet language: less|sass',
-            'verbose|v' => 'provide extra output',
-            'help|h'    => 'show help',
-        ]
-    );
-
-    $opt->parse();
-
-    if ($opt->getOption('help')) {
-        echo $opt->getUsageMessage();
-        exit(0);
-    }
-
-    $params = new CliParams($opt);
-    $logger = new Log($params->getVerbose());
-
-} catch (\Zend_Console_Getopt_Exception $e) {
-    echo $e->getMessage() . PHP_EOL;
-    echo 'Please, use quotes(") for wrapping strings.' . PHP_EOL;
-    exit(1);
-}
-
-$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
-/** @var \Magento\Framework\App\Http $app */
-$app = $bootstrap->createApplication(
-    'Magento\Tools\Webdev\App\FileAssembler',
-    ['params' => $params, 'logger' => $logger]
-);
-$bootstrap->run($app);
diff --git a/dev/tools/grunt/configs/combo.js b/dev/tools/grunt/configs/combo.js
index 1ead93cb6265474399e612d02bad98cfbdaaee5b..cd3484eee7836c516e6cacd766fecc4410c71707 100644
--- a/dev/tools/grunt/configs/combo.js
+++ b/dev/tools/grunt/configs/combo.js
@@ -16,12 +16,10 @@ module.exports = {
         var cmdPlus = /^win/.test(process.platform) ? ' & ' : ' && ',
             command = 'grunt --force clean:' + themeName + cmdPlus;
 
-        command = command + 'php -f dev/tools/Magento/Tools/Webdev/file_assembler.php --' +
+        command = command + 'php bin/magento dev:css:deploy ' + theme[themeName].dsl + ' ' + theme[themeName].files.join(' ') +
         ' --locale=' + theme[themeName].locale +
         ' --area=' + theme[themeName].area +
-        ' --theme=' + theme[themeName].name +
-        ' --files=' + theme[themeName].files.join(',') +
-        ' --ext=' + theme[themeName].dsl;
+        ' --theme=' + theme[themeName].name;
 
         return command;
     },
diff --git a/dev/tools/grunt/tasks/deploy.js b/dev/tools/grunt/tasks/deploy.js
index bff8b1fabecaf8d9774a79aa3134c7163847ca30..13bedbc8a23e7fa929d6d659c27cc5b8c1d16fb6 100644
--- a/dev/tools/grunt/tasks/deploy.js
+++ b/dev/tools/grunt/tasks/deploy.js
@@ -20,7 +20,7 @@ module.exports = function (grunt) {
         ok('"pub/static" is empty.');
 
         log('Deploying Magento application...');
-        deploy = spawn('php', ['dev/tools/Magento/Tools/View/deploy.php']);
+        deploy = spawn('php', ['bin/magento', 'setup:static-content:deploy']);
 
         deploy.stdout.on('data', function (data) {
             log(data);
diff --git a/dev/tools/performance-toolkit/framework/Magento/ToolkitFramework/Application.php b/dev/tools/performance-toolkit/framework/Magento/ToolkitFramework/Application.php
index d1df2a830d5d1b7a1df8785c278e3147ffe8d28a..9e6706a7713448e76b711becb20f25a415667f52 100644
--- a/dev/tools/performance-toolkit/framework/Magento/ToolkitFramework/Application.php
+++ b/dev/tools/performance-toolkit/framework/Magento/ToolkitFramework/Application.php
@@ -132,7 +132,7 @@ class Application
     public function reindex()
     {
         $this->_shell->execute(
-            'php -f ' . $this->_applicationBaseDir . '/dev/shell/indexer.php -- reindexall'
+            'php -f ' . $this->_applicationBaseDir . '/bin/magento indexer:reindex --all'
         );
         return $this;
     }
diff --git a/dev/tools/tests.php b/dev/tools/tests.php
deleted file mode 100644
index fc04fa8a7311f2f4f8cfcb6b5d72e800a1021150..0000000000000000000000000000000000000000
--- a/dev/tools/tests.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-/**
- * Batch tool for running all or some of tests
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-$vendorDir = require '../../app/etc/vendor_path.php';
-
-$commands = [
-    'unit'                   => ['../tests/unit', ''],
-    'unit-performance'       => ['../tests/performance/framework/tests/unit', ''],
-    'unit-static'            => ['../tests/static/framework/tests/unit', ''],
-    'unit-integration'       => ['../tests/integration/framework/tests/unit', ''],
-    'integration'            => ['../tests/integration', ''],
-    'integration-integrity'  => ['../tests/integration', ' testsuite/Magento/Test/Integrity'],
-    'static-default'         => ['../tests/static', ''],
-    'static-legacy'          => ['../tests/static', ' testsuite/Magento/Test/Legacy'],
-    'static-integration-php' => ['../tests/static', ' testsuite/Magento/Test/Php/Exemplar'],
-    'static-integration-js'  => ['../tests/static', ' testsuite/Magento/Test/Js/Exemplar'],
-];
-$types = [
-    'all'             => array_keys($commands),
-    'unit'            => ['unit', 'unit-performance', 'unit-static', 'unit-integration'],
-    'integration'     => ['integration'],
-    'integration-all' => ['integration', 'integration-integrity'],
-    'static'          => ['static-default'],
-    'static-all'      => ['static-default', 'static-legacy', 'static-integration-php', 'static-integration-js'],
-    'integrity'       => ['static-default', 'static-legacy', 'integration-integrity'],
-    'legacy'          => ['static-legacy'],
-    'default'         => [
-        'unit', 'unit-performance', 'unit-static', 'unit-integration', 'integration', 'static-default',
-    ],
-];
-
-$arguments = getopt('', ['type::']);
-if (!isset($arguments['type'])) {
-    $arguments['type'] = 'default';
-} elseif (!isset($types[$arguments['type']])) {
-    echo "Invalid type: '{$arguments['type']}'. Available types: " . implode(', ', array_keys($types)) . "\n\n";
-    exit(1);
-}
-
-$failures = [];
-$runCommands = $types[$arguments['type']];
-foreach ($runCommands as $key) {
-    list($dir, $options) = $commands[$key];
-    $dirName = realpath(__DIR__ . '/' . $dir);
-    chdir($dirName);
-    $command = realpath(__DIR__ . '/../../') . '/' . $vendorDir . '/phpunit/phpunit/phpunit' . $options;
-    $message = $dirName . '> ' . $command;
-    echo "\n\n";
-    echo str_pad("---- {$message} ", 70, '-');
-    echo "\n\n";
-    passthru($command, $returnVal);
-    if ($returnVal) {
-        $failures[] = $message;
-    }
-}
-
-echo "\n" , str_repeat('-', 70), "\n";
-if ($failures) {
-    echo "\nFAILED - " . count($failures) . ' of ' . count($runCommands) . ":\n";
-    foreach ($failures as $message) {
-        echo ' - ' . $message . "\n";
-    }
-} else {
-    echo "\nPASSED (" . count($runCommands) . ")\n";
-}
diff --git a/lib/internal/Magento/Framework/App/AbstractShell.php b/lib/internal/Magento/Framework/App/AbstractShell.php
deleted file mode 100644
index ce24586bb7cec5a589bb1f3530df07f6fdc6eb8d..0000000000000000000000000000000000000000
--- a/lib/internal/Magento/Framework/App/AbstractShell.php
+++ /dev/null
@@ -1,190 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Framework\App;
-
-use Magento\Framework\App\Filesystem\DirectoryList;
-
-/**
- * Shell scripts abstract class
- */
-abstract class AbstractShell
-{
-    /**
-     * Raw arguments, that should be parsed
-     *
-     * @var string[]
-     */
-    protected $_rawArgs = [];
-
-    /**
-     * Parsed input arguments
-     *
-     * @var array
-     */
-    protected $_args = [];
-
-    /**
-     * Entry point - script filename that is executed
-     *
-     * @var string
-     */
-    protected $_entryPoint = null;
-
-    /**
-     * @var \Magento\Framework\Filesystem\Directory\ReadInterface
-     */
-    protected $rootDirectory;
-
-    /**
-     * Initializes application and parses input parameters
-     *
-     * @param \Magento\Framework\Filesystem $filesystem
-     * @param string $entryPoint
-     * @throws \Exception
-     */
-    public function __construct(\Magento\Framework\Filesystem $filesystem, $entryPoint)
-    {
-        if (isset($_SERVER['REQUEST_METHOD'])) {
-            throw new \Exception('This script cannot be run from Browser. This is the shell script.');
-        }
-
-        $this->rootDirectory = $filesystem->getDirectoryRead(DirectoryList::ROOT);
-        $this->_entryPoint = $entryPoint;
-        $this->_rawArgs = $_SERVER['argv'];
-        $this->_applyPhpVariables();
-        $this->_parseArgs();
-    }
-
-    /**
-     * Sets raw arguments to be parsed
-     *
-     * @param string[] $args
-     * @return $this
-     */
-    public function setRawArgs($args)
-    {
-        $this->_rawArgs = $args;
-        $this->_parseArgs();
-        return $this;
-    }
-
-    /**
-     * Parses .htaccess file and apply php settings to shell script
-     *
-     * @return $this
-     */
-    protected function _applyPhpVariables()
-    {
-        $htaccess = '.htaccess';
-        if ($this->rootDirectory->isFile($htaccess)) {
-            // parse htaccess file
-            $data = $this->rootDirectory->readFile($htaccess);
-            $matches = [];
-            preg_match_all('#^\s+?php_value\s+([a-z_]+)\s+(.+)$#siUm', $data, $matches, PREG_SET_ORDER);
-            if ($matches) {
-                foreach ($matches as $match) {
-                    @ini_set($match[1], str_replace("\r", '', $match[2]));
-                }
-            }
-            preg_match_all('#^\s+?php_flag\s+([a-z_]+)\s+(.+)$#siUm', $data, $matches, PREG_SET_ORDER);
-            if ($matches) {
-                foreach ($matches as $match) {
-                    @ini_set($match[1], str_replace("\r", '', $match[2]));
-                }
-            }
-        }
-        return $this;
-    }
-
-    /**
-     * Parses input arguments
-     *
-     * @return $this
-     */
-    protected function _parseArgs()
-    {
-        $current = null;
-        foreach ($this->_rawArgs as $arg) {
-            $match = [];
-            if (preg_match(
-                '#^--([\w\d_-]{1,})(=(.*))?$#',
-                $arg,
-                $match
-            ) || preg_match(
-                '#^-([\w\d_]{1,})$#',
-                $arg,
-                $match
-            )
-            ) {
-                if (isset($match[3])) {
-                    $this->_args[$match[1]] = $match[3];
-                    $current = null;
-                } else {
-                    $current = $match[1];
-                    $this->_args[$current] = true;
-                }
-            } else {
-                if ($current) {
-                    $this->_args[$current] = $arg;
-                    $current = null;
-                } elseif (preg_match('#^([\w\d_]{1,})$#', $arg, $match)) {
-                    $this->_args[$match[1]] = true;
-                }
-            }
-        }
-        return $this;
-    }
-
-    /**
-     * Runs script
-     *
-     * @return $this
-     */
-    abstract public function run();
-
-    /**
-     * Shows usage help, if requested
-     *
-     * @return bool
-     */
-    protected function _showHelp()
-    {
-        if (isset($this->_args['h']) || isset($this->_args['help'])) {
-            echo $this->getUsageHelp();
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Retrieves usage help message
-     *
-     * @return string
-     */
-    public function getUsageHelp()
-    {
-        return <<<USAGE
-Usage:  php -f {$this->_entryPoint} -- [options]
-
-  -h            Short alias for help
-  help          This help
-USAGE;
-    }
-
-    /**
-     * Retrieves argument value by name. If argument is not found - returns FALSE.
-     *
-     * @param string $name the argument name
-     * @return mixed
-     */
-    public function getArg($name)
-    {
-        if (isset($this->_args[$name])) {
-            return $this->_args[$name];
-        }
-        return false;
-    }
-}
diff --git a/lib/internal/Magento/Framework/App/Cache/Manager.php b/lib/internal/Magento/Framework/App/Cache/Manager.php
index fc49b8af25f568876eb2336c2aa690a296285a7b..3936853833b98fe671c4a748052d944184f6e6a9 100644
--- a/lib/internal/Magento/Framework/App/Cache/Manager.php
+++ b/lib/internal/Magento/Framework/App/Cache/Manager.php
@@ -85,8 +85,7 @@ class Manager
     public function clean(array $types)
     {
         foreach ($types as $type) {
-            $frontend = $this->pool->get($type);
-            $frontend->clean();
+            $this->cacheTypeList->cleanType($type);
         }
     }
 
diff --git a/lib/internal/Magento/Framework/App/Cache/ManagerApp.php b/lib/internal/Magento/Framework/App/Cache/ManagerApp.php
deleted file mode 100644
index 15f2f92ddf81fd1b66aebd41c93b1c211b405306..0000000000000000000000000000000000000000
--- a/lib/internal/Magento/Framework/App/Cache/ManagerApp.php
+++ /dev/null
@@ -1,154 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Framework\App\Cache;
-
-use Magento\Framework\App;
-use Magento\Framework\App\Console\Response;
-use Magento\Framework\AppInterface;
-
-/**
- * An application for managing cache status
- */
-class ManagerApp implements AppInterface
-{
-    /**#@+
-     * Request keys for managing caches
-     */
-    const KEY_TYPES = 'types';
-    const KEY_SET = 'set';
-    const KEY_CLEAN = 'clean';
-    const KEY_FLUSH = 'flush';
-    const KEY_STATUS = 'status';
-    /**#@- */
-
-    /**
-     * Console response
-     *
-     * @var Response
-     */
-    private $response;
-
-    /**
-     * Requested changes
-     *
-     * @var array
-     */
-    private $requestArgs;
-
-    /**
-     * Cache manager
-     *
-     * @var Manager
-     */
-    private $cacheManager;
-
-    /**
-     * Constructor
-     *
-     * @param Manager $cacheManager
-     * @param Response $response
-     * @param array $requestArgs
-     */
-    public function __construct(
-        Manager $cacheManager,
-        Response $response,
-        array $requestArgs
-    ) {
-        $this->cacheManager = $cacheManager;
-        $this->response = $response;
-        $this->requestArgs = $requestArgs;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return Response
-     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
-     */
-    public function launch()
-    {
-        $output = [];
-        $types = $this->getRequestedTypes();
-
-        $enabledTypes = [];
-        if (isset($this->requestArgs[self::KEY_SET])) {
-            $isEnabled = (bool)(int)$this->requestArgs[self::KEY_SET];
-            $changedTypes = $this->cacheManager->setEnabled($types, $isEnabled);
-            if ($isEnabled) {
-                $enabledTypes = $changedTypes;
-            }
-            if ($changedTypes) {
-                $output[] = 'Changed cache status:';
-                foreach ($changedTypes as $type) {
-                    $output[] = sprintf('%30s: %d -> %d', $type, !$isEnabled, $isEnabled);
-                }
-            } else {
-                $output[] = 'There is nothing to change in cache status';
-            }
-        }
-        if (isset($this->requestArgs[self::KEY_FLUSH])) {
-            $this->cacheManager->flush($types);
-            $output[] = 'Flushed cache types:';
-            $output[] = join("\n", $types);
-        } elseif (isset($this->requestArgs[self::KEY_CLEAN])) {
-            $this->cacheManager->clean($types);
-            $output[] = 'Cleaned cache types:';
-            $output[] = join("\n", $types);
-        } elseif (isset($this->requestArgs[self::KEY_STATUS])) {
-            $output[] = 'Current status:';
-            foreach ($this->cacheManager->getStatus() as $cache => $status) {
-                $output[] = sprintf('%30s: %d', $cache, $status);
-            }
-        } elseif (!empty($enabledTypes)) {
-            $this->cacheManager->clean($enabledTypes);
-            $output[] = 'Cleaned cache types:';
-            $output[] = join("\n", $enabledTypes);
-        }
-
-        $output[] = '';
-        $this->response->setBody(join("\n", $output));
-        return $this->response;
-    }
-
-    /**
-     * Maps requested type from request into the current registry of types
-     *
-     * @return string[]
-     * @throws \InvalidArgumentException
-     */
-    private function getRequestedTypes()
-    {
-        $requestedTypes = [];
-        if (isset($this->requestArgs[self::KEY_TYPES])) {
-            $requestedTypes = explode(',', $this->requestArgs[self::KEY_TYPES]);
-            $requestedTypes = array_filter(array_map('trim', $requestedTypes), 'strlen');
-        }
-        $availableTypes = $this->cacheManager->getAvailableTypes();
-        if (empty($requestedTypes)) {
-            return $availableTypes;
-        } else {
-            $unsupportedTypes = array_diff($requestedTypes, $availableTypes);
-            if ($unsupportedTypes) {
-                throw new \InvalidArgumentException(
-                    "The following requested cache types are not supported: '" . join("', '", $unsupportedTypes)
-                    . "'.\nSupported types: " . join(", ", $availableTypes) . ""
-                );
-            }
-            return array_values(array_intersect($availableTypes, $requestedTypes));
-        }
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function catchException(App\Bootstrap $bootstrap, \Exception $exception)
-    {
-        $this->response->setBody($exception->getMessage());
-        $this->response->terminateOnSend(false);
-        $this->response->sendResponse();
-        return false;
-    }
-}
diff --git a/lib/internal/Magento/Framework/App/Filesystem/DirectoryList.php b/lib/internal/Magento/Framework/App/Filesystem/DirectoryList.php
index b73959ca803be367c533b64e33041669d51712f3..cb3767cc11fce65c015b2e6bcedcee9e253fca17 100644
--- a/lib/internal/Magento/Framework/App/Filesystem/DirectoryList.php
+++ b/lib/internal/Magento/Framework/App/Filesystem/DirectoryList.php
@@ -90,6 +90,11 @@ class DirectoryList extends \Magento\Framework\Filesystem\DirectoryList
      */
     const SESSION = 'session';
 
+    /**
+     * Directory for Setup application
+     */
+    const SETUP = 'setup';
+
     /**
      * Dependency injection related file directory
      */
@@ -139,6 +144,7 @@ class DirectoryList extends \Magento\Framework\Filesystem\DirectoryList
             self::UPLOAD => [parent::PATH => 'pub/media/upload', parent::URL_PATH => 'pub/media/upload'],
             self::TMP_MATERIALIZATION_DIR => [parent::PATH => 'var/view_preprocessed'],
             self::TEMPLATE_MINIFICATION_DIR => [parent::PATH => 'var/view_preprocessed/html'],
+            self::SETUP => [parent::PATH => 'setup/src'],
         ];
         return parent::getDefaultConfig() + $result;
     }
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/AbstractShellTest.php b/lib/internal/Magento/Framework/App/Test/Unit/AbstractShellTest.php
deleted file mode 100644
index 07c320180d3e1c62ee2a3de19bf511f301a85f91..0000000000000000000000000000000000000000
--- a/lib/internal/Magento/Framework/App/Test/Unit/AbstractShellTest.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Framework\App\Test\Unit;
-
-class AbstractShellTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var \Magento\Framework\App\AbstractShell | \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_model;
-
-    protected function setUp()
-    {
-        $this->_model = $this->getMockBuilder(
-            '\Magento\Framework\App\AbstractShell'
-        )->disableOriginalConstructor()->setMethods(
-            ['_applyPhpVariables']
-        )->getMockForAbstractClass();
-    }
-
-    protected function tearDown()
-    {
-        unset($this->_model);
-    }
-
-    /**
-     * @param array $arguments
-     * @param string $argName
-     * @param string $expectedValue
-     *
-     * @dataProvider setGetArgDataProvider
-     */
-    public function testSetGetArg($arguments, $argName, $expectedValue)
-    {
-        $this->_model->setRawArgs($arguments);
-        $this->assertEquals($this->_model->getArg($argName), $expectedValue);
-    }
-
-    /**
-     * @return array
-     */
-    public function setGetArgDataProvider()
-    {
-        return [
-            'argument with no value' => [
-                'arguments' => ['argument', 'argument2'],
-                'argName' => 'argument',
-                'expectedValue' => true,
-            ],
-            'dashed argument with value' => [
-                'arguments' => ['-argument', 'value'],
-                'argName' => 'argument',
-                'expectedValue' => 'value',
-            ],
-            'double-dashed argument with separate value' => [
-                'arguments' => ['--argument-name', 'value'],
-                'argName' => 'argument-name',
-                'expectedValue' => 'value',
-            ],
-            'double-dashed argument with included value' => [
-                'arguments' => ['--argument-name=value'],
-                'argName' => 'argument-name',
-                'expectedValue' => 'value',
-            ],
-            'argument with value, then single argument with no value' => [
-                'arguments' => ['-argument', 'value', 'argument2'],
-                'argName' => 'argument',
-                'expectedValue' => 'value',
-            ]
-        ];
-    }
-}
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Cache/ManagerAppTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Cache/ManagerAppTest.php
deleted file mode 100644
index b3d7c803071dd9a231db4224c85c8c4c3f6a74bb..0000000000000000000000000000000000000000
--- a/lib/internal/Magento/Framework/App/Test/Unit/Cache/ManagerAppTest.php
+++ /dev/null
@@ -1,228 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Framework\App\Test\Unit\Cache;
-
-use \Magento\Framework\App\Cache\ManagerApp;
-
-class ManagerAppTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var \Magento\Framework\App\Cache\Manager|\PHPUnit_Framework_MockObject_MockObject
-     */
-    private $cacheManager;
-
-    /**
-     * @var \Magento\Framework\App\Console\Response|\PHPUnit_Framework_MockObject_MockObject
-     */
-    private $response;
-
-    protected function setUp()
-    {
-        $this->cacheManager = $this->getMock('Magento\Framework\App\Cache\Manager', [], [], '', false);
-        $this->cacheManager->expects($this->any())
-            ->method('getAvailableTypes')
-            ->will($this->returnValue(['foo', 'bar', 'baz']));
-        $this->cacheManager->expects($this->any())
-            ->method('getStatus')
-            ->will($this->returnValue(['foo' => true, 'bar' => true, 'baz' => false]));
-        $this->response = $this->getMock('Magento\Framework\App\Console\Response', [], [], '', false);
-    }
-
-    public function testLaunchStatus()
-    {
-        $requestArgs = [
-            ManagerApp::KEY_STATUS => true
-        ];
-
-        $this->response->expects($this->once())
-            ->method('setBody')
-            ->with(
-                $this->matches("Current status:%afoo: 1%abar: 1%abaz: 0")
-            );
-
-        $model = new ManagerApp($this->cacheManager, $this->response, $requestArgs);
-        $model->launch();
-    }
-
-    public function testLaunchEnable()
-    {
-        $requestArgs = [
-            ManagerApp::KEY_SET => true,
-            ManagerApp::KEY_TYPES => 'foo,,bar, baz,',
-        ];
-        $this->cacheManager->expects($this->once())
-            ->method('setEnabled')
-            ->with(['foo', 'bar', 'baz'], true)
-            ->will($this->returnValue(['baz']));
-        $this->cacheManager->expects($this->once())
-            ->method('clean')
-            ->with(['baz']);
-        $this->response->expects($this->once())
-            ->method('setBody')
-            ->with(
-                $this->matches("Changed cache status:\n%abaz: 0 -> 1\nCleaned cache types:\nbaz")
-            );
-
-        $model = new ManagerApp($this->cacheManager, $this->response, $requestArgs);
-        $model->launch();
-    }
-
-    public function testLaunchDisable()
-    {
-        $requestArgs = [
-            ManagerApp::KEY_SET => false,
-            ManagerApp::KEY_TYPES => 'foo,,bar, baz,',
-        ];
-        $this->cacheManager->expects($this->once())
-            ->method('setEnabled')
-            ->with(['foo', 'bar', 'baz'], false)
-            ->will($this->returnValue(['baz']));
-        $this->cacheManager->expects($this->never())
-            ->method('clean');
-        $this->response->expects($this->once())
-            ->method('setBody')
-            ->with(
-                $this->matches("Changed cache status:\n%abaz: 1 -> 0\n")
-            );
-
-        $model = new ManagerApp($this->cacheManager, $this->response, $requestArgs);
-        $model->launch();
-    }
-
-    public function testLaunchFlush()
-    {
-        $requestArgs = [
-            ManagerApp::KEY_FLUSH => true,
-            ManagerApp::KEY_TYPES => 'foo,bar',
-        ];
-        $this->cacheManager->expects($this->never())
-            ->method('setEnabled');
-        $this->cacheManager->expects($this->once())
-            ->method('flush')
-            ->with(['foo', 'bar']);
-        $this->cacheManager->expects($this->never())
-            ->method('clean');
-        $this->response->expects($this->once())
-            ->method('setBody')
-            ->with(
-                $this->matches("Flushed cache types:\nfoo\nbar")
-            );
-
-        $model = new ManagerApp($this->cacheManager, $this->response, $requestArgs);
-        $model->launch();
-    }
-
-    public function testLaunchClean()
-    {
-        $requestArgs = [
-            ManagerApp::KEY_CLEAN => true,
-            ManagerApp::KEY_TYPES => 'foo,bar',
-        ];
-        $this->cacheManager->expects($this->never())
-            ->method('setEnabled');
-        $this->cacheManager->expects($this->never())
-            ->method('flush');
-        $this->cacheManager->expects($this->once())
-            ->method('clean')
-            ->with(['foo', 'bar']);
-        $this->response->expects($this->once())
-            ->method('setBody')
-            ->with(
-                $this->matches("Cleaned cache types:\nfoo\nbar")
-            );
-
-        $model = new ManagerApp($this->cacheManager, $this->response, $requestArgs);
-        $model->launch();
-    }
-
-    public function testLaunchSetAndClean()
-    {
-        $requestArgs = [
-            ManagerApp::KEY_SET => true,
-            ManagerApp::KEY_CLEAN => true,
-            ManagerApp::KEY_TYPES => 'foo,bar',
-        ];
-        $this->cacheManager->expects($this->once())
-            ->method('setEnabled')
-            ->with(['foo', 'bar'], true)
-            ->will($this->returnValue(['foo']));
-        $this->cacheManager->expects($this->never())
-            ->method('flush');
-        $this->cacheManager->expects($this->once())
-            ->method('clean')
-            ->with(['foo', 'bar']);
-        $this->response->expects($this->once())
-            ->method('setBody')
-            ->with(
-                $this->matches("Changed cache status:\n%afoo: 0 -> 1\nCleaned cache types:\nfoo\nbar")
-            );
-
-        $model = new ManagerApp($this->cacheManager, $this->response, $requestArgs);
-        $model->launch();
-    }
-
-    public function testLaunchAll()
-    {
-        $requestArgs = [
-            ManagerApp::KEY_SET => true,
-            ManagerApp::KEY_FLUSH => true,
-            ManagerApp::KEY_CLEAN => true,
-            ManagerApp::KEY_TYPES => 'foo,baz',
-        ];
-        $this->cacheManager->expects($this->once())
-            ->method('setEnabled')
-            ->with(['foo', 'baz'], true)
-            ->will($this->returnValue(['baz']));
-        $this->cacheManager->expects($this->once())
-            ->method('flush')
-            ->with(['foo', 'baz']);
-        $this->cacheManager->expects($this->never())
-            ->method('clean');
-        $this->response->expects($this->once())
-            ->method('setBody')
-            ->with(
-                $this->matches("Changed cache status:\n%abaz: 0 -> 1%aFlushed cache types:\nfoo\nbaz")
-            );
-
-        $model = new ManagerApp($this->cacheManager, $this->response, $requestArgs);
-        $model->launch();
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage The following requested cache types are not supported: 'unsupported', 'wrong'
-     */
-    public function testLaunchWithUnsupportedCacheTypes()
-    {
-        $requestArgs = [
-            ManagerApp::KEY_SET => true,
-            ManagerApp::KEY_TYPES => 'foo,unsupported,wrong,bar',
-        ];
-        $cacheManager = $this->getMock('Magento\Framework\App\Cache\Manager', [], [], '', false);
-        $cacheManager->expects($this->any())
-            ->method('getAvailableTypes')
-            ->will($this->returnValue(['foo', 'bar', 'baz']));
-        $cacheManager->expects($this->never())
-            ->method('setEnabled');
-
-        $model = new ManagerApp($cacheManager, $this->response, $requestArgs);
-        $model->launch();
-    }
-
-    public function testCatchException()
-    {
-        $exceptionMessage = 'Exception message';
-        $model = new ManagerApp($this->cacheManager, $this->response, []);
-        $this->response->expects($this->once())
-            ->method('setBody')
-            ->with($exceptionMessage);
-        $this->assertFalse($model->catchException(
-            $this->getMock('Magento\Framework\App\Bootstrap', [], [], '', false),
-            new \Exception($exceptionMessage)
-        ));
-    }
-}
diff --git a/lib/internal/Magento/Framework/Code/Generator.php b/lib/internal/Magento/Framework/Code/Generator.php
index 03ac500f47daccb01521a26559f1b6b3669f8494..da6d60b14ed9bff46b34410eba6c2c0bb4136926 100644
--- a/lib/internal/Magento/Framework/Code/Generator.php
+++ b/lib/internal/Magento/Framework/Code/Generator.php
@@ -68,7 +68,7 @@ class Generator
      * Generate Class
      *
      * @param string $className
-     * @return string
+     * @return string | void
      * @throws \Magento\Framework\Exception\LocalizedException
      * @throws \InvalidArgumentException
      */
@@ -99,15 +99,17 @@ class Generator
         $generatorClass = $this->_generatedEntities[$entity];
         /** @var EntityAbstract $generator */
         $generator = $this->createGeneratorInstance($generatorClass, $entityName, $className);
-        $this->tryToLoadSourceClass($className, $generator);
-        if (!($file = $generator->generate())) {
-            $errors = $generator->getErrors();
-            throw new \Magento\Framework\Exception\LocalizedException(
-                new \Magento\Framework\Phrase(implode(' ', $errors))
-            );
+        if ($generator !== null) {
+            $this->tryToLoadSourceClass($className, $generator);
+            if (!($file = $generator->generate())) {
+                $errors = $generator->getErrors();
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    new \Magento\Framework\Phrase(implode(' ', $errors))
+                );
+            }
+            $this->includeFile($file);
+            return self::GENERATION_SUCCESS;
         }
-        $this->includeFile($file);
-        return self::GENERATION_SUCCESS;
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/Console/README.md b/lib/internal/Magento/Framework/Console/README.md
index 8d77e82bdff7213f81673b8d7d9c32bf0f017573..b9057127c88914c576e5385aeee9839b87ea3c90 100644
--- a/lib/internal/Magento/Framework/Console/README.md
+++ b/lib/internal/Magento/Framework/Console/README.md
@@ -8,7 +8,7 @@ For example we can introduce new command in module using di.xml:
 <type name="Magento\Framework\Console\CommandList">
     <arguments>
         <argument name="commands" xsi:type="array">
-            <item name="test_me" xsi:type="string">Magento\MyModule\Console\TestMeCommand</item>
+            <item name="test_me" xsi:type="object">Magento\MyModule\Console\TestMeCommand</item>
         </argument>
     </arguments>
 </type>
diff --git a/setup/pub/magento/setup/readiness-check.js b/setup/pub/magento/setup/readiness-check.js
index d7c0eb243e2fccce768b7eec41e4b5b414ca7584..fa6da9344a549ffe0fe5a228630c8b27507ef26e 100644
--- a/setup/pub/magento/setup/readiness-check.js
+++ b/setup/pub/magento/setup/readiness-check.js
@@ -32,7 +32,7 @@ angular.module('readiness-check', [])
             processed: false,
             expanded: false
         };
-        $scope.rawpost = {
+        $scope.settings = {
             visible: false,
             processed: false,
             expanded: false
@@ -62,16 +62,16 @@ angular.module('readiness-check', [])
                     $scope.stopProgress();
                 }
             },
-            'php-rawpost': {
-                url:'index.php/environment/php-rawpost',
+            'php-settings': {
+                url:'index.php/environment/php-settings',
                 show: function() {
                     $scope.startProgress();
-                    $scope.rawpost.visible = true;
+                    $scope.settings.visible = true;
                 },
                 process: function(data) {
-                    $scope.rawpost.processed = true;
-                    angular.extend($scope.rawpost, data);
-                    $scope.updateOnProcessed($scope.rawpost.responseType);
+                    $scope.settings.processed = true;
+                    angular.extend($scope.settings, data);
+                    $scope.updateOnProcessed($scope.settings.responseType);
                     $scope.stopProgress();
                 }
             },
diff --git a/setup/src/Magento/Setup/Console/Command/DeployStaticContentCommand.php b/setup/src/Magento/Setup/Console/Command/DeployStaticContentCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..5cde08cd967e98ed71d3fbf719f3adb104fb54a8
--- /dev/null
+++ b/setup/src/Magento/Setup/Console/Command/DeployStaticContentCommand.php
@@ -0,0 +1,130 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Setup\Console\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Magento\Framework\App\DeploymentConfig;
+use Symfony\Component\Console\Input\InputArgument;
+use Magento\Setup\Model\ObjectManagerProvider;
+
+/**
+ * Command for deploy static content
+ */
+class DeployStaticContentCommand extends Command
+{
+    /**
+     * Key for dry-run option
+     */
+    const DRY_RUN_OPTION = 'dry-run';
+
+    /**
+     * Key for languages parameter
+     */
+    const LANGUAGE_OPTION = 'languages';
+
+    /**
+     * Object manager provider
+     *
+     * @var ObjectManagerProvider
+     */
+    private $objectManagerProvider;
+
+    /**
+     * Deployment configuration
+     *
+     * @var DeploymentConfig
+     */
+    private $deploymentConfig;
+
+    /**
+     * Inject dependencies
+     *
+     * @param ObjectManagerProvider $objectManagerProvider
+     * @param DeploymentConfig $deploymentConfig
+     */
+    public function __construct(ObjectManagerProvider $objectManagerProvider, DeploymentConfig $deploymentConfig)
+    {
+        $this->objectManagerProvider = $objectManagerProvider;
+        $this->deploymentConfig = $deploymentConfig;
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('setup:static-content:deploy')
+            ->setDescription('Deploys static view files')
+            ->setDefinition([
+                new InputOption(
+                    self::DRY_RUN_OPTION,
+                    '-d',
+                    InputOption::VALUE_NONE,
+                    'If specified, then no files will be actually deployed.'
+                ),
+                new InputArgument(
+                    self::LANGUAGE_OPTION,
+                    InputArgument::IS_ARRAY,
+                    'List of languages you want the tool populate files for.',
+                    ['en_US']
+                ),
+            ]);
+        parent::configure();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        if (!$this->deploymentConfig->isAvailable()) {
+            $output->writeln("<info>You need to install the Magento application before running this utility.</info>");
+            return;
+        }
+
+        $options = $input->getOptions();
+
+        $languages = $input->getArgument(self::LANGUAGE_OPTION);
+        foreach ($languages as $lang) {
+            if (!preg_match('/^[a-z]{2}_[A-Z]{2}$/', $lang)) {
+                throw new \InvalidArgumentException(
+                    $lang . ' argument has invalid value format'
+                );
+            }
+        }
+
+        try {
+            $objectManager = $this->objectManagerProvider->get();
+
+            // run the deployment logic
+            $filesUtil = $objectManager->create(
+                '\Magento\Framework\App\Utility\Files',
+                ['pathToSource' => BP]
+            );
+
+            $objectManagerFactory = $this->objectManagerProvider->getObjectManagerFactory();
+
+            /** @var \Magento\Setup\Model\Deployer $deployer */
+            $deployer = $objectManager->create(
+                'Magento\Setup\Model\Deployer',
+                ['filesUtil' => $filesUtil, 'output' => $output, 'isDryRun' => $options[self::DRY_RUN_OPTION]]
+            );
+            $deployer->deploy($objectManagerFactory, $languages);
+
+        } catch (\Exception $e) {
+            $output->writeln('<error>' . $e->getMessage() . '</error>>');
+            if ($output->isVerbose()) {
+                $output->writeln($e->getTraceAsString());
+            }
+            return;
+        }
+    }
+}
diff --git a/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php b/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..8236627a40caf9180839f9d4d4b259bd381a1656
--- /dev/null
+++ b/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
@@ -0,0 +1,200 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Setup\Console\Command;
+
+use Magento\Framework\App\Filesystem\DirectoryList;
+use Magento\Framework\ObjectManagerInterface;
+use Magento\Framework\App\DeploymentConfig;
+use Magento\Setup\Model\ObjectManagerProvider;
+use Magento\Setup\Module\Di\App\Task\Manager;
+use Magento\Setup\Module\Di\App\Task\OperationFactory;
+use Magento\Setup\Module\Di\App\Task\OperationException;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Command to run compile in single-tenant mode
+ */
+class DiCompileCommand extends Command
+{
+    /**
+     * @var DeploymentConfig
+     */
+    private $deploymentConfig;
+
+    /**
+     * @var ObjectManagerInterface
+     */
+    private $objectManager;
+
+    /**
+     * @var Manager
+     */
+    private $taskManager;
+
+    /**
+     * @var DirectoryList
+     */
+    private $directoryList;
+
+    /**
+     * @var array
+     */
+    private $excludedPathsList;
+
+    /**
+     * Constructor
+     *
+     * @param DeploymentConfig $deploymentConfig
+     * @param DirectoryList $directoryList
+     * @param Manager $taskManager
+     * @param ObjectManagerProvider $objectManagerProvider
+     */
+    public function __construct(
+        DeploymentConfig $deploymentConfig,
+        DirectoryList $directoryList,
+        Manager $taskManager,
+        ObjectManagerProvider $objectManagerProvider
+    ) {
+        $this->deploymentConfig = $deploymentConfig;
+        $this->directoryList = $directoryList;
+        $this->objectManager = $objectManagerProvider->get();
+        $this->taskManager = $taskManager;
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('setup:di:compile')
+            ->setDescription(
+                'Generates DI configuration and all non-existing interceptors and factories'
+            );
+        parent::configure();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $appCodePath = $this->directoryList->getPath(DirectoryList::MODULES);
+        $libraryPath = $this->directoryList->getPath(DirectoryList::LIB_INTERNAL);
+        $generationPath = $this->directoryList->getPath(DirectoryList::GENERATION);
+        if (!$this->deploymentConfig->isAvailable()) {
+            $output->writeln('You cannot run this command because the Magento application is not installed.');
+            return;
+        }
+        $compiledPathsList = [
+            'application' => $appCodePath,
+            'library' => $libraryPath . '/Magento/Framework',
+            'generated_helpers' => $generationPath
+        ];
+        $this->excludedPathsList = [
+            'application' => '#^' . $appCodePath . '/[\\w]+/[\\w]+/Test#',
+            'framework' => '#^' . $libraryPath . '/[\\w]+/[\\w]+/([\\w]+/)?Test#'
+        ];
+        $this->configureObjectManager($output);
+
+        $operations = [
+            OperationFactory::REPOSITORY_GENERATOR => [
+                'path' => $compiledPathsList['application'],
+                'filePatterns' => ['di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/']
+            ],
+            OperationFactory::APPLICATION_CODE_GENERATOR => [
+                $compiledPathsList['application'],
+                $compiledPathsList['library'],
+                $compiledPathsList['generated_helpers'],
+            ],
+            OperationFactory::INTERCEPTION => [
+                    'intercepted_paths' => [
+                        $compiledPathsList['application'],
+                        $compiledPathsList['library'],
+                        $compiledPathsList['generated_helpers'],
+                    ],
+                    'path_to_store' => $compiledPathsList['generated_helpers'],
+            ],
+            OperationFactory::AREA_CONFIG_GENERATOR => [
+                $compiledPathsList['application'],
+                $compiledPathsList['library'],
+                $compiledPathsList['generated_helpers'],
+            ],
+            OperationFactory::INTERCEPTION_CACHE => [
+                $compiledPathsList['application'],
+                $compiledPathsList['library'],
+                $compiledPathsList['generated_helpers'],
+            ]
+        ];
+
+        try {
+            foreach ($operations as $operationCode => $arguments) {
+                $this->taskManager->addOperation(
+                    $operationCode,
+                    $arguments
+                );
+            }
+            $this->taskManager->process();
+            $output->writeln('<info>Generated code and dependency injection configuration successfully.</info>');
+        } catch (OperationException $e) {
+            $output->writeln('<error>' . $e->getMessage() . '</error>');
+        }
+    }
+
+    /**
+     * Configure Object Manager
+     *
+     * @param OutputInterface $output
+     * @return void
+     */
+    private function configureObjectManager(OutputInterface $output)
+    {
+        $this->objectManager->configure(
+            [
+                'preferences' => [
+                    'Magento\Setup\Module\Di\Compiler\Config\WriterInterface' =>
+                        'Magento\Setup\Module\Di\Compiler\Config\Writer\Filesystem',
+                ],
+                'Magento\Setup\Module\Di\Compiler\Config\ModificationChain' => [
+                    'arguments' => [
+                        'modificationsList' => [
+                            'BackslashTrim' =>
+                                ['instance' => 'Magento\Setup\Module\Di\Compiler\Config\Chain\BackslashTrim'],
+                            'PreferencesResolving' =>
+                                ['instance' => 'Magento\Setup\Module\Di\Compiler\Config\Chain\PreferencesResolving'],
+                            'InterceptorSubstitution' =>
+                                ['instance' => 'Magento\Setup\Module\Di\Compiler\Config\Chain\InterceptorSubstitution'],
+                            'InterceptionPreferencesResolving' =>
+                                ['instance' => 'Magento\Setup\Module\Di\Compiler\Config\Chain\PreferencesResolving'],
+                            'ArgumentsSerialization' =>
+                                ['instance' => 'Magento\Setup\Module\Di\Compiler\Config\Chain\ArgumentsSerialization'],
+                        ]
+                    ]
+                ],
+                'Magento\Setup\Module\Di\Code\Generator\PluginList' => [
+                    'arguments' => [
+                        'cache' => [
+                            'instance' => 'Magento\Framework\App\Interception\Cache\CompiledConfig'
+                        ]
+                    ]
+                ],
+                'Magento\Setup\Module\Di\Code\Reader\ClassesScanner' => [
+                    'arguments' => [
+                        'excludePatterns' => $this->excludedPathsList
+                    ]
+                ],
+                'Magento\Setup\Module\Di\Compiler\Log\Writer\Console' => [
+                    'arguments' => [
+                        'output' => $output,
+                    ]
+                ],
+            ]
+        );
+    }
+}
diff --git a/setup/src/Magento/Setup/Console/Command/DiCompileMultiTenantCommand.php b/setup/src/Magento/Setup/Console/Command/DiCompileMultiTenantCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..6f37a57c9c00c20a9935ce1f5f223ebcefff582d
--- /dev/null
+++ b/setup/src/Magento/Setup/Console/Command/DiCompileMultiTenantCommand.php
@@ -0,0 +1,362 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Setup\Console\Command;
+
+use Magento\Store\Model\StoreManager;
+use Magento\Setup\Model\ObjectManagerProvider;
+use Magento\Framework\App\ObjectManager;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Magento\Framework\Api\Code\Generator\Mapper;
+use Magento\Framework\Api\Code\Generator\SearchResults;
+use Magento\Framework\Autoload\AutoloaderRegistry;
+use Magento\Framework\Interception\Code\Generator\Interceptor;
+use Magento\Framework\ObjectManager\Code\Generator\Converter;
+use Magento\Framework\ObjectManager\Code\Generator\Factory;
+use Magento\Framework\ObjectManager\Code\Generator\Proxy;
+use Magento\Framework\ObjectManager\Code\Generator\Repository;
+use Magento\Framework\ObjectManager\Code\Generator\Persistor;
+use Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator;
+use Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGenerator;
+use Magento\Setup\Module\Di\Code\Scanner;
+use Magento\Setup\Module\Di\Compiler\Log\Log;
+use Magento\Setup\Module\Di\Compiler\Log\Writer;
+use Magento\Setup\Module\Di\Definition\Compressor;
+use Magento\Setup\Module\Di\Definition\Serializer\Igbinary;
+use Magento\Setup\Module\Di\Definition\Serializer\Standard;
+use \Magento\Framework\App\Filesystem\DirectoryList;
+
+/**
+ * Command to generate all non-existing proxies and factories, and pre-compile class definitions,
+ * inheritance information and plugin definitions
+ *
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
+class DiCompileMultiTenantCommand extends AbstractSetupCommand
+{
+    /**#@+
+     * Names of input options
+     */
+    const INPUT_KEY_SERIALIZER = 'serializer';
+    const INPUT_KEY_EXTRA_CLASSES_FILE = 'extra-classes-file';
+    const INPUT_KEY_GENERATION = 'generation';
+    const INPUT_KEY_DI= 'di';
+    const INPUT_KEY_EXCLUDE_PATTERN= 'exclude-pattern';
+    /**#@- */
+
+    /**
+     * Object Manager
+     *
+     * @var ObjectManager
+     */
+    private $objectManager;
+
+    /**
+     * Filesystem Directory List
+     *
+     * @var DirectoryList
+     */
+    private $directoryList;
+
+    /**
+     *
+     * @var array
+     */
+    private $entities;
+
+    /**
+     *
+     * @var array
+     */
+    private $files;
+
+    /**
+     *
+     * @var \Magento\Framework\Code\Generator
+     */
+    private $generator;
+
+    /**
+     *
+     * @var Log
+     */
+    private $log;
+
+    /**
+     * Constructor
+     *
+     * @param ObjectManagerProvider $objectManagerProvider
+     * @param DirectoryList $directoryList
+     */
+    public function __construct(ObjectManagerProvider $objectManagerProvider, DirectoryList $directoryList)
+    {
+        $this->objectManager = $objectManagerProvider->get();
+        $this->directoryList = $directoryList;
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $options = [
+            new InputOption(
+                self::INPUT_KEY_SERIALIZER,
+                null,
+                InputOption::VALUE_REQUIRED,
+                'Serializer function that should be used (serialize|igbinary) default: serialize'
+            ),
+            new InputOption(
+                self::INPUT_KEY_EXTRA_CLASSES_FILE,
+                null,
+                InputOption::VALUE_REQUIRED,
+                'Path to file with extra proxies and factories to generate'
+            ),
+            new InputOption(
+                self::INPUT_KEY_GENERATION,
+                null,
+                InputOption::VALUE_REQUIRED,
+                'Absolute path to generated classes, <magento_root>/var/generation by default'
+            ),
+            new InputOption(
+                self::INPUT_KEY_DI,
+                null,
+                InputOption::VALUE_REQUIRED,
+                'Absolute path to DI definitions directory, <magento_root>/var/di by default'
+            ),
+            new InputOption(
+                self::INPUT_KEY_EXCLUDE_PATTERN,
+                null,
+                InputOption::VALUE_REQUIRED,
+                'Allows to exclude Paths from compilation (default is #[\\\\/]m1[\\\\/]#i)'
+            ),
+        ];
+        $this->setName('setup:di:compile-multi-tenant')
+            ->setDescription(
+                'Generates all non-existing proxies and factories, and pre-compile class definitions, '
+                . 'inheritance information and plugin definitions'
+            )
+            ->setDefinition($options);
+        parent::configure();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $generationDir = $input->getOption(self::INPUT_KEY_GENERATION) ? $input->getOption(self::INPUT_KEY_GENERATION)
+            : $this->directoryList->getPath(DirectoryList::GENERATION);
+        $testExcludePatterns = [
+            "#^" . $this->directoryList->getPath(DirectoryList::MODULES) . "/[\\w]+/[\\w]+/Test#",
+            "#^" . $this->directoryList->getPath(DirectoryList::LIB_INTERNAL)
+            . "/[\\w]+/[\\w]+/([\\w]+/)?Test#",
+            "#^" . $this->directoryList->getPath(DirectoryList::SETUP) . "/[\\w]+/[\\w]+/Test#",
+            "#^" . $this->directoryList->getRoot() . "/dev/tools/Magento/Tools/[\\w]+/Test#"
+        ];
+        $fileExcludePatterns = $input->getOption('exclude-pattern') ?
+            [$input->getOption(self::INPUT_KEY_EXCLUDE_PATTERN)] : ['#[\\\\/]M1[\\\\/]#i'];
+        $fileExcludePatterns = array_merge($fileExcludePatterns, $testExcludePatterns);
+        /** @var Writer\Console logWriter Writer model for success messages */
+        $logWriter = new Writer\Console($output);
+        $this->log = new Log($logWriter, $logWriter);
+        AutoloaderRegistry::getAutoloader()->addPsr4('Magento\\', $generationDir . '/Magento/');
+        // 1 Code generation
+        $this->generateCode($generationDir, $fileExcludePatterns, $input);
+        // 2. Compilation
+        $this->compileCode($generationDir, $fileExcludePatterns, $input);
+        //Reporter
+        $this->log->report();
+        if (!$this->log->hasError()) {
+            $output->writeln(
+                '<info>On *nix systems, verify the Magento application has permissions to modify files '
+                . 'created by the compiler in the "var" directory. For instance, if you run the Magento application '
+                . 'using Apache, the owner of the files in the "var" directory should be the Apache user (example '
+                . 'command: "chown -R www-data:www-data <MAGENTO_ROOT>/var" where MAGENTO_ROOT is the Magento '
+                . 'root directory).</info>'
+            );
+        }
+    }
+
+    /**
+     * Generate Code
+     *
+     * @param string $generationDir
+     * @param array $fileExcludePatterns
+     * @param InputInterface $input
+     * @return void
+     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     * @SuppressWarnings(PHPMD.NPathComplexity)
+     */
+    public function generateCode($generationDir, $fileExcludePatterns, $input)
+    {
+        // 1.1 Code scan
+        $filePatterns = ['php' => '/.*\.php$/', 'di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/'];
+        $codeScanDir = $this->directoryList->getRoot() . '/app';
+        $directoryScanner = new Scanner\DirectoryScanner();
+        $this->files = $directoryScanner->scan($codeScanDir, $filePatterns, $fileExcludePatterns);
+        $this->files['additional'] = [$input->getOption(self::INPUT_KEY_EXTRA_CLASSES_FILE)];
+        $repositoryScanner = new Scanner\RepositoryScanner();
+        $repositories = $repositoryScanner->collectEntities($this->files['di']);
+        $scanner = new Scanner\CompositeScanner();
+        $scanner->addChild(new Scanner\PhpScanner($this->log), 'php');
+        $scanner->addChild(new Scanner\XmlScanner($this->log), 'di');
+        $scanner->addChild(new Scanner\ArrayScanner(), 'additional');
+        $this->entities = $scanner->collectEntities($this->files);
+        $interceptorScanner = new Scanner\XmlInterceptorScanner();
+        $this->entities['interceptors'] = $interceptorScanner->collectEntities($this->files['di']);
+        // 1.2 Generation of Factory and Additional Classes
+        $generatorIo = new \Magento\Framework\Code\Generator\Io(
+            new \Magento\Framework\Filesystem\Driver\File(),
+            $generationDir
+        );
+        $this->generator = new \Magento\Framework\Code\Generator(
+            $generatorIo,
+            [
+                Interceptor::ENTITY_TYPE => 'Magento\Framework\Interception\Code\Generator\Interceptor',
+                Proxy::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Proxy',
+                Factory::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Factory',
+                Mapper::ENTITY_TYPE => 'Magento\Framework\Api\Code\Generator\Mapper',
+                Persistor::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Persistor',
+                Repository::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Repository',
+                Converter::ENTITY_TYPE => 'Magento\Framework\ObjectManager\Code\Generator\Converter',
+                SearchResults::ENTITY_TYPE => 'Magento\Framework\Api\Code\Generator\SearchResults',
+                ExtensionAttributesInterfaceGenerator::ENTITY_TYPE =>
+                    'Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGenerator',
+                ExtensionAttributesGenerator::ENTITY_TYPE =>
+                    'Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator'
+            ]
+        );
+        /** Initialize object manager for code generation based on configs */
+        $this->generator->setObjectManager($this->objectManager);
+        $generatorAutoloader = new \Magento\Framework\Code\Generator\Autoloader($this->generator);
+        spl_autoload_register([$generatorAutoloader, 'load']);
+
+        foreach ($repositories as $entityName) {
+            switch ($this->generator->generateClass($entityName)) {
+                case \Magento\Framework\Code\Generator::GENERATION_SUCCESS:
+                    $this->log->add(Log::GENERATION_SUCCESS, $entityName);
+                    break;
+                case \Magento\Framework\Code\Generator::GENERATION_ERROR:
+                    $this->log->add(Log::GENERATION_ERROR, $entityName);
+                    break;
+                case \Magento\Framework\Code\Generator::GENERATION_SKIP:
+                default:
+                    //no log
+                    break;
+            }
+        }
+        foreach (['php', 'additional'] as $type) {
+            sort($this->entities[$type]);
+            foreach ($this->entities[$type] as $entityName) {
+                switch ($this->generator->generateClass($entityName)) {
+                    case \Magento\Framework\Code\Generator::GENERATION_SUCCESS:
+                        $this->log->add(Log::GENERATION_SUCCESS, $entityName);
+                        break;
+                    case \Magento\Framework\Code\Generator::GENERATION_ERROR:
+                        $this->log->add(Log::GENERATION_ERROR, $entityName);
+                        break;
+                    case \Magento\Framework\Code\Generator::GENERATION_SKIP:
+                    default:
+                        //no log
+                        break;
+                }
+            }
+        }
+    }
+
+    /**
+     * Compile Code
+     *
+     * @param string $generationDir
+     * @param array $fileExcludePatterns
+     * @param InputInterface $input
+     * @return void
+     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     * @SuppressWarnings(PHPMD.NPathComplexity)
+     */
+    private function compileCode($generationDir, $fileExcludePatterns, $input)
+    {
+        $diDir = $input->getOption(self::INPUT_KEY_DI) ? $input->getOption(self::INPUT_KEY_DI) :
+            $this->directoryList->getPath(DirectoryList::DI);
+        $relationsFile = $diDir . '/relations.ser';
+        $pluginDefFile = $diDir . '/plugins.ser';
+        $compilationDirs = [
+            $this->directoryList->getPath(DirectoryList::MODULES),
+            $this->directoryList->getPath(DirectoryList::LIB_INTERNAL) . '/Magento',
+            $this->directoryList->getPath(DirectoryList::SETUP) . '/Magento/Setup/Module',
+            $this->directoryList->getRoot() . '/dev/tools/Magento/Tools',
+        ];
+        $serializer = $input->getOption(self::INPUT_KEY_SERIALIZER) == Igbinary::NAME ? new Igbinary() : new Standard();
+        // 2.1 Code scan
+        $validator = new \Magento\Framework\Code\Validator();
+        $validator->add(new \Magento\Framework\Code\Validator\ConstructorIntegrity());
+        $validator->add(new \Magento\Framework\Code\Validator\ContextAggregation());
+        $classesScanner = new \Magento\Setup\Module\Di\Code\Reader\ClassesScanner();
+        $classesScanner->addExcludePatterns($fileExcludePatterns);
+        $directoryInstancesNamesList = new \Magento\Setup\Module\Di\Code\Reader\Decorator\Directory(
+            $this->log,
+            new \Magento\Framework\Code\Reader\ClassReader(),
+            $classesScanner,
+            $validator,
+            $generationDir
+        );
+        foreach ($compilationDirs as $path) {
+            if (is_readable($path)) {
+                $directoryInstancesNamesList->getList($path);
+            }
+        }
+        $inheritanceScanner = new Scanner\InheritanceInterceptorScanner();
+        $this->entities['interceptors'] = $inheritanceScanner->collectEntities(
+            get_declared_classes(),
+            $this->entities['interceptors']
+        );
+        // 2.1.1 Generation of Proxy and Interceptor Classes
+        foreach (['interceptors', 'di'] as $type) {
+            foreach ($this->entities[$type] as $entityName) {
+                switch ($this->generator->generateClass($entityName)) {
+                    case \Magento\Framework\Code\Generator::GENERATION_SUCCESS:
+                        $this->log->add(Log::GENERATION_SUCCESS, $entityName);
+                        break;
+                    case \Magento\Framework\Code\Generator::GENERATION_ERROR:
+                        $this->log->add(Log::GENERATION_ERROR, $entityName);
+                        break;
+                    case \Magento\Framework\Code\Generator::GENERATION_SKIP:
+                    default:
+                        //no log
+                        break;
+                }
+            }
+        }
+        //2.1.2 Compile relations for Proxy/Interceptor classes
+        $directoryInstancesNamesList->getList($generationDir);
+        $relations = $directoryInstancesNamesList->getRelations();
+        // 2.2 Compression
+        if (!file_exists(dirname($relationsFile))) {
+            mkdir(dirname($relationsFile), 0777, true);
+        }
+        $relations = array_filter($relations);
+        file_put_contents($relationsFile, $serializer->serialize($relations));
+        // 3. Plugin Definition Compilation
+        $pluginScanner = new Scanner\CompositeScanner();
+        $pluginScanner->addChild(new Scanner\PluginScanner(), 'di');
+        $pluginDefinitions = [];
+        $pluginList = $pluginScanner->collectEntities($this->files);
+        $pluginDefinitionList = new \Magento\Framework\Interception\Definition\Runtime();
+        foreach ($pluginList as $type => $entityList) {
+            foreach ($entityList as $entity) {
+                $pluginDefinitions[ltrim($entity, '\\')] = $pluginDefinitionList->getMethodList($entity);
+            }
+        }
+        $outputContent = $serializer->serialize($pluginDefinitions);
+        if (!file_exists(dirname($pluginDefFile))) {
+            mkdir(dirname($pluginDefFile), 0777, true);
+        }
+        file_put_contents($pluginDefFile, $outputContent);
+    }
+}
diff --git a/setup/src/Magento/Setup/Console/Command/I18nCollectPhrasesCommand.php b/setup/src/Magento/Setup/Console/Command/I18nCollectPhrasesCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..afb277dab8062d09326f3f6a0f911eb91162a761
--- /dev/null
+++ b/setup/src/Magento/Setup/Console/Command/I18nCollectPhrasesCommand.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Setup\Console\Command;
+
+use Magento\Setup\Module\I18n\ServiceLocator;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Command for i18n dictionary generation
+ */
+class I18nCollectPhrasesCommand extends Command
+{
+    /**#@+
+     * Keys and shortcuts for input arguments and options
+     */
+    const INPUT_KEY_DIRECTORY = 'directory';
+    const INPUT_KEY_OUTPUT = 'output';
+    const SHORTCUT_KEY_OUTPUT = 'o';
+    const INPUT_KEY_MAGENTO = 'magento';
+    const SHORTCUT_KEY_MAGENTO = 'm';
+    /**#@- */
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('i18n:collect-phrases')
+            ->setDescription('Discovers phrases in the codebase');
+        $this->setDefinition([
+            new InputArgument(self::INPUT_KEY_DIRECTORY, InputArgument::REQUIRED, 'Directory path to parse'),
+            new InputOption(
+                self::INPUT_KEY_OUTPUT,
+                self::SHORTCUT_KEY_OUTPUT,
+                InputOption::VALUE_REQUIRED,
+                'Path (including filename) to an output file. With no file specified, defaults to stdout.'
+            ),
+            new InputOption(
+                self::INPUT_KEY_MAGENTO,
+                self::SHORTCUT_KEY_MAGENTO,
+                InputOption::VALUE_NONE,
+                'Use the --magento parameter to specify the directory is the Magento root directory.' .
+                ' Omit the parameter if the directory is not the Magento root directory.'
+            ),
+        ]);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $generator = ServiceLocator::getDictionaryGenerator();
+        $generator->generate(
+            $input->getArgument(self::INPUT_KEY_DIRECTORY),
+            $input->getOption(self::INPUT_KEY_OUTPUT),
+            $input->getOption(self::INPUT_KEY_MAGENTO)
+        );
+        $output->writeln('<info>Dictionary successfully processed.</info>');
+    }
+}
diff --git a/setup/src/Magento/Setup/Console/Command/I18nPackCommand.php b/setup/src/Magento/Setup/Console/Command/I18nPackCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..82ff951a89e0d34ec7317bd854237aaead5b7412
--- /dev/null
+++ b/setup/src/Magento/Setup/Console/Command/I18nPackCommand.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Setup\Console\Command;
+
+use Magento\Setup\Module\I18n\ServiceLocator;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Command for i18n language packaging
+ */
+class I18nPackCommand extends Command
+{
+    /**#@+
+     * Keys and shortcuts for input arguments and options
+     */
+    const INPUT_KEY_SOURCE = 'source';
+    const INPUT_KEY_PACK = 'pack';
+    const INPUT_KEY_LOCALE = 'locale';
+    const INPUT_KEY_MODE = 'mode';
+    const INPUT_KEY_ALLOW_DUPLICATES = 'allow-duplicates';
+    /**#@-*/
+
+    /**
+     * 'replace' mode value
+     */
+    const MODE_REPLACE = 'replace';
+
+    /**
+     * 'merge' mode value
+     */
+    const MODE_MERGE = 'merge';
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('i18n:pack')
+            ->setDescription('Saves language package');
+        $this->setDefinition([
+            new InputArgument(
+                self::INPUT_KEY_SOURCE,
+                InputArgument::REQUIRED,
+                'Path to source dictionary file with translations'
+            ),
+            new InputArgument(
+                self::INPUT_KEY_PACK,
+                InputArgument::REQUIRED,
+                'Path to language package'
+            ),
+            new InputArgument(
+                self::INPUT_KEY_LOCALE,
+                InputArgument::REQUIRED,
+                'Target locale for dictionary, for example "de_DE"'
+            ),
+            new InputOption(
+                self::INPUT_KEY_MODE,
+                'm',
+                InputOption::VALUE_REQUIRED,
+                'Save mode for dictionary' . PHP_EOL . '- "replace" - replace language pack by new one' . PHP_EOL .
+                '- "merge" - merge language packages, by default "replace"',
+                self::MODE_REPLACE
+            ),
+            new InputOption(
+                self::INPUT_KEY_ALLOW_DUPLICATES,
+                'd',
+                InputOption::VALUE_NONE,
+                'Use the --allow-duplicates parameter to allow saving duplicates of translate.' .
+                ' Otherwise omit the parameter.'
+            ),
+        ]);
+    }
+
+    /**
+     * {@inheritdoc}
+     * @throws \InvalidArgumentException
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $generator = ServiceLocator::getPackGenerator();
+        $mode = $input->getOption(self::INPUT_KEY_MODE);
+        if ($mode !== self::MODE_MERGE && $mode !== self::MODE_REPLACE) {
+            throw new \InvalidArgumentException("Possible values for 'mode' option are 'replace' and 'merge'");
+        }
+        $locale = $input->getArgument(self::INPUT_KEY_LOCALE);
+        $generator->generate(
+            $input->getArgument(self::INPUT_KEY_SOURCE),
+            $input->getArgument(self::INPUT_KEY_PACK),
+            $locale,
+            $input->getOption(self::INPUT_KEY_MODE),
+            $input->getOption(self::INPUT_KEY_ALLOW_DUPLICATES)
+        );
+        $output->writeln("<info>Successfully saved $locale language package.</info>");
+    }
+}
diff --git a/setup/src/Magento/Setup/Console/CommandList.php b/setup/src/Magento/Setup/Console/CommandList.php
index a75ed3b3226553a09390a93911b076192422c820..0cb36548c556e62d72ec7bce44d1ecf130ed2a0c 100644
--- a/setup/src/Magento/Setup/Console/CommandList.php
+++ b/setup/src/Magento/Setup/Console/CommandList.php
@@ -43,6 +43,11 @@ class CommandList
             'Magento\Setup\Console\Command\DbDataUpgradeCommand',
             'Magento\Setup\Console\Command\DbSchemaUpgradeCommand',
             'Magento\Setup\Console\Command\DbStatusCommand',
+            'Magento\Setup\Console\Command\DeployStaticContentCommand',
+            'Magento\Setup\Console\Command\DiCompileCommand',
+            'Magento\Setup\Console\Command\DiCompileMultiTenantCommand',
+            'Magento\Setup\Console\Command\I18nCollectPhrasesCommand',
+            'Magento\Setup\Console\Command\I18nPackCommand',
             'Magento\Setup\Console\Command\InfoCurrencyListCommand',
             'Magento\Setup\Console\Command\InfoLanguageListCommand',
             'Magento\Setup\Console\Command\InfoTimezoneListCommand',
diff --git a/setup/src/Magento/Setup/Controller/Environment.php b/setup/src/Magento/Setup/Controller/Environment.php
index 066c58d914c86617da39fb79d720f74fb5902835..3d323043d0ca0e34a2a45337bd1d7242fafcf49e 100644
--- a/setup/src/Magento/Setup/Controller/Environment.php
+++ b/setup/src/Magento/Setup/Controller/Environment.php
@@ -88,23 +88,28 @@ class Environment extends AbstractActionController
     }
 
     /**
-     * Checks if PHP version >= 5.6.0 and always_populate_raw_post_data is set
+     * Checks PHP settings
      *
      * @return JsonModel
      */
-    public function phpRawpostAction()
+    public function phpSettingsAction()
     {
-        $iniSetting = ini_get('always_populate_raw_post_data');
         $responseType = ResponseTypeInterface::RESPONSE_TYPE_SUCCESS;
-        if (version_compare(PHP_VERSION, '5.6.0') >= 0 && (int)$iniSetting > -1) {
-            $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR;
+
+        $settings = array_merge(
+            $this->checkRawPost(),
+            $this->checkXDebugNestedLevel()
+        );
+
+        foreach ($settings as $setting) {
+            if ($setting['error']) {
+                $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR;
+            }
         }
+
         $data = [
             'responseType' => $responseType,
-            'data' => [
-                'version' => PHP_VERSION,
-                'ini' => $iniSetting
-            ]
+            'data' => $settings
         ];
 
         return new JsonModel($data);
@@ -170,4 +175,74 @@ class Environment extends AbstractActionController
 
         return new JsonModel($data);
     }
+
+    /**
+     * Checks if PHP version >= 5.6.0 and always_populate_raw_post_data is set
+     *
+     * @return array
+     */
+    private function checkRawPost()
+    {
+        $data = [];
+        $error = false;
+        $iniSetting = ini_get('always_populate_raw_post_data');
+
+        if (version_compare(PHP_VERSION, '5.6.0') >= 0 && (int)$iniSetting > -1) {
+            $error = true;
+        }
+
+        $message = sprintf(
+            'Your PHP Version is %s, but always_populate_raw_post_data = %d.
+            $HTTP_RAW_POST_DATA is deprecated from PHP 5.6 onwards and will stop the installer from running.
+            Please open your php.ini file and set always_populate_raw_post_data to -1.
+            If you need more help please call your hosting provider.
+            ',
+            PHP_VERSION,
+            ini_get('always_populate_raw_post_data')
+        );
+
+        $data['rawpost'] = [
+            'message' => $message,
+            'helpUrl' => 'http://php.net/manual/en/ini.core.php#ini.always-populate-settings-data',
+            'error' => $error
+        ];
+
+        return $data;
+    }
+
+    /**
+     * Checks if xdebug.max_nesting_level is set 200 or more
+     * @return array
+     */
+    private function checkXDebugNestedLevel()
+    {
+        $data = [];
+        $error = false;
+
+        $currentExtensions = $this->phpInformation->getCurrent();
+        if (in_array('xdebug', $currentExtensions)) {
+
+            $currentXDebugNestingLevel = intval(ini_get('xdebug.max_nesting_level'));
+            $minimumRequiredXDebugNestedLevel = $this->phpInformation->getRequiredMinimumXDebugNestedLevel();
+
+            if ($minimumRequiredXDebugNestedLevel > $currentXDebugNestingLevel) {
+                $error = true;
+            }
+
+            $message = sprintf(
+                'Your current setting of xdebug.max_nesting_level=%d.
+                 Magento 2 requires it to be set to %d or more.
+                 Edit your config, restart web server, and try again.',
+                $currentXDebugNestingLevel,
+                $minimumRequiredXDebugNestedLevel
+            );
+
+            $data['xdebug_max_nesting_level'] = [
+                'message' => $message,
+                'error' => $error
+            ];
+        }
+
+        return $data;
+    }
 }
diff --git a/dev/tools/Magento/Tools/View/Deployer.php b/setup/src/Magento/Setup/Model/Deployer.php
similarity index 83%
rename from dev/tools/Magento/Tools/View/Deployer.php
rename to setup/src/Magento/Setup/Model/Deployer.php
index 1549724017780a260891f4f386faf09962180a5d..96883fa8c0ee65bc5baf8703153b3073aebcf128 100644
--- a/dev/tools/Magento/Tools/View/Deployer.php
+++ b/setup/src/Magento/Setup/Model/Deployer.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\View;
+namespace Magento\Setup\Model;
 
 use Magento\Framework\App\ObjectManagerFactory;
 use Magento\Framework\App\View\Deployment\Version;
@@ -12,6 +12,7 @@ use Magento\Framework\App\View\Asset\Publisher;
 use Magento\Framework\App\Utility\Files;
 use Magento\Framework\ObjectManagerInterface;
 use Magento\Framework\Translate\Js\Config as JsTranslationConfig;
+use Symfony\Component\Console\Output\OutputInterface;
 
 /**
  * A service for deploying Magento static view files for production mode
@@ -26,8 +27,8 @@ class Deployer
     /** @var ObjectManagerFactory */
     private $omFactory;
 
-    /** @var Deployer\Log */
-    private $logger;
+    /** @var OutputInterface */
+    private $output;
 
     /** @var Version\StorageInterface */
     private $versionStorage;
@@ -71,7 +72,7 @@ class Deployer
 
     /**
      * @param Files $filesUtil
-     * @param Deployer\Log $logger
+     * @param OutputInterface $output
      * @param Version\StorageInterface $versionStorage
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Framework\View\Asset\MinifyService $minifyService
@@ -80,7 +81,7 @@ class Deployer
      */
     public function __construct(
         Files $filesUtil,
-        Deployer\Log $logger,
+        OutputInterface $output,
         Version\StorageInterface $versionStorage,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\View\Asset\MinifyService $minifyService,
@@ -88,7 +89,7 @@ class Deployer
         $isDryRun = false
     ) {
         $this->filesUtil = $filesUtil;
-        $this->logger = $logger;
+        $this->output = $output;
         $this->versionStorage = $versionStorage;
         $this->dateTime = $dateTime;
         $this->isDryRun = $isDryRun;
@@ -103,15 +104,16 @@ class Deployer
      * @param array $locales
      * @return void
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     * @SuppressWarnings(PHPMD.NPathComplexity)
      */
     public function deploy(ObjectManagerFactory $omFactory, array $locales)
     {
         $this->omFactory = $omFactory;
         if ($this->isDryRun) {
-            $this->logger->logMessage('Dry run. Nothing will be recorded to the target directory.');
+            $this->output->writeln('Dry run. Nothing will be recorded to the target directory.');
         }
         $langList = implode(', ', $locales);
-        $this->logger->logMessage("Requested languages: {$langList}");
+        $this->output->writeln("Requested languages: {$langList}");
         $libFiles = $this->filesUtil->getStaticLibraryFiles();
         list($areas, $appFiles) = $this->collectAppFiles($locales);
         foreach ($areas as $area => $themes) {
@@ -119,7 +121,7 @@ class Deployer
             foreach ($locales as $locale) {
                 $this->emulateApplicationLocale($locale, $area);
                 foreach ($themes as $themePath) {
-                    $this->logger->logMessage("=== {$area} -> {$themePath} -> {$locale} ===");
+                    $this->output->writeln("=== {$area} -> {$themePath} -> {$locale} ===");
                     $this->count = 0;
                     $this->errorCount = 0;
                     foreach ($appFiles as $info) {
@@ -139,20 +141,24 @@ class Deployer
                         );
                     }
                     $this->bundleManager->flush();
-                    $this->logger->logMessage("\nSuccessful: {$this->count} files; errors: {$this->errorCount}\n---\n");
+                    $this->output->writeln("\nSuccessful: {$this->count} files; errors: {$this->errorCount}\n---\n");
                 }
             }
         }
-        $this->logger->logMessage("=== Minify templates ===");
+        $this->output->writeln("=== Minify templates ===");
         $this->count = 0;
         foreach ($this->filesUtil->getPhtmlFiles(false, false) as $template) {
             $this->htmlMinifier->minify($template);
-            $this->logger->logDebug($template . " minified\n", '.');
+            if ($this->output->isVerbose()) {
+                $this->output->writeln($template . " minified\n");
+            } else {
+                $this->output->write('.');
+            }
             $this->count++;
         }
-        $this->logger->logMessage("\nSuccessful: {$this->count} files modified\n---\n");
+        $this->output->writeln("\nSuccessful: {$this->count} files modified\n---\n");
         $version = (new \DateTime())->getTimestamp();
-        $this->logger->logMessage("New version of deployed files: {$version}");
+        $this->output->writeln("New version of deployed files: {$version}");
         if (!$this->isDryRun) {
             $this->versionStorage->save($version);
         }
@@ -185,7 +191,7 @@ class Deployer
         }
         if (!empty($locales)) {
             $langList = implode(', ', $locales);
-            $this->logger->logMessage(
+            $this->output->writeln(
                 "WARNING: there were files for the following languages detected in the file system: {$langList}."
                 . ' These languages were not requested, so the files will not be populated.'
             );
@@ -243,6 +249,7 @@ class Deployer
      * @param string $locale
      * @param string $module
      * @return void
+     * @SuppressWarnings(PHPMD.NPathComplexity)
      */
     private function deployFile($filePath, $area, $themePath, $locale, $module)
     {
@@ -254,14 +261,20 @@ class Deployer
         if ($module) {
             $logMessage .= ", module '$module'";
         }
-        $this->logger->logDebug($logMessage);
+
+        $this->verboseLog($logMessage);
+
         try {
             $asset = $this->assetRepo->createAsset(
                 $requestedPath,
                 ['area' => $area, 'theme' => $themePath, 'locale' => $locale, 'module' => $module]
             );
             $asset = $this->minifyService->getAssets([$asset], true)[0];
-            $this->logger->logDebug("\tDeploying the file to '{$asset->getPath()}'", '.');
+            if ($this->output->isVerbose()) {
+                $this->output->writeln("\tDeploying the file to '{$asset->getPath()}'");
+            } else {
+                $this->output->write('.');
+            }
             if ($this->isDryRun) {
                 $asset->getContent();
             } else {
@@ -271,19 +284,32 @@ class Deployer
             $this->count++;
         } catch (\Magento\Framework\View\Asset\File\NotFoundException $e) {
             // File was not found by Fallback (possibly because it's wrong context for it) - there is nothing to publish
-            $this->logger->logDebug(
+            $this->verboseLog(
                 "\tNotice: Could not find file '$filePath'. This file may not be relevant for the theme or area."
             );
         } catch (\Less_Exception_Compiler $e) {
-            $this->logger->logDebug(
+            $this->verboseLog(
                 "\tNotice: Could not parse LESS file '$filePath'. "
                 . "This may indicate that the file is incomplete, but this is acceptable. "
                 . "The file '$filePath' will be combined with another LESS file."
             );
         } catch (\Exception $e) {
-            $this->logger->logError($e->getMessage() . " ($logMessage)");
-            $this->logger->logDebug((string)$e);
+            $this->output->writeln($e->getMessage() . " ($logMessage)");
+            $this->verboseLog((string)$e);
             $this->errorCount++;
         }
     }
+
+    /**
+     * Verbose log
+     *
+     * @param string $message
+     * @return void
+     */
+    private function verboseLog($message)
+    {
+        if ($this->output->isVerbose()) {
+            $this->output->writeln($message);
+        }
+    }
 }
diff --git a/setup/src/Magento/Setup/Model/ObjectManagerProvider.php b/setup/src/Magento/Setup/Model/ObjectManagerProvider.php
index d887f0031fe67df47e8e9208a838c1ba5f8ee940..2c54f37be72ffbe69c40cc8af986abb270c5c274 100644
--- a/setup/src/Magento/Setup/Model/ObjectManagerProvider.php
+++ b/setup/src/Magento/Setup/Model/ObjectManagerProvider.php
@@ -70,4 +70,18 @@ class ObjectManagerProvider
     {
         $this->objectManager = null;
     }
+    
+    /**
+     * Returns ObjectManagerFactory
+     *
+     * @param array $initParams
+     * @return \Magento\Framework\App\ObjectManagerFactory
+     */
+    public function getObjectManagerFactory($initParams = [])
+    {
+        return Bootstrap::createObjectManagerFactory(
+            BP,
+            $initParams
+        );
+    }
 }
diff --git a/setup/src/Magento/Setup/Model/PhpInformation.php b/setup/src/Magento/Setup/Model/PhpInformation.php
index fcb89e65f60a15141168f36ee3a4ad0c39f43b17..f6786c8b2b525bb7feae54db994f633a18259141 100644
--- a/setup/src/Magento/Setup/Model/PhpInformation.php
+++ b/setup/src/Magento/Setup/Model/PhpInformation.php
@@ -11,6 +11,12 @@ use Magento\Framework\Filesystem;
 
 class PhpInformation
 {
+
+    /**
+     * Allowed XDebug nested level
+     */
+    const XDEBUG_NESTED_LEVEL = 200;
+
     /**
      * List of required extensions
      *
@@ -59,6 +65,15 @@ class PhpInformation
         }
     }
 
+    /**
+     * Returns minimum required XDebug nested level
+     * @return int
+     */
+    public function getRequiredMinimumXDebugNestedLevel()
+    {
+        return self::XDEBUG_NESTED_LEVEL;
+    }
+
     /**
      * Retrieve list of required extensions
      *
diff --git a/dev/tools/Magento/Tools/Di/App/Task/Manager.php b/setup/src/Magento/Setup/Module/Di/App/Task/Manager.php
similarity index 96%
rename from dev/tools/Magento/Tools/Di/App/Task/Manager.php
rename to setup/src/Magento/Setup/Module/Di/App/Task/Manager.php
index c9c0d0d048b7ebc336065fdfc78275fd212b99f7..7e4171c0873d2bef4bbd23ad558980c051e55622 100644
--- a/dev/tools/Magento/Tools/Di/App/Task/Manager.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Manager.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\App\Task;
+namespace Magento\Setup\Module\Di\App\Task;
 
 class Manager
 {
diff --git a/dev/tools/Magento/Tools/Di/App/Task/Operation/ApplicationCodeGenerator.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php
similarity index 83%
rename from dev/tools/Magento/Tools/Di/App/Task/Operation/ApplicationCodeGenerator.php
rename to setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php
index 21b24e52c91a028629b5e2973b642836e9469e13..1228703ab08fd6e99af5e1c5e18715a4d3783e91 100644
--- a/dev/tools/Magento/Tools/Di/App/Task/Operation/ApplicationCodeGenerator.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\App\Task\Operation;
+namespace Magento\Setup\Module\Di\App\Task\Operation;
 
-use Magento\Tools\Di\App\Task\OperationInterface;
-use Magento\Tools\Di\Code\Reader\ClassesScanner;
+use Magento\Setup\Module\Di\App\Task\OperationInterface;
+use Magento\Setup\Module\Di\Code\Reader\ClassesScanner;
 
 class ApplicationCodeGenerator implements OperationInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/App/Task/Operation/Area.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/Area.php
similarity index 79%
rename from dev/tools/Magento/Tools/Di/App/Task/Operation/Area.php
rename to setup/src/Magento/Setup/Module/Di/App/Task/Operation/Area.php
index c9a8089251b42be57f6003f8ea802ee4362612cb..f129e56dc8d8c67afa7d971393fb60d987585df5 100644
--- a/dev/tools/Magento/Tools/Di/App/Task/Operation/Area.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/Area.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\App\Task\Operation;
+namespace Magento\Setup\Module\Di\App\Task\Operation;
 
-use Magento\Tools\Di\App\Task\OperationInterface;
+use Magento\Setup\Module\Di\App\Task\OperationInterface;
 use Magento\Framework\App;
-use Magento\Tools\Di\Compiler\Config;
-use Magento\Tools\Di\Definition\Collection as DefinitionsCollection;
+use Magento\Setup\Module\Di\Compiler\Config;
+use Magento\Setup\Module\Di\Definition\Collection as DefinitionsCollection;
 
 class Area implements OperationInterface
 {
@@ -18,7 +18,7 @@ class Area implements OperationInterface
     private $areaList;
 
     /**
-     * @var \Magento\Tools\Di\Code\Reader\Decorator\Area
+     * @var \Magento\Setup\Module\Di\Code\Reader\Decorator\Area
      */
     private $areaInstancesNamesList;
 
@@ -38,21 +38,21 @@ class Area implements OperationInterface
     private $data = [];
 
     /**
-     * @var \Magento\Tools\Di\Compiler\Config\ModificationChain
+     * @var \Magento\Setup\Module\Di\Compiler\Config\ModificationChain
      */
     private $modificationChain;
 
     /**
      * @param App\AreaList $areaList
-     * @param \Magento\Tools\Di\Code\Reader\Decorator\Area $areaInstancesNamesList
+     * @param \Magento\Setup\Module\Di\Code\Reader\Decorator\Area $areaInstancesNamesList
      * @param Config\Reader $configReader
      * @param Config\WriterInterface $configWriter
-     * @param \Magento\Tools\Di\Compiler\Config\ModificationChain $modificationChain
+     * @param \Magento\Setup\Module\Di\Compiler\Config\ModificationChain $modificationChain
      * @param array $data
      */
     public function __construct(
         App\AreaList $areaList,
-        \Magento\Tools\Di\Code\Reader\Decorator\Area $areaInstancesNamesList,
+        \Magento\Setup\Module\Di\Code\Reader\Decorator\Area $areaInstancesNamesList,
         Config\Reader $configReader,
         Config\WriterInterface $configWriter,
         Config\ModificationChain $modificationChain,
diff --git a/dev/tools/Magento/Tools/Di/App/Task/Operation/Interception.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/Interception.php
similarity index 86%
rename from dev/tools/Magento/Tools/Di/App/Task/Operation/Interception.php
rename to setup/src/Magento/Setup/Module/Di/App/Task/Operation/Interception.php
index f6cf82e11a1a09f2b31e82e42a6014b058d0bc88..6d5d9ae3502a806f22bb4c58e04ed2105b2755aa 100644
--- a/dev/tools/Magento/Tools/Di/App/Task/Operation/Interception.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/Interception.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\App\Task\Operation;
+namespace Magento\Setup\Module\Di\App\Task\Operation;
 
-use Magento\Tools\Di\App\Task\OperationInterface;
-use Magento\Tools\Di\Code\Generator\InterceptionConfigurationBuilder;
+use Magento\Setup\Module\Di\App\Task\OperationInterface;
+use Magento\Setup\Module\Di\Code\Generator\InterceptionConfigurationBuilder;
 use Magento\Framework\Interception\Code\Generator\Interceptor;
 use Magento\Framework\App;
-use Magento\Tools\Di\Code\GeneratorFactory;
-use Magento\Tools\Di\Code\Reader\ClassesScanner;
+use Magento\Setup\Module\Di\Code\GeneratorFactory;
+use Magento\Setup\Module\Di\Code\Reader\ClassesScanner;
 
 class Interception implements OperationInterface
 {
@@ -87,7 +87,7 @@ class Interception implements OperationInterface
             [
                 'ioObject' => $generatorIo,
                 'generatedEntities' => [
-                    Interceptor::ENTITY_TYPE => 'Magento\Tools\Di\Code\Generator\Interceptor',
+                    Interceptor::ENTITY_TYPE => 'Magento\Setup\Module\Di\Code\Generator\Interceptor',
                 ]
             ]
         );
diff --git a/dev/tools/Magento/Tools/Di/App/Task/Operation/InterceptionCache.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/InterceptionCache.php
similarity index 76%
rename from dev/tools/Magento/Tools/Di/App/Task/Operation/InterceptionCache.php
rename to setup/src/Magento/Setup/Module/Di/App/Task/Operation/InterceptionCache.php
index 31180fc27d701d9ca0730943c414fc09878e1dbc..b37f329ebfc78a57a6ce41b0e63358a7b04c411d 100644
--- a/dev/tools/Magento/Tools/Di/App/Task/Operation/InterceptionCache.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/InterceptionCache.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\App\Task\Operation;
+namespace Magento\Setup\Module\Di\App\Task\Operation;
 
-use Magento\Tools\Di\App\Task\OperationInterface;
+use Magento\Setup\Module\Di\App\Task\OperationInterface;
 
 class InterceptionCache implements OperationInterface
 {
@@ -20,18 +20,18 @@ class InterceptionCache implements OperationInterface
     private $configInterface;
 
     /**
-     * @var \Magento\Tools\Di\Code\Reader\Decorator\Interceptions
+     * @var \Magento\Setup\Module\Di\Code\Reader\Decorator\Interceptions
      */
     private $interceptionsInstancesNamesList;
 
     /**
      * @param \Magento\Framework\Interception\Config\Config $configInterface
-     * @param \Magento\Tools\Di\Code\Reader\Decorator\Interceptions $interceptionsInstancesNamesList
+     * @param \Magento\Setup\Module\Di\Code\Reader\Decorator\Interceptions $interceptionsInstancesNamesList
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Interception\Config\Config $configInterface,
-        \Magento\Tools\Di\Code\Reader\Decorator\Interceptions $interceptionsInstancesNamesList,
+        \Magento\Setup\Module\Di\Code\Reader\Decorator\Interceptions $interceptionsInstancesNamesList,
         array $data = []
     ) {
         $this->configInterface = $configInterface;
diff --git a/dev/tools/Magento/Tools/Di/App/Task/Operation/RepositoryGenerator.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php
similarity index 89%
rename from dev/tools/Magento/Tools/Di/App/Task/Operation/RepositoryGenerator.php
rename to setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php
index 20d25b65dfad84be98b36c6bcd245230b0eb4613..41e9e80e5fe4e04628af960d4bf2b25f1eb89936 100644
--- a/dev/tools/Magento/Tools/Di/App/Task/Operation/RepositoryGenerator.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php
@@ -4,11 +4,11 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\App\Task\Operation;
+namespace Magento\Setup\Module\Di\App\Task\Operation;
 
-use Magento\Tools\Di\App\Task\OperationInterface;
-use Magento\Tools\Di\Code\Scanner;
-use Magento\Tools\Di\Code\Reader\ClassesScanner;
+use Magento\Setup\Module\Di\App\Task\OperationInterface;
+use Magento\Setup\Module\Di\Code\Scanner;
+use Magento\Setup\Module\Di\Code\Reader\ClassesScanner;
 
 class RepositoryGenerator implements OperationInterface
 {
@@ -63,9 +63,8 @@ class RepositoryGenerator implements OperationInterface
         }
 
         $this->classesScanner->getList($this->data['path']);
-
-        $files = $this->directoryScanner->scan($this->data['path'], $this->data['filePatterns']);
         $this->repositoryScanner->setUseAutoload(false);
+        $files = $this->directoryScanner->scan($this->data['path'], $this->data['filePatterns']);
         $repositories = $this->repositoryScanner->collectEntities($files['di']);
         foreach ($repositories as $entityName) {
             class_exists($entityName);
diff --git a/dev/tools/Magento/Tools/Di/App/Task/OperationException.php b/setup/src/Magento/Setup/Module/Di/App/Task/OperationException.php
similarity index 84%
rename from dev/tools/Magento/Tools/Di/App/Task/OperationException.php
rename to setup/src/Magento/Setup/Module/Di/App/Task/OperationException.php
index 5896bf352ee702a5fe75900d65b46806866e7a79..1d36fd456cb8d37869bfa830f47c7004c0034611 100644
--- a/dev/tools/Magento/Tools/Di/App/Task/OperationException.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/OperationException.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\App\Task;
+namespace Magento\Setup\Module\Di\App\Task;
 
 class OperationException extends \Exception
 {
diff --git a/dev/tools/Magento/Tools/Di/App/Task/OperationFactory.php b/setup/src/Magento/Setup/Module/Di/App/Task/OperationFactory.php
similarity index 65%
rename from dev/tools/Magento/Tools/Di/App/Task/OperationFactory.php
rename to setup/src/Magento/Setup/Module/Di/App/Task/OperationFactory.php
index 94fc7702689755f8e9d7477df0cf72eba40739e3..a2505bad47a0ed289a2040e1a11ec9f401319d4b 100644
--- a/dev/tools/Magento/Tools/Di/App/Task/OperationFactory.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/OperationFactory.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\App\Task;
+namespace Magento\Setup\Module\Di\App\Task;
 
 class OperationFactory
 {
@@ -43,19 +43,19 @@ class OperationFactory
      * @var array
      */
     private $operationsDefinitions = [
-        self::AREA_CONFIG_GENERATOR => 'Magento\Tools\Di\App\Task\Operation\Area',
-        self::APPLICATION_CODE_GENERATOR => 'Magento\Tools\Di\App\Task\Operation\ApplicationCodeGenerator',
-        self::INTERCEPTION => 'Magento\Tools\Di\App\Task\Operation\Interception',
-        self::INTERCEPTION_CACHE => 'Magento\Tools\Di\App\Task\Operation\InterceptionCache',
-        self::REPOSITORY_GENERATOR => 'Magento\Tools\Di\App\Task\Operation\RepositoryGenerator'
+        self::AREA_CONFIG_GENERATOR => 'Magento\Setup\Module\Di\App\Task\Operation\Area',
+        self::APPLICATION_CODE_GENERATOR => 'Magento\Setup\Module\Di\App\Task\Operation\ApplicationCodeGenerator',
+        self::INTERCEPTION => 'Magento\Setup\Module\Di\App\Task\Operation\Interception',
+        self::INTERCEPTION_CACHE => 'Magento\Setup\Module\Di\App\Task\Operation\InterceptionCache',
+        self::REPOSITORY_GENERATOR => 'Magento\Setup\Module\Di\App\Task\Operation\RepositoryGenerator'
     ];
 
     /**
-     * @param \Magento\Framework\ObjectManagerInterface $objectManager
+     * @param \Magento\Setup\Model\ObjectManagerProvider $objectManagerProvider
      */
-    public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager)
+    public function __construct(\Magento\Setup\Model\ObjectManagerProvider $objectManagerProvider)
     {
-        $this->objectManager = $objectManager;
+        $this->objectManager = $objectManagerProvider->get();
     }
 
     /**
diff --git a/dev/tools/Magento/Tools/Di/App/Task/OperationInterface.php b/setup/src/Magento/Setup/Module/Di/App/Task/OperationInterface.php
similarity index 84%
rename from dev/tools/Magento/Tools/Di/App/Task/OperationInterface.php
rename to setup/src/Magento/Setup/Module/Di/App/Task/OperationInterface.php
index c81638f52c372579eabc43f1d74c03eb364793b1..0ce7cd3344c4684d5455a0c2044c8f254468862e 100644
--- a/dev/tools/Magento/Tools/Di/App/Task/OperationInterface.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/OperationInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\App\Task;
+namespace Magento\Setup\Module\Di\App\Task;
 
 interface OperationInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Code/Generator.php b/setup/src/Magento/Setup/Module/Di/Code/Generator.php
similarity index 96%
rename from dev/tools/Magento/Tools/Di/Code/Generator.php
rename to setup/src/Magento/Setup/Module/Di/Code/Generator.php
index a33d2f74dc024dd0df2fc55f095eb844dcadec58..75954e180b1d2c5c8d1b6e5e563b4fdfa5551da3 100644
--- a/dev/tools/Magento/Tools/Di/Code/Generator.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Generator.php
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Code;
+namespace Magento\Setup\Module\Di\Code;
 
 use Magento\Framework\Code\Generator as FrameworkGenerator;
 use Magento\Framework\Code\Generator\DefinedClasses;
@@ -13,7 +13,7 @@ use Magento\Framework\ObjectManagerInterface;
 
 /**
  * Class Generator
- * @package Magento\Tools\Di\Code
+ * @package Magento\Setup\Module\Di\Code
  */
 class Generator extends FrameworkGenerator
 {
diff --git a/dev/tools/Magento/Tools/Di/Code/Generator/InterceptionConfigurationBuilder.php b/setup/src/Magento/Setup/Module/Di/Code/Generator/InterceptionConfigurationBuilder.php
similarity index 98%
rename from dev/tools/Magento/Tools/Di/Code/Generator/InterceptionConfigurationBuilder.php
rename to setup/src/Magento/Setup/Module/Di/Code/Generator/InterceptionConfigurationBuilder.php
index b3ecacc8264fc4d0e689161689fd567a9f24a5c9..5935e77fa8e7109d1265e5f76335fe35394f1953 100644
--- a/dev/tools/Magento/Tools/Di/Code/Generator/InterceptionConfigurationBuilder.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Generator/InterceptionConfigurationBuilder.php
@@ -5,13 +5,13 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Code\Generator;
+namespace Magento\Setup\Module\Di\Code\Generator;
 
 use Magento\Framework\App\Area;
 use Magento\Framework\App\Cache\Manager;
 use Magento\Framework\App\Interception\Cache\CompiledConfig;
 use Magento\Framework\Interception\Config\Config as InterceptionConfig;
-use Magento\Tools\Di\Code\Reader\Type;
+use Magento\Setup\Module\Di\Code\Reader\Type;
 
 class InterceptionConfigurationBuilder
 {
diff --git a/dev/tools/Magento/Tools/Di/Code/Generator/Interceptor.php b/setup/src/Magento/Setup/Module/Di/Code/Generator/Interceptor.php
similarity index 94%
rename from dev/tools/Magento/Tools/Di/Code/Generator/Interceptor.php
rename to setup/src/Magento/Setup/Module/Di/Code/Generator/Interceptor.php
index 2a87b3a0b8dc8b570362029e87edc33fd92e4207..d02068614b28feef0e506a4c5ca430c54bb2ad2f 100644
--- a/dev/tools/Magento/Tools/Di/Code/Generator/Interceptor.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Generator/Interceptor.php
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Code\Generator;
+namespace Magento\Setup\Module\Di\Code\Generator;
 
 use Magento\Framework\Interception\Code\Generator\Interceptor as FrameworkInterceptor;
 
diff --git a/dev/tools/Magento/Tools/Di/Code/Generator/PluginList.php b/setup/src/Magento/Setup/Module/Di/Code/Generator/PluginList.php
similarity index 96%
rename from dev/tools/Magento/Tools/Di/Code/Generator/PluginList.php
rename to setup/src/Magento/Setup/Module/Di/Code/Generator/PluginList.php
index d59f9525b1340f04c5a815fbeddc392900faf765..ab48bcc0d795ce69ca7fb079c07d3d2e1c7ee056 100644
--- a/dev/tools/Magento/Tools/Di/Code/Generator/PluginList.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Generator/PluginList.php
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Code\Generator;
+namespace Magento\Setup\Module\Di\Code\Generator;
 
 use Magento\Framework\Interception;
 
diff --git a/dev/tools/Magento/Tools/Di/Code/GeneratorFactory.php b/setup/src/Magento/Setup/Module/Di/Code/GeneratorFactory.php
similarity index 81%
rename from dev/tools/Magento/Tools/Di/Code/GeneratorFactory.php
rename to setup/src/Magento/Setup/Module/Di/Code/GeneratorFactory.php
index b3e8135210754ce3887440887207853f7c4200c2..bbc7a9763a5d1723fa5900bb69b75623bddb5e90 100644
--- a/dev/tools/Magento/Tools/Di/Code/GeneratorFactory.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/GeneratorFactory.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code;
+namespace Magento\Setup\Module\Di\Code;
 
 use Magento\Framework\ObjectManagerInterface;
 
@@ -30,6 +30,6 @@ class GeneratorFactory
      */
     public function create($arguments = [])
     {
-        return $this->objectManager->create('Magento\Tools\Di\Code\Generator', $arguments);
+        return $this->objectManager->create('Magento\Setup\Module\Di\Code\Generator', $arguments);
     }
 }
diff --git a/dev/tools/Magento/Tools/Di/Code/Reader/ClassReaderDecorator.php b/setup/src/Magento/Setup/Module/Di/Code/Reader/ClassReaderDecorator.php
similarity index 93%
rename from dev/tools/Magento/Tools/Di/Code/Reader/ClassReaderDecorator.php
rename to setup/src/Magento/Setup/Module/Di/Code/Reader/ClassReaderDecorator.php
index 00aeb167ffed2262598b7384df7f79e853573520..bc38862c555c2b92a267335db4b4e272df794849 100644
--- a/dev/tools/Magento/Tools/Di/Code/Reader/ClassReaderDecorator.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Reader/ClassReaderDecorator.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Code\Reader;
+namespace Magento\Setup\Module\Di\Code\Reader;
 
-use Magento\Tools\Di\Compiler\ConstructorArgument;
+use Magento\Setup\Module\Di\Compiler\ConstructorArgument;
 
 class ClassReaderDecorator implements \Magento\Framework\Code\Reader\ClassReaderInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Code/Reader/ClassesScanner.php b/setup/src/Magento/Setup/Module/Di/Code/Reader/ClassesScanner.php
similarity index 96%
rename from dev/tools/Magento/Tools/Di/Code/Reader/ClassesScanner.php
rename to setup/src/Magento/Setup/Module/Di/Code/Reader/ClassesScanner.php
index 5b0204813ccb1b6c6a94922ea50bbe9b3be59448..8e52fc761c4d2ce3fa21ea902bf2cd396298ab5b 100644
--- a/dev/tools/Magento/Tools/Di/Code/Reader/ClassesScanner.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Reader/ClassesScanner.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code\Reader;
+namespace Magento\Setup\Module\Di\Code\Reader;
 
 use Magento\Framework\Exception\FileSystemException;
 use Zend\Code\Scanner\FileScanner;
@@ -45,9 +45,8 @@ class ClassesScanner implements ClassesScannerInterface
     {
         $realPath = realpath($path);
         if (!(bool)$realPath) {
-            throw new FileSystemException(new \Magento\Framework\Phrase('Invalid path: %1', $path));
+            throw new FileSystemException(new \Magento\Framework\Phrase('Invalid path: %1', [$path]));
         }
-
         $recursiveIterator = new \RecursiveIteratorIterator(
             new \RecursiveDirectoryIterator($realPath, \FilesystemIterator::FOLLOW_SYMLINKS),
             \RecursiveIteratorIterator::SELF_FIRST
diff --git a/dev/tools/Magento/Tools/Di/Code/Reader/ClassesScannerInterface.php b/setup/src/Magento/Setup/Module/Di/Code/Reader/ClassesScannerInterface.php
similarity index 79%
rename from dev/tools/Magento/Tools/Di/Code/Reader/ClassesScannerInterface.php
rename to setup/src/Magento/Setup/Module/Di/Code/Reader/ClassesScannerInterface.php
index 0812ceaf2a4beba1fcfb9d3a3d6cf7025ad18c23..8ed036a38d561b6aafdd84da88a512b6d7f6a526 100644
--- a/dev/tools/Magento/Tools/Di/Code/Reader/ClassesScannerInterface.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Reader/ClassesScannerInterface.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code\Reader;
+namespace Magento\Setup\Module\Di\Code\Reader;
 
 /**
  * Interface ClassesScannerInterface
  *
- * @package Magento\Tools\Di\Code\Reader
+ * @package Magento\Setup\Module\Di\Code\Reader
  */
 interface ClassesScannerInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Area.php b/setup/src/Magento/Setup/Module/Di/Code/Reader/Decorator/Area.php
similarity index 78%
rename from dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Area.php
rename to setup/src/Magento/Setup/Module/Di/Code/Reader/Decorator/Area.php
index 5830fc4e79ba8e318f9ccb6c94b6c61279ce9e81..13755f5776b5ca15cdb9c21249bd93d90c0e5605 100644
--- a/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Area.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Reader/Decorator/Area.php
@@ -3,18 +3,18 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code\Reader\Decorator;
+namespace Magento\Setup\Module\Di\Code\Reader\Decorator;
 
-use Magento\Tools\Di\Code\Reader\ClassesScanner;
-use Magento\Tools\Di\Code\Reader\ClassReaderDecorator;
+use Magento\Setup\Module\Di\Code\Reader\ClassesScanner;
+use Magento\Setup\Module\Di\Code\Reader\ClassReaderDecorator;
 use Magento\Framework\Exception\FileSystemException;
 
 /**
  * Class Area
  *
- * @package Magento\Tools\Di\Code\Reader\Decorator
+ * @package Magento\Setup\Module\Di\Code\Reader\Decorator
  */
-class Area implements \Magento\Tools\Di\Code\Reader\ClassesScannerInterface
+class Area implements \Magento\Setup\Module\Di\Code\Reader\ClassesScannerInterface
 {
     /**
      * @var ClassReaderDecorator
diff --git a/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Directory.php b/setup/src/Magento/Setup/Module/Di/Code/Reader/Decorator/Directory.php
similarity index 79%
rename from dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Directory.php
rename to setup/src/Magento/Setup/Module/Di/Code/Reader/Decorator/Directory.php
index 430ec71706199009fcbba18fad6f03acbd1c805e..89a50609589f42c279edb26fc0e4ceb0444e6f29 100644
--- a/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Directory.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Reader/Decorator/Directory.php
@@ -3,16 +3,16 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code\Reader\Decorator;
+namespace Magento\Setup\Module\Di\Code\Reader\Decorator;
 
-use Magento\Tools\Di\Compiler\Log\Log;
+use Magento\Setup\Module\Di\Compiler\Log\Log;
 
 /**
  * Class Directory
  *
- * @package Magento\Tools\Di\Code\Reader\Decorator
+ * @package Magento\Setup\Module\Di\Code\Reader\Decorator
  */
-class Directory implements \Magento\Tools\Di\Code\Reader\ClassesScannerInterface
+class Directory implements \Magento\Setup\Module\Di\Code\Reader\ClassesScannerInterface
 {
     /**
      * @var string
@@ -20,7 +20,7 @@ class Directory implements \Magento\Tools\Di\Code\Reader\ClassesScannerInterface
     private $current;
 
     /**
-     * @var \Magento\Tools\Di\Compiler\Log\Log
+     * @var \Magento\Setup\Module\Di\Compiler\Log\Log
      */
     private $log;
 
@@ -40,21 +40,21 @@ class Directory implements \Magento\Tools\Di\Code\Reader\ClassesScannerInterface
     private $classReader;
 
     /**
-     * @var \Magento\Tools\Di\Code\Reader\ClassesScanner
+     * @var \Magento\Setup\Module\Di\Code\Reader\ClassesScanner
      */
     private $classesScanner;
 
     /**
-     * @param \Magento\Tools\Di\Compiler\Log\Log $log Logging object
+     * @param \Magento\Setup\Module\Di\Compiler\Log\Log $log Logging object
      * @param \Magento\Framework\Code\Reader\ClassReader $classReader
-     * @param \Magento\Tools\Di\Code\Reader\ClassesScanner $classesScanner
+     * @param \Magento\Setup\Module\Di\Code\Reader\ClassesScanner $classesScanner
      * @param \Magento\Framework\Code\Validator $validator
      * @param string $generationDir directory where generated files is
      */
     public function __construct(
-        \Magento\Tools\Di\Compiler\Log\Log $log,
+        \Magento\Setup\Module\Di\Compiler\Log\Log $log,
         \Magento\Framework\Code\Reader\ClassReader $classReader,
-        \Magento\Tools\Di\Code\Reader\ClassesScanner $classesScanner,
+        \Magento\Setup\Module\Di\Code\Reader\ClassesScanner $classesScanner,
         \Magento\Framework\Code\Validator $validator,
         $generationDir
     ) {
diff --git a/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Interceptions.php b/setup/src/Magento/Setup/Module/Di/Code/Reader/Decorator/Interceptions.php
similarity index 79%
rename from dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Interceptions.php
rename to setup/src/Magento/Setup/Module/Di/Code/Reader/Decorator/Interceptions.php
index 84e4ce0038e8c6b300ae0648cc6a16472180bb21..e7636d06f8c9ba4bd59dd70c7db1920ea1a3e3f2 100644
--- a/dev/tools/Magento/Tools/Di/Code/Reader/Decorator/Interceptions.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Reader/Decorator/Interceptions.php
@@ -3,29 +3,29 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code\Reader\Decorator;
+namespace Magento\Setup\Module\Di\Code\Reader\Decorator;
 
-use Magento\Tools\Di\Compiler\Log\Log;
+use Magento\Setup\Module\Di\Compiler\Log\Log;
 
 /**
  * Class Interceptions
  *
- * @package Magento\Tools\Di\Code\Reader\Decorator
+ * @package Magento\Setup\Module\Di\Code\Reader\Decorator
  */
-class Interceptions implements \Magento\Tools\Di\Code\Reader\ClassesScannerInterface
+class Interceptions implements \Magento\Setup\Module\Di\Code\Reader\ClassesScannerInterface
 {
     /**
-     * @var \Magento\Tools\Di\Code\Reader\ClassReaderDecorator
+     * @var \Magento\Setup\Module\Di\Code\Reader\ClassReaderDecorator
      */
     private $classReader;
 
     /**
-     * @var \Magento\Tools\Di\Code\Reader\ClassesScanner
+     * @var \Magento\Setup\Module\Di\Code\Reader\ClassesScanner
      */
     private $classesScanner;
 
     /**
-     * @var \Magento\Tools\Di\Compiler\Log\Log
+     * @var \Magento\Setup\Module\Di\Compiler\Log\Log
      */
     private $log;
 
@@ -35,7 +35,7 @@ class Interceptions implements \Magento\Tools\Di\Code\Reader\ClassesScannerInter
     private $validator;
 
     /**
-     * @param \Magento\Tools\Di\Code\Reader\ClassesScanner $classesScanner
+     * @param \Magento\Setup\Module\Di\Code\Reader\ClassesScanner $classesScanner
      * @param \Magento\Framework\Code\Reader\ClassReader $classReader
      * @param \Magento\Framework\Code\Validator $validator
      * @param \Magento\Framework\Code\Validator\ConstructorIntegrity $constructorIntegrityValidator
@@ -43,7 +43,7 @@ class Interceptions implements \Magento\Tools\Di\Code\Reader\ClassesScannerInter
      * @param Log $log
      */
     public function __construct(
-        \Magento\Tools\Di\Code\Reader\ClassesScanner $classesScanner,
+        \Magento\Setup\Module\Di\Code\Reader\ClassesScanner $classesScanner,
         \Magento\Framework\Code\Reader\ClassReader $classReader,
         \Magento\Framework\Code\Validator $validator,
         \Magento\Framework\Code\Validator\ConstructorIntegrity $constructorIntegrityValidator,
diff --git a/dev/tools/Magento/Tools/Di/Code/Reader/Type.php b/setup/src/Magento/Setup/Module/Di/Code/Reader/Type.php
similarity index 89%
rename from dev/tools/Magento/Tools/Di/Code/Reader/Type.php
rename to setup/src/Magento/Setup/Module/Di/Code/Reader/Type.php
index 707ff19ce387ade6a970f2e5406f3629824ebe2e..a2ea1d3bf1df1e2979b3b3d83b7a2d1614e31f18 100644
--- a/dev/tools/Magento/Tools/Di/Code/Reader/Type.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Reader/Type.php
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Code\Reader;
+namespace Magento\Setup\Module\Di\Code\Reader;
 
 class Type
 {
diff --git a/dev/tools/Magento/Tools/Di/Code/Scanner/ArrayScanner.php b/setup/src/Magento/Setup/Module/Di/Code/Scanner/ArrayScanner.php
similarity index 91%
rename from dev/tools/Magento/Tools/Di/Code/Scanner/ArrayScanner.php
rename to setup/src/Magento/Setup/Module/Di/Code/Scanner/ArrayScanner.php
index b2f52b36a83bae862e77eee060324bd83e47f42a..6feaa595d1c221a80cf15a802992359724058d17 100644
--- a/dev/tools/Magento/Tools/Di/Code/Scanner/ArrayScanner.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Scanner/ArrayScanner.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code\Scanner;
+namespace Magento\Setup\Module\Di\Code\Scanner;
 
 class ArrayScanner implements ScannerInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Code/Scanner/CompositeScanner.php b/setup/src/Magento/Setup/Module/Di/Code/Scanner/CompositeScanner.php
similarity index 95%
rename from dev/tools/Magento/Tools/Di/Code/Scanner/CompositeScanner.php
rename to setup/src/Magento/Setup/Module/Di/Code/Scanner/CompositeScanner.php
index ed28b1fe2d2fb87cda4802becaf3e8b6d6285790..fb8785f22a7fc9ae3e4582db1c1ade769475699d 100644
--- a/dev/tools/Magento/Tools/Di/Code/Scanner/CompositeScanner.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Scanner/CompositeScanner.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code\Scanner;
+namespace Magento\Setup\Module\Di\Code\Scanner;
 
 class CompositeScanner implements ScannerInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Code/Scanner/DirectoryScanner.php b/setup/src/Magento/Setup/Module/Di/Code/Scanner/DirectoryScanner.php
similarity index 96%
rename from dev/tools/Magento/Tools/Di/Code/Scanner/DirectoryScanner.php
rename to setup/src/Magento/Setup/Module/Di/Code/Scanner/DirectoryScanner.php
index 45a9fb36a9b943c3a3a45c834221252778e5bf7a..6d67146fc2597bb221298658ce343623bc2b85cf 100644
--- a/dev/tools/Magento/Tools/Di/Code/Scanner/DirectoryScanner.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Scanner/DirectoryScanner.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code\Scanner;
+namespace Magento\Setup\Module\Di\Code\Scanner;
 
 class DirectoryScanner
 {
diff --git a/dev/tools/Magento/Tools/Di/Code/Scanner/InheritanceInterceptorScanner.php b/setup/src/Magento/Setup/Module/Di/Code/Scanner/InheritanceInterceptorScanner.php
similarity index 60%
rename from dev/tools/Magento/Tools/Di/Code/Scanner/InheritanceInterceptorScanner.php
rename to setup/src/Magento/Setup/Module/Di/Code/Scanner/InheritanceInterceptorScanner.php
index 5d13d98be35d4ef9a74fb34dd59a5724f4342b7e..29a17eb86277b53cc769eca93019b0d6f5a2b9c3 100644
--- a/dev/tools/Magento/Tools/Di/Code/Scanner/InheritanceInterceptorScanner.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Scanner/InheritanceInterceptorScanner.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code\Scanner;
+namespace Magento\Setup\Module\Di\Code\Scanner;
 
 class InheritanceInterceptorScanner implements ScannerInterface
 {
@@ -20,7 +20,9 @@ class InheritanceInterceptorScanner implements ScannerInterface
         foreach ($classes as $class) {
             foreach ($interceptedEntities as $interceptorClass) {
                 $interceptedEntity = substr($interceptorClass, 0, -12);
-                if (is_subclass_of($class, $interceptedEntity)) {
+                if (is_subclass_of($class, $interceptedEntity)
+                    && !$this->endsWith($class, 'RepositoryInterface\\Proxy')
+                    && !$this->endsWith($class, '\\Interceptor')) {
                     $reflectionClass = new \ReflectionClass($class);
                     if (!$reflectionClass->isAbstract() && !$reflectionClass->isFinal()) {
                         $output[] = $class . '\\Interceptor';
@@ -32,4 +34,18 @@ class InheritanceInterceptorScanner implements ScannerInterface
         $output = array_unique($output);
         return $output;
     }
+
+    /**
+     * Check if a string ends with a substring
+     *
+     * @param string $haystack
+     * @param string $needle
+     * @return bool
+     */
+    private function endsWith($haystack, $needle)
+    {
+        // search forward starting from end minus needle length characters
+        return $needle === ""
+        || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== false);
+    }
 }
diff --git a/dev/tools/Magento/Tools/Di/Code/Scanner/InterceptedInstancesScanner.php b/setup/src/Magento/Setup/Module/Di/Code/Scanner/InterceptedInstancesScanner.php
similarity index 96%
rename from dev/tools/Magento/Tools/Di/Code/Scanner/InterceptedInstancesScanner.php
rename to setup/src/Magento/Setup/Module/Di/Code/Scanner/InterceptedInstancesScanner.php
index c6004454cf2d7db0e718412313489908cc92de8d..831f5389ff30732e432dae8aef8e72cc362e036c 100644
--- a/dev/tools/Magento/Tools/Di/Code/Scanner/InterceptedInstancesScanner.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Scanner/InterceptedInstancesScanner.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Code\Scanner;
+namespace Magento\Setup\Module\Di\Code\Scanner;
 
 class InterceptedInstancesScanner implements ScannerInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Code/Scanner/PhpScanner.php b/setup/src/Magento/Setup/Module/Di/Code/Scanner/PhpScanner.php
similarity index 98%
rename from dev/tools/Magento/Tools/Di/Code/Scanner/PhpScanner.php
rename to setup/src/Magento/Setup/Module/Di/Code/Scanner/PhpScanner.php
index ee0379367000787eb84f78feb03a03176fa9cc22..64f1a8ac90c205464ac95c14260675353c05453a 100644
--- a/dev/tools/Magento/Tools/Di/Code/Scanner/PhpScanner.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Scanner/PhpScanner.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code\Scanner;
+namespace Magento\Setup\Module\Di\Code\Scanner;
 
-use Magento\Tools\Di\Compiler\Log\Log;
+use Magento\Setup\Module\Di\Compiler\Log\Log;
 use Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator;
 use Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGenerator;
 use Magento\Framework\ObjectManager\Code\Generator\Factory as FactoryGenerator;
diff --git a/dev/tools/Magento/Tools/Di/Code/Scanner/PluginScanner.php b/setup/src/Magento/Setup/Module/Di/Code/Scanner/PluginScanner.php
similarity index 95%
rename from dev/tools/Magento/Tools/Di/Code/Scanner/PluginScanner.php
rename to setup/src/Magento/Setup/Module/Di/Code/Scanner/PluginScanner.php
index d8190a83ff468f408b2f10143febb733cd5f8b23..5831ce61fcd516b8634c1520bdb77d23d6cd20f1 100644
--- a/dev/tools/Magento/Tools/Di/Code/Scanner/PluginScanner.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Scanner/PluginScanner.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code\Scanner;
+namespace Magento\Setup\Module\Di\Code\Scanner;
 
 class PluginScanner implements ScannerInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Code/Scanner/RepositoryScanner.php b/setup/src/Magento/Setup/Module/Di/Code/Scanner/RepositoryScanner.php
similarity index 91%
rename from dev/tools/Magento/Tools/Di/Code/Scanner/RepositoryScanner.php
rename to setup/src/Magento/Setup/Module/Di/Code/Scanner/RepositoryScanner.php
index da58536126739c68d9cc420f5e3c6b36727889b0..acad623d61a4cc04d15b59018226ec635ad62cdc 100644
--- a/dev/tools/Magento/Tools/Di/Code/Scanner/RepositoryScanner.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Scanner/RepositoryScanner.php
@@ -3,7 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code\Scanner;
+namespace Magento\Setup\Module\Di\Code\Scanner;
+
+use Magento\Framework\Autoload\AutoloaderRegistry;
 
 /**
  * Class RepositoryScanner
@@ -37,7 +39,8 @@ class RepositoryScanner implements ScannerInterface
                     && $replacementType !== null
                     && (substr($forType->nodeValue, -19) == 'RepositoryInterface')
                 ) {
-                    if (!class_exists($replacementType->nodeValue, $this->useAutoload)) {
+                    if (!class_exists($replacementType->nodeValue, false)
+                        && !AutoloaderRegistry::getAutoloader()->loadClass($replacementType->nodeValue)) {
                         $persistor = str_replace('\\Repository', 'InterfacePersistor', $replacementType->nodeValue);
                         $factory = str_replace('\\Repository', 'InterfaceFactory', $replacementType->nodeValue);
                         $searchResultFactory
diff --git a/dev/tools/Magento/Tools/Di/Code/Scanner/ScannerInterface.php b/setup/src/Magento/Setup/Module/Di/Code/Scanner/ScannerInterface.php
similarity index 85%
rename from dev/tools/Magento/Tools/Di/Code/Scanner/ScannerInterface.php
rename to setup/src/Magento/Setup/Module/Di/Code/Scanner/ScannerInterface.php
index 5bc2113eb78c6ef4d1f2db810255195ce80d26d3..ceb6003dbd284e1ee17293afa0e344e02aa4217b 100644
--- a/dev/tools/Magento/Tools/Di/Code/Scanner/ScannerInterface.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Scanner/ScannerInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code\Scanner;
+namespace Magento\Setup\Module\Di\Code\Scanner;
 
 interface ScannerInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Code/Scanner/XmlInterceptorScanner.php b/setup/src/Magento/Setup/Module/Di/Code/Scanner/XmlInterceptorScanner.php
similarity index 97%
rename from dev/tools/Magento/Tools/Di/Code/Scanner/XmlInterceptorScanner.php
rename to setup/src/Magento/Setup/Module/Di/Code/Scanner/XmlInterceptorScanner.php
index 7de7b4315b892f44da3929b5853a4a86d6b070f2..d5c43af177651e0e5d1a3b17c74513187bd41a10 100644
--- a/dev/tools/Magento/Tools/Di/Code/Scanner/XmlInterceptorScanner.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Scanner/XmlInterceptorScanner.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code\Scanner;
+namespace Magento\Setup\Module\Di\Code\Scanner;
 
 class XmlInterceptorScanner implements ScannerInterface
 {
@@ -41,7 +41,7 @@ class XmlInterceptorScanner implements ScannerInterface
         foreach ($xpath->query('//type[plugin]|//virtualType[plugin]') as $entityNode) {
             $attributes = $entityNode->attributes;
             $type = $attributes->getNamedItem('type');
-            if (!is_null($type)) {
+            if ($type !== null) {
                 array_push($output, $type->nodeValue);
             } else {
                 array_push($output, $attributes->getNamedItem('name')->nodeValue);
diff --git a/dev/tools/Magento/Tools/Di/Code/Scanner/XmlScanner.php b/setup/src/Magento/Setup/Module/Di/Code/Scanner/XmlScanner.php
similarity index 88%
rename from dev/tools/Magento/Tools/Di/Code/Scanner/XmlScanner.php
rename to setup/src/Magento/Setup/Module/Di/Code/Scanner/XmlScanner.php
index 6ca33d3f08c846116affee7d238d5c60ddc839e3..adc5a452ca9bb4bb8a96b552d9976d6a92954a17 100644
--- a/dev/tools/Magento/Tools/Di/Code/Scanner/XmlScanner.php
+++ b/setup/src/Magento/Setup/Module/Di/Code/Scanner/XmlScanner.php
@@ -3,21 +3,21 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Code\Scanner;
+namespace Magento\Setup\Module\Di\Code\Scanner;
 
 use Magento\Framework\ObjectManager\Code\Generator\Proxy as ProxyGenerator;
 
 class XmlScanner implements ScannerInterface
 {
     /**
-     * @var \Magento\Tools\Di\Compiler\Log\Log $log
+     * @var \Magento\Setup\Module\Di\Compiler\Log\Log $log
      */
     protected $_log;
 
     /**
-     * @param \Magento\Tools\Di\Compiler\Log\Log $log
+     * @param \Magento\Setup\Module\Di\Compiler\Log\Log $log
      */
-    public function __construct(\Magento\Tools\Di\Compiler\Log\Log $log)
+    public function __construct(\Magento\Setup\Module\Di\Compiler\Log\Log $log)
     {
         $this->_log = $log;
     }
@@ -75,7 +75,7 @@ class XmlScanner implements ScannerInterface
                     array_push($filteredEntities, $className);
                 } else {
                     $this->_log->add(
-                        \Magento\Tools\Di\Compiler\Log\Log::CONFIGURATION_ERROR,
+                        \Magento\Setup\Module\Di\Compiler\Log\Log::CONFIGURATION_ERROR,
                         $className,
                         'Invalid proxy class for ' . substr($className, 0, -5)
                     );
diff --git a/dev/tools/Magento/Tools/Di/Compiler/ArgumentsResolver.php b/setup/src/Magento/Setup/Module/Di/Compiler/ArgumentsResolver.php
similarity index 99%
rename from dev/tools/Magento/Tools/Di/Compiler/ArgumentsResolver.php
rename to setup/src/Magento/Setup/Module/Di/Compiler/ArgumentsResolver.php
index 37579cd287245ba202017ee08dca9cddac7b4fb2..423157a9aa0386efd276b5c5b46db1ebcac100af 100644
--- a/dev/tools/Magento/Tools/Di/Compiler/ArgumentsResolver.php
+++ b/setup/src/Magento/Setup/Module/Di/Compiler/ArgumentsResolver.php
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Compiler;
+namespace Magento\Setup\Module\Di\Compiler;
 
 class ArgumentsResolver
 {
diff --git a/dev/tools/Magento/Tools/Di/Compiler/ArgumentsResolverFactory.php b/setup/src/Magento/Setup/Module/Di/Compiler/ArgumentsResolverFactory.php
similarity index 88%
rename from dev/tools/Magento/Tools/Di/Compiler/ArgumentsResolverFactory.php
rename to setup/src/Magento/Setup/Module/Di/Compiler/ArgumentsResolverFactory.php
index 8a5adb49b2fe6455c5ae0ceb8f7632ba82d7e70c..603b63f7b038715ead1fbec1a0f7daf0f6814fdf 100644
--- a/dev/tools/Magento/Tools/Di/Compiler/ArgumentsResolverFactory.php
+++ b/setup/src/Magento/Setup/Module/Di/Compiler/ArgumentsResolverFactory.php
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Compiler;
+namespace Magento\Setup\Module\Di\Compiler;
 
 class ArgumentsResolverFactory
 {
@@ -31,7 +31,7 @@ class ArgumentsResolverFactory
      * Create class instance with config
      *
      * @param \Magento\Framework\ObjectManager\ConfigInterface $diContainerConfig
-     * @return \Magento\Tools\Di\Compiler\ArgumentsResolver
+     * @return \Magento\Setup\Module\Di\Compiler\ArgumentsResolver
      */
     public function create(\Magento\Framework\ObjectManager\ConfigInterface $diContainerConfig)
     {
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/ArgumentsSerialization.php b/setup/src/Magento/Setup/Module/Di/Compiler/Config/Chain/ArgumentsSerialization.php
similarity index 83%
rename from dev/tools/Magento/Tools/Di/Compiler/Config/Chain/ArgumentsSerialization.php
rename to setup/src/Magento/Setup/Module/Di/Compiler/Config/Chain/ArgumentsSerialization.php
index c19d07de807bb5b742ee0a0f12fce7001a917522..16b317a63dc03726046d80164fc46b38e4278e7f 100644
--- a/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/ArgumentsSerialization.php
+++ b/setup/src/Magento/Setup/Module/Di/Compiler/Config/Chain/ArgumentsSerialization.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Compiler\Config\Chain;
+namespace Magento\Setup\Module\Di\Compiler\Config\Chain;
 
-use Magento\Tools\Di\Compiler\Config\ModificationInterface;
+use Magento\Setup\Module\Di\Compiler\Config\ModificationInterface;
 
 class ArgumentsSerialization implements ModificationInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/BackslashTrim.php b/setup/src/Magento/Setup/Module/Di/Compiler/Config/Chain/BackslashTrim.php
similarity index 92%
rename from dev/tools/Magento/Tools/Di/Compiler/Config/Chain/BackslashTrim.php
rename to setup/src/Magento/Setup/Module/Di/Compiler/Config/Chain/BackslashTrim.php
index b7500e4fb0cacd34e051dcd847cccb7b321c1f7e..d741d004b9d652078496117b9d91244f9dceac1b 100644
--- a/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/BackslashTrim.php
+++ b/setup/src/Magento/Setup/Module/Di/Compiler/Config/Chain/BackslashTrim.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Compiler\Config\Chain;
+namespace Magento\Setup\Module\Di\Compiler\Config\Chain;
 
-use Magento\Tools\Di\Compiler\Config\ModificationInterface;
+use Magento\Setup\Module\Di\Compiler\Config\ModificationInterface;
 
 class BackslashTrim implements ModificationInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/InterceptorSubstitution.php b/setup/src/Magento/Setup/Module/Di/Compiler/Config/Chain/InterceptorSubstitution.php
similarity index 94%
rename from dev/tools/Magento/Tools/Di/Compiler/Config/Chain/InterceptorSubstitution.php
rename to setup/src/Magento/Setup/Module/Di/Compiler/Config/Chain/InterceptorSubstitution.php
index 26e6464858f590aa6b7ec639c495f213c7ffff89..324a7724702249636f737011142a2f8db0c95c09 100644
--- a/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/InterceptorSubstitution.php
+++ b/setup/src/Magento/Setup/Module/Di/Compiler/Config/Chain/InterceptorSubstitution.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Compiler\Config\Chain;
+namespace Magento\Setup\Module\Di\Compiler\Config\Chain;
 
-use Magento\Tools\Di\Compiler\Config\ModificationInterface;
+use Magento\Setup\Module\Di\Compiler\Config\ModificationInterface;
 
 class InterceptorSubstitution implements ModificationInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/PreferencesResolving.php b/setup/src/Magento/Setup/Module/Di/Compiler/Config/Chain/PreferencesResolving.php
similarity index 91%
rename from dev/tools/Magento/Tools/Di/Compiler/Config/Chain/PreferencesResolving.php
rename to setup/src/Magento/Setup/Module/Di/Compiler/Config/Chain/PreferencesResolving.php
index 3600ea3ea8360b1a24e569e6131cb73c99f78d52..9d58a69cd6ebf5fea3a41f70bf0f1f9ffa1cb0f4 100644
--- a/dev/tools/Magento/Tools/Di/Compiler/Config/Chain/PreferencesResolving.php
+++ b/setup/src/Magento/Setup/Module/Di/Compiler/Config/Chain/PreferencesResolving.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Compiler\Config\Chain;
+namespace Magento\Setup\Module\Di\Compiler\Config\Chain;
 
-use Magento\Tools\Di\Compiler\Config\ModificationInterface;
+use Magento\Setup\Module\Di\Compiler\Config\ModificationInterface;
 
 class PreferencesResolving implements ModificationInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Config/ModificationChain.php b/setup/src/Magento/Setup/Module/Di/Compiler/Config/ModificationChain.php
similarity index 95%
rename from dev/tools/Magento/Tools/Di/Compiler/Config/ModificationChain.php
rename to setup/src/Magento/Setup/Module/Di/Compiler/Config/ModificationChain.php
index fcdec2563e9ade96276b5e6e030bd5db2f74fe6d..666ee682c05cd71232cb68432d4584eac26a02b4 100644
--- a/dev/tools/Magento/Tools/Di/Compiler/Config/ModificationChain.php
+++ b/setup/src/Magento/Setup/Module/Di/Compiler/Config/ModificationChain.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Compiler\Config;
+namespace Magento\Setup\Module\Di\Compiler\Config;
 
 class ModificationChain implements ModificationInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Config/ModificationInterface.php b/setup/src/Magento/Setup/Module/Di/Compiler/Config/ModificationInterface.php
similarity index 84%
rename from dev/tools/Magento/Tools/Di/Compiler/Config/ModificationInterface.php
rename to setup/src/Magento/Setup/Module/Di/Compiler/Config/ModificationInterface.php
index 5e8f124bffef89ec316e3100585565e92dea6544..5f2b2d067cad581c8360fe56b423a6b574e726fe 100644
--- a/dev/tools/Magento/Tools/Di/Compiler/Config/ModificationInterface.php
+++ b/setup/src/Magento/Setup/Module/Di/Compiler/Config/ModificationInterface.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Compiler\Config;
+namespace Magento\Setup\Module\Di\Compiler\Config;
 
 interface ModificationInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Config/Reader.php b/setup/src/Magento/Setup/Module/Di/Compiler/Config/Reader.php
similarity index 93%
rename from dev/tools/Magento/Tools/Di/Compiler/Config/Reader.php
rename to setup/src/Magento/Setup/Module/Di/Compiler/Config/Reader.php
index b143705afa34968f86859ab358643fc8b4c059ce..3321115dd6cf57ea4a88a8ec8c16e78277d3d6a3 100644
--- a/dev/tools/Magento/Tools/Di/Compiler/Config/Reader.php
+++ b/setup/src/Magento/Setup/Module/Di/Compiler/Config/Reader.php
@@ -4,18 +4,18 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Compiler\Config;
+namespace Magento\Setup\Module\Di\Compiler\Config;
 
 use Magento\Framework\App;
 use Magento\Framework\ObjectManager\ConfigInterface;
-use Magento\Tools\Di\Code\Reader\ClassReaderDecorator;
-use Magento\Tools\Di\Code\Reader\Type;
-use Magento\Tools\Di\Compiler\ArgumentsResolverFactory;
-use Magento\Tools\Di\Definition\Collection as DefinitionsCollection;
+use Magento\Setup\Module\Di\Code\Reader\ClassReaderDecorator;
+use Magento\Setup\Module\Di\Code\Reader\Type;
+use Magento\Setup\Module\Di\Compiler\ArgumentsResolverFactory;
+use Magento\Setup\Module\Di\Definition\Collection as DefinitionsCollection;
 
 /**
  * Class Reader
- * @package Magento\Tools\Di\Compiler\Config
+ * @package Magento\Setup\Module\Di\Compiler\Config
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class Reader
diff --git a/setup/src/Magento/Setup/Module/Di/Compiler/Config/Writer/Filesystem.php b/setup/src/Magento/Setup/Module/Di/Compiler/Config/Writer/Filesystem.php
new file mode 100644
index 0000000000000000000000000000000000000000..c90c1582bc57b95e1dbca5aab0bc861490bf564b
--- /dev/null
+++ b/setup/src/Magento/Setup/Module/Di/Compiler/Config/Writer/Filesystem.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ *
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Setup\Module\Di\Compiler\Config\Writer;
+
+use Magento\Framework\App\Filesystem\DirectoryList;
+use Magento\Setup\Module\Di\Compiler\Config\WriterInterface;
+
+class Filesystem implements WriterInterface
+{
+    /**
+     * @var DirectoryList
+     */
+    private $directoryList;
+
+    /**
+     * Constructor
+     *
+     * @param DirectoryList $directoryList
+     */
+    public function __construct(DirectoryList $directoryList)
+    {
+        $this->directoryList = $directoryList;
+    }
+
+    /**
+     * Writes config in storage
+     *
+     * @param string $key
+     * @param array $config
+     * @return void
+     */
+    public function write($key, array $config)
+    {
+        $this->initialize();
+
+        $serialized = serialize($config);
+        file_put_contents($this->directoryList->getPath(DirectoryList::DI) . '/' . $key . '.ser', $serialized);
+    }
+
+    /**
+     * Initializes writer
+     *
+     * @return void
+     */
+    private function initialize()
+    {
+        if (!file_exists($this->directoryList->getPath(DirectoryList::DI))) {
+            mkdir($this->directoryList->getPath(DirectoryList::DI));
+        }
+    }
+}
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Config/WriterInterface.php b/setup/src/Magento/Setup/Module/Di/Compiler/Config/WriterInterface.php
similarity index 86%
rename from dev/tools/Magento/Tools/Di/Compiler/Config/WriterInterface.php
rename to setup/src/Magento/Setup/Module/Di/Compiler/Config/WriterInterface.php
index 0e54e3585f7ad4dbddcde43548edee556ab9f341..431d3ceb7da7295824089dd1a13137f29645d1b1 100644
--- a/dev/tools/Magento/Tools/Di/Compiler/Config/WriterInterface.php
+++ b/setup/src/Magento/Setup/Module/Di/Compiler/Config/WriterInterface.php
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Compiler\Config;
+namespace Magento\Setup\Module\Di\Compiler\Config;
 
 interface WriterInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Compiler/ConstructorArgument.php b/setup/src/Magento/Setup/Module/Di/Compiler/ConstructorArgument.php
similarity index 96%
rename from dev/tools/Magento/Tools/Di/Compiler/ConstructorArgument.php
rename to setup/src/Magento/Setup/Module/Di/Compiler/ConstructorArgument.php
index 39b38dc37a186d66f9ca4fb4ee4f983ccaa8fe4e..646d3ccd3565529357e9c0aad4b4eace5a8ac98c 100644
--- a/dev/tools/Magento/Tools/Di/Compiler/ConstructorArgument.php
+++ b/setup/src/Magento/Setup/Module/Di/Compiler/ConstructorArgument.php
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Compiler;
+namespace Magento\Setup\Module\Di\Compiler;
 
 class ConstructorArgument
 {
diff --git a/dev/tools/Magento/Tools/Di/Compiler/Log/Log.php b/setup/src/Magento/Setup/Module/Di/Compiler/Log/Log.php
similarity index 85%
rename from dev/tools/Magento/Tools/Di/Compiler/Log/Log.php
rename to setup/src/Magento/Setup/Module/Di/Compiler/Log/Log.php
index 963632f686a3b5a471f846597e33ce8e0eecab73..67d93bfd6304e2c15d3a4e14b873ffe60ef0e83f 100644
--- a/dev/tools/Magento/Tools/Di/Compiler/Log/Log.php
+++ b/setup/src/Magento/Setup/Module/Di/Compiler/Log/Log.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Compiler\Log;
+namespace Magento\Setup\Module\Di\Compiler\Log;
 
 
 class Log
@@ -19,14 +19,14 @@ class Log
     /**
      * Success log writer
      *
-     * @var Writer\WriterInterface
+     * @var Writer\Console
      */
     protected $_successWriter;
 
     /**
      * Error log writer
      *
-     * @var Writer\WriterInterface
+     * @var Writer\Console
      */
     protected $_errorWriter;
 
@@ -45,10 +45,10 @@ class Log
     protected $_errorEntries = [];
 
     /**
-     * @param Writer\WriterInterface $successWriter
-     * @param Writer\WriterInterface $errorWriter
+     * @param Writer\Console $successWriter
+     * @param Writer\Console $errorWriter
      */
-    public function __construct(Writer\WriterInterface $successWriter, Writer\WriterInterface $errorWriter)
+    public function __construct(Writer\Console $successWriter, Writer\Console $errorWriter)
     {
         $this->_successWriter = $successWriter;
         $this->_errorWriter = $errorWriter;
diff --git a/setup/src/Magento/Setup/Module/Di/Compiler/Log/Writer/Console.php b/setup/src/Magento/Setup/Module/Di/Compiler/Log/Writer/Console.php
new file mode 100644
index 0000000000000000000000000000000000000000..4c484cd841b81c2478f752d1b1cad8f23f96532f
--- /dev/null
+++ b/setup/src/Magento/Setup/Module/Di/Compiler/Log/Writer/Console.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Setup\Module\Di\Compiler\Log\Writer;
+
+use Magento\Setup\Module\Di\Compiler\Log\Log;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class Console
+{
+    /**
+     * Report messages by type
+     *
+     * @var array
+     */
+    protected $_messages = [
+        Log::GENERATION_SUCCESS => 'Generated classes:',
+        Log::GENERATION_ERROR => 'Errors during class generation:',
+        Log::COMPILATION_ERROR => 'Errors during compilation:',
+        Log::CONFIGURATION_ERROR => 'Errors during configuration scanning:',
+    ];
+
+    /**
+     * Console
+     *
+     * @var OutputInterface
+     */
+    protected $console;
+
+    /**
+     * @param OutputInterface $output
+     */
+    public function __construct(OutputInterface $output)
+    {
+        $this->console = $output;
+    }
+
+    /**
+     * Output log data
+     *
+     * @param array $data
+     * @return void
+     */
+    public function write(array $data)
+    {
+        $errorsCount = 0;
+        foreach ($data as $type => $classes) {
+            if (!count($classes)) {
+                continue;
+            }
+            $this->console->writeln($this->getStartTag($type) . $this->_messages[$type] . $this->getEndTag($type));
+            foreach ($classes as $className => $messages) {
+                if (count($messages)) {
+                    $this->console->writeln($this->getStartTag($type) . "\t" . $className . $this->getEndTag($type));
+                    foreach ($messages as $message) {
+                        if ($message) {
+                            $this->console->writeln(
+                                $this->getStartTag($type) . "\t\t" . $message . $this->getEndTag($type)
+                            );
+                            if ($type != Log::GENERATION_SUCCESS) {
+                                $errorsCount++;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        if ($errorsCount) {
+            $this->console->writeln('<error>' . 'Total Errors Count: ' . $errorsCount . '</error>');
+        }
+    }
+
+    /**
+     * Retrieve starting output tag
+     *
+     * @param string $type
+     * @return string
+     */
+    private function getStartTag($type)
+    {
+        if ($type === Log::GENERATION_SUCCESS) {
+            return '<info>';
+        } else {
+            return '<error>';
+        }
+    }
+
+    /**
+     * Retrieve ending output tag
+     *
+     * @param string $type
+     * @return string
+     */
+    private function getEndTag($type)
+    {
+        if ($type === Log::GENERATION_SUCCESS) {
+            return '</info>';
+        } else {
+            return '</error>';
+        }
+    }
+}
diff --git a/dev/tools/Magento/Tools/Di/Definition/Collection.php b/setup/src/Magento/Setup/Module/Di/Definition/Collection.php
similarity index 97%
rename from dev/tools/Magento/Tools/Di/Definition/Collection.php
rename to setup/src/Magento/Setup/Module/Di/Definition/Collection.php
index 580f930d24cdd59584306f0cd3eb62e696f0a170..a18f8fb47795ebb9c6e035a8579366e3330dd708 100644
--- a/dev/tools/Magento/Tools/Di/Definition/Collection.php
+++ b/setup/src/Magento/Setup/Module/Di/Definition/Collection.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Definition;
+namespace Magento\Setup\Module\Di\Definition;
 
 class Collection
 {
diff --git a/dev/tools/Magento/Tools/Di/Definition/Compressor.php b/setup/src/Magento/Setup/Module/Di/Definition/Compressor.php
similarity index 96%
rename from dev/tools/Magento/Tools/Di/Definition/Compressor.php
rename to setup/src/Magento/Setup/Module/Di/Definition/Compressor.php
index f29ee3779c23e85ff3b2942d2d1ebeecb9e64bad..6ee28a3e42e24b664022fb99ba4933adbf87168f 100644
--- a/dev/tools/Magento/Tools/Di/Definition/Compressor.php
+++ b/setup/src/Magento/Setup/Module/Di/Definition/Compressor.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Definition;
+namespace Magento\Setup\Module\Di\Definition;
 
 class Compressor
 {
diff --git a/dev/tools/Magento/Tools/Di/Definition/Compressor/UniqueList.php b/setup/src/Magento/Setup/Module/Di/Definition/Compressor/UniqueList.php
similarity index 93%
rename from dev/tools/Magento/Tools/Di/Definition/Compressor/UniqueList.php
rename to setup/src/Magento/Setup/Module/Di/Definition/Compressor/UniqueList.php
index 7f743353ece5cfc17e5b520d9478b72cbfe746ac..cdc4578824d2bc99f04533097796c1fd0d4c8e29 100644
--- a/dev/tools/Magento/Tools/Di/Definition/Compressor/UniqueList.php
+++ b/setup/src/Magento/Setup/Module/Di/Definition/Compressor/UniqueList.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Definition\Compressor;
+namespace Magento\Setup\Module\Di\Definition\Compressor;
 
 class UniqueList
 {
diff --git a/dev/tools/Magento/Tools/Di/Definition/Serializer/Igbinary.php b/setup/src/Magento/Setup/Module/Di/Definition/Serializer/Igbinary.php
similarity index 91%
rename from dev/tools/Magento/Tools/Di/Definition/Serializer/Igbinary.php
rename to setup/src/Magento/Setup/Module/Di/Definition/Serializer/Igbinary.php
index bfcf90322aecb3441faba643398327cf5365bb7e..db8e0e7ad0fb55ca3c957a9c824d69cd8fb2ea9e 100644
--- a/dev/tools/Magento/Tools/Di/Definition/Serializer/Igbinary.php
+++ b/setup/src/Magento/Setup/Module/Di/Definition/Serializer/Igbinary.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Definition\Serializer;
+namespace Magento\Setup\Module\Di\Definition\Serializer;
 
 class Igbinary implements SerializerInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Definition/Serializer/SerializerInterface.php b/setup/src/Magento/Setup/Module/Di/Definition/Serializer/SerializerInterface.php
similarity index 82%
rename from dev/tools/Magento/Tools/Di/Definition/Serializer/SerializerInterface.php
rename to setup/src/Magento/Setup/Module/Di/Definition/Serializer/SerializerInterface.php
index e722e0f7f4f20d42d85383346c647fa849c711cc..e4daa07f17b25641d49c0315474d051b386f8377 100644
--- a/dev/tools/Magento/Tools/Di/Definition/Serializer/SerializerInterface.php
+++ b/setup/src/Magento/Setup/Module/Di/Definition/Serializer/SerializerInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Definition\Serializer;
+namespace Magento\Setup\Module\Di\Definition\Serializer;
 
 interface SerializerInterface
 {
diff --git a/dev/tools/Magento/Tools/Di/Definition/Serializer/Standard.php b/setup/src/Magento/Setup/Module/Di/Definition/Serializer/Standard.php
similarity index 87%
rename from dev/tools/Magento/Tools/Di/Definition/Serializer/Standard.php
rename to setup/src/Magento/Setup/Module/Di/Definition/Serializer/Standard.php
index 4862fce3e367eff36650e13afab90dd38d430566..5c98d658e776b6a5753417b8045a852e315ea268 100644
--- a/dev/tools/Magento/Tools/Di/Definition/Serializer/Standard.php
+++ b/setup/src/Magento/Setup/Module/Di/Definition/Serializer/Standard.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Definition\Serializer;
+namespace Magento\Setup\Module\Di\Definition\Serializer;
 
 class Standard implements SerializerInterface
 {
diff --git a/dev/tools/Magento/Tools/I18n/Context.php b/setup/src/Magento/Setup/Module/I18n/Context.php
similarity index 98%
rename from dev/tools/Magento/Tools/I18n/Context.php
rename to setup/src/Magento/Setup/Module/I18n/Context.php
index 839fd699f2b3d60866f8f28d4ef7f8a4593b7b3f..165669bbced84a6cb7490065bee00257ec6c780a 100644
--- a/dev/tools/Magento/Tools/I18n/Context.php
+++ b/setup/src/Magento/Setup/Module/I18n/Context.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n;
+namespace Magento\Setup\Module\I18n;
 
 /**
  *  Context
diff --git a/dev/tools/Magento/Tools/I18n/Dictionary.php b/setup/src/Magento/Setup/Module/I18n/Dictionary.php
similarity index 85%
rename from dev/tools/Magento/Tools/I18n/Dictionary.php
rename to setup/src/Magento/Setup/Module/I18n/Dictionary.php
index 0026cf5ecaf8fc0da0aef0cdb689d6b85357a94a..86f9b06145d7aa5a4c884221ee1ca40cf2ea7177 100644
--- a/dev/tools/Magento/Tools/I18n/Dictionary.php
+++ b/setup/src/Magento/Setup/Module/I18n/Dictionary.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n;
+namespace Magento\Setup\Module\I18n;
 
-use Magento\Tools\I18n\Dictionary\Phrase;
+use Magento\Setup\Module\I18n\Dictionary\Phrase;
 
 /**
  *  Dictionary
@@ -29,7 +29,7 @@ class Dictionary
     /**
      * Add phrase to pack container
      *
-     * @param \Magento\Tools\I18n\Dictionary\Phrase $phrase
+     * @param Phrase $phrase
      * @return void
      */
     public function addPhrase(Phrase $phrase)
@@ -41,7 +41,7 @@ class Dictionary
     /**
      * Get phrases
      *
-     * @return \Magento\Tools\I18n\Dictionary\Phrase[]
+     * @return Phrase[]
      */
     public function getPhrases()
     {
diff --git a/dev/tools/Magento/Tools/I18n/Dictionary/Generator.php b/setup/src/Magento/Setup/Module/I18n/Dictionary/Generator.php
similarity index 88%
rename from dev/tools/Magento/Tools/I18n/Dictionary/Generator.php
rename to setup/src/Magento/Setup/Module/I18n/Dictionary/Generator.php
index 85d2ec14cb5679d82eb5d12c5932a6267d937c73..81a8b8dc2649ce18cd835fb3d41d338e0922dfae 100644
--- a/dev/tools/Magento/Tools/I18n/Dictionary/Generator.php
+++ b/setup/src/Magento/Setup/Module/I18n/Dictionary/Generator.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Dictionary;
+namespace Magento\Setup\Module\I18n\Dictionary;
 
-use Magento\Tools\I18n\Factory;
-use Magento\Tools\I18n\ParserInterface;
+use Magento\Setup\Module\I18n\Factory;
+use Magento\Setup\Module\I18n\ParserInterface;
 
 /**
  * Dictionary generator
@@ -16,21 +16,21 @@ class Generator
     /**
      * Parser
      *
-     * @var \Magento\Tools\I18n\ParserInterface
+     * @var \Magento\Setup\Module\I18n\ParserInterface
      */
     protected $parser;
 
     /**
      * Contextual parser
      *
-     * @var \Magento\Tools\I18n\ParserInterface
+     * @var \Magento\Setup\Module\I18n\ParserInterface
      */
     protected $contextualParser;
 
     /**
      * Domain abstract factory
      *
-     * @var \Magento\Tools\I18n\Factory
+     * @var \Magento\Setup\Module\I18n\Factory
      */
     protected $factory;
 
@@ -108,7 +108,7 @@ class Generator
      * Get actual parser
      *
      * @param bool $withContext
-     * @return \Magento\Tools\I18n\ParserInterface
+     * @return \Magento\Setup\Module\I18n\ParserInterface
      */
     protected function getActualParser($withContext)
     {
diff --git a/dev/tools/Magento/Tools/I18n/Dictionary/Loader/File/AbstractFile.php b/setup/src/Magento/Setup/Module/I18n/Dictionary/Loader/File/AbstractFile.php
similarity index 89%
rename from dev/tools/Magento/Tools/I18n/Dictionary/Loader/File/AbstractFile.php
rename to setup/src/Magento/Setup/Module/I18n/Dictionary/Loader/File/AbstractFile.php
index 3cd27234bab0ed3810a654c6265b3c23ad9940b9..79bdbb6f7b04e0645aed3410a7a51dde08ab2dd0 100644
--- a/dev/tools/Magento/Tools/I18n/Dictionary/Loader/File/AbstractFile.php
+++ b/setup/src/Magento/Setup/Module/I18n/Dictionary/Loader/File/AbstractFile.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Dictionary\Loader\File;
+namespace Magento\Setup\Module\I18n\Dictionary\Loader\File;
 
-use Magento\Tools\I18n\Dictionary\Loader\FileInterface;
-use Magento\Tools\I18n\Factory;
+use Magento\Setup\Module\I18n\Dictionary\Loader\FileInterface;
+use Magento\Setup\Module\I18n\Factory;
 
 /**
  *  Abstract dictionary loader from file
@@ -16,7 +16,7 @@ abstract class AbstractFile implements FileInterface
     /**
      * Domain abstract factory
      *
-     * @var \Magento\Tools\I18n\Factory
+     * @var \Magento\Setup\Module\I18n\Factory
      */
     protected $_factory;
 
@@ -106,7 +106,7 @@ abstract class AbstractFile implements FileInterface
     /**
      * Create dictionary
      *
-     * @return \Magento\Tools\I18n\Dictionary
+     * @return \Magento\Setup\Module\I18n\Dictionary
      */
     protected function _createDictionary()
     {
@@ -117,7 +117,7 @@ abstract class AbstractFile implements FileInterface
      * Create phrase
      *
      * @param array $data
-     * @return \Magento\Tools\I18n\Dictionary\Phrase
+     * @return \Magento\Setup\Module\I18n\Dictionary\Phrase
      * @throws \RuntimeException
      */
     protected function _createPhrase($data)
diff --git a/dev/tools/Magento/Tools/I18n/Dictionary/Loader/File/Csv.php b/setup/src/Magento/Setup/Module/I18n/Dictionary/Loader/File/Csv.php
similarity index 76%
rename from dev/tools/Magento/Tools/I18n/Dictionary/Loader/File/Csv.php
rename to setup/src/Magento/Setup/Module/I18n/Dictionary/Loader/File/Csv.php
index aa62de706c41cfac55350242b2dfee48a1c1e989..91a02c11056f3d1d23b011aa2b3edf376c63d037 100644
--- a/dev/tools/Magento/Tools/I18n/Dictionary/Loader/File/Csv.php
+++ b/setup/src/Magento/Setup/Module/I18n/Dictionary/Loader/File/Csv.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Dictionary\Loader\File;
+namespace Magento\Setup\Module\I18n\Dictionary\Loader\File;
 
-use Magento\Tools\I18n\Dictionary;
+use Magento\Setup\Module\I18n\Dictionary;
 
 /**
  *  Dictionary loader from csv
diff --git a/dev/tools/Magento/Tools/I18n/Dictionary/Loader/FileInterface.php b/setup/src/Magento/Setup/Module/I18n/Dictionary/Loader/FileInterface.php
similarity index 74%
rename from dev/tools/Magento/Tools/I18n/Dictionary/Loader/FileInterface.php
rename to setup/src/Magento/Setup/Module/I18n/Dictionary/Loader/FileInterface.php
index 923c555929adb287b18bfc504be5a2eaa511e244..3365e2ffd7d3dce5ba7d47435cfa4596317abc72 100644
--- a/dev/tools/Magento/Tools/I18n/Dictionary/Loader/FileInterface.php
+++ b/setup/src/Magento/Setup/Module/I18n/Dictionary/Loader/FileInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Dictionary\Loader;
+namespace Magento\Setup\Module\I18n\Dictionary\Loader;
 
 /**
  * Dictionary loader interface
@@ -14,7 +14,7 @@ interface FileInterface
      * Load dictionary
      *
      * @param string $file
-     * @return \Magento\Tools\I18n\Dictionary
+     * @return \Magento\Setup\Module\I18n\Dictionary
      * @throws \InvalidArgumentException
      */
     public function load($file);
diff --git a/dev/tools/Magento/Tools/I18n/Dictionary/Options/Resolver.php b/setup/src/Magento/Setup/Module/I18n/Dictionary/Options/Resolver.php
similarity index 98%
rename from dev/tools/Magento/Tools/I18n/Dictionary/Options/Resolver.php
rename to setup/src/Magento/Setup/Module/I18n/Dictionary/Options/Resolver.php
index bbc43b8f4313aaaf5cf2fa79d006720da8d01ea8..d257486fc3a3c1692798174e43ebde6822952078 100644
--- a/dev/tools/Magento/Tools/I18n/Dictionary/Options/Resolver.php
+++ b/setup/src/Magento/Setup/Module/I18n/Dictionary/Options/Resolver.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Dictionary\Options;
+namespace Magento\Setup\Module\I18n\Dictionary\Options;
 
 /**
  * Dictionary generator options resolver
diff --git a/dev/tools/Magento/Tools/I18n/Dictionary/Options/ResolverFactory.php b/setup/src/Magento/Setup/Module/I18n/Dictionary/Options/ResolverFactory.php
similarity index 87%
rename from dev/tools/Magento/Tools/I18n/Dictionary/Options/ResolverFactory.php
rename to setup/src/Magento/Setup/Module/I18n/Dictionary/Options/ResolverFactory.php
index 5ea187e0e63d6b06b6b3d23a0dfce2eb8b36bbd6..0068ac187a7c9ae16c7643e8080eb306bc04fedc 100644
--- a/dev/tools/Magento/Tools/I18n/Dictionary/Options/ResolverFactory.php
+++ b/setup/src/Magento/Setup/Module/I18n/Dictionary/Options/ResolverFactory.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Dictionary\Options;
+namespace Magento\Setup\Module\I18n\Dictionary\Options;
 
 /**
  * Options resolver factory
@@ -13,7 +13,7 @@ class ResolverFactory
     /**
      * Default option resolver class
      */
-    const DEFAULT_RESOLVER = 'Magento\Tools\I18n\Dictionary\Options\Resolver';
+    const DEFAULT_RESOLVER = 'Magento\Setup\Module\I18n\Dictionary\Options\Resolver';
 
     /**
      * @var string
diff --git a/dev/tools/Magento/Tools/I18n/Dictionary/Options/ResolverInterface.php b/setup/src/Magento/Setup/Module/I18n/Dictionary/Options/ResolverInterface.php
similarity index 82%
rename from dev/tools/Magento/Tools/I18n/Dictionary/Options/ResolverInterface.php
rename to setup/src/Magento/Setup/Module/I18n/Dictionary/Options/ResolverInterface.php
index 932d5efd892d596b6faa1d85a132c40f72d1460c..17d418af1b9c3e61eb8726efb0e42d5eb106166b 100644
--- a/dev/tools/Magento/Tools/I18n/Dictionary/Options/ResolverInterface.php
+++ b/setup/src/Magento/Setup/Module/I18n/Dictionary/Options/ResolverInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Dictionary\Options;
+namespace Magento\Setup\Module\I18n\Dictionary\Options;
 
 /**
  * Generator options resolver interface
diff --git a/dev/tools/Magento/Tools/I18n/Dictionary/Phrase.php b/setup/src/Magento/Setup/Module/I18n/Dictionary/Phrase.php
similarity index 98%
rename from dev/tools/Magento/Tools/I18n/Dictionary/Phrase.php
rename to setup/src/Magento/Setup/Module/I18n/Dictionary/Phrase.php
index 1186e1096b44516562815a8533def41a255a6556..011de2e22c01ae7a3414b8e73a28eb54914aecf5 100644
--- a/dev/tools/Magento/Tools/I18n/Dictionary/Phrase.php
+++ b/setup/src/Magento/Setup/Module/I18n/Dictionary/Phrase.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Dictionary;
+namespace Magento\Setup\Module\I18n\Dictionary;
 
 /**
  *  Phrase
diff --git a/dev/tools/Magento/Tools/I18n/Dictionary/Writer/Csv.php b/setup/src/Magento/Setup/Module/I18n/Dictionary/Writer/Csv.php
similarity index 92%
rename from dev/tools/Magento/Tools/I18n/Dictionary/Writer/Csv.php
rename to setup/src/Magento/Setup/Module/I18n/Dictionary/Writer/Csv.php
index e27da55c58f8e07228d363cad82dca219976a555..b77daa5fd3512e5fac1e0e0defe8e84362d3b088 100644
--- a/dev/tools/Magento/Tools/I18n/Dictionary/Writer/Csv.php
+++ b/setup/src/Magento/Setup/Module/I18n/Dictionary/Writer/Csv.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Dictionary\Writer;
+namespace Magento\Setup\Module\I18n\Dictionary\Writer;
 
-use Magento\Tools\I18n\Dictionary\Phrase;
-use Magento\Tools\I18n\Dictionary\WriterInterface;
+use Magento\Setup\Module\I18n\Dictionary\Phrase;
+use Magento\Setup\Module\I18n\Dictionary\WriterInterface;
 
 /**
  * Csv writer
diff --git a/dev/tools/Magento/Tools/I18n/Dictionary/Writer/Csv/Stdo.php b/setup/src/Magento/Setup/Module/I18n/Dictionary/Writer/Csv/Stdo.php
similarity index 73%
rename from dev/tools/Magento/Tools/I18n/Dictionary/Writer/Csv/Stdo.php
rename to setup/src/Magento/Setup/Module/I18n/Dictionary/Writer/Csv/Stdo.php
index 3a2ed9acb9ba327eeb1371cb4c3a90bf803d7cf0..ffc2d5356231204a60f5a8e858e82fa79306af56 100644
--- a/dev/tools/Magento/Tools/I18n/Dictionary/Writer/Csv/Stdo.php
+++ b/setup/src/Magento/Setup/Module/I18n/Dictionary/Writer/Csv/Stdo.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Dictionary\Writer\Csv;
+namespace Magento\Setup\Module\I18n\Dictionary\Writer\Csv;
 
-use Magento\Tools\I18n\Dictionary\Writer\Csv;
+use Magento\Setup\Module\I18n\Dictionary\Writer\Csv;
 
 /**
  * Stdout writer
diff --git a/dev/tools/Magento/Tools/I18n/Dictionary/WriterInterface.php b/setup/src/Magento/Setup/Module/I18n/Dictionary/WriterInterface.php
similarity index 86%
rename from dev/tools/Magento/Tools/I18n/Dictionary/WriterInterface.php
rename to setup/src/Magento/Setup/Module/I18n/Dictionary/WriterInterface.php
index fe3f82f44f5f8ffa7b4e7947a317bd23fe2e748c..ac9ffade5bf2d5010fb919ad813e9293e23a9145 100644
--- a/dev/tools/Magento/Tools/I18n/Dictionary/WriterInterface.php
+++ b/setup/src/Magento/Setup/Module/I18n/Dictionary/WriterInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Dictionary;
+namespace Magento\Setup\Module\I18n\Dictionary;
 
 /**
  * Writer interface
diff --git a/dev/tools/Magento/Tools/I18n/Factory.php b/setup/src/Magento/Setup/Module/I18n/Factory.php
similarity index 84%
rename from dev/tools/Magento/Tools/I18n/Factory.php
rename to setup/src/Magento/Setup/Module/I18n/Factory.php
index 35aec2a076a92b8e0253215e230ea78d20a23163..f6e27614734fc07843a7e258c8c1dc108849e75f 100644
--- a/dev/tools/Magento/Tools/I18n/Factory.php
+++ b/setup/src/Magento/Setup/Module/I18n/Factory.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n;
+namespace Magento\Setup\Module\I18n;
 
 /**
  *  Abstract Factory
@@ -14,7 +14,7 @@ class Factory
      * Create dictionary writer
      *
      * @param string $filename
-     * @return \Magento\Tools\I18n\Dictionary\WriterInterface
+     * @return \Magento\Setup\Module\I18n\Dictionary\WriterInterface
      * @throws \InvalidArgumentException
      */
     public function createDictionaryWriter($filename = null)
@@ -36,7 +36,7 @@ class Factory
      * Create locale
      *
      * @param string $locale
-     * @return \Magento\Tools\I18n\Locale
+     * @return \Magento\Setup\Module\I18n\Locale
      */
     public function createLocale($locale)
     {
@@ -46,7 +46,7 @@ class Factory
     /**
      * Create dictionary
      *
-     * @return \Magento\Tools\I18n\Dictionary
+     * @return \Magento\Setup\Module\I18n\Dictionary
      */
     public function createDictionary()
     {
@@ -57,7 +57,7 @@ class Factory
      * Create Phrase
      *
      * @param array $data
-     * @return \Magento\Tools\I18n\Dictionary\Phrase
+     * @return \Magento\Setup\Module\I18n\Dictionary\Phrase
      */
     public function createPhrase(array $data)
     {
diff --git a/dev/tools/Magento/Tools/I18n/FilesCollector.php b/setup/src/Magento/Setup/Module/I18n/FilesCollector.php
similarity index 97%
rename from dev/tools/Magento/Tools/I18n/FilesCollector.php
rename to setup/src/Magento/Setup/Module/I18n/FilesCollector.php
index da8684ac0485c567e7bd0f1b2c725df8fb1a433e..3c01889dfd11d4d5b701ad6f3845086e3a02a409 100644
--- a/dev/tools/Magento/Tools/I18n/FilesCollector.php
+++ b/setup/src/Magento/Setup/Module/I18n/FilesCollector.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n;
+namespace Magento\Setup\Module\I18n;
 
 /**
  *  Files collector
diff --git a/dev/tools/Magento/Tools/I18n/Locale.php b/setup/src/Magento/Setup/Module/I18n/Locale.php
similarity index 96%
rename from dev/tools/Magento/Tools/I18n/Locale.php
rename to setup/src/Magento/Setup/Module/I18n/Locale.php
index a5fca0b75cd9c0efa50118e3261fa737950d0b45..e3bb79e9adb2fd6007dfef92bb711394aa85244e 100644
--- a/dev/tools/Magento/Tools/I18n/Locale.php
+++ b/setup/src/Magento/Setup/Module/I18n/Locale.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n;
+namespace Magento\Setup\Module\I18n;
 
 /**
  *  Locale
diff --git a/dev/tools/Magento/Tools/I18n/Pack/Generator.php b/setup/src/Magento/Setup/Module/I18n/Pack/Generator.php
similarity index 78%
rename from dev/tools/Magento/Tools/I18n/Pack/Generator.php
rename to setup/src/Magento/Setup/Module/I18n/Pack/Generator.php
index bc257a637ace6c67ebb2fe1575e88915bc7ea9fa..bbc0cecfa9ce6de7bc74c7fae3dd45acf35f8cc7 100644
--- a/dev/tools/Magento/Tools/I18n/Pack/Generator.php
+++ b/setup/src/Magento/Setup/Module/I18n/Pack/Generator.php
@@ -3,11 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Pack;
+namespace Magento\Setup\Module\I18n\Pack;
 
-use Magento\Tools\I18n\Dictionary;
-use Magento\Tools\I18n\Factory;
-use Magento\Tools\I18n\Pack;
+use Magento\Setup\Module\I18n\Dictionary;
+use Magento\Setup\Module\I18n\Factory;
+use Magento\Setup\Module\I18n\Pack;
 
 /**
  * Pack generator
@@ -17,30 +17,30 @@ class Generator
     /**
      * Dictionary loader
      *
-     * @var \Magento\Tools\I18n\Dictionary\Loader\FileInterface
+     * @var \Magento\Setup\Module\I18n\Dictionary\Loader\FileInterface
      */
     protected $dictionaryLoader;
 
     /**
      * Pack writer
      *
-     * @var \Magento\Tools\I18n\Pack\WriterInterface
+     * @var \Magento\Setup\Module\I18n\Pack\WriterInterface
      */
     protected $packWriter;
 
     /**
      * Domain abstract factory
      *
-     * @var \Magento\Tools\I18n\Factory
+     * @var \Magento\Setup\Module\I18n\Factory
      */
     protected $factory;
 
     /**
      * Loader construct
      *
-     * @param \Magento\Tools\I18n\Dictionary\Loader\FileInterface $dictionaryLoader
-     * @param \Magento\Tools\I18n\Pack\WriterInterface $packWriter
-     * @param \Magento\Tools\I18n\Factory $factory
+     * @param \Magento\Setup\Module\I18n\Dictionary\Loader\FileInterface $dictionaryLoader
+     * @param \Magento\Setup\Module\I18n\Pack\WriterInterface $packWriter
+     * @param \Magento\Setup\Module\I18n\Factory $factory
      */
     public function __construct(
         Dictionary\Loader\FileInterface $dictionaryLoader,
@@ -97,7 +97,7 @@ class Generator
     {
         $error = '';
         foreach ($duplicates as $phrases) {
-            /** @var \Magento\Tools\I18n\Dictionary\Phrase $phrase */
+            /** @var \Magento\Setup\Module\I18n\Dictionary\Phrase $phrase */
             $phrase = $phrases[0];
             $error .= sprintf(
                 "The phrase \"%s\" is translated in %d places.\n",
diff --git a/dev/tools/Magento/Tools/I18n/Pack/Writer/File/AbstractFile.php b/setup/src/Magento/Setup/Module/I18n/Pack/Writer/File/AbstractFile.php
similarity index 86%
rename from dev/tools/Magento/Tools/I18n/Pack/Writer/File/AbstractFile.php
rename to setup/src/Magento/Setup/Module/I18n/Pack/Writer/File/AbstractFile.php
index 98307f0d4dbc900c409b0c973707e9b39347cf8b..599b806f09930500af793a6ba54f965650079624 100644
--- a/dev/tools/Magento/Tools/I18n/Pack/Writer/File/AbstractFile.php
+++ b/setup/src/Magento/Setup/Module/I18n/Pack/Writer/File/AbstractFile.php
@@ -3,13 +3,13 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Pack\Writer\File;
+namespace Magento\Setup\Module\I18n\Pack\Writer\File;
 
-use Magento\Tools\I18n\Context;
-use Magento\Tools\I18n\Dictionary;
-use Magento\Tools\I18n\Factory;
-use Magento\Tools\I18n\Locale;
-use Magento\Tools\I18n\Pack\WriterInterface;
+use Magento\Setup\Module\I18n\Context;
+use Magento\Setup\Module\I18n\Dictionary;
+use Magento\Setup\Module\I18n\Factory;
+use Magento\Setup\Module\I18n\Locale;
+use Magento\Setup\Module\I18n\Pack\WriterInterface;
 
 /**
  * Abstract pack writer
@@ -19,21 +19,21 @@ abstract class AbstractFile implements WriterInterface
     /**
      * Context
      *
-     * @var \Magento\Tools\I18n\Context
+     * @var \Magento\Setup\Module\I18n\Context
      */
     protected $_context;
 
     /**
      * Dictionary loader. This object is need for read dictionary for merge mode
      *
-     * @var \Magento\Tools\I18n\Dictionary\Loader\FileInterface
+     * @var \Magento\Setup\Module\I18n\Dictionary\Loader\FileInterface
      */
     protected $_dictionaryLoader;
 
     /**
      * Domain abstract factory
      *
-     * @var \Magento\Tools\I18n\Factory
+     * @var \Magento\Setup\Module\I18n\Factory
      */
     protected $_factory;
 
@@ -47,7 +47,7 @@ abstract class AbstractFile implements WriterInterface
     /**
      * Locale
      *
-     * @var \Magento\Tools\I18n\Locale
+     * @var \Magento\Setup\Module\I18n\Locale
      */
     protected $_locale;
 
@@ -112,7 +112,7 @@ abstract class AbstractFile implements WriterInterface
                 throw new \RuntimeException(
                     sprintf('Missed context in row #%d.', $key + 1)
                     . "\n"
-                    . 'Each row has to consist of 3 columns: original phrase, translation, context'
+                    . 'Each row has to consist of 4 columns: original phrase, translation, context type, context value'
                 );
             }
             foreach ($phrase->getContextValue() as $context) {
diff --git a/dev/tools/Magento/Tools/I18n/Pack/Writer/File/Csv.php b/setup/src/Magento/Setup/Module/I18n/Pack/Writer/File/Csv.php
similarity index 87%
rename from dev/tools/Magento/Tools/I18n/Pack/Writer/File/Csv.php
rename to setup/src/Magento/Setup/Module/I18n/Pack/Writer/File/Csv.php
index 7889cb8eefc96348015a99e07417e1eab417d4e9..2e799f09b25c5c258f3513e8f39ef1053d7ddcd2 100644
--- a/dev/tools/Magento/Tools/I18n/Pack/Writer/File/Csv.php
+++ b/setup/src/Magento/Setup/Module/I18n/Pack/Writer/File/Csv.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Pack\Writer\File;
+namespace Magento\Setup\Module\I18n\Pack\Writer\File;
 
 /**
  * Pack writer csv
@@ -25,7 +25,7 @@ class Csv extends AbstractFile
         }
 
         $writer = $this->_factory->createDictionaryWriter($file);
-        /** @var \Magento\Tools\I18n\Dictionary\Phrase $phrase */
+        /** @var \Magento\Setup\Module\I18n\Dictionary\Phrase $phrase */
         foreach ($phrases as $phrase) {
             $phrase->setContextType(null);
             $phrase->setContextValue(null);
@@ -52,7 +52,7 @@ class Csv extends AbstractFile
         foreach ($dictionary->getPhrases() as $phrase) {
             $merged[$phrase->getPhrase()] = $phrase;
         }
-        /** @var \Magento\Tools\I18n\Dictionary\Phrase $phrase */
+        /** @var \Magento\Setup\Module\I18n\Dictionary\Phrase $phrase */
         foreach ($phrases as $phrase) {
             $merged[$phrase->getPhrase()] = $phrase;
         }
diff --git a/dev/tools/Magento/Tools/I18n/Pack/WriterInterface.php b/setup/src/Magento/Setup/Module/I18n/Pack/WriterInterface.php
similarity index 70%
rename from dev/tools/Magento/Tools/I18n/Pack/WriterInterface.php
rename to setup/src/Magento/Setup/Module/I18n/Pack/WriterInterface.php
index eda2715b1f0df3a67a7d3962958751ad17d92400..19159add87aeca0b17f2207ad2b47079faa733fa 100644
--- a/dev/tools/Magento/Tools/I18n/Pack/WriterInterface.php
+++ b/setup/src/Magento/Setup/Module/I18n/Pack/WriterInterface.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Pack;
+namespace Magento\Setup\Module\I18n\Pack;
 
-use Magento\Tools\I18n\Dictionary;
-use Magento\Tools\I18n\Locale;
+use Magento\Setup\Module\I18n\Dictionary;
+use Magento\Setup\Module\I18n\Locale;
 
 /**
  * Pack writer interface
@@ -25,9 +25,9 @@ interface WriterInterface
     /**
      * Write dictionary data to language pack
      *
-     * @param \Magento\Tools\I18n\Dictionary $dictionary
+     * @param \Magento\Setup\Module\I18n\Dictionary $dictionary
      * @param string $packPath
-     * @param \Magento\Tools\I18n\Locale $locale
+     * @param \Magento\Setup\Module\I18n\Locale $locale
      * @param string $mode One of const of WriterInterface::MODE_
      * @return void
      */
diff --git a/dev/tools/Magento/Tools/I18n/Parser/AbstractParser.php b/setup/src/Magento/Setup/Module/I18n/Parser/AbstractParser.php
similarity index 92%
rename from dev/tools/Magento/Tools/I18n/Parser/AbstractParser.php
rename to setup/src/Magento/Setup/Module/I18n/Parser/AbstractParser.php
index 9ee0c24ac2787ce6c9a47ccd7cd8184221318f29..3c38c17e1656a464058110a4bec513c067562a89 100644
--- a/dev/tools/Magento/Tools/I18n/Parser/AbstractParser.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/AbstractParser.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Parser;
+namespace Magento\Setup\Module\I18n\Parser;
 
-use Magento\Tools\I18n;
+use Magento\Setup\Module\I18n;
 
 /**
  * Abstract parser
@@ -15,21 +15,21 @@ abstract class AbstractParser implements I18n\ParserInterface
     /**
      * Files collector
      *
-     * @var \Magento\Tools\I18n\FilesCollector
+     * @var \Magento\Setup\Module\I18n\FilesCollector
      */
     protected $_filesCollector = [];
 
     /**
      * Domain abstract factory
      *
-     * @var \Magento\Tools\I18n\Factory
+     * @var \Magento\Setup\Module\I18n\Factory
      */
     protected $_factory;
 
     /**
      * Adapters
      *
-     * @var \Magento\Tools\I18n\Parser\AdapterInterface[]
+     * @var \Magento\Setup\Module\I18n\Parser\AdapterInterface[]
      */
     protected $_adapters = [];
 
diff --git a/dev/tools/Magento/Tools/I18n/Parser/Adapter/AbstractAdapter.php b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/AbstractAdapter.php
similarity index 94%
rename from dev/tools/Magento/Tools/I18n/Parser/Adapter/AbstractAdapter.php
rename to setup/src/Magento/Setup/Module/I18n/Parser/Adapter/AbstractAdapter.php
index 1b10e7b06282359b54c88ff274f5a14ca60f46db..3faf4f513bcb2124ac139d46b415c7d87fedd001 100644
--- a/dev/tools/Magento/Tools/I18n/Parser/Adapter/AbstractAdapter.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/AbstractAdapter.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Parser\Adapter;
+namespace Magento\Setup\Module\I18n\Parser\Adapter;
 
-use Magento\Tools\I18n\Dictionary\Phrase;
-use Magento\Tools\I18n\Parser\AdapterInterface;
+use Magento\Setup\Module\I18n\Dictionary\Phrase;
+use Magento\Setup\Module\I18n\Parser\AdapterInterface;
 
 /**
  * Abstract parser adapter
diff --git a/dev/tools/Magento/Tools/I18n/Parser/Adapter/Js.php b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Js.php
similarity index 94%
rename from dev/tools/Magento/Tools/I18n/Parser/Adapter/Js.php
rename to setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Js.php
index 5db512b0d1dc914cde9ec0308b1b811571b98ddc..98b45bf38541f952ccfd5bd9a37d7aa638e9ccd8 100644
--- a/dev/tools/Magento/Tools/I18n/Parser/Adapter/Js.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Js.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Parser\Adapter;
+namespace Magento\Setup\Module\I18n\Parser\Adapter;
 
 /**
  * Js parser adapter
diff --git a/dev/tools/Magento/Tools/I18n/Parser/Adapter/Php.php b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php.php
similarity index 70%
rename from dev/tools/Magento/Tools/I18n/Parser/Adapter/Php.php
rename to setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php.php
index fa9af6e339496c263464bff74663be2050907aa5..7164a871b85834c83be44c63383ce85e273128b0 100644
--- a/dev/tools/Magento/Tools/I18n/Parser/Adapter/Php.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Parser\Adapter;
+namespace Magento\Setup\Module\I18n\Parser\Adapter;
 
-use Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector;
+use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector;
 
 /**
  * Php parser adapter
@@ -15,14 +15,14 @@ class Php extends AbstractAdapter
     /**
      * Phrase collector
      *
-     * @var \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector
+     * @var \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector
      */
     protected $_phraseCollector;
 
     /**
      * Adapter construct
      *
-     * @param \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector $phraseCollector
+     * @param \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector $phraseCollector
      */
     public function __construct(PhraseCollector $phraseCollector)
     {
diff --git a/dev/tools/Magento/Tools/I18n/Parser/Adapter/Php/Tokenizer.php b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer.php
similarity index 93%
rename from dev/tools/Magento/Tools/I18n/Parser/Adapter/Php/Tokenizer.php
rename to setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer.php
index 84c0f1bde5ffea3bb8ccb7d0dfa82fb52cc7f0d3..a59845bdd8f9a603c56b82a8d066945a780d71fa 100644
--- a/dev/tools/Magento/Tools/I18n/Parser/Adapter/Php/Tokenizer.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Parser\Adapter\Php;
+namespace Magento\Setup\Module\I18n\Parser\Adapter\Php;
 
 /**
  * Tokenizer
@@ -158,7 +158,7 @@ class Tokenizer
     /**
      * Get current token
      *
-     * @return \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Token
+     * @return \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token
      */
     public function getCurrentToken()
     {
@@ -168,7 +168,7 @@ class Tokenizer
     /**
      * Get next token
      *
-     * @return bool|\Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Token
+     * @return bool|\Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token
      */
     public function getNextToken()
     {
@@ -178,7 +178,7 @@ class Tokenizer
     /**
      * Get next token skipping all whitespaces
      *
-     * @return \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Token|false
+     * @return \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token|false
      */
     public function getNextRealToken()
     {
@@ -202,7 +202,7 @@ class Tokenizer
      * Create token from array|string
      *
      * @param array|string $tokenData
-     * @return \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Token
+     * @return \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token
      */
     private function _createToken($tokenData)
     {
diff --git a/dev/tools/Magento/Tools/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollector.php b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollector.php
similarity index 93%
rename from dev/tools/Magento/Tools/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollector.php
rename to setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollector.php
index 297177e1071c7a2eea19118382e9ffef9a5ec97a..ee7ecd15e0c5fdc8ed9f24c2eb4a3092dffe0371 100644
--- a/dev/tools/Magento/Tools/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollector.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollector.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer;
+namespace Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer;
 
-use Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer;
+use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer;
 
 /**
  * PhraseCollector
@@ -13,7 +13,7 @@ use Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer;
 class PhraseCollector
 {
     /**
-     * @var \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer
+     * @var \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer
      */
     protected $_tokenizer;
 
@@ -137,7 +137,7 @@ class PhraseCollector
     {
         $phrase = [];
         if ($phraseTokens) {
-            /** @var \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Token $phraseToken */
+            /** @var \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token $phraseToken */
             foreach ($phraseTokens as $phraseToken) {
                 if ($phraseToken->isConstantEncapsedString()) {
                     $phrase[] = $phraseToken->getValue();
diff --git a/dev/tools/Magento/Tools/I18n/Parser/Adapter/Php/Tokenizer/Token.php b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Token.php
similarity index 97%
rename from dev/tools/Magento/Tools/I18n/Parser/Adapter/Php/Tokenizer/Token.php
rename to setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Token.php
index 3aa9091008b5f5c163b2f2ab09e4cb4cb2c5eb40..a36b8b1e885307150ba4ef9d95ccd8381bfd2137 100644
--- a/dev/tools/Magento/Tools/I18n/Parser/Adapter/Php/Tokenizer/Token.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Token.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer;
+namespace Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer;
 
 /**
  * Token
diff --git a/dev/tools/Magento/Tools/I18n/Parser/Adapter/Php/Tokenizer/Translate/MethodCollector.php b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Translate/MethodCollector.php
similarity index 83%
rename from dev/tools/Magento/Tools/I18n/Parser/Adapter/Php/Tokenizer/Translate/MethodCollector.php
rename to setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Translate/MethodCollector.php
index dffc693d299dc6af8304e3c230e7087aa87741b9..6bd31c61b83f500c37dc48e50f474832fe2684d5 100644
--- a/dev/tools/Magento/Tools/I18n/Parser/Adapter/Php/Tokenizer/Translate/MethodCollector.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Translate/MethodCollector.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Translate;
+namespace Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Translate;
 
-use Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector;
+use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector;
 
 /**
  * MethodCollector
@@ -33,7 +33,7 @@ class MethodCollector extends PhraseCollector
     /**
      * Check if token is translated function
      *
-     * @param \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Token $token
+     * @param \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token $token
      * @return bool
      */
     protected function _isTranslateFunction($token)
diff --git a/dev/tools/Magento/Tools/I18n/Parser/Adapter/Xml.php b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Xml.php
similarity index 96%
rename from dev/tools/Magento/Tools/I18n/Parser/Adapter/Xml.php
rename to setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Xml.php
index df7d5f5ba57d901fc4c8b25d8585717355ed8e28..dd20f551d553560fdbd42dd77b870926970c98b6 100644
--- a/dev/tools/Magento/Tools/I18n/Parser/Adapter/Xml.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Xml.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Parser\Adapter;
+namespace Magento\Setup\Module\I18n\Parser\Adapter;
 
 /**
  * Xml parser adapter
diff --git a/dev/tools/Magento/Tools/I18n/Parser/AdapterInterface.php b/setup/src/Magento/Setup/Module/I18n/Parser/AdapterInterface.php
similarity index 89%
rename from dev/tools/Magento/Tools/I18n/Parser/AdapterInterface.php
rename to setup/src/Magento/Setup/Module/I18n/Parser/AdapterInterface.php
index 30b31f2805da70bc55a3b6267980cabf6b629ba1..5621552a72090afbd636127f1e7843ce0a81c254 100644
--- a/dev/tools/Magento/Tools/I18n/Parser/AdapterInterface.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/AdapterInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Parser;
+namespace Magento\Setup\Module\I18n\Parser;
 
 /**
  * Adapter Interface
diff --git a/dev/tools/Magento/Tools/I18n/Parser/Contextual.php b/setup/src/Magento/Setup/Module/I18n/Parser/Contextual.php
similarity index 91%
rename from dev/tools/Magento/Tools/I18n/Parser/Contextual.php
rename to setup/src/Magento/Setup/Module/I18n/Parser/Contextual.php
index 8d6987f146541be38e7cc50845d66c28b9025c6d..1642f3b1683c04a3a50586226a5f873c27c43d02 100644
--- a/dev/tools/Magento/Tools/I18n/Parser/Contextual.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/Contextual.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Parser;
+namespace Magento\Setup\Module\I18n\Parser;
 
-use Magento\Tools\I18n;
+use Magento\Setup\Module\I18n;
 
 /**
  * Contextual Parser
@@ -15,7 +15,7 @@ class Contextual extends AbstractParser
     /**
      * Context
      *
-     * @var \Magento\Tools\I18n\Context
+     * @var \Magento\Setup\Module\I18n\Context
      */
     protected $_context;
 
@@ -66,7 +66,7 @@ class Contextual extends AbstractParser
         $phraseKey = $contextType . $phraseData['phrase'];
 
         if (isset($this->_phrases[$phraseKey])) {
-            /** @var \Magento\Tools\I18n\Dictionary\Phrase $phrase */
+            /** @var \Magento\Setup\Module\I18n\Dictionary\Phrase $phrase */
             $phrase = $this->_phrases[$phraseKey];
             $phrase->addContextValue($contextValue);
         } else {
diff --git a/dev/tools/Magento/Tools/I18n/Parser/Parser.php b/setup/src/Magento/Setup/Module/I18n/Parser/Parser.php
similarity index 95%
rename from dev/tools/Magento/Tools/I18n/Parser/Parser.php
rename to setup/src/Magento/Setup/Module/I18n/Parser/Parser.php
index e125c2734b95d59320fe11d21c7c5edca369acab..5766154cd9196908d6ec6430a8b9a0a69a206cfc 100644
--- a/dev/tools/Magento/Tools/I18n/Parser/Parser.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/Parser.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Parser;
+namespace Magento\Setup\Module\I18n\Parser;
 
 /**
  * Parser
diff --git a/dev/tools/Magento/Tools/I18n/ParserInterface.php b/setup/src/Magento/Setup/Module/I18n/ParserInterface.php
similarity index 92%
rename from dev/tools/Magento/Tools/I18n/ParserInterface.php
rename to setup/src/Magento/Setup/Module/I18n/ParserInterface.php
index 038cfc22475db1a113ffa4570f339b061a9635b9..026542170d9f4a65c82a8faa09cc650030adb9b2 100644
--- a/dev/tools/Magento/Tools/I18n/ParserInterface.php
+++ b/setup/src/Magento/Setup/Module/I18n/ParserInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n;
+namespace Magento\Setup\Module\I18n;
 
 /**
  * Parser Interface
diff --git a/dev/tools/Magento/Tools/I18n/ServiceLocator.php b/setup/src/Magento/Setup/Module/I18n/ServiceLocator.php
similarity index 83%
rename from dev/tools/Magento/Tools/I18n/ServiceLocator.php
rename to setup/src/Magento/Setup/Module/I18n/ServiceLocator.php
index 021493b0155b1c5802cf1878330998b6bc0ab8b6..cbbbc7fed9f974dec1be8506198ab52227684566 100644
--- a/dev/tools/Magento/Tools/I18n/ServiceLocator.php
+++ b/setup/src/Magento/Setup/Module/I18n/ServiceLocator.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n;
+namespace Magento\Setup\Module\I18n;
 
 
 /**
@@ -15,35 +15,35 @@ class ServiceLocator
     /**
      * Domain abstract factory
      *
-     * @var \Magento\Tools\I18n\Factory
+     * @var \Magento\Setup\Module\I18n\Factory
      */
     private static $_factory;
 
     /**
      * Context manager
      *
-     * @var \Magento\Tools\I18n\Factory
+     * @var \Magento\Setup\Module\I18n\Factory
      */
     private static $_context;
 
     /**
      * Dictionary generator
      *
-     * @var \Magento\Tools\I18n\Dictionary\Generator
+     * @var \Magento\Setup\Module\I18n\Dictionary\Generator
      */
     private static $_dictionaryGenerator;
 
     /**
      * Pack generator
      *
-     * @var \Magento\Tools\I18n\Pack\Generator
+     * @var \Magento\Setup\Module\I18n\Pack\Generator
      */
     private static $_packGenerator;
 
     /**
      * Get dictionary generator
      *
-     * @return \Magento\Tools\I18n\Dictionary\Generator
+     * @return \Magento\Setup\Module\I18n\Dictionary\Generator
      */
     public static function getDictionaryGenerator()
     {
@@ -77,7 +77,7 @@ class ServiceLocator
     /**
      * Get pack generator
      *
-     * @return \Magento\Tools\I18n\Pack\Generator
+     * @return \Magento\Setup\Module\I18n\Pack\Generator
      */
     public static function getPackGenerator()
     {
@@ -93,12 +93,12 @@ class ServiceLocator
     /**
      * Get factory
      *
-     * @return \Magento\Tools\I18n\Factory
+     * @return \Magento\Setup\Module\I18n\Factory
      */
     private static function _getFactory()
     {
         if (null === self::$_factory) {
-            self::$_factory = new \Magento\Tools\I18n\Factory();
+            self::$_factory = new \Magento\Setup\Module\I18n\Factory();
         }
         return self::$_factory;
     }
@@ -106,7 +106,7 @@ class ServiceLocator
     /**
      * Get context
      *
-     * @return \Magento\Tools\I18n\Context
+     * @return \Magento\Setup\Module\I18n\Context
      */
     private static function _getContext()
     {
diff --git a/setup/src/Magento/Setup/Test/Unit/Console/Command/DeployStaticContentCommandTest.php b/setup/src/Magento/Setup/Test/Unit/Console/Command/DeployStaticContentCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..9f8d24d51667c62a7d37b3bedce1bf53124617a0
--- /dev/null
+++ b/setup/src/Magento/Setup/Test/Unit/Console/Command/DeployStaticContentCommandTest.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Setup\Test\Unit\Console\Command;
+
+use Magento\Setup\Console\Command\DeployStaticContentCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+class DeployStaticContentCommandTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Framework\App\DeploymentConfig|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $deploymentConfig;
+
+    /**
+     * @var \Magento\Setup\Model\ObjectManagerProvider|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $objectManagerProvider;
+
+    /**
+     * @var \Magento\Setup\Model\Deployer|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $deployer;
+
+    /**
+     * @var \Magento\Framework\ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $objectManager;
+
+    /**
+     * @var \Magento\Framework\App\Utility\Files|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $filesUtil;
+
+    /**
+     * @var DeployStaticContentCommand
+     */
+    private $command;
+
+    protected function setUp()
+    {
+        $this->objectManagerProvider = $this->getMock('Magento\Setup\Model\ObjectManagerProvider', [], [], '', false);
+        $this->objectManager = $this->getMockForAbstractClass('Magento\Framework\ObjectManagerInterface');
+        $this->deployer = $this->getMock('Magento\Setup\Model\Deployer', [], [], '', false);
+        $this->deploymentConfig = $this->getMock('Magento\Framework\App\DeploymentConfig', [], [], '', false);
+        $this->filesUtil = $this->getMock('Magento\Framework\App\Utility\Files', [], [], '', false);
+        $this->command = new DeployStaticContentCommand($this->objectManagerProvider, $this->deploymentConfig);
+    }
+
+    public function testExecute()
+    {
+        $omFactory = $this->getMock('Magento\Framework\App\ObjectManagerFactory', [], [], '', false);
+        $this->objectManagerProvider->expects($this->any())
+            ->method('get')
+            ->will($this->returnValue($this->objectManager));
+
+        $this->objectManagerProvider->expects($this->once())
+            ->method('getObjectManagerFactory')
+            ->with([])
+            ->willReturn($omFactory);
+
+        $this->deployer->expects($this->once())->method('deploy');
+
+        $this->objectManager->expects($this->at(0))
+            ->method('create')
+            ->willReturn($this->filesUtil);
+
+        $this->objectManager->expects($this->at(1))
+            ->method('create')
+            ->willReturn($this->deployer);
+
+        $this->deploymentConfig->expects($this->once())
+            ->method('isAvailable')
+            ->will($this->returnValue(true));
+        $tester = new CommandTester($this->command);
+        $tester->execute([]);
+    }
+
+    public function testExecuteNotInstalled()
+    {
+        $this->deploymentConfig->expects($this->once())
+            ->method('isAvailable')
+            ->will($this->returnValue(false));
+        $this->objectManagerProvider->expects($this->never())->method('get');
+        $tester = new CommandTester($this->command);
+        $tester->execute([]);
+        $this->assertStringMatchesFormat(
+            'You need to install the Magento application before running this utility.%w',
+            $tester->getDisplay()
+        );
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage ARG_IS_WRONG argument has invalid value format
+     */
+    public function testExecuteInvalidLanguageArgument()
+    {
+        $this->deploymentConfig->expects($this->once())
+            ->method('isAvailable')
+            ->will($this->returnValue(true));
+        $wrongParam = ['languages' => ['ARG_IS_WRONG']];
+        $commandTester = new CommandTester($this->command);
+        $commandTester->execute($wrongParam);
+    }
+}
diff --git a/setup/src/Magento/Setup/Test/Unit/Console/Command/DiCompileCommandTest.php b/setup/src/Magento/Setup/Test/Unit/Console/Command/DiCompileCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b2c5e9a65254d11e3eb2a18f778a9276c022aed1
--- /dev/null
+++ b/setup/src/Magento/Setup/Test/Unit/Console/Command/DiCompileCommandTest.php
@@ -0,0 +1,85 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Setup\Test\Unit\Console\Command;
+
+use Magento\Setup\Console\Command\DiCompileCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+class DiCompileCommandTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Framework\App\DeploymentConfig|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $deploymentConfig;
+
+    /**
+     * @var \Magento\Setup\Module\Di\App\Task\Manager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $manager;
+
+    /**
+     * @var \Magento\Framework\ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $objectManager;
+
+    /**
+     * @var DiCompileCommand
+     */
+    private $command;
+
+    public function setUp()
+    {
+        $this->deploymentConfig = $this->getMock('Magento\Framework\App\DeploymentConfig', [], [], '', false);
+        $objectManagerProvider = $this->getMock(
+            'Magento\Setup\Model\ObjectManagerProvider',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->objectManager = $this->getMockForAbstractClass(
+            'Magento\Framework\ObjectManagerInterface',
+            [],
+            '',
+            false
+        );
+        $objectManagerProvider->expects($this->once())->method('get')->willReturn($this->objectManager);
+        $this->manager = $this->getMock('Magento\Setup\Module\Di\App\Task\Manager', [], [], '', false);
+        $directoryList = $this->getMock('Magento\Framework\App\Filesystem\DirectoryList', [], [], '', false);
+        $directoryList->expects($this->exactly(3))->method('getPath');
+        $this->command = new DiCompileCommand(
+            $this->deploymentConfig,
+            $directoryList,
+            $this->manager,
+            $objectManagerProvider
+        );
+    }
+
+    public function testExecuteNotInstalled()
+    {
+        $this->deploymentConfig->expects($this->once())->method('isAvailable')->willReturn(false);
+        $tester = new CommandTester($this->command);
+        $tester->execute([]);
+        $this->assertEquals(
+            'You cannot run this command because the Magento application is not installed.' . PHP_EOL,
+            $tester->getDisplay()
+        );
+    }
+
+    public function testExecute()
+    {
+        $this->deploymentConfig->expects($this->once())->method('isAvailable')->willReturn(true);
+        $this->objectManager->expects($this->once())->method('configure');
+        $this->manager->expects($this->exactly(5))->method('addOperation');
+        $this->manager->expects($this->once())->method('process');
+        $tester = new CommandTester($this->command);
+        $tester->execute([]);
+        $this->assertEquals(
+            'Generated code and dependency injection configuration successfully.' . PHP_EOL,
+            $tester->getDisplay()
+        );
+    }
+}
diff --git a/setup/src/Magento/Setup/Test/Unit/Console/CommandListTest.php b/setup/src/Magento/Setup/Test/Unit/Console/CommandListTest.php
index 39e78dc660683bd3b555ed6553dfc9e09f591c63..65d1fa6db2ad81617ea7952cf5eff63f678bd5c9 100644
--- a/setup/src/Magento/Setup/Test/Unit/Console/CommandListTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Console/CommandListTest.php
@@ -28,33 +28,8 @@ class CommandListTest extends \PHPUnit_Framework_TestCase
 
     public function testGetCommands()
     {
-        $commands = [
-            'Magento\Setup\Console\Command\AdminUserCreateCommand',
-            'Magento\Setup\Console\Command\ConfigSetCommand',
-            'Magento\Setup\Console\Command\DbDataUpgradeCommand',
-            'Magento\Setup\Console\Command\DbSchemaUpgradeCommand',
-            'Magento\Setup\Console\Command\DbStatusCommand',
-            'Magento\Setup\Console\Command\InfoCurrencyListCommand',
-            'Magento\Setup\Console\Command\InfoLanguageListCommand',
-            'Magento\Setup\Console\Command\InfoTimezoneListCommand',
-            'Magento\Setup\Console\Command\InstallCommand',
-            'Magento\Setup\Console\Command\InstallStoreConfigurationCommand',
-            'Magento\Setup\Console\Command\ModuleEnableCommand',
-            'Magento\Setup\Console\Command\ModuleDisableCommand',
-            'Magento\Setup\Console\Command\ModuleStatusCommand',
-            'Magento\Setup\Console\Command\MaintenanceAllowIpsCommand',
-            'Magento\Setup\Console\Command\MaintenanceDisableCommand',
-            'Magento\Setup\Console\Command\MaintenanceEnableCommand',
-            'Magento\Setup\Console\Command\MaintenanceStatusCommand',
-            'Magento\Setup\Console\Command\UpgradeCommand',
-            'Magento\Setup\Console\Command\UninstallCommand',
-        ];
-        $index = 0;
-        foreach ($commands as $command) {
-            $this->serviceManager->expects($this->at($index++))
-                ->method('create')
-                ->with($command);
-        }
+        $this->serviceManager->expects($this->atLeastOnce())
+            ->method('create');
 
         $this->commandList->getCommands();
     }
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/App/Task/AreaTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/AreaTest.php
similarity index 81%
rename from dev/tools/Magento/Tools/Di/Test/Unit/App/Task/AreaTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/AreaTest.php
index c55f63e8ab9cefa9dc2ed4d3d64bc812b8c11c4d..f4a83fd3a97acfdfe3f08be0ce55ce51b4bc13ac 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/App/Task/AreaTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/AreaTest.php
@@ -3,13 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Test\Unit\App\Task;
+namespace Magento\Setup\Test\Unit\Module\Di\App\Task;
 
 use Magento\Framework\App;
-use Magento\Tools\Di\App\Task\Operation\Area;
-use Magento\Tools\Di\Code\Reader\ClassesScanner;
-use Magento\Tools\Di\Compiler\Config;
-use Magento\Tools\Di\Definition\Collection as DefinitionsCollection;
+use Magento\Setup\Module\Di\App\Task\Operation\Area;
+use Magento\Setup\Module\Di\Compiler\Config;
 
 class AreaTest extends \PHPUnit_Framework_TestCase
 {
@@ -19,7 +17,7 @@ class AreaTest extends \PHPUnit_Framework_TestCase
     private $areaListMock;
 
     /**
-     * @var \Magento\Tools\Di\Code\Reader\Decorator\Area | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\Di\Code\Reader\Decorator\Area | \PHPUnit_Framework_MockObject_MockObject
      */
     private $areaInstancesNamesList;
 
@@ -34,7 +32,7 @@ class AreaTest extends \PHPUnit_Framework_TestCase
     private $configWriterMock;
 
     /**
-     * @var \Magento\Tools\Di\Compiler\Config\ModificationChain | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\Di\Compiler\Config\ModificationChain | \PHPUnit_Framework_MockObject_MockObject
      */
     private $configChain;
 
@@ -43,16 +41,16 @@ class AreaTest extends \PHPUnit_Framework_TestCase
         $this->areaListMock = $this->getMockBuilder('Magento\Framework\App\AreaList')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->areaInstancesNamesList = $this->getMockBuilder('\Magento\Tools\Di\Code\Reader\Decorator\Area')
+        $this->areaInstancesNamesList = $this->getMockBuilder('\Magento\Setup\Module\Di\Code\Reader\Decorator\Area')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->configReaderMock = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\Reader')
+        $this->configReaderMock = $this->getMockBuilder('Magento\Setup\Module\Di\Compiler\Config\Reader')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->configWriterMock = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\WriterInterface')
+        $this->configWriterMock = $this->getMockBuilder('Magento\Setup\Module\Di\Compiler\Config\WriterInterface')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->configChain = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\ModificationChain')
+        $this->configChain = $this->getMockBuilder('Magento\Setup\Module\Di\Compiler\Config\ModificationChain')
             ->disableOriginalConstructor()
             ->getMock();
     }
@@ -99,7 +97,7 @@ class AreaTest extends \PHPUnit_Framework_TestCase
         $this->configReaderMock->expects($this->once())
             ->method('generateCachePerScope')
             ->with(
-                $this->isInstanceOf('Magento\Tools\Di\Definition\Collection'),
+                $this->isInstanceOf('Magento\Setup\Module\Di\Definition\Collection'),
                 App\Area::AREA_GLOBAL
             )
             ->willReturn($generatedConfig);
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/App/Task/InterceptionCacheTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/InterceptionCacheTest.php
similarity index 89%
rename from dev/tools/Magento/Tools/Di/Test/Unit/App/Task/InterceptionCacheTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/InterceptionCacheTest.php
index 9d86c20b3b38195b16344fe00cec12b97d2c6ee8..a60932145180e39b0896a32146b9fbd62c1b6225 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/App/Task/InterceptionCacheTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/InterceptionCacheTest.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Test\Unit\App\Task;
+namespace Magento\Setup\Test\Unit\Module\Di\App\Task;
 
-use Magento\Tools\Di\App\Task\Operation\InterceptionCache;
+use Magento\Setup\Module\Di\App\Task\Operation\InterceptionCache;
 
 class InterceptionCacheTest extends \PHPUnit_Framework_TestCase
 {
@@ -15,7 +15,7 @@ class InterceptionCacheTest extends \PHPUnit_Framework_TestCase
     private $configMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Tools\Di\Code\Reader\Decorator\Interceptions
+     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Setup\Module\Di\Code\Reader\Decorator\Interceptions
      */
     private $interceptionsListMock;
 
@@ -26,7 +26,7 @@ class InterceptionCacheTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $this->interceptionsListMock = $this->getMockBuilder(
-            'Magento\Tools\Di\Code\Reader\Decorator\Interceptions'
+            'Magento\Setup\Module\Di\Code\Reader\Decorator\Interceptions'
         )
             ->setMethods([])
             ->disableOriginalConstructor()
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/App/Task/OperationFactoryTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/OperationFactoryTest.php
similarity index 65%
rename from dev/tools/Magento/Tools/Di/Test/Unit/App/Task/OperationFactoryTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/OperationFactoryTest.php
index 0e9645a97822480eb1a9168f57b66257964a1793..9acc4b3cfdf35b66018b7edb0777b31031a56986 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/App/Task/OperationFactoryTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/OperationFactoryTest.php
@@ -6,10 +6,10 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Tools\Di\Test\Unit\App\Task;
+namespace Magento\Setup\Test\Unit\Module\Di\App\Task;
 
-use Magento\Tools\Di\App\Task\OperationFactory;
-use Magento\Tools\Di\App\Task\OperationException;
+use Magento\Setup\Module\Di\App\Task\OperationFactory;
+use Magento\Setup\Module\Di\App\Task\OperationException;
 
 class OperationFactoryTest extends \PHPUnit_Framework_TestCase
 {
@@ -28,8 +28,10 @@ class OperationFactoryTest extends \PHPUnit_Framework_TestCase
         $this->objectManagerMock = $this->getMockBuilder('Magento\Framework\ObjectManagerInterface')
             ->setMethods([])
             ->getMock();
+        $objectManagerProviderMock = $this->getMock('Magento\Setup\Model\ObjectManagerProvider', [], [], '', false);
+        $objectManagerProviderMock->expects($this->once())->method('get')->willReturn($this->objectManagerMock);
         $this->factory = new OperationFactory(
-            $this->objectManagerMock
+            $objectManagerProviderMock
         );
     }
 
@@ -40,7 +42,7 @@ class OperationFactoryTest extends \PHPUnit_Framework_TestCase
      */
     public function testCreateSuccess($alias, $arguments, $instanceName)
     {
-        $operationInstance = $this->getMockBuilder('Magento\Tools\Di\App\Task\OperationInterface')
+        $operationInstance = $this->getMockBuilder('Magento\Setup\Module\Di\App\Task\OperationInterface')
             ->getMock();
 
         $this->objectManagerMock->expects($this->once())
@@ -55,7 +57,7 @@ class OperationFactoryTest extends \PHPUnit_Framework_TestCase
     {
         $notRegisteredOperation = 'coffee';
         $this->setExpectedException(
-            'Magento\Tools\Di\App\Task\OperationException',
+            'Magento\Setup\Module\Di\App\Task\OperationException',
             sprintf('Unrecognized operation "%s"', $notRegisteredOperation),
             OperationException::UNAVAILABLE_OPERATION
         );
@@ -68,9 +70,9 @@ class OperationFactoryTest extends \PHPUnit_Framework_TestCase
     public function aliasesDataProvider()
     {
         return  [
-            [OperationFactory::AREA_CONFIG_GENERATOR, [], 'Magento\Tools\Di\App\Task\Operation\Area'],
-            [OperationFactory::INTERCEPTION, null, 'Magento\Tools\Di\App\Task\Operation\Interception'],
-            [OperationFactory::INTERCEPTION_CACHE, 1, 'Magento\Tools\Di\App\Task\Operation\InterceptionCache'],
+            [OperationFactory::AREA_CONFIG_GENERATOR, [], 'Magento\Setup\Module\Di\App\Task\Operation\Area'],
+            [OperationFactory::INTERCEPTION, null, 'Magento\Setup\Module\Di\App\Task\Operation\Interception'],
+            [OperationFactory::INTERCEPTION_CACHE, 1, 'Magento\Setup\Module\Di\App\Task\Operation\InterceptionCache'],
         ];
     }
 
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/App/Task/RepositoryGeneratorTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/RepositoryGeneratorTest.php
similarity index 88%
rename from dev/tools/Magento/Tools/Di/Test/Unit/App/Task/RepositoryGeneratorTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/RepositoryGeneratorTest.php
index 37ec47ce228e737092040de57d9575972d2b16c2..0b2b5310c67b2e57fd168ec618b3626397cce02e 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/App/Task/RepositoryGeneratorTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/RepositoryGeneratorTest.php
@@ -4,11 +4,11 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Test\Unit\App\Task;
+namespace Magento\Setup\Test\Unit\Module\Di\App\Task;
 
-use Magento\Tools\Di\App\Task\Operation\RepositoryGenerator;
-use Magento\Tools\Di\Code\Scanner;
-use Magento\Tools\Di\Code\Reader\ClassesScanner;
+use Magento\Setup\Module\Di\App\Task\Operation\RepositoryGenerator;
+use Magento\Setup\Module\Di\Code\Scanner;
+use Magento\Setup\Module\Di\Code\Reader\ClassesScanner;
 
 class RepositoryGeneratorTest extends \PHPUnit_Framework_TestCase
 {
@@ -29,15 +29,15 @@ class RepositoryGeneratorTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->directoryScannerMock = $this->getMockBuilder('Magento\Tools\Di\Code\Scanner\DirectoryScanner')
+        $this->directoryScannerMock = $this->getMockBuilder('Magento\Setup\Module\Di\Code\Scanner\DirectoryScanner')
             ->setMethods([])
             ->disableOriginalConstructor()
             ->getMock();
-        $this->repositoryScannerMock = $this->getMockBuilder('Magento\Tools\Di\Code\Scanner\RepositoryScanner')
+        $this->repositoryScannerMock = $this->getMockBuilder('Magento\Setup\Module\Di\Code\Scanner\RepositoryScanner')
             ->setMethods([])
             ->disableOriginalConstructor()
             ->getMock();
-        $this->classesScannerMock = $this->getMockBuilder('Magento\Tools\Di\Code\Reader\ClassesScanner')
+        $this->classesScannerMock = $this->getMockBuilder('Magento\Setup\Module\Di\Code\Reader\ClassesScanner')
             ->setMethods([])
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Generator/InterceptionConfigurationBuilderTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Generator/InterceptionConfigurationBuilderTest.php
similarity index 87%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Code/Generator/InterceptionConfigurationBuilderTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Generator/InterceptionConfigurationBuilderTest.php
index a8196935b92ad31806eb12602d83b48e92bbfae0..928afe76a0685ea8302b069ecbcc873782f51f99 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Generator/InterceptionConfigurationBuilderTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Generator/InterceptionConfigurationBuilderTest.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Test\Unit\Code\Generator;
+namespace Magento\Setup\Test\Unit\Module\Di\Code\Generator;
 
 use Magento\Framework\App\Interception\Cache\CompiledConfig;
 
 class InterceptionConfigurationBuilderTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\Di\Code\Generator\InterceptionConfigurationBuilder
+     * @var \Magento\Setup\Module\Di\Code\Generator\InterceptionConfigurationBuilder
      */
     protected $model;
     /**
@@ -43,7 +43,7 @@ class InterceptionConfigurationBuilderTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->pluginList = $this->getMock(
-            'Magento\Tools\Di\Code\Generator\PluginList',
+            'Magento\Setup\Module\Di\Code\Generator\PluginList',
             ['setInterceptedClasses', 'setScopePriorityScheme', 'getPluginsConfig'],
             [],
             '',
@@ -57,8 +57,8 @@ class InterceptionConfigurationBuilderTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->typeReader = $this->getMock('Magento\Tools\Di\Code\Reader\Type', ['isConcrete'], [], '', false);
-        $this->model = new \Magento\Tools\Di\Code\Generator\InterceptionConfigurationBuilder(
+        $this->typeReader = $this->getMock('Magento\Setup\Module\Di\Code\Reader\Type', ['isConcrete'], [], '', false);
+        $this->model = new \Magento\Setup\Module\Di\Code\Generator\InterceptionConfigurationBuilder(
             $this->interceptionConfig,
             $this->pluginList,
             $this->typeReader,
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/ClassReaderDecoratorTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Reader/ClassReaderDecoratorTest.php
similarity index 86%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/ClassReaderDecoratorTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Reader/ClassReaderDecoratorTest.php
index 2cbbbc173adb4b92b3cc6481b0c805b27f838e3c..9965a50ec82ca22cf0ad7dbcec589cd20a677378 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/ClassReaderDecoratorTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Reader/ClassReaderDecoratorTest.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Test\Unit\Code\Reader;
+namespace Magento\Setup\Test\Unit\Module\Di\Code\Reader;
 
-use Magento\Tools\Di\Compiler\ConstructorArgument;
+use Magento\Setup\Module\Di\Compiler\ConstructorArgument;
 
 class ClassReaderDecoratorTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\Di\Code\Reader\ClassReaderDecorator
+     * @var \Magento\Setup\Module\Di\Code\Reader\ClassReaderDecorator
      */
     private $model;
 
@@ -25,7 +25,7 @@ class ClassReaderDecoratorTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
-        $this->model = new \Magento\Tools\Di\Code\Reader\ClassReaderDecorator($this->classReaderMock);
+        $this->model = new \Magento\Setup\Module\Di\Code\Reader\ClassReaderDecorator($this->classReaderMock);
     }
 
     /**
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/AreaTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Reader/InstancesNamesList/AreaTest.php
similarity index 74%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/AreaTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Reader/InstancesNamesList/AreaTest.php
index 8a74b8a4dbe7a6a8aa5ced6f3743e4db54e6d704..1ef35e58f13fdbf857f2d11975e2afd3662574cd 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/AreaTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Reader/InstancesNamesList/AreaTest.php
@@ -3,24 +3,24 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Test\Unit\Code\Reader\InstancesNamesList;
+namespace Magento\Setup\Test\Unit\Module\Di\Code\Reader\InstancesNamesList;
 
-use \Magento\Tools\Di\Code\Reader\Decorator\Area;
+use \Magento\Setup\Module\Di\Code\Reader\Decorator\Area;
 
 /**
  * Class AreaTest
  *
- * @package Magento\Tools\Di\Code\Reader\Decorator
+ * @package Magento\Setup\Module\Di\Code\Reader\Decorator
  */
 class AreaTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\Di\Code\Reader\ClassesScanner | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\Di\Code\Reader\ClassesScanner | \PHPUnit_Framework_MockObject_MockObject
      */
     private $classesScannerMock;
 
     /**
-     * @var \Magento\Tools\Di\Code\Reader\ClassReaderDecorator | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\Di\Code\Reader\ClassReaderDecorator | \PHPUnit_Framework_MockObject_MockObject
      */
     private $classReaderDecoratorMock;
 
@@ -31,17 +31,19 @@ class AreaTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->classesScannerMock = $this->getMockBuilder('\Magento\Tools\Di\Code\Reader\ClassesScanner')
+        $this->classesScannerMock = $this->getMockBuilder('\Magento\Setup\Module\Di\Code\Reader\ClassesScanner')
             ->disableOriginalConstructor()
             ->setMethods(['getList'])
             ->getMock();
 
-        $this->classReaderDecoratorMock = $this->getMockBuilder('\Magento\Tools\Di\Code\Reader\ClassReaderDecorator')
+        $this->classReaderDecoratorMock = $this->getMockBuilder(
+            '\Magento\Setup\Module\Di\Code\Reader\ClassReaderDecorator'
+        )
             ->disableOriginalConstructor()
             ->setMethods(['getConstructor'])
             ->getMock();
 
-        $this->model = new \Magento\Tools\Di\Code\Reader\Decorator\Area(
+        $this->model = new \Magento\Setup\Module\Di\Code\Reader\Decorator\Area(
             $this->classesScannerMock,
             $this->classReaderDecoratorMock
         );
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/DirectoryTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Reader/InstancesNamesList/DirectoryTest.php
similarity index 88%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/DirectoryTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Reader/InstancesNamesList/DirectoryTest.php
index aaa02faa6f70e79bfa7793ebfc05903cf3cc2535..759f25d2a2499f62422aa8a381a8d9f2c9a97ad6 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/DirectoryTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Reader/InstancesNamesList/DirectoryTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Test\Unit\Code\Reader\InstancesNamesList;
+namespace Magento\Setup\Test\Unit\Module\Di\Code\Reader\InstancesNamesList;
 
-use Magento\Tools\Di\Compiler\Log\Log;
+use Magento\Setup\Module\Di\Compiler\Log\Log;
 
 /**
  * Class DirectoryTest
  *
- * @package Magento\Tools\Di\Code\Reader\Decorator
+ * @package Magento\Setup\Module\Di\Code\Reader\Decorator
  */
 class DirectoryTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\Di\Code\Reader\ClassesScanner | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\Di\Code\Reader\ClassesScanner | \PHPUnit_Framework_MockObject_MockObject
      */
     private $classesScanner;
 
@@ -25,7 +25,7 @@ class DirectoryTest extends \PHPUnit_Framework_TestCase
     private $classReaderMock;
 
     /**
-     * @var \Magento\Tools\Di\Code\Reader\Decorator\Directory
+     * @var \Magento\Setup\Module\Di\Code\Reader\Decorator\Directory
      */
     private $model;
 
@@ -35,18 +35,18 @@ class DirectoryTest extends \PHPUnit_Framework_TestCase
     private $validatorMock;
 
     /**
-     * @var \Magento\Tools\Di\Compiler\Log\Log | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\Di\Compiler\Log\Log | \PHPUnit_Framework_MockObject_MockObject
      */
     private $logMock;
 
     protected function setUp()
     {
-        $this->logMock = $this->getMockBuilder('Magento\Tools\Di\Compiler\Log\Log')
+        $this->logMock = $this->getMockBuilder('Magento\Setup\Module\Di\Compiler\Log\Log')
             ->disableOriginalConstructor()
             ->setMethods(['add'])
             ->getMock();
 
-        $this->classesScanner = $this->getMockBuilder('\Magento\Tools\Di\Code\Reader\ClassesScanner')
+        $this->classesScanner = $this->getMockBuilder('\Magento\Setup\Module\Di\Code\Reader\ClassesScanner')
             ->disableOriginalConstructor()
             ->setMethods(['getList'])
             ->getMock();
@@ -61,7 +61,7 @@ class DirectoryTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['validate'])
             ->getMock();
 
-        $this->model = new \Magento\Tools\Di\Code\Reader\Decorator\Directory(
+        $this->model = new \Magento\Setup\Module\Di\Code\Reader\Decorator\Directory(
             $this->logMock,
             $this->classReaderMock,
             $this->classesScanner,
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/InterceptionsTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Reader/InstancesNamesList/InterceptionsTest.php
similarity index 86%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/InterceptionsTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Reader/InstancesNamesList/InterceptionsTest.php
index 238274ff5f804db60ec726ede11fdba3b0c23936..b50cc6e71b012cdf2c1db79796903afe161ba94c 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Reader/InstancesNamesList/InterceptionsTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Reader/InstancesNamesList/InterceptionsTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Test\Unit\Code\Reader\InstancesNamesList;
+namespace Magento\Setup\Test\Unit\Module\Di\Code\Reader\InstancesNamesList;
 
-use Magento\Tools\Di\Compiler\Log\Log;
+use Magento\Setup\Module\Di\Compiler\Log\Log;
 
 /**
  * Class InterceptionsTest
  *
- * @package Magento\Tools\Di\Code\Reader\Decorator
+ * @package Magento\Setup\Module\Di\Code\Reader\Decorator
  */
 class InterceptionsTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\Di\Code\Reader\ClassesScanner | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\Di\Code\Reader\ClassesScanner | \PHPUnit_Framework_MockObject_MockObject
      */
     private $classesScanner;
 
@@ -25,7 +25,7 @@ class InterceptionsTest extends \PHPUnit_Framework_TestCase
     private $classReaderMock;
 
     /**
-     * @var \Magento\Tools\Di\Code\Reader\Decorator\Directory
+     * @var \Magento\Setup\Module\Di\Code\Reader\Decorator\Directory
      */
     private $model;
 
@@ -35,18 +35,18 @@ class InterceptionsTest extends \PHPUnit_Framework_TestCase
     private $validatorMock;
 
     /**
-     * @var \Magento\Tools\Di\Compiler\Log\Log | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\Di\Compiler\Log\Log | \PHPUnit_Framework_MockObject_MockObject
      */
     private $logMock;
 
     protected function setUp()
     {
-        $this->logMock = $this->getMockBuilder('Magento\Tools\Di\Compiler\Log\Log')
+        $this->logMock = $this->getMockBuilder('Magento\Setup\Module\Di\Compiler\Log\Log')
             ->disableOriginalConstructor()
             ->setMethods(['add', 'report'])
             ->getMock();
 
-        $this->classesScanner = $this->getMockBuilder('\Magento\Tools\Di\Code\Reader\ClassesScanner')
+        $this->classesScanner = $this->getMockBuilder('\Magento\Setup\Module\Di\Code\Reader\ClassesScanner')
             ->disableOriginalConstructor()
             ->setMethods(['getList'])
             ->getMock();
@@ -61,7 +61,7 @@ class InterceptionsTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['validate', 'add'])
             ->getMock();
 
-        $this->model = new \Magento\Tools\Di\Code\Reader\Decorator\Interceptions(
+        $this->model = new \Magento\Setup\Module\Di\Code\Reader\Decorator\Interceptions(
             $this->classesScanner,
             $this->classReaderMock,
             $this->validatorMock,
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/ArrayScannerTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/ArrayScannerTest.php
similarity index 76%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/ArrayScannerTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/ArrayScannerTest.php
index 9ecc4d54674817e047eaa7b738324890587422c6..b8891faf39af49dff6c725517556746baa8b4d04 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/ArrayScannerTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/ArrayScannerTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Test\Unit\Code\Scanner;
+namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner;
 
 class ArrayScannerTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\Di\Code\Scanner\ArrayScanner
+     * @var \Magento\Setup\Module\Di\Code\Scanner\ArrayScanner
      */
     protected $_model;
 
@@ -19,7 +19,7 @@ class ArrayScannerTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->_model = new \Magento\Tools\Di\Code\Scanner\ArrayScanner();
+        $this->_model = new \Magento\Setup\Module\Di\Code\Scanner\ArrayScanner();
         $this->_testDir = str_replace('\\', '/', realpath(__DIR__ . '/../../') . '/_files');
     }
 
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/CompositeScannerTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/CompositeScannerTest.php
similarity index 77%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/CompositeScannerTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/CompositeScannerTest.php
index 6d8c24373d5755870a6bf5b64caf5f1da08d64cd..e681c6d55d0864138f0ab41409deb07b6257a8b6 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/CompositeScannerTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/CompositeScannerTest.php
@@ -3,18 +3,18 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Test\Unit\Code\Scanner;
+namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner;
 
 class CompositeScannerTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\Di\Code\Scanner\CompositeScanner
+     * @var \Magento\Setup\Module\Di\Code\Scanner\CompositeScanner
      */
     protected $_model;
 
     protected function setUp()
     {
-        $this->_model = new \Magento\Tools\Di\Code\Scanner\CompositeScanner();
+        $this->_model = new \Magento\Setup\Module\Di\Code\Scanner\CompositeScanner();
     }
 
     public function testScan()
@@ -23,8 +23,8 @@ class CompositeScannerTest extends \PHPUnit_Framework_TestCase
         $configFiles = ['one/file/config', 'two/file/config'];
         $files = ['php' => $phpFiles, 'config' => $configFiles];
 
-        $scannerPhp = $this->getMock('Magento\Tools\Di\Code\Scanner\ScannerInterface');
-        $scannerXml = $this->getMock('Magento\Tools\Di\Code\Scanner\ScannerInterface');
+        $scannerPhp = $this->getMock('Magento\Setup\Module\Di\Code\Scanner\ScannerInterface');
+        $scannerXml = $this->getMock('Magento\Setup\Module\Di\Code\Scanner\ScannerInterface');
 
         $scannerPhpExpected = ['Model_OneProxy', 'Model_TwoFactory'];
         $scannerXmlExpected = ['Model_OneProxy', 'Model_ThreeFactory'];
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/DirectoryScannerTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/DirectoryScannerTest.php
similarity index 91%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/DirectoryScannerTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/DirectoryScannerTest.php
index 86c924b1f325a21b6c032f4b250217e1511e3af2..b44d3243065b6d44bbe8b2930f07c9a7740d9c5b 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/DirectoryScannerTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/DirectoryScannerTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Test\Unit\Code\Scanner;
+namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner;
 
 class DirectoryScannerTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\Di\Code\Scanner\DirectoryScanner
+     * @var \Magento\Setup\Module\Di\Code\Scanner\DirectoryScanner
      */
     protected $_model;
 
@@ -19,7 +19,7 @@ class DirectoryScannerTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->_model = new \Magento\Tools\Di\Code\Scanner\DirectoryScanner();
+        $this->_model = new \Magento\Setup\Module\Di\Code\Scanner\DirectoryScanner();
         $this->_testDir = str_replace('\\', '/', realpath(__DIR__ . '/../../') . '/_files');
     }
 
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/PhpScannerTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/PhpScannerTest.php
similarity index 83%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/PhpScannerTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/PhpScannerTest.php
index 6c148c6aba3bab32643523ce4fbb5d33634c4ae5..6403592e0aaf10104226b39e593eede5e1090964 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/PhpScannerTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/PhpScannerTest.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Test\Unit\Code\Scanner;
+namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner;
 
 require_once __DIR__ . '/../../_files/app/code/Magento/SomeModule/Helper/Test.php';
 require_once __DIR__ . '/../../_files/app/code/Magento/SomeModule/ElementFactory.php';
 class PhpScannerTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\Di\Code\Scanner\PhpScanner
+     * @var \Magento\Setup\Module\Di\Code\Scanner\PhpScanner
      */
     protected $_model;
 
@@ -31,8 +31,8 @@ class PhpScannerTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->_model = new \Magento\Tools\Di\Code\Scanner\PhpScanner(
-            $this->_logMock = $this->getMock('\Magento\Tools\Di\Compiler\Log\Log', [], [], '', false)
+        $this->_model = new \Magento\Setup\Module\Di\Code\Scanner\PhpScanner(
+            $this->_logMock = $this->getMock('\Magento\Setup\Module\Di\Compiler\Log\Log', [], [], '', false)
         );
         $this->_testDir = str_replace('\\', '/', realpath(__DIR__ . '/../../') . '/_files');
         $this->_testFiles = [$this->_testDir . '/app/code/Magento/SomeModule/Helper/Test.php'];
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/PluginScannerTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/PluginScannerTest.php
similarity index 85%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/PluginScannerTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/PluginScannerTest.php
index adc1ebf2eaa69c83ebad7a3bba9926d09141ac49..1ac34de3b4296e4ef04dc875ce6a23c0ce3cfac5 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/PluginScannerTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/PluginScannerTest.php
@@ -6,13 +6,13 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Tools\Di\Test\Unit\Code\Scanner;
+namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner;
 
 class PluginScannerTest extends \PHPUnit_Framework_TestCase
 {
     protected function setUp()
     {
-        $this->_model = new \Magento\Tools\Di\Code\Scanner\PluginScanner();
+        $this->_model = new \Magento\Setup\Module\Di\Code\Scanner\PluginScanner();
         $this->_testDir = str_replace('\\', '/', realpath(__DIR__ . '/../../') . '/_files');
         $this->_testFiles = [
             $this->_testDir . '/app/code/Magento/SomeModule/etc/di.xml',
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/XmlInterceptorScannerTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/XmlInterceptorScannerTest.php
similarity index 81%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/XmlInterceptorScannerTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/XmlInterceptorScannerTest.php
index 70556e0f9e7a5dcd7f1a9fa6e34e6a287e0261da..7ac2c227a243ca07bc72274604595f0cca0fe1f7 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/XmlInterceptorScannerTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/XmlInterceptorScannerTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Test\Unit\Code\Scanner;
+namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner;
 
 class XmlInterceptorScannerTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\Di\Code\Scanner\XmlInterceptorScanner
+     * @var \Magento\Setup\Module\Di\Code\Scanner\XmlInterceptorScanner
      */
     protected $_model;
 
@@ -24,7 +24,7 @@ class XmlInterceptorScannerTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->_model = new \Magento\Tools\Di\Code\Scanner\XmlInterceptorScanner();
+        $this->_model = new \Magento\Setup\Module\Di\Code\Scanner\XmlInterceptorScanner();
         $this->_testDir = str_replace('\\', '/', realpath(__DIR__ . '/../../') . '/_files');
         $this->_testFiles = [
             $this->_testDir . '/app/code/Magento/SomeModule/etc/di.xml',
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/XmlScannerTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/XmlScannerTest.php
similarity index 85%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/XmlScannerTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/XmlScannerTest.php
index b1cd9b3dac280b565d3d152a5c49c2d9b9da1688..71b447e1c644e7e9745ef66d3a51c269b54668d3 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Code/Scanner/XmlScannerTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/XmlScannerTest.php
@@ -6,12 +6,12 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Tools\Di\Test\Unit\Code\Scanner;
+namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner;
 
 class XmlScannerTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\Di\Code\Scanner\XmlScanner
+     * @var \Magento\Setup\Module\Di\Code\Scanner\XmlScanner
      */
     protected $_model;
 
@@ -27,8 +27,8 @@ class XmlScannerTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->_model = new \Magento\Tools\Di\Code\Scanner\XmlScanner(
-            $this->_logMock = $this->getMock('\Magento\Tools\Di\Compiler\Log\Log', [], [], '', false)
+        $this->_model = new \Magento\Setup\Module\Di\Code\Scanner\XmlScanner(
+            $this->_logMock = $this->getMock('\Magento\Setup\Module\Di\Compiler\Log\Log', [], [], '', false)
         );
         $testDir = __DIR__ . '/../../' . '/_files';
         $this->_testFiles = [
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/ArgumentsResolverTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/ArgumentsResolverTest.php
similarity index 96%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Compiler/ArgumentsResolverTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/ArgumentsResolverTest.php
index 128ef2adab42fe267cb82a97258b2c8beb09db42..b0924f54d382aed67b96bd0aa3339344282363bb 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/ArgumentsResolverTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/ArgumentsResolverTest.php
@@ -4,14 +4,14 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Test\Unit\Compiler;
+namespace Magento\Setup\Test\Unit\Module\Di\Compiler;
 
-use Magento\Tools\Di\Compiler\ConstructorArgument;
+use Magento\Setup\Module\Di\Compiler\ConstructorArgument;
 
 class ArgumentsResolverTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\Di\Compiler\ArgumentsResolver
+     * @var \Magento\Setup\Module\Di\Compiler\ArgumentsResolver
      */
     protected $model;
 
@@ -29,7 +29,7 @@ class ArgumentsResolverTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->model = new \Magento\Tools\Di\Compiler\ArgumentsResolver($this->diContainerConfig);
+        $this->model = new \Magento\Setup\Module\Di\Compiler\ArgumentsResolver($this->diContainerConfig);
     }
 
     public function testGetResolvedArgumentsConstructorFormat()
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/Chain/ArgumentsSerializationTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/ArgumentsSerializationTest.php
similarity index 86%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/Chain/ArgumentsSerializationTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/ArgumentsSerializationTest.php
index 390c0854f7ef06205109b41905d8b87b78ad908e..01018b451e36d73943d90bf1a517cdc7353bbab9 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/Chain/ArgumentsSerializationTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/ArgumentsSerializationTest.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Test\Unit\Compiler\Config\Chain;
+namespace Magento\Setup\Test\Unit\Module\Di\Compiler\Config\Chain;
 
-use \Magento\Tools\Di\Compiler\Config\Chain\ArgumentsSerialization;
+use \Magento\Setup\Module\Di\Compiler\Config\Chain\ArgumentsSerialization;
 
 class ArgumentsSerializationTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/Chain/BackslashTrimTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/BackslashTrimTest.php
similarity index 94%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/Chain/BackslashTrimTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/BackslashTrimTest.php
index 14b95be2dee16a75d87214f8785a1ee1bc101d96..847a0f38627eb1494cb004f09b62c6cb773de0ef 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/Chain/BackslashTrimTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/BackslashTrimTest.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Test\Unit\Compiler\Config\Chain;
+namespace Magento\Setup\Test\Unit\Module\Di\Compiler\Config\Chain;
 
-use \Magento\Tools\Di\Compiler\Config\Chain\BackslashTrim;
+use \Magento\Setup\Module\Di\Compiler\Config\Chain\BackslashTrim;
 
 class BackslashTrimTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/Chain/InterceptorSubstitutionTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/InterceptorSubstitutionTest.php
similarity index 96%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/Chain/InterceptorSubstitutionTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/InterceptorSubstitutionTest.php
index d30437d6eef1b258edec843676aade8171fadd37..9376f8334a02dcb0455581513d591ff17a628c48 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/Chain/InterceptorSubstitutionTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/InterceptorSubstitutionTest.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Test\Unit\Compiler\Config\Chain;
+namespace Magento\Setup\Test\Unit\Module\Di\Compiler\Config\Chain;
 
-use Magento\Tools\Di\Compiler\Config\Chain\InterceptorSubstitution;
+use Magento\Setup\Module\Di\Compiler\Config\Chain\InterceptorSubstitution;
 
 class InterceptorSubstitutionTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/Chain/PreferencesResolvingTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/PreferencesResolvingTest.php
similarity index 97%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/Chain/PreferencesResolvingTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/PreferencesResolvingTest.php
index c4cdc2f672ec4e70a88709061589df6f0c457abc..c73ff5109d07ad3047aa7c01cd2cd3dc225a1504 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/Chain/PreferencesResolvingTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/PreferencesResolvingTest.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Test\Unit\Compiler\Config\Chain;
+namespace Magento\Setup\Test\Unit\Module\Di\Compiler\Config\Chain;
 
-use Magento\Tools\Di\Compiler\Config\Chain\PreferencesResolving;
+use Magento\Setup\Module\Di\Compiler\Config\Chain\PreferencesResolving;
 
 class PreferencesResolvingTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/ModificationChainTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/ModificationChainTest.php
similarity index 64%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/ModificationChainTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/ModificationChainTest.php
index 5cc1e2085feb262b5a2d798996be41d2ffbcf57f..42eebce83645b2e1d8cc2877f32e3479e2589e21 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/ModificationChainTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/ModificationChainTest.php
@@ -4,18 +4,18 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tools\Di\Test\Unit\Compiler\Config;
+namespace Magento\Setup\Test\Unit\Module\Di\Compiler\Config;
 
-use \Magento\Tools\Di\Compiler\Config\ModificationChain;
+use \Magento\Setup\Module\Di\Compiler\Config\ModificationChain;
 
 class ModificationChainTest extends \PHPUnit_Framework_TestCase
 {
     public function testConstructor()
     {
         $modificationsList = [];
-        $modificationsList[] = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\ModificationInterface')
+        $modificationsList[] = $this->getMockBuilder('Magento\Setup\Module\Di\Compiler\Config\ModificationInterface')
             ->getMock();
-        $modificationsList[] = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\ModificationInterface')
+        $modificationsList[] = $this->getMockBuilder('Magento\Setup\Module\Di\Compiler\Config\ModificationInterface')
             ->getMock();
 
         new ModificationChain($modificationsList);
@@ -25,9 +25,9 @@ class ModificationChainTest extends \PHPUnit_Framework_TestCase
     {
         $this->setExpectedException('InvalidArgumentException', 'Wrong modifier provided');
         $modificationsList = [];
-        $modificationsList[] = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\ModificationInterface')
+        $modificationsList[] = $this->getMockBuilder('Magento\Setup\Module\Di\Compiler\Config\ModificationInterface')
             ->getMock();
-        $modificationsList[] = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\ModificationInterface')
+        $modificationsList[] = $this->getMockBuilder('Magento\Setup\Module\Di\Compiler\Config\ModificationInterface')
             ->getMock();
         $modificationsList[] = 'banana';
 
@@ -48,9 +48,9 @@ class ModificationChainTest extends \PHPUnit_Framework_TestCase
             'data' => [1, 2, 3, 1, 1]
         ];
 
-        $modifier1 = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\ModificationInterface')
+        $modifier1 = $this->getMockBuilder('Magento\Setup\Module\Di\Compiler\Config\ModificationInterface')
             ->getMock();
-        $modifier2 = $this->getMockBuilder('Magento\Tools\Di\Compiler\Config\ModificationInterface')
+        $modifier2 = $this->getMockBuilder('Magento\Setup\Module\Di\Compiler\Config\ModificationInterface')
             ->getMock();
 
         $modificationsList = [$modifier1, $modifier2];
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/ReaderTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/ReaderTest.php
similarity index 90%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/ReaderTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/ReaderTest.php
index b0e35f72991d94e7b50b3242c2dcf467fb6fce59..ff05209a0769d3ac1662d642f0b7f7cf871b031e 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/Config/ReaderTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/ReaderTest.php
@@ -3,15 +3,15 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Test\Unit\Compiler\Config;
+namespace Magento\Setup\Test\Unit\Module\Di\Compiler\Config;
 
 use Magento\Framework\App\Area;
-use Magento\Tools\Di\Definition\Collection;
+use Magento\Setup\Module\Di\Definition\Collection;
 
 class ReaderTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\Di\Compiler\Config\Reader
+     * @var \Magento\Setup\Module\Di\Compiler\Config\Reader
      */
     protected $model;
 
@@ -50,26 +50,32 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
         $this->diContainerConfig = $this->getMock('Magento\Framework\ObjectManager\ConfigInterface', [], [], '', false);
         $this->configLoader = $this->getMock('Magento\Framework\App\ObjectManager\ConfigLoader', [], [], '', false);
         $this->argumentsResolverFactory = $this->getMock(
-            'Magento\Tools\Di\Compiler\ArgumentsResolverFactory',
+            'Magento\Setup\Module\Di\Compiler\ArgumentsResolverFactory',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->argumentsResolver = $this->getMock(
+            'Magento\Setup\Module\Di\Compiler\ArgumentsResolver',
             [],
             [],
             '',
             false
         );
-        $this->argumentsResolver = $this->getMock('Magento\Tools\Di\Compiler\ArgumentsResolver', [], [], '', false);
         $this->argumentsResolverFactory->expects($this->any())
             ->method('create')
             ->willReturn($this->argumentsResolver);
         $this->classReaderDecorator = $this->getMock(
-            'Magento\Tools\Di\Code\Reader\ClassReaderDecorator',
+            'Magento\Setup\Module\Di\Code\Reader\ClassReaderDecorator',
             [],
             [],
             '',
             false
         );
-        $this->typeReader = $this->getMock('Magento\Tools\Di\Code\Reader\Type', [], [], '', false);
+        $this->typeReader = $this->getMock('Magento\Setup\Module\Di\Code\Reader\Type', [], [], '', false);
 
-        $this->model = new \Magento\Tools\Di\Compiler\Config\Reader(
+        $this->model = new \Magento\Setup\Module\Di\Compiler\Config\Reader(
             $this->diContainerConfig,
             $this->configLoader,
             $this->argumentsResolverFactory,
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/ConstructorArgumentTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/ConstructorArgumentTest.php
similarity index 78%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Compiler/ConstructorArgumentTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/ConstructorArgumentTest.php
index b8209a222ffcbcd757e1e880a034a17891c74ea1..4f574217b480c65f05f0089bbb6e8f4e2c325c1d 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Compiler/ConstructorArgumentTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/ConstructorArgumentTest.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\Di\Test\Unit\Compiler;
+namespace Magento\Setup\Test\Unit\Module\Di\Compiler;
 
 class ConstructorArgumentTest extends \PHPUnit_Framework_TestCase
 {
     public function testInterface()
     {
         $argument = ['configuration', 'array', true, null];
-        $model = new \Magento\Tools\Di\Compiler\ConstructorArgument($argument);
+        $model = new \Magento\Setup\Module\Di\Compiler\ConstructorArgument($argument);
         $this->assertEquals($argument[0], $model->getName());
         $this->assertEquals($argument[1], $model->getType());
         $this->assertTrue($model->isRequired());
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/Definition/CollectionTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Definition/CollectionTest.php
similarity index 87%
rename from dev/tools/Magento/Tools/Di/Test/Unit/Definition/CollectionTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/Definition/CollectionTest.php
index 96fd2a754093fa650ee6b41e7b7626a880e26dd9..87821d22b1a1b7537d4580b737612d5974551d24 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/Definition/CollectionTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Definition/CollectionTest.php
@@ -6,21 +6,21 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Tools\Di\Test\Unit\Definition;
+namespace Magento\Setup\Test\Unit\Module\Di\Definition;
 
 /**
  * Class CollectionTest
- * @package Magento\Tools\Di\Definition
+ * @package Magento\Setup\Module\Di\Definition
  */
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\Di\Definition\Collection
+     * @var \Magento\Setup\Module\Di\Definition\Collection
      */
     private $model;
 
     /**
-     * @var \Magento\Tools\Di\Definition\Collection | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\Di\Definition\Collection | \PHPUnit_Framework_MockObject_MockObject
      */
     private $collectionMock;
 
@@ -56,9 +56,9 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->collectionMock = $this->getMockBuilder('\Magento\Tools\Di\Definition\Collection')
+        $this->collectionMock = $this->getMockBuilder('\Magento\Setup\Module\Di\Definition\Collection')
             ->setMethods([])->getMock();
-        $this->model = new \Magento\Tools\Di\Definition\Collection();
+        $this->model = new \Magento\Setup\Module\Di\Definition\Collection();
     }
 
     public function testAddDefinition()
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/_files/additional.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/additional.php
similarity index 100%
rename from dev/tools/Magento/Tools/Di/Test/Unit/_files/additional.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/_files/additional.php
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/bootstrap.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/bootstrap.php
similarity index 100%
rename from dev/tools/Magento/Tools/Di/Test/Unit/_files/app/bootstrap.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/bootstrap.php
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/Element.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Element.php
similarity index 100%
rename from dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/Element.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Element.php
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/ElementFactory.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/ElementFactory.php
similarity index 100%
rename from dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/ElementFactory.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/ElementFactory.php
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/Helper/Test.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Helper/Test.php
similarity index 100%
rename from dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/Helper/Test.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Helper/Test.php
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/Model/Test.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Model/Test.php
similarity index 100%
rename from dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/Model/Test.php
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Model/Test.php
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/etc/adminhtml/system.xml b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/etc/adminhtml/system.xml
similarity index 94%
rename from dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/etc/adminhtml/system.xml
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/etc/adminhtml/system.xml
index cec22db9c722334136b1018cc07df7a8e7a17f82..d5b7796b99db9e40bb52a40e4270b2a3b2628081 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/etc/adminhtml/system.xml
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/etc/adminhtml/system.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../../../../../../../../app/code/Magento/Config/etc/system_file.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../../../../../../../../../app/code/Magento/Config/etc/system_file.xsd">
     <system>
         <section id="advanced" translate="label" type="text" sortOrder="910" showInDefault="1" showInWebsite="1" showInStore="1">
             <label>Advanced</label>
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/etc/di.xml b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/etc/di.xml
similarity index 94%
rename from dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/etc/di.xml
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/etc/di.xml
index 5466e9a385bc24a8e1766bf54613aae8c10701c1..ec1a122e8f6cd08f459b64b651d49baf87a188c1 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/etc/di.xml
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/etc/di.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../../../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
     <preference for="Magento\Framework\App\RequestInterface" type="Magento\Framework\App\Request\Http\Proxy" />
     <preference for="Magento\Store\Model\Config\InvalidatorInterface" type="Magento\Store\Model\Config\Invalidator\Proxy" />
     <preference for="Magento\Framework\App\CacheInterface" type="Magento\Framework\App\Cache\Proxy" />
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/view/frontend/default.xml b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/view/frontend/default.xml
similarity index 86%
rename from dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/view/frontend/default.xml
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/view/frontend/default.xml
index 4033324ce46b1a54aee06c3c24588d15b2c7c3b8..4664b27f04c42eb6c3d71dd3bef5ae5c6280574f 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/code/Magento/SomeModule/view/frontend/default.xml
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/view/frontend/default.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_layout.xsd">
+<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../../../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_layout.xsd">
     <referenceBlock name="root">
         <block class="Magento\Backend\Block\Menu\Proxy" name="menu" as="menu" template="Magento_Backend::menu.phtml" />
     </referenceBlock>
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/design/adminhtml/default/backend/layout.xml b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/design/adminhtml/default/backend/layout.xml
similarity index 100%
rename from dev/tools/Magento/Tools/Di/Test/Unit/_files/app/design/adminhtml/default/backend/layout.xml
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/design/adminhtml/default/backend/layout.xml
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/etc/additional.xml b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/etc/additional.xml
similarity index 100%
rename from dev/tools/Magento/Tools/Di/Test/Unit/_files/app/etc/additional.xml
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/etc/additional.xml
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/etc/config.xml b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/etc/config.xml
similarity index 100%
rename from dev/tools/Magento/Tools/Di/Test/Unit/_files/app/etc/config.xml
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/etc/config.xml
diff --git a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/etc/di/config.xml b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/etc/di/config.xml
similarity index 87%
rename from dev/tools/Magento/Tools/Di/Test/Unit/_files/app/etc/di/config.xml
rename to setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/etc/di/config.xml
index 8638b10700e02310375a9dc43efe0a89b50eb15d..0b1395817de460ea28f44a6e79eadef1adf1446b 100644
--- a/dev/tools/Magento/Tools/Di/Test/Unit/_files/app/etc/di/config.xml
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/etc/di/config.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
     <type name="Magento\Framework\App\Cache">
         <arguments>
             <argument name="storeManager" xsi:type="object">customStoreManagerProxy</argument>
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/ContextTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/ContextTest.php
similarity index 93%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/ContextTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/ContextTest.php
index 1b89c9d07bf9d6bb10c9fc0375a976848eed9c23..5a641e556ff5539b2f3b25aa82fbe71b08913090 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/ContextTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/ContextTest.php
@@ -3,22 +3,21 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit;
-
-use \Magento\Tools\I18n\Context;
+namespace Magento\Setup\Test\Unit\Module\I18n;
 
+use \Magento\Setup\Module\I18n\Context;
 
 class ContextTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\I18n\Context
+     * @var \Magento\Setup\Module\I18n\Context
      */
     protected $context;
 
     protected function setUp()
     {
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->context = $objectManagerHelper->getObject('Magento\Tools\I18n\Context');
+        $this->context = $objectManagerHelper->getObject('Magento\Setup\Module\I18n\Context');
     }
 
     /**
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/GeneratorTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/GeneratorTest.php
similarity index 73%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/GeneratorTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/GeneratorTest.php
index 6d77f2ab112f15f9fc15c2c5d10d3534f2bf43e7..5d56db8c8f2b7793f377bd0829e8c5a24ba1668c 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/GeneratorTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/GeneratorTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Dictionary;
+namespace Magento\Setup\Test\Unit\Module\I18n\Dictionary;
 
 /**
  * Generator test
@@ -11,53 +11,53 @@ namespace Magento\Tools\I18n\Test\Unit\Dictionary;
 class GeneratorTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\I18n\Parser\Parser|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Parser\Parser|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $parserMock;
 
     /**
-     * @var \Magento\Tools\I18n\Parser\Contextual|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Parser\Contextual|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $contextualParserMock;
 
     /**
-     * @var \Magento\Tools\I18n\Factory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Factory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $factoryMock;
 
     /**
-     * @var \Magento\Tools\I18n\Dictionary\WriterInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Dictionary\WriterInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $writerMock;
 
     /**
-     * @var \Magento\Tools\I18n\Dictionary\Generator
+     * @var \Magento\Setup\Module\I18n\Dictionary\Generator
      */
     protected $generator;
 
     /**
-     * @var \Magento\Tools\I18n\Dictionary\Options\ResolverFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Dictionary\Options\ResolverFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $optionsResolverFactory;
 
     protected function setUp()
     {
-        $this->parserMock = $this->getMock('Magento\Tools\I18n\Parser\Parser', [], [], '', false);
+        $this->parserMock = $this->getMock('Magento\Setup\Module\I18n\Parser\Parser', [], [], '', false);
         $this->contextualParserMock = $this->getMock(
-            'Magento\Tools\I18n\Parser\Contextual',
+            'Magento\Setup\Module\I18n\Parser\Contextual',
             [],
             [],
             '',
             false
         );
-        $this->writerMock = $this->getMock('Magento\Tools\I18n\Dictionary\WriterInterface');
-        $this->factoryMock = $this->getMock('Magento\Tools\I18n\Factory', [], [], '', false);
+        $this->writerMock = $this->getMock('Magento\Setup\Module\I18n\Dictionary\WriterInterface');
+        $this->factoryMock = $this->getMock('Magento\Setup\Module\I18n\Factory', [], [], '', false);
         $this->factoryMock->expects($this->any())
             ->method('createDictionaryWriter')
             ->will($this->returnValue($this->writerMock));
 
         $this->optionsResolverFactory = $this->getMock(
-            'Magento\Tools\I18n\Dictionary\Options\ResolverFactory',
+            'Magento\Setup\Module\I18n\Dictionary\Options\ResolverFactory',
             [],
             [],
             '',
@@ -66,7 +66,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->generator = $objectManagerHelper->getObject(
-            'Magento\Tools\I18n\Dictionary\Generator',
+            'Magento\Setup\Module\I18n\Dictionary\Generator',
             [
                 'parser' => $this->parserMock,
                 'contextualParser' => $this->contextualParserMock,
@@ -80,14 +80,14 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
     {
         $outputFilename = 'test';
 
-        $phrase = $this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false);
+        $phrase = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
         $this->factoryMock->expects($this->once())
             ->method('createDictionaryWriter')
             ->with($outputFilename)
             ->will($this->returnSelf());
         $this->parserMock->expects($this->any())->method('getPhrases')->will($this->returnValue([$phrase]));
         $options = [];
-        $optionResolver = $this->getMock('Magento\Tools\I18n\Dictionary\Options\Resolver', [], [], '', false);
+        $optionResolver = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Options\Resolver', [], [], '', false);
         $optionResolver->expects($this->once())
             ->method('getOptions')
             ->will($this->returnValue($options));
@@ -106,7 +106,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         $baseDir = 'right_parser';
         $outputFilename = 'file.csv';
         $filesOptions = ['file1', 'file2'];
-        $optionResolver = $this->getMock('Magento\Tools\I18n\Dictionary\Options\Resolver', [], [], '', false);
+        $optionResolver = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Options\Resolver', [], [], '', false);
         $optionResolver->expects($this->once())
             ->method('getOptions')
             ->will($this->returnValue($filesOptions));
@@ -121,7 +121,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
             ->with($this->equalTo($baseDir), $this->equalTo(false))
             ->will($this->returnValue($optionResolver));
         $this->parserMock->expects($this->once())->method('parse')->with($filesOptions);
-        $phrase = $this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false);
+        $phrase = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
         $this->parserMock->expects($this->once())->method('getPhrases')->will($this->returnValue([$phrase]));
         $this->generator->generate($baseDir, $outputFilename);
     }
@@ -131,7 +131,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         $baseDir = 'right_parser2';
         $outputFilename = 'file.csv';
         $filesOptions = ['file1', 'file2'];
-        $optionResolver = $this->getMock('Magento\Tools\I18n\Dictionary\Options\Resolver', [], [], '', false);
+        $optionResolver = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Options\Resolver', [], [], '', false);
         $optionResolver->expects($this->once())
             ->method('getOptions')
             ->will($this->returnValue($filesOptions));
@@ -141,7 +141,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($optionResolver));
 
         $this->contextualParserMock->expects($this->once())->method('parse')->with($filesOptions);
-        $phrase = $this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false);
+        $phrase = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
         $this->contextualParserMock->expects($this->once())->method('getPhrases')->will($this->returnValue([$phrase]));
 
         $this->factoryMock->expects($this->once())
@@ -156,7 +156,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
     {
         $baseDir = 'WritingPhrases';
         $filesOptions = ['file1', 'file2'];
-        $optionResolver = $this->getMock('Magento\Tools\I18n\Dictionary\Options\Resolver', [], [], '', false);
+        $optionResolver = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Options\Resolver', [], [], '', false);
         $optionResolver->expects($this->once())
             ->method('getOptions')
             ->will($this->returnValue($filesOptions));
@@ -166,8 +166,8 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($optionResolver));
 
         $phrases = [
-            $this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false),
-            $this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false),
+            $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false),
+            $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false),
         ];
 
         $this->parserMock->expects($this->once())->method('getPhrases')->will($this->returnValue($phrases));
@@ -186,7 +186,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         $baseDir = 'no_phrases';
         $outputFilename = 'no_file.csv';
         $filesOptions = ['file1', 'file2'];
-        $optionResolver = $this->getMock('Magento\Tools\I18n\Dictionary\Options\Resolver', [], [], '', false);
+        $optionResolver = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Options\Resolver', [], [], '', false);
         $optionResolver->expects($this->once())
             ->method('getOptions')
             ->will($this->returnValue($filesOptions));
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Loader/File/AbstractFileTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Loader/File/AbstractFileTest.php
similarity index 73%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Loader/File/AbstractFileTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Loader/File/AbstractFileTest.php
index 84659fb6e2db5b319bac1d2ca8ffdaaa94562f3e..fc4666d9dce9905eb74199c4ce1843f4f62a9586 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Loader/File/AbstractFileTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Loader/File/AbstractFileTest.php
@@ -3,29 +3,29 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Dictionary\Loader\File;
+namespace Magento\Setup\Test\Unit\Module\I18n\Dictionary\Loader\File;
 
 class AbstractFileTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\I18n\Dictionary|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Dictionary|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_dictionaryMock;
 
     /**
-     * @var \Magento\Tools\I18n\Factory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Factory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_factoryMock;
 
     /**
-     * @var \Magento\Tools\I18n\Dictionary\Loader\File\AbstractFile|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Dictionary\Loader\File\AbstractFile|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_abstractLoaderMock;
 
     protected function setUp()
     {
-        $this->_dictionaryMock = $this->getMock('Magento\Tools\I18n\Dictionary', [], [], '', false);
-        $this->_factoryMock = $this->getMock('Magento\Tools\I18n\Factory', [], [], '', false);
+        $this->_dictionaryMock = $this->getMock('Magento\Setup\Module\I18n\Dictionary', [], [], '', false);
+        $this->_factoryMock = $this->getMock('Magento\Setup\Module\I18n\Factory', [], [], '', false);
     }
 
     /**
@@ -35,20 +35,20 @@ class AbstractFileTest extends \PHPUnit_Framework_TestCase
     public function testLoadWrongFile()
     {
         $abstractLoaderMock = $this->getMockForAbstractClass(
-            'Magento\Tools\I18n\Dictionary\Loader\File\AbstractFile',
+            'Magento\Setup\Module\I18n\Dictionary\Loader\File\AbstractFile',
             [],
             '',
             false
         );
 
-        /** @var \Magento\Tools\I18n\Dictionary\Loader\File\AbstractFile $abstractLoaderMock */
+        /** @var \Magento\Setup\Module\I18n\Dictionary\Loader\File\AbstractFile $abstractLoaderMock */
         $abstractLoaderMock->load('wrong_file.csv');
     }
 
     public function testLoad()
     {
         $abstractLoaderMock = $this->getMockForAbstractClass(
-            'Magento\Tools\I18n\Dictionary\Loader\File\AbstractFile',
+            'Magento\Setup\Module\I18n\Dictionary\Loader\File\AbstractFile',
             [$this->_factoryMock],
             '',
             true,
@@ -71,8 +71,8 @@ class AbstractFileTest extends \PHPUnit_Framework_TestCase
             $this->returnValue(['phrase2', 'translation2', 'context_type2', 'context_value2'])
         );
 
-        $phraseFirstMock = $this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false);
-        $phraseSecondMock = $this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseFirstMock = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseSecondMock = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
 
         $this->_factoryMock->expects(
             $this->once()
@@ -108,7 +108,7 @@ class AbstractFileTest extends \PHPUnit_Framework_TestCase
         $this->_dictionaryMock->expects($this->at(0))->method('addPhrase')->with($phraseFirstMock);
         $this->_dictionaryMock->expects($this->at(1))->method('addPhrase')->with($phraseSecondMock);
 
-        /** @var \Magento\Tools\I18n\Dictionary\Loader\File\AbstractFile $abstractLoaderMock */
+        /** @var \Magento\Setup\Module\I18n\Dictionary\Loader\File\AbstractFile $abstractLoaderMock */
         $this->assertEquals($this->_dictionaryMock, $abstractLoaderMock->load('test.csv'));
     }
 
@@ -119,7 +119,7 @@ class AbstractFileTest extends \PHPUnit_Framework_TestCase
     public function testErrorsInPhraseCreating()
     {
         $abstractLoaderMock = $this->getMockForAbstractClass(
-            'Magento\Tools\I18n\Dictionary\Loader\File\AbstractFile',
+            'Magento\Setup\Module\I18n\Dictionary\Loader\File\AbstractFile',
             [$this->_factoryMock],
             '',
             true,
@@ -150,7 +150,7 @@ class AbstractFileTest extends \PHPUnit_Framework_TestCase
             $this->throwException(new \DomainException('exception_message'))
         );
 
-        /** @var \Magento\Tools\I18n\Dictionary\Loader\File\AbstractFile $abstractLoaderMock */
+        /** @var \Magento\Setup\Module\I18n\Dictionary\Loader\File\AbstractFile $abstractLoaderMock */
         $this->assertEquals($this->_dictionaryMock, $abstractLoaderMock->load('test.csv'));
     }
 }
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Options/ResolverFactoryTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/ResolverFactoryTest.php
similarity index 65%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Options/ResolverFactoryTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/ResolverFactoryTest.php
index 3a01474be5f4889621fe415f95af3284d2f88dbd..82e905624d8a39f3e684145f302cb38869018045 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Options/ResolverFactoryTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/ResolverFactoryTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Dictionary\Options;
+namespace Magento\Setup\Test\Unit\Module\I18n\Dictionary\Options;
 
 /**
  * Class ResolverTest
@@ -13,11 +13,11 @@ class ResolverFactoryTest extends \PHPUnit_Framework_TestCase
     public function testCreate()
     {
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        /** @var \Magento\Tools\I18n\Dictionary\Options\ResolverFactory $resolverFactory */
+        /** @var \Magento\Setup\Module\I18n\Dictionary\Options\ResolverFactory $resolverFactory */
         $resolverFactory = $objectManagerHelper
-            ->getObject('Magento\Tools\I18n\Dictionary\Options\ResolverFactory');
+            ->getObject('Magento\Setup\Module\I18n\Dictionary\Options\ResolverFactory');
         $this->assertInstanceOf(
-            \Magento\Tools\I18n\Dictionary\Options\ResolverFactory::DEFAULT_RESOLVER,
+            \Magento\Setup\Module\I18n\Dictionary\Options\ResolverFactory::DEFAULT_RESOLVER,
             $resolverFactory->create('some_dir', true)
         );
     }
@@ -29,9 +29,9 @@ class ResolverFactoryTest extends \PHPUnit_Framework_TestCase
     public function testCreateException()
     {
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        /** @var \Magento\Tools\I18n\Dictionary\Options\ResolverFactory $resolverFactory */
+        /** @var \Magento\Setup\Module\I18n\Dictionary\Options\ResolverFactory $resolverFactory */
         $resolverFactory = $objectManagerHelper->getObject(
-            'Magento\Tools\I18n\Dictionary\Options\ResolverFactory',
+            'Magento\Setup\Module\I18n\Dictionary\Options\ResolverFactory',
             [
                 'resolverClass' => 'stdClass'
             ]
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Options/ResolverTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/ResolverTest.php
similarity index 90%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Options/ResolverTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/ResolverTest.php
index b3994660d05fe723c3b5b72c69fb3c84c50a6ed8..bb6ba63cfb35fbf044fa59243939ade462cd1af8 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Options/ResolverTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/ResolverTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Dictionary\Options;
+namespace Magento\Setup\Test\Unit\Module\I18n\Dictionary\Options;
 
 /**
  * Class ResolverTest
@@ -19,9 +19,9 @@ class ResolverTest extends \PHPUnit_Framework_TestCase
     public function testGetOptions($directory, $withContext, $result)
     {
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        /** @var \Magento\Tools\I18n\Dictionary\Options\Resolver $resolver */
+        /** @var \Magento\Setup\Module\I18n\Dictionary\Options\Resolver $resolver */
         $resolver = $objectManagerHelper->getObject(
-            'Magento\Tools\I18n\Dictionary\Options\Resolver',
+            'Magento\Setup\Module\I18n\Dictionary\Options\Resolver',
             [
                 'directory' => $directory,
                 'withContext' => $withContext,
@@ -85,9 +85,9 @@ class ResolverTest extends \PHPUnit_Framework_TestCase
     public function testGetOptionsWrongDir($directory, $withContext, $message)
     {
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        /** @var \Magento\Tools\I18n\Dictionary\Options\Resolver $resolver */
+        /** @var \Magento\Setup\Module\I18n\Dictionary\Options\Resolver $resolver */
         $resolver = $objectManagerHelper->getObject(
-            'Magento\Tools\I18n\Dictionary\Options\Resolver',
+            'Magento\Setup\Module\I18n\Dictionary\Options\Resolver',
             [
                 'directory' => $directory,
                 'withContext' => $withContext,
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Options/_files/source/app/code/.gitignore b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/app/code/.gitignore
similarity index 100%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Options/_files/source/app/code/.gitignore
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/app/code/.gitignore
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Options/_files/source/app/design/.gitignore b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/app/design/.gitignore
similarity index 100%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Options/_files/source/app/design/.gitignore
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/app/design/.gitignore
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Options/_files/source/lib/web/mage/.gitignore b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/lib/web/mage/.gitignore
similarity index 100%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Options/_files/source/lib/web/mage/.gitignore
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/lib/web/mage/.gitignore
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Options/_files/source/lib/web/varien/.gitignore b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/lib/web/varien/.gitignore
similarity index 100%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Options/_files/source/lib/web/varien/.gitignore
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/lib/web/varien/.gitignore
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/PhraseTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/PhraseTest.php
similarity index 94%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/PhraseTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/PhraseTest.php
index fa919d12c52dc9cbe437eeddae6f4d74b9dc818b..309478e36978baa6c0eb174c44f237bde3ac2851 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/PhraseTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/PhraseTest.php
@@ -3,10 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Dictionary;
-
-use \Magento\Tools\I18n\Dictionary\Phrase;
+namespace Magento\Setup\Test\Unit\Module\I18n\Dictionary;
 
+use \Magento\Setup\Module\I18n\Dictionary\Phrase;
 
 class PhraseTest extends \PHPUnit_Framework_TestCase
 {
@@ -18,7 +17,7 @@ class PhraseTest extends \PHPUnit_Framework_TestCase
      */
     public function testPhraseCreation($constructArguments, $getter, $result)
     {
-        $reflectionClass = new \ReflectionClass('Magento\Tools\I18n\Dictionary\Phrase');
+        $reflectionClass = new \ReflectionClass('Magento\Setup\Module\I18n\Dictionary\Phrase');
         $phrase = $reflectionClass->newInstanceArgs($constructArguments);
         $this->assertEquals($result, $phrase->{$getter}());
     }
@@ -59,7 +58,7 @@ class PhraseTest extends \PHPUnit_Framework_TestCase
     {
         $this->setExpectedException('DomainException', $message);
 
-        $reflectionClass = new \ReflectionClass('Magento\Tools\I18n\Dictionary\Phrase');
+        $reflectionClass = new \ReflectionClass('Magento\Setup\Module\I18n\Dictionary\Phrase');
         $reflectionClass->newInstanceArgs($constructArguments);
     }
 
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Writer/Csv/StdoTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/Csv/StdoTest.php
similarity index 68%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Writer/Csv/StdoTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/Csv/StdoTest.php
index 95cb7cabdc59de61ac53fc2280c78cd37e361343..2ea739d71453bd509ad993cb6143219a306c5bc9 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Writer/Csv/StdoTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/Csv/StdoTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Dictionary\Writer\Csv;
+namespace Magento\Setup\Test\Unit\Module\I18n\Dictionary\Writer\Csv;
 
 class StdoTest extends \PHPUnit_Framework_TestCase
 {
@@ -20,8 +20,8 @@ class StdoTest extends \PHPUnit_Framework_TestCase
     public function testThatHandlerIsRight()
     {
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        /** @var \Magento\Tools\I18n\Dictionary\Writer\Csv $writer */
-        $writer = $objectManagerHelper->getObject('Magento\Tools\I18n\Dictionary\Writer\Csv\Stdo');
+        /** @var \Magento\Setup\Module\I18n\Dictionary\Writer\Csv $writer */
+        $writer = $objectManagerHelper->getObject('Magento\Setup\Module\I18n\Dictionary\Writer\Csv\Stdo');
 
         $this->assertAttributeEquals($this->_handler, '_fileHandler', $writer);
     }
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Writer/CsvTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/CsvTest.php
similarity index 87%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Writer/CsvTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/CsvTest.php
index 72033add5315e18349da8079ff02c7a203e3202e..5edc74cb629394097225f22bc7d8e42211d7fdd1 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Writer/CsvTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/CsvTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Dictionary\Writer;
+namespace Magento\Setup\Test\Unit\Module\I18n\Dictionary\Writer;
 
 class CsvTest extends \PHPUnit_Framework_TestCase
 {
@@ -13,12 +13,12 @@ class CsvTest extends \PHPUnit_Framework_TestCase
     protected $_testFile;
 
     /**
-     * @var \Magento\Tools\I18n\Dictionary\Phrase|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Dictionary\Phrase|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_phraseFirstMock;
 
     /**
-     * @var \Magento\Tools\I18n\Dictionary\Phrase|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Dictionary\Phrase|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_phraseSecondMock;
 
@@ -27,14 +27,14 @@ class CsvTest extends \PHPUnit_Framework_TestCase
         $this->_testFile = str_replace('\\', '/', realpath(dirname(__FILE__))) . '/_files/test.csv';
 
         $this->_phraseFirstMock = $this->getMock(
-            'Magento\Tools\I18n\Dictionary\Phrase',
+            'Magento\Setup\Module\I18n\Dictionary\Phrase',
             [],
             [],
             '',
             false
         );
         $this->_phraseSecondMock = $this->getMock(
-            'Magento\Tools\I18n\Dictionary\Phrase',
+            'Magento\Setup\Module\I18n\Dictionary\Phrase',
             [],
             [],
             '',
@@ -57,7 +57,7 @@ class CsvTest extends \PHPUnit_Framework_TestCase
     {
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $objectManagerHelper->getObject(
-            'Magento\Tools\I18n\Dictionary\Writer\Csv',
+            'Magento\Setup\Module\I18n\Dictionary\Writer\Csv',
             ['outputFilename' => 'wrong/path']
         );
     }
@@ -123,9 +123,9 @@ class CsvTest extends \PHPUnit_Framework_TestCase
         );
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        /** @var \Magento\Tools\I18n\Dictionary\Writer\Csv $writer */
+        /** @var \Magento\Setup\Module\I18n\Dictionary\Writer\Csv $writer */
         $writer = $objectManagerHelper->getObject(
-            'Magento\Tools\I18n\Dictionary\Writer\Csv',
+            'Magento\Setup\Module\I18n\Dictionary\Writer\Csv',
             ['outputFilename' => $this->_testFile]
         );
         $writer->write($this->_phraseFirstMock);
@@ -176,9 +176,9 @@ EXPECTED;
         );
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        /** @var \Magento\Tools\I18n\Dictionary\Writer\Csv $writer */
+        /** @var \Magento\Setup\Module\I18n\Dictionary\Writer\Csv $writer */
         $writer = $objectManagerHelper->getObject(
-            'Magento\Tools\I18n\Dictionary\Writer\Csv',
+            'Magento\Setup\Module\I18n\Dictionary\Writer\Csv',
             ['outputFilename' => $this->_testFile]
         );
         $writer->write($this->_phraseFirstMock);
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Writer/_files/.gitignore b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/_files/.gitignore
similarity index 100%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Dictionary/Writer/_files/.gitignore
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/_files/.gitignore
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/DictionaryTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/DictionaryTest.php
similarity index 66%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/DictionaryTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/DictionaryTest.php
index a901907b0d86f533bd9919be3134f48c209002f7..9ed72a939fd7e3b977e6a28bd89d86da2d7c20ba 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/DictionaryTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/DictionaryTest.php
@@ -3,25 +3,25 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit;
+namespace Magento\Setup\Test\Unit\Module\I18n;
 
 class DictionaryTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\I18n\Dictionary
+     * @var \Magento\Setup\Module\I18n\Dictionary
      */
     protected $_dictionary;
 
     protected function setUp()
     {
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->_dictionary = $objectManagerHelper->getObject('Magento\Tools\I18n\Dictionary');
+        $this->_dictionary = $objectManagerHelper->getObject('Magento\Setup\Module\I18n\Dictionary');
     }
 
     public function testPhraseCollecting()
     {
-        $phraseFirstMock = $this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false);
-        $phraseSecondMock = $this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseFirstMock = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseSecondMock = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
 
         $this->_dictionary->addPhrase($phraseFirstMock);
         $this->_dictionary->addPhrase($phraseSecondMock);
@@ -31,11 +31,11 @@ class DictionaryTest extends \PHPUnit_Framework_TestCase
 
     public function testGetDuplicates()
     {
-        $phraseFirstMock = $this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseFirstMock = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
         $phraseFirstMock->expects($this->once())->method('getKey')->will($this->returnValue('key_1'));
-        $phraseSecondMock = $this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseSecondMock = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
         $phraseSecondMock->expects($this->once())->method('getKey')->will($this->returnValue('key_1'));
-        $phraseThirdMock = $this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseThirdMock = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
         $phraseThirdMock->expects($this->once())->method('getKey')->will($this->returnValue('key_3'));
 
         $this->_dictionary->addPhrase($phraseFirstMock);
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/FactoryTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/FactoryTest.php
similarity index 75%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/FactoryTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/FactoryTest.php
index 9d7b19a228b410627c063090415fa43932b97442..fbce20193f2746455eeb02a3714263c90f9c316d 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/FactoryTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/FactoryTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit;
+namespace Magento\Setup\Test\Unit\Module\I18n;
 
 class FactoryTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\I18n\Factory
+     * @var \Magento\Setup\Module\I18n\Factory
      */
     protected $factory;
 
     protected function setUp()
     {
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->factory = $objectManagerHelper->getObject('Magento\Tools\I18n\Factory');
+        $this->factory = $objectManagerHelper->getObject('Magento\Setup\Module\I18n\Factory');
     }
 
     /**
@@ -38,19 +38,19 @@ class FactoryTest extends \PHPUnit_Framework_TestCase
     {
         return [
             [
-                'Magento\Tools\I18n\Dictionary\Writer\Csv',
+                'Magento\Setup\Module\I18n\Dictionary\Writer\Csv',
                 TESTS_TEMP_DIR . '/filename.invalid_type',
             ],
             [
-                'Magento\Tools\I18n\Dictionary\Writer\Csv',
+                'Magento\Setup\Module\I18n\Dictionary\Writer\Csv',
                 TESTS_TEMP_DIR . '/filename'
             ],
             [
-                'Magento\Tools\I18n\Dictionary\Writer\Csv',
+                'Magento\Setup\Module\I18n\Dictionary\Writer\Csv',
                 TESTS_TEMP_DIR . '/filename.csv'
             ],
             [
-                'Magento\Tools\I18n\Dictionary\Writer\Csv\Stdo',
+                'Magento\Setup\Module\I18n\Dictionary\Writer\Csv\Stdo',
                 ''
             ],
         ];
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/FilesCollectorTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/FilesCollectorTest.php
similarity index 88%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/FilesCollectorTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/FilesCollectorTest.php
index b21dbe6971cdcb5b8e108c984e1cbcfc796ba858..5d1f5cfe4857f49b632e38be6cf85a988a12e8a3 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/FilesCollectorTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/FilesCollectorTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit;
+namespace Magento\Setup\Test\Unit\Module\I18n;
 
 class FilesCollectorTest extends \PHPUnit_Framework_TestCase
 {
@@ -13,7 +13,7 @@ class FilesCollectorTest extends \PHPUnit_Framework_TestCase
     protected $_testDir;
 
     /**
-     * @var \Magento\Tools\I18n\FilesCollector
+     * @var \Magento\Setup\Module\I18n\FilesCollector
      */
     protected $_filesCollector;
 
@@ -22,7 +22,7 @@ class FilesCollectorTest extends \PHPUnit_Framework_TestCase
         $this->_testDir = str_replace('\\', '/', realpath(dirname(__FILE__))) . '/_files/files_collector/';
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->_filesCollector = $objectManagerHelper->getObject('Magento\Tools\I18n\FilesCollector');
+        $this->_filesCollector = $objectManagerHelper->getObject('Magento\Setup\Module\I18n\FilesCollector');
     }
 
     public function testGetFilesWithoutMask()
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/LocaleTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/LocaleTest.php
similarity index 90%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/LocaleTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/LocaleTest.php
index 816773c05ac7db073044cc2381106fe143266ee9..09914f7863146d54f3256457a71523da26c7889e 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/LocaleTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/LocaleTest.php
@@ -3,10 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit;
-
-use \Magento\Tools\I18n\Locale;
+namespace Magento\Setup\Test\Unit\Module\I18n;
 
+use \Magento\Setup\Module\I18n\Locale;
 
 class LocaleTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Pack/GeneratorTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Pack/GeneratorTest.php
similarity index 70%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Pack/GeneratorTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Pack/GeneratorTest.php
index 4ca23c946a99bd976d17deee464cf886ffe5ff8c..0866b50cf75aa2843100f24c9d9be920e510b6c4 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Pack/GeneratorTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Pack/GeneratorTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Pack;
+namespace Magento\Setup\Test\Unit\Module\I18n\Pack;
 
 /**
  * Generator test
@@ -11,40 +11,40 @@ namespace Magento\Tools\I18n\Test\Unit\Pack;
 class GeneratorTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\I18n\Dictionary\Loader\FileInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Dictionary\Loader\FileInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $dictionaryLoaderMock;
 
     /**
-     * @var \Magento\Tools\I18n\Pack\WriterInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Pack\WriterInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $packWriterMock;
 
     /**
-     * @var \Magento\Tools\I18n\Factory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Factory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $factoryMock;
 
     /**
-     * @var \Magento\Tools\I18n\Dictionary|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Dictionary|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $dictionaryMock;
 
     /**
-     * @var \Magento\Tools\I18n\Pack\Generator
+     * @var \Magento\Setup\Module\I18n\Pack\Generator
      */
     protected $_generator;
 
     protected function setUp()
     {
-        $this->dictionaryLoaderMock = $this->getMock('Magento\Tools\I18n\Dictionary\Loader\FileInterface');
-        $this->packWriterMock = $this->getMock('Magento\Tools\I18n\Pack\WriterInterface');
-        $this->factoryMock = $this->getMock('Magento\Tools\I18n\Factory', [], [], '', false);
-        $this->dictionaryMock = $this->getMock('Magento\Tools\I18n\Dictionary', [], [], '', false);
+        $this->dictionaryLoaderMock = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Loader\FileInterface');
+        $this->packWriterMock = $this->getMock('Magento\Setup\Module\I18n\Pack\WriterInterface');
+        $this->factoryMock = $this->getMock('Magento\Setup\Module\I18n\Factory', [], [], '', false);
+        $this->dictionaryMock = $this->getMock('Magento\Setup\Module\I18n\Dictionary', [], [], '', false);
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->_generator = $objectManagerHelper->getObject(
-            'Magento\Tools\I18n\Pack\Generator',
+            'Magento\Setup\Module\I18n\Pack\Generator',
             [
                 'dictionaryLoader' => $this->dictionaryLoaderMock,
                 'packWriter' => $this->packWriterMock,
@@ -60,9 +60,9 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         $localeString = 'locale';
         $mode = 'mode';
         $allowDuplicates = true;
-        $localeMock = $this->getMock('Magento\Tools\I18n\Locale', [], [], '', false);
+        $localeMock = $this->getMock('Magento\Setup\Module\I18n\Locale', [], [], '', false);
 
-        $phrases = [$this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false)];
+        $phrases = [$this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false)];
         $this->dictionaryMock->expects($this->once())
             ->method('getPhrases')
             ->will($this->returnValue([$phrases]));
@@ -93,7 +93,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         $localeString = 'locale';
         $mode = 'mode';
         $allowDuplicates = true;
-        $localeMock = $this->getMock('Magento\Tools\I18n\Locale', [], [], '', false);
+        $localeMock = $this->getMock('Magento\Setup\Module\I18n\Locale', [], [], '', false);
 
         $this->factoryMock->expects($this->once())
             ->method('createLocale')
@@ -116,15 +116,15 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
 
         $allowDuplicates = false;
 
-        $phraseFirstMock = $this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseFirstMock = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
         $phraseFirstMock->expects($this->once())->method('getPhrase')->will($this->returnValue('phrase1'));
-        $phraseSecondMock = $this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseSecondMock = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
         $phraseSecondMock->expects($this->once())->method('getPhrase')->will($this->returnValue('phrase2'));
 
         $this->dictionaryLoaderMock->expects($this->any())
             ->method('load')
             ->will($this->returnValue($this->dictionaryMock));
-        $phrases = [$this->getMock('Magento\Tools\I18n\Dictionary\Phrase', [], [], '', false)];
+        $phrases = [$this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false)];
         $this->dictionaryMock->expects($this->once())
             ->method('getPhrases')
             ->will($this->returnValue([$phrases]));
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/AbstractParserTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/AbstractParserTest.php
similarity index 84%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Parser/AbstractParserTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/AbstractParserTest.php
index dc2bdcc6a8a197eca62dbedb1a204d46233a7c4d..3e43fbdb86e6008c5867a9cdfc74137c8fd28038 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/AbstractParserTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/AbstractParserTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Parser;
+namespace Magento\Setup\Test\Unit\Module\I18n\Parser;
 
 class AbstractParserTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\I18n\Parser\AbstractParser|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Parser\AbstractParser|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_parserMock;
 
     protected function setUp()
     {
         $this->_parserMock = $this->getMockForAbstractClass(
-            'Magento\Tools\I18n\Parser\AbstractParser',
+            'Magento\Setup\Module\I18n\Parser\AbstractParser',
             [],
             '',
             false
@@ -31,7 +31,7 @@ class AbstractParserTest extends \PHPUnit_Framework_TestCase
     {
         $this->setExpectedException('InvalidArgumentException', $message);
 
-        $this->_parserMock->addAdapter('php', $this->getMock('Magento\Tools\I18n\Parser\AdapterInterface'));
+        $this->_parserMock->addAdapter('php', $this->getMock('Magento\Setup\Module\I18n\Parser\AdapterInterface'));
         $this->_parserMock->parse($options);
     }
 
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/AbstractAdapterTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/AbstractAdapterTest.php
similarity index 74%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/AbstractAdapterTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/AbstractAdapterTest.php
index d56d8c7e9232f6056c78799151c44ff1657980ba..676c24fb0877979d663a511342ddd4055685401d 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/AbstractAdapterTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/AbstractAdapterTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Parser\Adapter;
+namespace Magento\Setup\Test\Unit\Module\I18n\Parser\Adapter;
 
 class AbstractAdapterTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\I18n\Parser\Adapter\AbstractAdapter|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Parser\Adapter\AbstractAdapter|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_adapterMock;
 
     protected function setUp()
     {
         $this->_adapterMock = $this->getMockForAbstractClass(
-            'Magento\Tools\I18n\Parser\Adapter\AbstractAdapter',
+            'Magento\Setup\Module\I18n\Parser\Adapter\AbstractAdapter',
             [],
             '',
             false,
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/JsTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/JsTest.php
similarity index 85%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/JsTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/JsTest.php
index 7ed1d77bf9cfb91cf1ca535377c5c0eac3ab8a7c..5494f0d4cb1dc427a73521f2cb71876f244202d0 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/JsTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/JsTest.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Parser\Adapter;
+namespace Magento\Setup\Test\Unit\Module\I18n\Parser\Adapter;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
-use Magento\Tools\I18n\Dictionary\Phrase;
+use Magento\Setup\Module\I18n\Dictionary\Phrase;
 
 class JsTest extends \PHPUnit_Framework_TestCase
 {
@@ -21,7 +21,7 @@ class JsTest extends \PHPUnit_Framework_TestCase
     protected $_stringsCount;
 
     /**
-     * @var \Magento\Tools\I18n\Parser\Adapter\Js
+     * @var \Magento\Setup\Module\I18n\Parser\Adapter\Js
      */
     protected $_adapter;
 
@@ -30,7 +30,7 @@ class JsTest extends \PHPUnit_Framework_TestCase
         $this->_testFile = str_replace('\\', '/', realpath(dirname(__FILE__))) . '/_files/file.js';
         $this->_stringsCount = count(file($this->_testFile));
 
-        $this->_adapter = (new ObjectManager($this))->getObject('Magento\Tools\I18n\Parser\Adapter\Js');
+        $this->_adapter = (new ObjectManager($this))->getObject('Magento\Setup\Module\I18n\Parser\Adapter\Js');
     }
 
     public function testParse()
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
similarity index 89%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
index 22d394b40a74f13b179e983b982d03c142991c3c..954bcc013ade66bfdd3c10c10597fe205f6f5e58 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
@@ -3,15 +3,15 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Parser\Adapter\Php\Tokenizer;
+namespace Magento\Setup\Test\Unit\Module\I18n\Parser\Adapter\Php\Tokenizer;
 
-use Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector;
-use Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Token;
+use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector;
+use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
-use Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer;
+use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer;
 
 /**
- * @covers \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector
+ * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector
  */
 class PhraseCollectorTest extends \PHPUnit_Framework_TestCase
 {
@@ -33,11 +33,11 @@ class PhraseCollectorTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->objectManager = new ObjectManager($this);
-        $this->tokenizerMock = $this->getMockBuilder('Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer')
+        $this->tokenizerMock = $this->getMockBuilder('Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer')
             ->disableOriginalConstructor()
             ->getMock();
         $this->phraseCollector = $this->objectManager->getObject(
-            'Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector',
+            'Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector',
             [
                 'tokenizer' => $this->tokenizerMock
             ]
@@ -45,7 +45,7 @@ class PhraseCollectorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector::parse
+     * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector::parse
      *
      * @param string $file
      * @param array $isEndOfLoopReturnValues
@@ -180,7 +180,7 @@ class PhraseCollectorTest extends \PHPUnit_Framework_TestCase
         $value,
         $line = null
     ) {
-        $token = $this->getMockBuilder('Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Token')
+        $token = $this->getMockBuilder('Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token')
             ->disableOriginalConstructor()
             ->getMock();
         $token->expects($this->any())
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/Php/Tokenizer/TokenTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/TokenTest.php
similarity index 84%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/Php/Tokenizer/TokenTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/TokenTest.php
index 7bb0366e99dd9e5e6a71a59ca7f5bd5429786f17..26bcea7516dd2495526e0b75202c3082591a77c6 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/Php/Tokenizer/TokenTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/TokenTest.php
@@ -3,13 +3,13 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Parser\Adapter\Php\Tokenizer;
+namespace Magento\Setup\Test\Unit\Module\I18n\Parser\Adapter\Php\Tokenizer;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
-use Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Token;
+use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token;
 
 /**
- * @covers \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Token
+ * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token
  */
 class TokenTest extends \PHPUnit_Framework_TestCase
 {
@@ -24,7 +24,7 @@ class TokenTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Token::isNew
+     * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token::isNew
      *
      * @param int $name
      * @param string $value
@@ -38,7 +38,7 @@ class TokenTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Token::isNamespaceSeparator
+     * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token::isNamespaceSeparator
      *
      * @param int $name
      * @param string $value
@@ -52,7 +52,7 @@ class TokenTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Token::isIdentifier
+     * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token::isIdentifier
      *
      * @param int $name
      * @param string $value
@@ -110,7 +110,7 @@ class TokenTest extends \PHPUnit_Framework_TestCase
     {
         $line = 110;
         return $this->objectManager->getObject(
-            'Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\Token',
+            'Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token',
             [
                 'name' => $name,
                 'value' => $value,
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/Php/TokenizerTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/TokenizerTest.php
similarity index 87%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/Php/TokenizerTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/TokenizerTest.php
index a55a23be8af49366538d181bea2f8ad2fe995339..553f6b4143172af1e5effda8cafd4718e6be3806 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/Php/TokenizerTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/TokenizerTest.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Parser\Adapter\Php;
+namespace Magento\Setup\Test\Unit\Module\I18n\Parser\Adapter\Php;
 
-use \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer;
+use \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 /**
- * @covers \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer
+ * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer
  */
 class TokenizerTest extends \PHPUnit_Framework_TestCase
 {
@@ -28,12 +28,12 @@ class TokenizerTest extends \PHPUnit_Framework_TestCase
     {
         $this->objectManager = new ObjectManager($this);
         $this->tokenizer = $this->objectManager->getObject(
-            'Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer'
+            'Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer'
         );
     }
 
     /**
-     * @covers \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer::isMatchingClass
+     * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer::isMatchingClass
      */
     public function testIsMatchingClass()
     {
@@ -56,7 +56,7 @@ class TokenizerTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer::getNextRealToken
+     * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer::getNextRealToken
      */
     public function testGetNextRealToken()
     {
@@ -75,7 +75,7 @@ class TokenizerTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer::isEndOfLoop
+     * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer::isEndOfLoop
      */
     public function testIsEndOfLoop()
     {
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/Php/_files/objectsCode.php.txt b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/_files/objectsCode.php.txt
similarity index 100%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/Php/_files/objectsCode.php.txt
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/_files/objectsCode.php.txt
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/PhpTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/PhpTest.php
similarity index 79%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/PhpTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/PhpTest.php
index 998295d16256308250579f0d43909b2fbad16e88..822749f27463694d1622f55f0759bb8d1695178d 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/PhpTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/PhpTest.php
@@ -3,25 +3,25 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Parser\Adapter;
+namespace Magento\Setup\Test\Unit\Module\I18n\Parser\Adapter;
 
 class PhpTest extends \PHPUnit_Framework_TestCase
 {
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject|
-     * \Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector
+     * \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector
      */
     protected $_phraseCollectorMock;
 
     /**
-     * @var \Magento\Tools\I18n\Parser\Adapter\Php
+     * @var \Magento\Setup\Module\I18n\Parser\Adapter\Php
      */
     protected $_adapter;
 
     protected function setUp()
     {
         $this->_phraseCollectorMock = $this->getMock(
-            'Magento\Tools\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector',
+            'Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector',
             [],
             [],
             '',
@@ -30,7 +30,7 @@ class PhpTest extends \PHPUnit_Framework_TestCase
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->_adapter = $objectManagerHelper->getObject(
-            'Magento\Tools\I18n\Parser\Adapter\Php',
+            'Magento\Setup\Module\I18n\Parser\Adapter\Php',
             ['phraseCollector' => $this->_phraseCollectorMock]
         );
     }
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/XmlTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/XmlTest.php
similarity index 86%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/XmlTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/XmlTest.php
index 3d15878c33195e605e75c52939dc67c17e4bf3d5..2ccc135e4ffa7dfd4714c45cd48b92d0b5aad178 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/XmlTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/XmlTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tools\I18n\Test\Unit\Parser\Adapter;
+namespace Magento\Setup\Test\Unit\Module\I18n\Parser\Adapter;
 
 class XmlTest extends \PHPUnit_Framework_TestCase
 {
@@ -13,7 +13,7 @@ class XmlTest extends \PHPUnit_Framework_TestCase
     protected $_testFile;
 
     /**
-     * @var \Magento\Tools\I18n\Parser\Adapter\Xml
+     * @var \Magento\Setup\Module\I18n\Parser\Adapter\Xml
      */
     protected $_adapter;
 
@@ -22,7 +22,7 @@ class XmlTest extends \PHPUnit_Framework_TestCase
         $this->_testFile = str_replace('\\', '/', realpath(dirname(__FILE__))) . '/_files/default.xml';
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->_adapter = $objectManagerHelper->getObject('Magento\Tools\I18n\Parser\Adapter\Xml');
+        $this->_adapter = $objectManagerHelper->getObject('Magento\Setup\Module\I18n\Parser\Adapter\Xml');
     }
 
     public function testParse()
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/_files/default.xml b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/_files/default.xml
similarity index 100%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/_files/default.xml
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/_files/default.xml
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/_files/file.js b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/_files/file.js
similarity index 100%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Parser/Adapter/_files/file.js
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/_files/file.js
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/ParserTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/ParserTest.php
similarity index 90%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/Parser/ParserTest.php
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/ParserTest.php
index b7a6794b931c989ad12717bd6dce9baed2e85c33..5b03113a86248211a8c24a2910b57d142305a3b3 100644
--- a/dev/tools/Magento/Tools/I18n/Test/Unit/Parser/ParserTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/ParserTest.php
@@ -6,32 +6,32 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Tools\I18n\Test\Unit\Parser;
+namespace Magento\Setup\Test\Unit\Module\I18n\Parser;
 
-use Magento\Tools\I18n\Parser as Parser;
+use Magento\Setup\Module\I18n\Parser as Parser;
 
 class ParserTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tools\I18n\Parser\AbstractParser|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Setup\Module\I18n\Parser\AbstractParser|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $parser;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Tools\I18n\FilesCollector
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Setup\Module\I18n\FilesCollector
      */
     protected $filesCollector;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Tools\I18n\Factory
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Setup\Module\I18n\Factory
      */
     protected $factory;
 
 
     protected function setUp()
     {
-        $this->filesCollector = $this->getMock('Magento\Tools\I18n\FilesCollector');
-        $this->factory = $this->getMock('Magento\Tools\I18n\Factory');
+        $this->filesCollector = $this->getMock('Magento\Setup\Module\I18n\FilesCollector');
+        $this->factory = $this->getMock('Magento\Setup\Module\I18n\Factory');
 
         $this->parser = new Parser\Parser($this->filesCollector, $this->factory);
     }
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/_files/files_collector/default.xml b/setup/src/Magento/Setup/Test/Unit/Module/I18n/_files/files_collector/default.xml
similarity index 100%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/_files/files_collector/default.xml
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/_files/files_collector/default.xml
diff --git a/dev/tools/Magento/Tools/I18n/Test/Unit/_files/files_collector/file.js b/setup/src/Magento/Setup/Test/Unit/Module/I18n/_files/files_collector/file.js
similarity index 100%
rename from dev/tools/Magento/Tools/I18n/Test/Unit/_files/files_collector/file.js
rename to setup/src/Magento/Setup/Test/Unit/Module/I18n/_files/files_collector/file.js
diff --git a/setup/view/magento/setup/readiness-check/progress.phtml b/setup/view/magento/setup/readiness-check/progress.phtml
index 275d677b1c8795c019e4122da50dd8274a775de2..d247f60402d7bb0a46cdd36ecf4361f7c3f5d6aa 100644
--- a/setup/view/magento/setup/readiness-check/progress.phtml
+++ b/setup/view/magento/setup/readiness-check/progress.phtml
@@ -75,7 +75,7 @@
                     </a>
                 </p>
                 <p ng-show="version.expanded">
-                    Donwload and install PHP version {{version.data.required}} from <a href="http://www.php.net" target="_blank">www.php.net</a> using this <a href="http://www.php.net/docs.php" target="_blank">PHP Documentation</a>.
+                    Download and install PHP version {{version.data.required}} from <a href="http://www.php.net" target="_blank">www.php.net</a> using this <a href="http://www.php.net/docs.php" target="_blank">PHP Documentation</a>.
                 </p>
                 <p ng-show="version.expanded">If you need more help please call your hosting provider.</p>
             </div>
@@ -86,15 +86,15 @@
 
 </div>
 
-<div id="php-rawpost" class="rediness-check-item" ng-show="rawpost.visible">
+<div id="php-settings" class="rediness-check-item" ng-show="settings.visible">
 
-    <h3 class="readiness-check-title" ng-hide="version.processed">
+    <h3 class="readiness-check-title" ng-hide="settings.processed">
         Checking PHP Settings...
     </h3>
 
-    <div ng-show="rawpost.processed" ng-switch="rawpost.responseType">
+    <div ng-show="settings.processed" ng-switch="settings.responseType">
 
-        <div ng-switch-when="success" ng-init="updateOnSuccess(rawpost)">
+        <div ng-switch-when="success" ng-init="updateOnSuccess(settings)">
 
             <span class="readiness-check-icon icon-success-round"></span>
 
@@ -107,31 +107,22 @@
 
         </div>
 
-        <div class="readiness-check-item" ng-switch-default ng-init="updateOnError(rawpost)">
-
-            <div class="rediness-check-side">
-                <p class="side-title">Need Help?</p>
-                <a href="http://php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data" target="_blank">PHP Documentation</a>
-            </div>
+        <div class="readiness-check-item" ng-switch-default ng-init="updateOnError(settings)">
 
             <span class="readiness-check-icon icon-failed-round"></span>
+            <h3 class="readiness-check-title">PHP Settings Check</h3>
 
-            <div class="readiness-check-content">
-                <h3 class="readiness-check-title">PHP Settings Check</h3>
-                <p>
-                    Your PHP Version is {{rawpost.data.version}}, but always_populate_raw_post_data = {{rawpost.data.ini}}.
-                    <a href="#php-rawpost" ng-click="updateOnExpand(rawpost)">
-                        <span ng-hide="rawpost.expanded">Show detail</span>
-                        <span ng-show="rawpost.expanded">Hide detail</span>
-                    </a>
-                </p>
-                <p ng-show="rawpost.expanded">
-                    $HTTP_RAW_POST_DATA is deprecated from PHP 5.6 onwards and will stop the installer from running.
-                    Please open your php.ini file and set always_populate_raw_post_data to -1.
-                </p>
-                <p ng-show="rawpost.expanded">If you need more help please call your hosting provider.</p>
+            <div ng-repeat="setting in settings.data">
+                <div ng-show="setting.error && setting.helpUrl" class="rediness-check-side">
+                    <p class="side-title">Need Help?</p>
+                    <a href="{{setting.helpUrl}}" target="_blank">PHP Documentation</a>
+                </div>
+                <div ng-show="setting.error" class="readiness-check-content">
+                    <p>
+                        {{setting.message}}
+                    </p>
+                </div>
             </div>
-
         </div>
 
     </div>