diff --git a/core/includes/install.inc b/core/includes/install.inc
index e9d666f..4b0e56f 100644
--- a/core/includes/install.inc
+++ b/core/includes/install.inc
@@ -139,6 +139,16 @@ function drupal_get_database_types() {
       $drivers[$file->filename] = $file->uri;
     }
   }
+  if (is_dir(DRUPAL_ROOT . '/database')) {
+    $files = file_scan_directory(DRUPAL_ROOT . '/db_drivers', '/^[a-z_]+$/i', array('recurse' => FALSE));
+    foreach ($files as $uri => $file) {
+      $file->uri .= "/lib/Drupal/$file->filename";
+      if (file_exists($file->uri . '/Install/Tasks.php')) {
+        $drivers[$file->filename] = $file->uri;
+        drupal_classloader_register($file->filename, "db_drivers/$file->filename");
+      }
+    }
+  }
 
   foreach ($drivers as $driver => $file) {
     $installer = db_installer_object($driver);
@@ -954,5 +964,11 @@ 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";
-  return new $task_class();
+  if (class_exists($task_class)) {
+    return new $task_class();
+  }
+  else {
+    $task_class = "Drupal\\{$driver}\\Install\\Tasks";
+    return new $task_class();
+  }
 }
diff --git a/core/lib/Drupal/Core/Database/Database.php b/core/lib/Drupal/Core/Database/Database.php
index 25fe8fa..8651847 100644
--- a/core/lib/Drupal/Core/Database/Database.php
+++ b/core/lib/Drupal/Core/Database/Database.php
@@ -373,8 +373,17 @@ public static function addConnectionInfo($key, $target, $info) {
     if (!$driver = self::$databaseInfo[$key][$target]['driver']) {
       throw new DriverNotSpecifiedException('Driver not specified for this database connection: ' . $key);
     }
-
-    $driver_class = "Drupal\\Core\\Database\\Driver\\{$driver}\\Connection";
+    // Drivers can define these settings by adding #value elements to
+    // their Task::getFormOptions.
+    if (isset(self::$databaseInfo[$key][$target]['namespace'])) {
+      drupal_classloader_register(self::$databaseInfo[$key][$target]['namespace'], self::$databaseInfo[$key][$target]['namespace_root']);
+    }
+    if (isset(self::$databaseInfo[$key][$target]['driver_class'])) {
+      $driver_class = self::$databaseInfo[$key][$target]['driver_class'];
+    }
+    else {
+      $driver_class = "Drupal\\Core\\Database\\Driver\\{$driver}\\Connection";
+    }
     $new_connection = new $driver_class(self::$databaseInfo[$key][$target]);
     $new_connection->setTarget($target);
     $new_connection->setKey($key);
