diff --git a/composer.json b/composer.json
index 7e647d5..c023421 100644
--- a/composer.json
+++ b/composer.json
@@ -31,8 +31,7 @@
   "autoload": {
     "psr-4": {
       "Drupal\\Core\\": "core/lib/Drupal/Core",
-      "Drupal\\Component\\": "core/lib/Drupal/Component",
-      "Drupal\\Driver\\": "drivers/lib/Drupal/Driver"
+      "Drupal\\Component\\": "core/lib/Drupal/Component"
     },
     "files": [
       "core/lib/Drupal.php"
diff --git a/core/drivers/fake/fake.info.yml b/core/drivers/fake/fake.info.yml
new file mode 100644
index 0000000..34d07f5
--- /dev/null
+++ b/core/drivers/fake/fake.info.yml
@@ -0,0 +1 @@
+type: driver
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/ConditionResolver.php b/core/drivers/fake/src/ConditionResolver.php
similarity index 92%
rename from core/lib/Drupal/Core/Database/Driver/fake/ConditionResolver.php
rename to core/drivers/fake/src/ConditionResolver.php
index ea69504..016d42d 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/ConditionResolver.php
+++ b/core/drivers/fake/src/ConditionResolver.php
@@ -2,11 +2,11 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\ConditionResolver.
+ * Contains Drupal\fake\ConditionResolver.
  */
 
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Core\Database\Query\Condition;
 
@@ -15,7 +15,7 @@ class ConditionResolver {
   /**
    * Match a row against a group of conditions.
    *
-   * @param \Drupal\Core\Database\Driver\fake\DatabaseRowInterface $row
+   * @param \Drupal\fake\DatabaseRowInterface $row
    *   The database row object.
    * @param \Drupal\Core\Database\Query\Condition $condition_group
    *   The condition group object.
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/DatabaseRow.php b/core/drivers/fake/src/DatabaseRow.php
similarity index 77%
rename from core/lib/Drupal/Core/Database/Driver/fake/DatabaseRow.php
rename to core/drivers/fake/src/DatabaseRow.php
index ca98582..0bf7bfc 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/DatabaseRow.php
+++ b/core/drivers/fake/src/DatabaseRow.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\DatabaseRow.
+ * Contains Drupal\fake\DatabaseRow.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 class DatabaseRow implements DatabaseRowInterface {
 
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/DatabaseRowInterface.php b/core/drivers/fake/src/DatabaseRowInterface.php
similarity index 71%
rename from core/lib/Drupal/Core/Database/Driver/fake/DatabaseRowInterface.php
rename to core/drivers/fake/src/DatabaseRowInterface.php
index 9aa3965..444a578 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/DatabaseRowInterface.php
+++ b/core/drivers/fake/src/DatabaseRowInterface.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\DatabaseRowInterface.
+ * Contains Drupal\fake\DatabaseRowInterface.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 interface DatabaseRowInterface {
 
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/DatabaseRowSelect.php b/core/drivers/fake/src/DatabaseRowSelect.php
similarity index 89%
rename from core/lib/Drupal/Core/Database/Driver/fake/DatabaseRowSelect.php
rename to core/drivers/fake/src/DatabaseRowSelect.php
index 41bbf55..c7479c6 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/DatabaseRowSelect.php
+++ b/core/drivers/fake/src/DatabaseRowSelect.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\DatabaseRowSelect.
+ * Contains Drupal\fake\DatabaseRowSelect.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 class DatabaseRowSelect extends DatabaseRow {
 
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeConnection.php b/core/drivers/fake/src/FakeConnection.php
similarity index 96%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeConnection.php
rename to core/drivers/fake/src/FakeConnection.php
index 5738ab3..c97f67e 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeConnection.php
+++ b/core/drivers/fake/src/FakeConnection.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeConnection.
+ * Contains Drupal\fake\FakeConnection.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Core\Database\Connection;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeDatabaseSchema.php b/core/drivers/fake/src/FakeDatabaseSchema.php
similarity index 98%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeDatabaseSchema.php
rename to core/drivers/fake/src/FakeDatabaseSchema.php
index 20e9da6..c287f04 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeDatabaseSchema.php
+++ b/core/drivers/fake/src/FakeDatabaseSchema.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeDatabaseSchema.
+ * Contains Drupal\fake\FakeDatabaseSchema.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Core\Database\Schema;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeInsert.php b/core/drivers/fake/src/FakeInsert.php
similarity index 93%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeInsert.php
rename to core/drivers/fake/src/FakeInsert.php
index 9d7012b..9756983 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeInsert.php
+++ b/core/drivers/fake/src/FakeInsert.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeInsert.
+ * Contains Drupal\fake\FakeInsert.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Core\Database\Query\Insert;
 use Drupal\Core\Database\Query\SelectInterface;
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeMerge.php b/core/drivers/fake/src/FakeMerge.php
similarity index 94%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeMerge.php
rename to core/drivers/fake/src/FakeMerge.php
index dd3117e..550243c 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeMerge.php
+++ b/core/drivers/fake/src/FakeMerge.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeMerge.
+ * Contains Drupal\fake\FakeMerge.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Core\Database\Query\Condition;
 use Drupal\Core\Database\Query\InvalidMergeQueryException;
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeSelect.php b/core/drivers/fake/src/FakeSelect.php
similarity index 98%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeSelect.php
rename to core/drivers/fake/src/FakeSelect.php
index 629bf1a..c6bd19b 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeSelect.php
+++ b/core/drivers/fake/src/FakeSelect.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeSelect.
+ * Contains Drupal\fake\FakeSelect.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Component\Utility\String;
 use Drupal\Core\Database\Connection;
@@ -302,7 +302,7 @@ protected function sortCallback($a, $b) {
    * @param array $rows
    *   An array of rows excluding non-matching rows.
    *
-   * @return \Drupal\Core\Database\Driver\fake\ConditionResolver
+   * @return \Drupal\fake\ConditionResolver
    *   The condition resolver object.
    */
   protected function resolveConditions(Condition $condition_group, array &$rows) {
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeStatement.php b/core/drivers/fake/src/FakeStatement.php
similarity index 95%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeStatement.php
rename to core/drivers/fake/src/FakeStatement.php
index 4f00eeb..a8aafea 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeStatement.php
+++ b/core/drivers/fake/src/FakeStatement.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeStatement.
+ * Contains Drupal\fake\FakeStatement.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Core\Database\RowCountException;
 use Drupal\Core\Database\StatementInterface;
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeTruncate.php b/core/drivers/fake/src/FakeTruncate.php
similarity index 86%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeTruncate.php
rename to core/drivers/fake/src/FakeTruncate.php
index d0be873..358e638 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeTruncate.php
+++ b/core/drivers/fake/src/FakeTruncate.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeTruncate.
+ * Contains Drupal\fake\FakeTruncate.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 /**
  * Defines FakeTruncate for use in database tests.
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/FakeUpdate.php b/core/drivers/fake/src/FakeUpdate.php
similarity index 95%
rename from core/lib/Drupal/Core/Database/Driver/fake/FakeUpdate.php
rename to core/drivers/fake/src/FakeUpdate.php
index 0505c22..c817309 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/FakeUpdate.php
+++ b/core/drivers/fake/src/FakeUpdate.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Database\Driver\fake\FakeUpdate.
+ * Contains Drupal\fake\FakeUpdate.
  */
 
-namespace Drupal\Core\Database\Driver\fake;
+namespace Drupal\fake;
 
 use Drupal\Core\Database\Query\Condition;
 use Drupal\Core\Database\Query\SelectInterface;
diff --git a/core/lib/Drupal/Core/Database/Driver/fake/Install/Tasks.php b/core/drivers/fake/src/Install/Tasks.php
similarity index 82%
rename from core/lib/Drupal/Core/Database/Driver/fake/Install/Tasks.php
rename to core/drivers/fake/src/Install/Tasks.php
index 4ac7487..6a40442 100644
--- a/core/lib/Drupal/Core/Database/Driver/fake/Install/Tasks.php
+++ b/core/drivers/fake/src/Install/Tasks.php
@@ -2,14 +2,14 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\fake\Install\Tasks
+ * Definition of Drupal\fake\Install\Tasks
  */
 
-namespace Drupal\Core\Database\Driver\fake\Install;
+namespace Drupal\fake\Install;
 
 use Drupal\Core\Database\Install\Tasks as InstallTasks;
 use Drupal\Core\Database\Database;
-use Drupal\Core\Database\Driver\mysql\Connection;
+use Drupal\mysql\Connection;
 use Drupal\Core\Database\DatabaseNotFoundException;
 
 /**
diff --git a/core/drivers/mysql/mysql.info.yml b/core/drivers/mysql/mysql.info.yml
new file mode 100644
index 0000000..34d07f5
--- /dev/null
+++ b/core/drivers/mysql/mysql.info.yml
@@ -0,0 +1 @@
+type: driver
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php b/core/drivers/mysql/src/Connection.php
similarity index 98%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Connection.php
rename to core/drivers/mysql/src/Connection.php
index 66cd34f..4c7d07f 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php
+++ b/core/drivers/mysql/src/Connection.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Connection
+ * Definition of Drupal\mysql\Connection
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\DatabaseExceptionWrapper;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Delete.php b/core/drivers/mysql/src/Delete.php
similarity index 53%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Delete.php
rename to core/drivers/mysql/src/Delete.php
index de0db11..61694b0 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Delete.php
+++ b/core/drivers/mysql/src/Delete.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Delete
+ * Definition of Drupal\mysql\Delete
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\Query\Delete as QueryDelete;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Insert.php b/core/drivers/mysql/src/Insert.php
similarity index 96%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Insert.php
rename to core/drivers/mysql/src/Insert.php
index c41fdf3..64e01bb 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Insert.php
+++ b/core/drivers/mysql/src/Insert.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Insert
+ * Definition of Drupal\mysql\Insert
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\Query\Insert as QueryInsert;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Install/Tasks.php b/core/drivers/mysql/src/Install/Tasks.php
similarity index 94%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Install/Tasks.php
rename to core/drivers/mysql/src/Install/Tasks.php
index 32c217b..ece391f 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Install/Tasks.php
+++ b/core/drivers/mysql/src/Install/Tasks.php
@@ -2,14 +2,14 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Install\Tasks
+ * Definition of Drupal\mysql\Install\Tasks
  */
 
-namespace Drupal\Core\Database\Driver\mysql\Install;
+namespace Drupal\mysql\Install;
 
 use Drupal\Core\Database\Install\Tasks as InstallTasks;
 use Drupal\Core\Database\Database;
-use Drupal\Core\Database\Driver\mysql\Connection;
+use Drupal\mysql\Connection;
 use Drupal\Core\Database\DatabaseNotFoundException;
 
 /**
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Merge.php b/core/drivers/mysql/src/Merge.php
similarity index 52%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Merge.php
rename to core/drivers/mysql/src/Merge.php
index c3a2ae0..9b24307 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Merge.php
+++ b/core/drivers/mysql/src/Merge.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Merge
+ * Definition of Drupal\mysql\Merge
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\Query\Merge as QueryMerge;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php b/core/drivers/mysql/src/Schema.php
similarity index 99%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
rename to core/drivers/mysql/src/Schema.php
index e033bd5..5e35b83 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
+++ b/core/drivers/mysql/src/Schema.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Schema
+ * Definition of Drupal\mysql\Schema
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\mysql;
 
 use Drupal\Component\Utility\String;
 use Drupal\Core\Database\Database;
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Select.php b/core/drivers/mysql/src/Select.php
similarity index 53%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Select.php
rename to core/drivers/mysql/src/Select.php
index aecae55..3a462ca 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Select.php
+++ b/core/drivers/mysql/src/Select.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Select
+ * Definition of Drupal\mysql\Select
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\Query\Select as QuerySelect;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Transaction.php b/core/drivers/mysql/src/Transaction.php
similarity index 56%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Transaction.php
rename to core/drivers/mysql/src/Transaction.php
index 570a130..9d2d87e 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Transaction.php
+++ b/core/drivers/mysql/src/Transaction.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Transaction
+ * Definition of Drupal\mysql\Transaction
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\Transaction as DatabaseTransaction;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Truncate.php b/core/drivers/mysql/src/Truncate.php
similarity index 54%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Truncate.php
rename to core/drivers/mysql/src/Truncate.php
index e2fa83d..e3bf29f 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Truncate.php
+++ b/core/drivers/mysql/src/Truncate.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Truncate
+ * Definition of Drupal\mysql\Truncate
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\Query\Truncate as QueryTruncate;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Update.php b/core/drivers/mysql/src/Update.php
similarity index 53%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Update.php
rename to core/drivers/mysql/src/Update.php
index 5b3bda6..48bfeaf 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Update.php
+++ b/core/drivers/mysql/src/Update.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Update
+ * Definition of Drupal\mysql\Update
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\mysql;
 
 use Drupal\Core\Database\Query\Update as QueryUpdate;
 
diff --git a/core/drivers/pgsql/pgsql.info.yml b/core/drivers/pgsql/pgsql.info.yml
new file mode 100644
index 0000000..34d07f5
--- /dev/null
+++ b/core/drivers/pgsql/pgsql.info.yml
@@ -0,0 +1 @@
+type: driver
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php b/core/drivers/pgsql/src/Connection.php
similarity index 98%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php
rename to core/drivers/pgsql/src/Connection.php
index 7048e88..30f45a4 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php
+++ b/core/drivers/pgsql/src/Connection.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Connection
+ * Definition of Drupal\pgsql\Connection
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Database;
 use Drupal\Core\Database\Connection as DatabaseConnection;
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Delete.php b/core/drivers/pgsql/src/Delete.php
similarity index 53%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Delete.php
rename to core/drivers/pgsql/src/Delete.php
index e9914ca..0c75c70 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Delete.php
+++ b/core/drivers/pgsql/src/Delete.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Delete
+ * Definition of Drupal\pgsql\Delete
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Query\Delete as QueryDelete;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php b/core/drivers/pgsql/src/Insert.php
similarity index 98%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php
rename to core/drivers/pgsql/src/Insert.php
index fba74da..d7f6dc3 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php
+++ b/core/drivers/pgsql/src/Insert.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Insert
+ * Definition of Drupal\pgsql\Insert
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Database;
 use Drupal\Core\Database\Query\Insert as QueryInsert;
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Install/Tasks.php b/core/drivers/pgsql/src/Install/Tasks.php
similarity index 97%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Install/Tasks.php
rename to core/drivers/pgsql/src/Install/Tasks.php
index a5f0acd..b369555 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Install/Tasks.php
+++ b/core/drivers/pgsql/src/Install/Tasks.php
@@ -2,14 +2,14 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Install\Tasks
+ * Definition of Drupal\pgsql\Install\Tasks
  */
 
-namespace Drupal\Core\Database\Driver\pgsql\Install;
+namespace Drupal\pgsql\Install;
 
 use Drupal\Core\Database\Database;
 use Drupal\Core\Database\Install\Tasks as InstallTasks;
-use Drupal\Core\Database\Driver\pgsql\Connection;
+use Drupal\pgsql\Connection;
 use Drupal\Core\Database\DatabaseNotFoundException;
 
 /**
@@ -23,7 +23,7 @@ class Tasks extends InstallTasks {
   protected $pdoDriver = 'pgsql';
 
   /**
-   * Constructs a \Drupal\Core\Database\Driver\pgsql\Install\Tasks object.
+   * Constructs a \Drupal\pgsql\Install\Tasks object.
    */
   public function __construct() {
     $this->tasks[] = array(
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Merge.php b/core/drivers/pgsql/src/Merge.php
similarity index 52%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Merge.php
rename to core/drivers/pgsql/src/Merge.php
index c48b830..20f8d8f 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Merge.php
+++ b/core/drivers/pgsql/src/Merge.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Merge
+ * Definition of Drupal\pgsql\Merge
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Query\Merge as QueryMerge;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php b/core/drivers/pgsql/src/Schema.php
similarity index 99%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
rename to core/drivers/pgsql/src/Schema.php
index 63349ad..158c0c3 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
+++ b/core/drivers/pgsql/src/Schema.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Schema
+ * Definition of Drupal\pgsql\Schema
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\pgsql;
 
 use Drupal\Component\Utility\String;
 use Drupal\Core\Database\Database;
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Select.php b/core/drivers/pgsql/src/Select.php
similarity index 97%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Select.php
rename to core/drivers/pgsql/src/Select.php
index 2a931ec..5c488dd 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Select.php
+++ b/core/drivers/pgsql/src/Select.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Select
+ * Definition of Drupal\pgsql\Select
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Query\Select as QuerySelect;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Transaction.php b/core/drivers/pgsql/src/Transaction.php
similarity index 56%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Transaction.php
rename to core/drivers/pgsql/src/Transaction.php
index 8c3f701..8e8eea2 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Transaction.php
+++ b/core/drivers/pgsql/src/Transaction.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Transaction
+ * Definition of Drupal\pgsql\Transaction
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Transaction as DatabaseTransaction;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Truncate.php b/core/drivers/pgsql/src/Truncate.php
similarity index 54%
rename from core/lib/Drupal/Core/Database/Driver/mysql/Truncate.php
rename to core/drivers/pgsql/src/Truncate.php
index c7d7a36..3db4599 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Truncate.php
+++ b/core/drivers/pgsql/src/Truncate.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\mysql\Truncate
+ * Definition of Drupal\pgsql\Truncate
  */
 
-namespace Drupal\Core\Database\Driver\mysql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Query\Truncate as QueryTruncate;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Update.php b/core/drivers/pgsql/src/Update.php
similarity index 95%
rename from core/lib/Drupal/Core/Database/Driver/pgsql/Update.php
rename to core/drivers/pgsql/src/Update.php
index f424dfe..ce6ad3a 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Update.php
+++ b/core/drivers/pgsql/src/Update.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\pgsql\Update
+ * Definition of Drupal\pgsql\Update
  */
 
-namespace Drupal\Core\Database\Driver\pgsql;
+namespace Drupal\pgsql;
 
 use Drupal\Core\Database\Database;
 use Drupal\Core\Database\Query\Update as QueryUpdate;
diff --git a/core/drivers/sqlite/sqlite.info.yml b/core/drivers/sqlite/sqlite.info.yml
new file mode 100644
index 0000000..34d07f5
--- /dev/null
+++ b/core/drivers/sqlite/sqlite.info.yml
@@ -0,0 +1 @@
+type: driver
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php b/core/drivers/sqlite/src/Connection.php
similarity index 98%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php
rename to core/drivers/sqlite/src/Connection.php
index 6cacf4e..ac3e0eb 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php
+++ b/core/drivers/sqlite/src/Connection.php
@@ -2,17 +2,17 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Connection
+ * Definition of Drupal\sqlite\Connection
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Database;
 use Drupal\Core\Database\DatabaseNotFoundException;
 use Drupal\Core\Database\TransactionNoActiveException;
 use Drupal\Core\Database\TransactionNameNonUniqueException;
 use Drupal\Core\Database\TransactionCommitFailedException;
-use Drupal\Core\Database\Driver\sqlite\Statement;
+use Drupal\sqlite\Statement;
 use Drupal\Core\Database\Connection as DatabaseConnection;
 
 /**
@@ -63,7 +63,7 @@ class Connection extends DatabaseConnection {
   var $tableDropped = FALSE;
 
   /**
-   * Constructs a \Drupal\Core\Database\Driver\sqlite\Connection object.
+   * Constructs a \Drupal\sqlite\Connection object.
    */
   public function __construct(\PDO $connection, array $connection_options) {
     parent::__construct($connection, $connection_options);
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Delete.php b/core/drivers/sqlite/src/Delete.php
similarity index 89%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Delete.php
rename to core/drivers/sqlite/src/Delete.php
index c0056cb..278597a 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Delete.php
+++ b/core/drivers/sqlite/src/Delete.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Delete
+ * Definition of Drupal\sqlite\Delete
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Query\Delete as QueryDelete;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Insert.php b/core/drivers/sqlite/src/Insert.php
similarity index 93%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Insert.php
rename to core/drivers/sqlite/src/Insert.php
index 3a0bcaa..752462d 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Insert.php
+++ b/core/drivers/sqlite/src/Insert.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Insert
+ * Definition of Drupal\sqlite\Insert
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Query\Insert as QueryInsert;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Install/Tasks.php b/core/drivers/sqlite/src/Install/Tasks.php
similarity index 95%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Install/Tasks.php
rename to core/drivers/sqlite/src/Install/Tasks.php
index 97eab54..ad749b4 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Install/Tasks.php
+++ b/core/drivers/sqlite/src/Install/Tasks.php
@@ -2,13 +2,13 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Install\Tasks
+ * Definition of Drupal\sqlite\Install\Tasks
  */
 
-namespace Drupal\Core\Database\Driver\sqlite\Install;
+namespace Drupal\sqlite\Install;
 
 use Drupal\Core\Database\Database;
-use Drupal\Core\Database\Driver\sqlite\Connection;
+use Drupal\sqlite\Connection;
 use Drupal\Core\Database\DatabaseNotFoundException;
 use Drupal\Core\Database\Install\Tasks as InstallTasks;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Merge.php b/core/drivers/sqlite/src/Merge.php
similarity index 52%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Merge.php
rename to core/drivers/sqlite/src/Merge.php
index 3bbc3de..28be123 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Merge.php
+++ b/core/drivers/sqlite/src/Merge.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Merge
+ * Definition of Drupal\sqlite\Merge
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Query\Merge as QueryMerge;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php b/core/drivers/sqlite/src/Schema.php
similarity index 99%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php
rename to core/drivers/sqlite/src/Schema.php
index dc09d86..5854b5f 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php
+++ b/core/drivers/sqlite/src/Schema.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Schema
+ * Definition of Drupal\sqlite\Schema
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Component\Utility\String;
 use Drupal\Core\Database\SchemaObjectExistsException;
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Select.php b/core/drivers/sqlite/src/Select.php
similarity index 69%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Select.php
rename to core/drivers/sqlite/src/Select.php
index 5403611..a5a8020 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Select.php
+++ b/core/drivers/sqlite/src/Select.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Select
+ * Definition of Drupal\sqlite\Select
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Query\Select as QuerySelect;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Statement.php b/core/drivers/sqlite/src/Statement.php
similarity index 97%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Statement.php
rename to core/drivers/sqlite/src/Statement.php
index 0be036d..8d7a725 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Statement.php
+++ b/core/drivers/sqlite/src/Statement.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Statement
+ * Definition of Drupal\sqlite\Statement
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\StatementPrefetch;
 use Drupal\Core\Database\StatementInterface;
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Transaction.php b/core/drivers/sqlite/src/Transaction.php
similarity index 55%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Transaction.php
rename to core/drivers/sqlite/src/Transaction.php
index ae73ed8..002f38c 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Transaction.php
+++ b/core/drivers/sqlite/src/Transaction.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Transaction
+ * Definition of Drupal\sqlite\Transaction
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Transaction as DatabaseTransaction;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Truncate.php b/core/drivers/sqlite/src/Truncate.php
similarity index 84%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Truncate.php
rename to core/drivers/sqlite/src/Truncate.php
index d06d27e..cf74e54 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Truncate.php
+++ b/core/drivers/sqlite/src/Truncate.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Truncate
+ * Definition of Drupal\sqlite\Truncate
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Query\Truncate as QueryTruncate;
 
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Update.php b/core/drivers/sqlite/src/Update.php
similarity index 52%
rename from core/lib/Drupal/Core/Database/Driver/sqlite/Update.php
rename to core/drivers/sqlite/src/Update.php
index fa7d54b..47f99b5 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Update.php
+++ b/core/drivers/sqlite/src/Update.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Database\Driver\sqlite\Update
+ * Definition of Drupal\sqlite\Update
  */
 
-namespace Drupal\Core\Database\Driver\sqlite;
+namespace Drupal\sqlite;
 
 use Drupal\Core\Database\Query\Update as QueryUpdate;
 
diff --git a/core/includes/install.inc b/core/includes/install.inc
index d1c1596..81288c5 100644
--- a/core/includes/install.inc
+++ b/core/includes/install.inc
@@ -134,23 +134,14 @@ function drupal_detect_database_types() {
  */
 function drupal_get_database_types() {
   $databases = array();
-  $drivers = array();
+  $discovery = new ExtensionDiscovery();
 
-  // The internal database driver name is any valid PHP identifier.
-  $mask = '/^' . DRUPAL_PHP_FUNCTION_PATTERN . '$/';
-  $files = file_scan_directory(DRUPAL_ROOT . '/core/lib/Drupal/Core/Database/Driver', $mask, array('recurse' => FALSE));
-  if (is_dir(DRUPAL_ROOT . '/drivers/lib/Drupal/Driver/Database')) {
-    $files += file_scan_directory(DRUPAL_ROOT . '/drivers/lib/Drupal/Driver/Database/', $mask, array('recurse' => FALSE));
-  }
-  foreach ($files as $file) {
-    if (file_exists($file->uri . '/Install/Tasks.php')) {
-      $drivers[$file->filename] = $file->uri;
-    }
-  }
-  foreach ($drivers as $driver => $file) {
-    $installer = db_installer_object($driver);
+  foreach ($discovery->scan('driver') as $driver_name => $driver) {
+    drupal_classloader_register($driver_name, dirname($driver->getPathname()));
+
+    $installer = db_installer_object($driver_name);
     if ($installer->installable()) {
-      $databases[$driver] = $installer;
+      $databases[$driver_name] = $installer;
     }
   }
 
@@ -1132,12 +1123,6 @@ function db_run_tasks($driver) {
 function db_installer_object($driver) {
   // We cannot use Database::getConnection->getDriverClass() here, because
   // the connection object is not yet functional.
-  $task_class = "Drupal\\Core\\Database\\Driver\\{$driver}\\Install\\Tasks";
-  if (class_exists($task_class)) {
-    return new $task_class();
-  }
-  else {
-    $task_class = "Drupal\\Driver\\Database\\{$driver}\\Install\\Tasks";
-    return new $task_class();
-  }
+  $task_class = "Drupal\\{$driver}\\Install\\Tasks";
+  return new $task_class();
 }
diff --git a/core/lib/Drupal/Core/Extension/Discovery/RecursiveExtensionFilterIterator.php b/core/lib/Drupal/Core/Extension/Discovery/RecursiveExtensionFilterIterator.php
index d5da27c..ffe041d 100644
--- a/core/lib/Drupal/Core/Extension/Discovery/RecursiveExtensionFilterIterator.php
+++ b/core/lib/Drupal/Core/Extension/Discovery/RecursiveExtensionFilterIterator.php
@@ -44,6 +44,7 @@ class RecursiveExtensionFilterIterator extends \RecursiveFilterIterator {
    * @var array
    */
   protected $whitelist = array(
+    'drivers',
     'profiles',
     'modules',
     'themes',
diff --git a/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php b/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php
index f51cbb3..e9994f5 100644
--- a/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php
+++ b/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php
@@ -98,7 +98,7 @@ class ExtensionDiscovery {
    *
    * @param string $type
    *   The extension type to search for. One of 'profile', 'module', 'theme', or
-   *   'theme_engine'.
+   *   'theme_engine', or 'driver'.
    * @param bool $include_tests
    *   (optional) Whether to explicitly include or exclude test extensions. By
    *   default, test extensions are only discovered when in a test environment.
diff --git a/core/modules/comment/tests/src/CommentStatisticsUnitTest.php b/core/modules/comment/tests/src/CommentStatisticsUnitTest.php
index f625b48..b7e0784 100644
--- a/core/modules/comment/tests/src/CommentStatisticsUnitTest.php
+++ b/core/modules/comment/tests/src/CommentStatisticsUnitTest.php
@@ -55,7 +55,7 @@ class CommentStatisticsUnitTest extends UnitTestCase {
    * Sets up required mocks and the CommentStatistics service under test.
    */
   protected function setUp() {
-    $this->statement = $this->getMockBuilder('Drupal\Core\Database\Driver\fake\FakeStatement')
+    $this->statement = $this->getMockBuilder('Drupal\fake\FakeStatement')
       ->disableOriginalConstructor()
       ->getMock();
 
diff --git a/core/modules/migrate/tests/src/MigrateTestCase.php b/core/modules/migrate/tests/src/MigrateTestCase.php
index 279ffa9..d7ced9f 100644
--- a/core/modules/migrate/tests/src/MigrateTestCase.php
+++ b/core/modules/migrate/tests/src/MigrateTestCase.php
@@ -8,7 +8,7 @@
 namespace Drupal\migrate\Tests;
 
 use Drupal\Tests\UnitTestCase;
-use Drupal\Core\Database\Driver\fake\FakeConnection;
+use Drupal\fake\FakeConnection;
 
 /**
  * Provides setup and helper methods for Migrate module tests.
@@ -63,7 +63,7 @@ protected function getMigration() {
    * @param string $prefix
    *   (optional) The table prefix on the database.
    *
-   * @return \Drupal\Core\Database\Driver\fake\FakeConnection
+   * @return \Drupal\fake\FakeConnection
    *   The database connection.
    */
   protected function getDatabase(array $database_contents, $connection_options = array(), $prefix = '') {
