diff --git a/ChangeLog b/ChangeLog
index 644ad9a63c7f3743029f58a211730e47e136a112..0b4520ac4dda5c9705378bf37fd4c8f1ffbddd02 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -17,6 +17,7 @@
 
 2010-04-30  Xavier Perseguers  <typo3@perseguers.ch>
 
+	* Raised DBAL version from 1.1.2 to 1.1.3
 	* Added feature #14260: Allow DBAL to be configured [Install Tool]
 	* Fixed bug #14055: Install Tool wants to remove static_template table (thanks to Gregor Hermens)
 	* Fixed bug #14254: Fresh install does not redirect to Install Tool when mysql is not available
diff --git a/typo3/sysext/dbal/ChangeLog b/typo3/sysext/dbal/ChangeLog
index df1f3b1b67fdc35a9b5b2d6a6b5e9269ac76ec35..a47043bb826c485ebb166c5b5c1bcd2643bbead1 100644
--- a/typo3/sysext/dbal/ChangeLog
+++ b/typo3/sysext/dbal/ChangeLog
@@ -1,3 +1,19 @@
+2010-04-30  Xavier Perseguers  <typo3@perseguers.ch>
+
+	* Set version to 1.1.3
+
+2010-04-29  Xavier Perseguers  <typo3@perseguers.ch>
+
+	* Added autoloader for Install Tool
+
+2010-04-22  Xavier Perseguers  <typo3@perseguers.ch>
+
+	* Fixed bug #14182: Multiple join conditions are not supported
+
+2010-04-15  Xavier Perseguers  <typo3@perseguers.ch>
+
+	* Fixed bug #14120: Add a method to check if database is connected
+
 2010-04-14  Xavier Perseguers  <typo3@perseguers.ch>
 
 	* Set version to 1.1.2
diff --git a/typo3/sysext/dbal/class.tx_dbal_autoloader.php b/typo3/sysext/dbal/class.tx_dbal_autoloader.php
new file mode 100644
index 0000000000000000000000000000000000000000..799b8f00ea5446aaa35a0efe16880343f47519ec
--- /dev/null
+++ b/typo3/sysext/dbal/class.tx_dbal_autoloader.php
@@ -0,0 +1,146 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2010 Xavier Perseguers <typo3@perseguers.ch>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*  A copy is found in the textfile GPL.txt and important notices to the license
+*  from the author is found in LICENSE.txt distributed with these scripts.
+*
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * Autoloader included from Install Tool that lets DBAL load itself
+ * if it makes sense.
+ *
+ * $Id$
+ *
+ * @author Xavier Perseguers <typo3@perseguers.ch>
+ *
+ * @package TYPO3
+ * @subpackage dbal
+ */
+class tx_dbal_autoloader {
+
+	/**
+	 * Activates DBAL if it is supported.
+	 *
+	 * @param tx_install $instObj
+	 * @return void
+	 */
+	public function execute(tx_install $instObj) {
+		switch ($instObj->step) {
+			case 1:
+			case 2:
+				if (!t3lib_extMgm::isLoaded('dbal') && $this->isDbalSupported()) {
+					$this->activateDbal();
+				}
+				break;
+			case 3:
+				$driver = $instObj->INSTALL['localconf.php']['typo_db_driver'];
+				if ($driver === 'mysql' || $driver === 'mysqli') {
+					$this->deactivateDbal();
+				}
+				break;
+		}
+	}
+
+	/**
+	 * Returns TRUE if PHP modules to run DBAL are loaded.
+	 *
+	 * @return boolean
+	 */
+	protected function isDbalSupported() {
+		return extension_loaded('odbc')
+			|| extension_loaded('pdo')
+			|| extension_loaded('oci8');
+	}
+
+	/**
+	 * Activates DBAL.
+	 *
+	 * @return void
+	 */
+	protected function activateDbal() {
+		$extList = t3lib_div::trimExplode(',', $GLOBALS['TYPO3_CONF_VARS']['EXT']['extList']);
+		if (!t3lib_div::inArray($extList, 'adodb')) {
+			$extList[] = 'adodb';
+		}
+		if (!t3lib_div::inArray($extList, 'dbal')) {
+			$extList[] = 'dbal';
+		}
+		$this->updateExtensionList(implode(',', $extList));
+	}
+
+	/**
+	 * Dectivates DBAL.
+	 *
+	 * @return void
+	 */
+	protected function deactivateDbal() {
+		$extList = t3lib_div::trimExplode(',', $GLOBALS['TYPO3_CONF_VARS']['EXT']['extList']);
+		$extList = array_flip($extList);
+
+			// Remove sysext dbal and adodb
+		if (isset($extList['dbal'])) {
+			unset($extList['dbal']);
+		}
+		if (isset($extList['adodb'])) {
+			unset($extList['adodb']);
+		}
+		$extList = array_flip($extList);
+
+		$this->updateExtensionList(implode(',', $extList));
+	}
+
+	/**
+	 * Updates the list of extensions.
+	 *
+	 * @param string $newExtList
+	 * @return void
+	 */
+	protected function updateExtensionList($newExtList) {
+			// Instance of install tool
+		$instObj = t3lib_div::makeInstance('t3lib_install');
+		$instObj->allowUpdateLocalConf = 1;
+		$instObj->updateIdentity = 'TYPO3 Core Update Manager';
+
+			// Get lines from localconf file
+		$lines = $instObj->writeToLocalconf_control();
+		$instObj->setValueInLocalconfFile($lines, '$TYPO3_CONF_VARS[\'EXT\'][\'extList\']', $newExtList);
+		$instObj->writeToLocalconf_control($lines);
+
+		$GLOBALS['TYPO3_CONF_VARS']['EXT']['extList'] = $newExtList;
+			// Make sure to get cache file for backend, not frontend
+		$cacheFilePrefix = $GLOBALS['TYPO3_LOADED_EXT']['_CACHEFILE'];
+		$GLOBALS['TYPO3_LOADED_EXT']['_CACHEFILE'] = str_replace('temp_CACHED_FE', 'temp_CACHED', $cacheFilePrefix);
+		t3lib_extMgm::removeCacheFiles();
+	}
+
+}
+
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/dbal/class.tx_dbal_autoloader.php']) {
+	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/dbal/class.tx_dbal_autoloader.php']);
+}
+
+	// Make instance:
+$SOBE = t3lib_div::makeInstance('tx_dbal_autoloader');
+$SOBE->execute($this);
+?>
\ No newline at end of file
diff --git a/typo3/sysext/dbal/class.tx_dbal_installtool.php b/typo3/sysext/dbal/class.tx_dbal_installtool.php
new file mode 100644
index 0000000000000000000000000000000000000000..219386ef1567d1e9f859eb1072a7ce883e52c97f
--- /dev/null
+++ b/typo3/sysext/dbal/class.tx_dbal_installtool.php
@@ -0,0 +1,518 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2010 Xavier Perseguers <typo3@perseguers.ch>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*  A copy is found in the textfile GPL.txt and important notices to the license
+*  from the author is found in LICENSE.txt distributed with these scripts.
+*
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * Hooks for TYPO3 Install Tool.
+ *
+ * $Id$
+ *
+ * @author Xavier Perseguers <typo3@perseguers.ch>
+ *
+ * @package TYPO3
+ * @subpackage dbal
+ */
+class tx_dbal_installtool {
+
+	/**
+	 * @var string
+	 */
+	protected $templateFilePath = 'res/Templates/';
+
+	/**
+	 * @var array
+	 */
+	protected $supportedDrivers;
+
+	/**
+	 * @var array
+	 */
+	protected $availableDrivers;
+
+	/**
+	 * Default constructor.
+	 */
+	public function __construct() {
+		$this->supportedDrivers = $this->getSupportedDrivers();
+		$this->availableDrivers = $this->getAvailableDrivers();
+	}
+
+	/**
+	 * Hooks into Installer to let a non-MySQL database to be configured.
+	 * 
+	 * @param array $markers
+	 * @param integer $step
+	 * @param tx_install $instObj
+	 * @return void
+	 */
+	public function executeStepOutput(array &$markers, $step, tx_install $instObj) {
+		switch ($step) {
+			case 2:
+				$this->createConnectionForm(t3lib_div::_GET('driver'), $markers, $instObj);
+				break;
+			case 3:
+				$this->createDatabaseForm($markers, $instObj);
+				break;
+		}
+	}
+
+	/**
+	 * Hooks into Installer to modify lines to be written to localconf.php.
+	 * 
+	 * @param array $lines
+	 * @param integer $step
+	 * @param tx_install $instObj
+	 * @return void
+	 */
+	public function executeWriteLocalconf(array &$lines, $step, tx_install $instObj) {
+		switch ($step) {
+			case 3:
+			case 4:
+				$driver = $instObj->INSTALL['localconf.php']['typo_db_driver'];
+				$driverConfig = '';
+				switch ($driver) {
+					case 'oci8':
+						$driverConfig = '\'driverOptions\' => array(' .
+							'\'connectSID\' => ' . ($instObj->INSTALL['localconf.php']['typo_db_type'] === 'sid' ? 'TRUE' : 'FALSE') .
+						')' ;
+						break;
+					case 'mssql':
+					case 'odbc_mssql':
+						$driverConfig = '\'useNameQuote\' => TRUE';
+						break;
+					case 'mysql':
+					case 'mysqli':
+						return;
+				}
+				$config = 'array(' .
+					'\'_DEFAULT\' => array(' .
+						'\'type\' => \'adodb\',' .
+						'\'config\' => array(' .
+							'\'driver\' => \'' . $driver . '\',' .
+							$driverConfig .
+						')' .
+					')' .
+				');';
+				$instObj->setValueInLocalconfFile($lines, '$TYPO3_CONF_VARS[\'EXTCONF\'][\'dbal\'][\'handlerCfg\']', $config, FALSE);
+				break;
+		}
+	}
+
+	/**
+	 * Creates a specialized form to configure the DBMS connection.
+	 * 
+	 * @param string $driver
+	 * @param array $markers
+	 * @param tx_install $instObj
+	 * @return void
+	 */
+	protected function createConnectionForm($driver, array &$markers, tx_install $instObj) {
+			// Get the template file
+		$templateFile = @file_get_contents(
+			t3lib_extMgm::extPath('dbal') . $this->templateFilePath . 'install.html'
+		);
+			// Get the template part from the file
+		$template = t3lib_parsehtml::getSubpart(
+			$templateFile, '###TEMPLATE###'
+		);
+
+			// Get the subpart for the connection form
+		$formSubPart = t3lib_parsehtml::getSubpart(
+			$template, '###CONNECTION_FORM###'
+		);
+		$driverTemplate = t3lib_parsehtml::getSubpart(
+			$formSubPart, '###DATABASE_DRIVER###'
+		);
+		$driverSubPart = $this->prepareDatabaseDrivers($driverTemplate);
+		$formSubPart = t3lib_parsehtml::substituteSubpart(
+			$formSubPart,
+			'###DATABASE_DRIVER###',
+			$driverSubPart
+		);
+
+		if (!$driver) {  
+			$driver = $this->getDefaultDriver();
+		}
+			// Get the subpart related to selected database driver
+		if ($driver === '' || $driver === 'mysql' || $driver === 'mysqli') {
+			$driverOptionsSubPart = t3lib_parsehtml::getSubpart(
+				$template, '###DRIVER_MYSQL###'
+			);
+		} else {
+			$driverOptionsSubPart = t3lib_parsehtml::getSubpart(
+				$template, '###DRIVER_' . t3lib_div::strtoupper($driver) . '###'
+			);
+			if ($driverOptionsSubPart === '') {
+				$driverOptionsSubPart = t3lib_parsehtml::getSubpart(
+					$template, '###DRIVER_DEFAULT###'
+				);
+			}
+		}
+
+			// Define driver-specific markers
+		$driverMarkers = array();
+		switch ($driver) {
+			case 'mssql':
+				$driverMarkers = array(
+					'labelUsername' => 'Username',
+					'username' => TYPO3_db_username,
+					'labelPassword' => 'Password',
+					'password' => TYPO3_db_password,
+					'labelHost' => 'Host',
+					'host' => TYPO3_db_host ? TYPO3_db_host : 'windows',
+					'labelDatabase' => 'Database',
+					'database' => TYPO3_db,
+				);
+				$nextStep = $instObj->step + 2;
+				break;
+			case 'odbc_mssql':
+				$driverMarkers = array(
+					'labelUsername' => 'Username',
+					'username' => TYPO3_db_username,
+					'labelPassword' => 'Password',
+					'password' => TYPO3_db_password,
+					'labelHost' => 'Host',
+					'host' => TYPO3_db_host ? TYPO3_db_host : 'windows',
+					'database' => 'dummy_string',
+				);
+				$nextStep = $instObj->step + 2;
+				break;
+			case 'oci8':
+				$driverMarkers = array(
+					'labelUsername' => 'Username',
+					'username' => TYPO3_db_username,
+					'labelPassword' => 'Password',
+					'password' => TYPO3_db_password,
+					'labelHost' => 'Host',
+					'host' => TYPO3_db_host ? TYPO3_db_host : 'localhost',
+					'labelType' => 'Type',
+					'labelSID' => 'SID',
+					'labelServiceName' => 'Service Name',
+					'labelDatabase' => 'Name',
+					'database' => TYPO3_db,
+				);
+				$nextStep = $instObj->step + 2;
+				break;
+			default:
+				$driverMarkers = array(
+					'labelUsername' => 'Username',
+					'username' => TYPO3_db_username,
+					'labelPassword' => 'Password',
+					'password' => TYPO3_db_password,
+					'labelHost' => 'Host',
+					'host' => TYPO3_db_host ? TYPO3_db_host : 'localhost',
+					'labelDatabase' => 'Database',
+					'database' => TYPO3_db,
+				);
+				$nextStep = $instObj->step + 1;
+				break;
+		}
+
+			// Add header marker for main template
+		$markers['header'] = 'Connect to your database host';
+			// Define the markers content for the subpart
+		$subPartMarkers = array(
+			'step' => $nextStep,
+			'action' => htmlspecialchars($instObj->action),
+			'encryptionKey' => $instObj->createEncryptionKey(),
+			'branch' => TYPO3_branch,
+			'driver_options' => $driverOptionsSubPart,
+			'continue' => 'Continue'
+		);
+		$subPartMarkers = array_merge($subPartMarkers, $driverMarkers);
+
+			// Add step marker for main template
+		$markers['step'] = t3lib_parsehtml::substituteMarkerArray(
+			$formSubPart,
+			$subPartMarkers,
+			'###|###',
+			1,
+			1
+		);
+	}
+
+	/**
+	 * Prepares the list of database drivers for step 2.
+	 *
+	 * @param string $template
+	 * @return string
+	 */
+	protected function prepareDatabaseDrivers($template) {
+		$subParts = array(
+			'abstractionLayer' => t3lib_parsehtml::getSubpart($template, '###ABSTRACTION_LAYER###'),
+			'vendor' => t3lib_parsehtml::getSubpart($template, '###VENDOR###'),
+		);
+
+			// Create the drop-down list of available drivers
+		$dropdown = '';
+		$activeDriver = t3lib_div::_GET('driver');
+		foreach ($this->availableDrivers as $abstractionLayer => $drivers) {
+			$options = array();
+			foreach ($drivers as $driver => $label) {
+				$markers = array(
+					'driver'      => $driver,
+					'labelvendor' => $label,
+					'onclick'     => 'document.location=\'index.php?TYPO3_INSTALL[type]=config&mode=123&step=2&driver=' . $driver . '\';',
+					'selected'    => '',
+				);
+				if ($driver === $activeDriver) {
+					$markers['selected'] .= ' selected="selected"';
+				}
+				$options[] = t3lib_parsehtml::substituteMarkerArray(
+					$subParts['vendor'],
+					$markers,
+					'###|###',
+					1
+				);
+			}
+			$subPart = t3lib_parsehtml::substituteSubpart(
+				$subParts['abstractionLayer'],
+				'###VENDOR###',
+				implode("\n", $options)
+			);
+			$dropdown .= t3lib_parsehtml::substituteMarker(
+				$subPart,
+				'###LABELABSTRACTIONLAYER###',
+				$abstractionLayer
+			);
+		}
+		$form = t3lib_parsehtml::substituteSubpart(
+			$template,
+			'###ABSTRACTION_LAYER###',
+			$dropdown
+		);
+		$form = t3lib_parsehtml::substituteMarker(
+			$form,
+			'###LABELDRIVER###',
+			'Driver'
+		);
+		return $form;
+	}
+
+	/**
+	 * Returns a list of DBAL supported database drivers, with a user-friendly name
+	 * and any PHP module dependency.
+	 *
+	 * @return array
+	 */
+	protected function getSupportedDrivers() {
+		$supportedDrivers = array(
+			'Native' => array(
+				'mysql' => array(
+					'label'      => 'MySQL/MySQLi (recommended)',
+					'combine'    => 'OR',
+					'extensions' => array('mysql', 'mysqli'),
+				),
+				'mssql' => array(
+					'label'      => 'Microsoft SQL Server',
+					'extensions' => array('mssql'),
+				),
+				'oci8' => array(
+					'label'      => 'Oracle OCI8',
+					'extensions' => array('oci8'),
+				),
+				'postgres' => array(
+					'label'      => 'PostgreSQL',
+					'extensions' => array('pgsql'),
+				)
+			),
+			'ODBC' => array(
+				'odbc_mssql' => array(
+					'label'      => 'Microsoft SQL Server',
+					'extensions' => array('odbc', 'mssql'),
+				),
+			),
+		);
+		return $supportedDrivers;
+	}
+
+	/**
+	 * Returns a list of database drivers that are available on current server.
+	 *
+	 * @return array
+	 */
+	protected function getAvailableDrivers() {
+		$availableDrivers = array();
+		foreach ($this->supportedDrivers as $abstractionLayer => $drivers) {
+			foreach ($drivers as $driver => $info) {
+				if (isset($info['combine']) && $info['combine'] === 'OR') {
+					$isAvailable = FALSE;
+				} else {
+					$isAvailable = TRUE;
+				}
+
+					// Loop through each PHP module dependency to ensure it is loaded
+				foreach ($info['extensions'] as $extension) {
+					if (isset($info['combine']) && $info['combine'] === 'OR') {
+						$isAvailable |= extension_loaded($extension);
+					} else {
+						$isAvailable &= extension_loaded($extension);
+					}
+				}
+
+				if ($isAvailable) {
+					if (!isset($availableDrivers[$abstractionLayer])) {
+						$availableDrivers[$abstractionLayer] = array();
+					}
+					$availableDrivers[$abstractionLayer][$driver] = $info['label'];
+				}
+			}
+		}
+		return $availableDrivers;
+	}
+
+	/**
+	 * Returns the driver that is selected by default in the
+	 * Install Tool dropdown list.
+	 *
+	 * @return string
+	 */
+	protected function getDefaultDriver() {
+		$defaultDriver = '';
+		if (count($this->availableDrivers)) {
+			$abstractionLayers = array_keys($this->availableDrivers);
+			$drivers = array_keys($this->availableDrivers[$abstractionLayers[0]]);
+			$defaultDriver = $drivers[0];
+		}
+		return $defaultDriver;
+	}
+
+	/**
+	 * Creates a specialized form to configure the database.
+	 * 
+	 * @param array $markers
+	 * @param tx_install $instObj
+	 */
+	protected function createDatabaseForm(array &$markers, tx_install $instObj) {
+		$error_missingConnect = '
+			<p class="typo3-message message-error">
+				<strong>
+					There is no connection to the database!
+				</strong>
+				<br />
+				(Username: <em>' . TYPO3_db_username . '</em>,
+				Host: <em>' . TYPO3_db_host . '</em>,
+				Using Password: YES)
+				<br />
+				Go to Step 1 and enter a proper username/password!
+			</p>
+		';
+
+			// Add header marker for main template
+		$markers['header'] = 'Select database';
+			// There should be a database host connection at this point
+		if ($result = $GLOBALS['TYPO3_DB']->sql_pconnect(
+			TYPO3_db_host, TYPO3_db_username, TYPO3_db_password
+		)) {
+				// Get the template file
+			$templateFile = @file_get_contents(
+				t3lib_extMgm::extPath('dbal') . $this->templateFilePath . 'install.html'
+			);
+				// Get the template part from the file
+			$template = t3lib_parsehtml::getSubpart(
+				$templateFile, '###TEMPLATE###'
+			);
+				// Get the subpart for the database choice step
+			$formSubPart = t3lib_parsehtml::getSubpart(
+				$template, '###DATABASE_FORM###'
+			);
+				// Get the subpart for the database options
+			$step3DatabaseOptionsSubPart = t3lib_parsehtml::getSubpart(
+				$formSubPart, '###DATABASEOPTIONS###'
+			);
+
+			$dbArr = $instObj->getDatabaseList();
+			$dbIncluded = FALSE;
+			foreach ($dbArr as $dbname) {
+					// Define the markers content for database options
+				$step3DatabaseOptionMarkers = array(
+					'databaseValue' => htmlspecialchars($dbname),
+					'databaseSelected' => ($dbname === TYPO3_db) ? 'selected="selected"' : '',
+					'databaseName' => htmlspecialchars($dbname)
+				);
+					// Add the option HTML to an array
+				$step3DatabaseOptions[] = t3lib_parsehtml::substituteMarkerArray(
+					$step3DatabaseOptionsSubPart,
+					$step3DatabaseOptionMarkers,
+					'###|###',
+					1,
+					1
+				);
+				if ($dbname === TYPO3_db) {
+					$dbIncluded = TRUE;
+				}
+			}
+			if (!$dbIncluded && TYPO3_db) {
+					// // Define the markers content when no access
+				$step3DatabaseOptionMarkers = array(
+					'databaseValue' => htmlspecialchars(TYPO3_db),
+					'databaseSelected' => 'selected="selected"',
+					'databaseName' => htmlspecialchars(TYPO3_db) . ' (NO ACCESS!)'
+				);
+					// Add the option HTML to an array
+				$step3DatabaseOptions[] = t3lib_parsehtml::substituteMarkerArray(
+					$step3DatabaseOptionsSubPart,
+					$step3DatabaseOptionMarkers,
+					'###|###',
+					1,
+					1
+				);
+			}
+				// Substitute the subpart for the database options
+			$content = t3lib_parsehtml::substituteSubpart(
+				$formSubPart,
+				'###DATABASEOPTIONS###',
+				implode(chr(10), $step3DatabaseOptions)
+			);
+				// Define the markers content
+			$step3SubPartMarkers = array(
+				'step' => $instObj->step + 1,
+				'action' => htmlspecialchars($instObj->action),
+				'llOption2' => 'Select an EMPTY existing database:',
+				'llRemark2' => 'All tables used by TYPO3 will be overwritten in step 3.',
+				'continue' => 'Continue'
+			);
+				// Add step marker for main template
+			$markers['step'] = t3lib_parsehtml::substituteMarkerArray(
+				$content,
+				$step3SubPartMarkers,
+				'###|###',
+				1,
+				1
+			);
+		} else {
+				// Add step marker for main template when no connection
+			$markers['step'] = $error_missingConnect;
+		}
+	}
+
+}
+
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/dbal/class.tx_dbal_installtool.php']) {
+	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/dbal/class.tx_dbal_installtool.php']);
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/dbal/class.ux_t3lib_db.php b/typo3/sysext/dbal/class.ux_t3lib_db.php
index 1af1f687202f88e287d00ac92fc180716fa3cc09..4318d176d1815a5c4535fb06b30a28dd0364d323 100644
--- a/typo3/sysext/dbal/class.ux_t3lib_db.php
+++ b/typo3/sysext/dbal/class.ux_t3lib_db.php
@@ -1254,10 +1254,12 @@ class ux_t3lib_DB extends t3lib_DB {
 				foreach ($v['JOIN'] as $joinCnt => $join) {
 					$from_table[$k]['JOIN'][$joinCnt]['withTable'] = $this->quoteName($join['withTable']);
 					$from_table[$k]['JOIN'][$joinCnt]['as'] = ($join['as']) ? $this->quoteName($join['as']) : '';
-					$from_table[$k]['JOIN'][$joinCnt]['ON'][0]['table'] = ($join['ON'][0]['table']) ? $this->quoteName($join['ON'][0]['table']) : '';
-					$from_table[$k]['JOIN'][$joinCnt]['ON'][0]['field'] = $this->quoteName($join['ON'][0]['field']);
-					$from_table[$k]['JOIN'][$joinCnt]['ON'][1]['table'] = ($join['ON'][1]['table']) ? $this->quoteName($join['ON'][1]['table']) : '';
-					$from_table[$k]['JOIN'][$joinCnt]['ON'][1]['field'] = $this->quoteName($join['ON'][1]['field']);
+					foreach ($from_table[$k]['JOIN'][$joinCnt]['ON'] as &$condition) {
+						$condition['left']['table'] = ($condition['left']['table']) ? $this->quoteName($condition['left']['table']) : '';
+						$condition['left']['field'] = $this->quoteName($condition['left']['field']);
+						$condition['right']['table'] = ($condition['right']['table']) ? $this->quoteName($condition['right']['table']) : '';
+						$condition['right']['field'] = $this->quoteName($condition['right']['field']);
+					}
 				}
 			}
 		}
@@ -2106,10 +2108,14 @@ class ux_t3lib_DB extends t3lib_DB {
 				}
 				break;
 			case 'adodb':
-				$sqlTables = $this->handlerInstance['_DEFAULT']->MetaTables('TABLES');
-				while (list($k, $theTable) = each($sqlTables)) {
-					if (preg_match('/BIN\$/', $theTable)) continue; // skip tables from the Oracle 10 Recycle Bin
-					$whichTables[$theTable] = $theTable;
+					// check needed for install tool - otherwise it will just die because the call to
+					// MetaTables is done on a stdClass instance
+				if (method_exists($this->handlerInstance['_DEFAULT'], 'MetaTables')) {
+					$sqlTables = $this->handlerInstance['_DEFAULT']->MetaTables('TABLES');
+					while (list($k, $theTable) = each($sqlTables)) {
+						if (preg_match('/BIN\$/', $theTable)) continue; // skip tables from the Oracle 10 Recycle Bin
+						$whichTables[$theTable] = $theTable;
+					}
 				}
 				break;
 			case 'userdefined':
@@ -2478,6 +2484,10 @@ class ux_t3lib_DB extends t3lib_DB {
 		$output = FALSE;
 
 		if (is_array($cfgArray)) {
+			if (!$cfgArray['config']['database']) {
+					// Configuration is incomplete
+				return;
+			}
 			switch ($handlerType) {
 				case 'native':
 					if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['no_pconnect']) {
@@ -2579,6 +2589,26 @@ class ux_t3lib_DB extends t3lib_DB {
 	}
 
 
+	/**
+	 * Checks if database is connected.
+	 *
+	 * @return boolean
+	 */
+	public function isConnected() {
+		$result = FALSE;
+		switch ((string)$this->handlerCfg[$this->lastHandlerKey]['type']) {
+			case 'native':
+				$result = is_resource($this->link);
+				break;
+			case 'adodb':
+			case 'userdefined':
+				$result = is_object($this->handlerInstance[$this->lastHandlerKey]) && $this->handlerInstance[$this->lastHandlerKey]->isConnected();
+				break;
+		}
+		return $result;
+	}
+
+
 	/**
 	 * Checks whether the DBAL is currently inside an operation running on the "native" DB handler (i.e. MySQL)
 	 *
@@ -2735,17 +2765,23 @@ class ux_t3lib_DB extends t3lib_DB {
 					}
 					$onPartsArray = array();
 						// Mapping ON parts of the JOIN
-					if (is_array($join['ON'])) {
-						foreach ($join['ON'] as $onParts) {
-							if (isset($this->mapping[$onParts['table']]['mapFieldNames'][$onParts['field']])) {
-								$onParts['field'] = $this->mapping[$onParts['table']]['mapFieldNames'][$onParts['field']];
+					if (is_array($tables[$k]['JOIN'][$joinCnt]['ON'])) {
+						foreach ($tables[$k]['JOIN'][$joinCnt]['ON'] as &$condition) {
+								// Left side of the comparator
+							if (isset($this->mapping[$condition['left']['table']]['mapFieldNames'][$condition['left']['field']])) {
+								$condition['left']['field'] = $this->mapping[$condition['left']['table']]['mapFieldNames'][$condition['left']['field']];
+							}
+							if (isset($this->mapping[$condition['left']['table']]['mapTableName'])) {
+								$condition['left']['table'] = $this->mapping[$condition['left']['table']]['mapTableName'];
+							}
+								// Right side of the comparator
+							if (isset($this->mapping[$condition['right']['table']]['mapFieldNames'][$condition['right']['field']])) {
+								$condition['right']['field'] = $this->mapping[$condition['right']['table']]['mapFieldNames'][$condition['right']['field']];
 							}
-							if (isset($this->mapping[$onParts['table']]['mapTableName'])) {
-								$onParts['table'] = $this->mapping[$onParts['table']]['mapTableName'];
+							if (isset($this->mapping[$condition['right']['table']]['mapTableName'])) {
+								$condition['right']['table'] = $this->mapping[$condition['right']['table']]['mapTableName'];
 							}
-							$onPartsArray[]	= $onParts;
 						}
-						$tables[$k]['JOIN'][$joinCnt]['ON'] = $onPartsArray;
 					}
 				}
 			}
diff --git a/typo3/sysext/dbal/ext_emconf.php b/typo3/sysext/dbal/ext_emconf.php
index f6edfa12ca91415498d46e0ef17aa41c06f70def..4953b462c5e8beb3dc617be57a51725741d48ea1 100644
--- a/typo3/sysext/dbal/ext_emconf.php
+++ b/typo3/sysext/dbal/ext_emconf.php
@@ -3,7 +3,7 @@
 ########################################################################
 # Extension Manager/Repository config file for ext "dbal".
 #
-# Auto generated 14-04-2010 00:05
+# Auto generated 30-04-2010 21:11
 #
 # Manual updates:
 # Only the data in the array - everything else is removed by next
@@ -32,13 +32,13 @@ $EM_CONF[$_EXTKEY] = array(
 	'author_company' => '',
 	'CGLcompliance' => '',
 	'CGLcompliance_note' => '',
-	'version' => '1.1.2',
-	'_md5_values_when_last_written' => 'a:39:{s:9:"ChangeLog";s:4:"91de";s:26:"class.ux_db_list_extra.php";s:4:"60d9";s:21:"class.ux_t3lib_db.php";s:4:"6cc1";s:28:"class.ux_t3lib_sqlparser.php";s:4:"a9d4";s:16:"ext_autoload.php";s:4:"821a";s:21:"ext_conf_template.txt";s:4:"f5cf";s:12:"ext_icon.gif";s:4:"c9ba";s:17:"ext_localconf.php";s:4:"5280";s:14:"ext_tables.php";s:4:"8414";s:14:"ext_tables.sql";s:4:"1f95";s:27:"doc/class.tslib_fe.php.diff";s:4:"0083";s:14:"doc/manual.sxw";s:4:"b022";s:45:"handlers/class.tx_dbal_handler_openoffice.php";s:4:"775f";s:43:"handlers/class.tx_dbal_handler_rawmysql.php";s:4:"2f1b";s:40:"handlers/class.tx_dbal_handler_xmldb.php";s:4:"e363";s:31:"lib/class.tx_dbal_sqlengine.php";s:4:"f1bb";s:33:"lib/class.tx_dbal_tsparserext.php";s:4:"862d";s:14:"mod1/clear.gif";s:4:"cc11";s:13:"mod1/conf.php";s:4:"6e63";s:14:"mod1/index.php";s:4:"4a5e";s:18:"mod1/locallang.xml";s:4:"0b57";s:22:"mod1/locallang_mod.xml";s:4:"86ef";s:19:"mod1/moduleicon.gif";s:4:"2b8f";s:10:"res/README";s:4:"be19";s:30:"res/oracle/indexed_search.diff";s:4:"ec81";s:23:"res/oracle/realurl.diff";s:4:"86da";s:25:"res/oracle/scheduler.diff";s:4:"7c06";s:27:"res/oracle/templavoila.diff";s:4:"1fd5";s:43:"res/postgresql/postgresql-compatibility.sql";s:4:"034c";s:22:"tests/BaseTestCase.php";s:4:"f736";s:26:"tests/FakeDbConnection.php";s:4:"7bab";s:29:"tests/db_general_testcase.php";s:4:"42f4";s:27:"tests/db_mssql_testcase.php";s:4:"106d";s:28:"tests/db_oracle_testcase.php";s:4:"e710";s:32:"tests/db_postgresql_testcase.php";s:4:"5f32";s:36:"tests/sqlparser_general_testcase.php";s:4:"cc6d";s:31:"tests/fixtures/mssql.config.php";s:4:"ff95";s:30:"tests/fixtures/oci8.config.php";s:4:"7179";s:36:"tests/fixtures/postgresql.config.php";s:4:"87a1";}',
+	'version' => '1.1.3',
+	'_md5_values_when_last_written' => 'a:42:{s:9:"ChangeLog";s:4:"a252";s:28:"class.tx_dbal_autoloader.php";s:4:"bb38";s:29:"class.tx_dbal_installtool.php";s:4:"0564";s:26:"class.ux_db_list_extra.php";s:4:"60d9";s:21:"class.ux_t3lib_db.php";s:4:"1839";s:28:"class.ux_t3lib_sqlparser.php";s:4:"a9d4";s:16:"ext_autoload.php";s:4:"821a";s:21:"ext_conf_template.txt";s:4:"f5cf";s:12:"ext_icon.gif";s:4:"c9ba";s:17:"ext_localconf.php";s:4:"afdd";s:14:"ext_tables.php";s:4:"8414";s:14:"ext_tables.sql";s:4:"1f95";s:27:"doc/class.tslib_fe.php.diff";s:4:"0083";s:14:"doc/manual.sxw";s:4:"b022";s:45:"handlers/class.tx_dbal_handler_openoffice.php";s:4:"775f";s:43:"handlers/class.tx_dbal_handler_rawmysql.php";s:4:"2f1b";s:40:"handlers/class.tx_dbal_handler_xmldb.php";s:4:"e363";s:31:"lib/class.tx_dbal_sqlengine.php";s:4:"f1bb";s:33:"lib/class.tx_dbal_tsparserext.php";s:4:"862d";s:14:"mod1/clear.gif";s:4:"cc11";s:13:"mod1/conf.php";s:4:"6e63";s:14:"mod1/index.php";s:4:"4a5e";s:18:"mod1/locallang.xml";s:4:"0b57";s:22:"mod1/locallang_mod.xml";s:4:"86ef";s:19:"mod1/moduleicon.gif";s:4:"2b8f";s:10:"res/README";s:4:"be19";s:26:"res/Templates/install.html";s:4:"6a62";s:30:"res/oracle/indexed_search.diff";s:4:"ec81";s:23:"res/oracle/realurl.diff";s:4:"86da";s:25:"res/oracle/scheduler.diff";s:4:"7c06";s:27:"res/oracle/templavoila.diff";s:4:"1fd5";s:43:"res/postgresql/postgresql-compatibility.sql";s:4:"034c";s:22:"tests/BaseTestCase.php";s:4:"f736";s:26:"tests/FakeDbConnection.php";s:4:"7bab";s:29:"tests/db_general_testcase.php";s:4:"42f4";s:27:"tests/db_mssql_testcase.php";s:4:"5593";s:28:"tests/db_oracle_testcase.php";s:4:"4dfc";s:32:"tests/db_postgresql_testcase.php";s:4:"4851";s:36:"tests/sqlparser_general_testcase.php";s:4:"9c10";s:31:"tests/fixtures/mssql.config.php";s:4:"ff95";s:30:"tests/fixtures/oci8.config.php";s:4:"7179";s:36:"tests/fixtures/postgresql.config.php";s:4:"87a1";}',
 	'constraints' => array(
 		'depends' => array(
 			'adodb' => '5.10.0-',
 			'php' => '5.2.0-0.0.0',
-			'typo3' => '4.4.0beta1-0.0.0',
+			'typo3' => '4.4.0beta1-4.4.99',
 		),
 		'conflicts' => array(
 		),
diff --git a/typo3/sysext/dbal/ext_localconf.php b/typo3/sysext/dbal/ext_localconf.php
index 8ee482c803eacf2999d277742ad5272087a84ac3..925f9daa8c22ddf0a190b447690ed1286ed947c3 100644
--- a/typo3/sysext/dbal/ext_localconf.php
+++ b/typo3/sysext/dbal/ext_localconf.php
@@ -7,4 +7,7 @@ $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_db.php'] = t3lib_extMg
 $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_sqlparser.php'] = t3lib_extMgm::extPath('dbal') . 'class.ux_t3lib_sqlparser.php';
 $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/class.db_list_extra.inc'] = t3lib_extMgm::extPath('dbal') . 'class.ux_db_list_extra.php';
 
+// Register a hook for the installer
+$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install/mod/class.tx_install.php']['stepOutput'][] = 'EXT:dbal/class.tx_dbal_installtool.php:tx_dbal_installtool';
+$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install/mod/class.tx_install.php']['writeLocalconf'][] = 'EXT:dbal/class.tx_dbal_installtool.php:tx_dbal_installtool';
 ?>
diff --git a/typo3/sysext/dbal/last_synched_target b/typo3/sysext/dbal/last_synched_target
index cf9eea5ec850bc384e744046177d5e4e0a83c945..b7d081425156662decfec32a8046019320024231 100644
--- a/typo3/sysext/dbal/last_synched_target
+++ b/typo3/sysext/dbal/last_synched_target
@@ -1 +1 @@
-https://svn.typo3.org/TYPO3v4/Extensions/dbal/tags/1.1.2/
+https://svn.typo3.org/TYPO3v4/Extensions/dbal/tags/1.1.3/
diff --git a/typo3/sysext/dbal/res/Templates/install.html b/typo3/sysext/dbal/res/Templates/install.html
new file mode 100644
index 0000000000000000000000000000000000000000..36f9990cd17335f36ba90795f3079195ddbad8de
--- /dev/null
+++ b/typo3/sysext/dbal/res/Templates/install.html
@@ -0,0 +1,201 @@
+?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html
+     PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+	<title>Template: Step Output</title>
+</head>
+<body>
+<!-- ###TEMPLATE### begin -->
+
+<!-- ###CONNECTION_FORM### begin -->
+<script type="text/javascript" src="../contrib/prototype/prototype.js"></script>
+<script type="text/javascript" src="../sysext/install/Resources/Public/Javascript/install.js"></script>
+
+<form method="post" action="###ACTION###">
+	<fieldset class="t3-install-form-label-width-7">
+		<ol>
+			<li class="t3-install-hidden">
+				<input type="hidden" value="###STEP###" name="step" />
+				<input type="hidden" value="###ENCRYPTIONKEY###" name="TYPO3_INSTALL[localconf.php][encryptionKey]" />
+				<input type="hidden" value="###BRANCH###" name="TYPO3_INSTALL[localconf.php][compat_version]" />
+			</li>
+			<!-- ###DATABASE_DRIVER### begin -->
+			<li>
+				<label>###LABELDRIVER###</label>
+				<select name="TYPO3_INSTALL[localconf.php][typo_db_driver]">
+					<!-- ###ABSTRACTION_LAYER### begin -->
+					<optgroup label="###LABELABSTRACTIONLAYER###">
+						<!-- ###VENDOR### begin -->
+						<option value="###DRIVER###"###SELECTED### onclick="###ONCLICK###">###LABELVENDOR###</option>
+						<!-- ###VENDOR### end -->
+					</optgroup>
+					<!-- ###ABSTRACTION_LAYER### end -->
+				</select>
+			</li>
+			<!-- ###DATABASE_DRIVER### end -->
+
+			###DRIVER_OPTIONS###
+		</ol>
+	</fieldset>
+	<fieldset class="t3-install-form-submit">
+		<ol>
+			<li>
+				<button type="submit">###CONTINUE###<span class="t3-install-form-button-icon-positive">&nbsp;</span></button>
+			</li>
+		</ol>
+	</fieldset>
+</form>
+<!-- ###CONNECTION_FORM### end -->
+
+
+
+
+<!-- ###DATABASE_FORM### begin -->
+<form id="t3-install-123-step3" method="post" action="###ACTION###">
+	<fieldset>
+		<ol>
+			<li class="t3-install-hidden">
+				<input type="hidden" value="###STEP###" name="step" />
+			</li>
+			<li>
+				<label for="t3-install-123-database">###LLOPTION2###</label>
+				<p>###LLREMARK2###</p>
+				<select id="t3-install-123-database" name="TYPO3_INSTALL[localconf.php][typo_db]">
+					<option value="">Select database</option>
+					<!-- ###DATABASEOPTIONS### begin -->
+					<option value="###DATABASEVALUE###" ###DATABASESELECTED###>###DATABASENAME###</option>
+					<!-- ###DATABASEOPTIONS### end -->
+				</select>
+			</li>
+		</ol>
+	</fieldset>
+	<fieldset class="t3-install-form-submit">
+		<ol>
+			<li>
+				<button type="submit">###CONTINUE###<span class="t3-install-form-button-icon-positive">&nbsp;</span></button>
+			</li>
+		</ol>
+	</fieldset>
+</form>
+<!-- ###DATABASE_FORM### end -->
+
+
+
+
+
+<!-- ###DRIVER_MYSQL### begin -->
+<!-- ###DRIVER_MYSQLI### begin -->
+<li>
+	<label for="t3-install-form-username">###LABELUSERNAME###</label>
+	<input id="t3-install-form-username" class="t3-install-form-input-text" type="text" value="###USERNAME###" name="TYPO3_INSTALL[localconf.php][typo_db_username]" />
+</li>
+<li>
+	<label for="t3-install-form-password">###LABELPASSWORD###</label>
+	<input id="t3-install-form-password" class="t3-install-form-input-text" type="password" value="###PASSWORD###" name="TYPO3_INSTALL[localconf.php][typo_db_password]" />
+</li>
+<li>
+	<label for="t3-install-form-host">###LABELHOST###</label>
+	<input id="t3-install-form-host" class="t3-install-form-input-text" type="text" value="###HOST###" name="TYPO3_INSTALL[localconf.php][typo_db_host]" />
+</li>
+<!-- ###DRIVER_MYSQLI### end -->
+<!-- ###DRIVER_MYSQL### end -->
+
+
+
+
+<!-- ###DRIVER_DEFAULT### begin -->
+<li>
+	<label for="t3-install-form-username">###LABELUSERNAME###</label>
+	<input id="t3-install-form-username" class="t3-install-form-input-text" type="text" value="###USERNAME###" name="TYPO3_INSTALL[localconf.php][typo_db_username]" />
+</li>
+<li>
+	<label for="t3-install-form-password">###LABELPASSWORD###</label>
+	<input id="t3-install-form-password" class="t3-install-form-input-text" type="password" value="###PASSWORD###" name="TYPO3_INSTALL[localconf.php][typo_db_password]" />
+</li>
+<li>
+	<label for="t3-install-form-host">###LABELHOST###</label>
+	<input id="t3-install-form-host" class="t3-install-form-input-text" type="text" value="###HOST###" name="TYPO3_INSTALL[localconf.php][typo_db_host]" />
+</li>
+<li>
+	<label for="t3-install-form-database">###LABELDATABASE###</label>
+	<input id="t3-install-form-database" class="t3-install-form-input-text" type="text" value="###DATABASE###" name="TYPO3_INSTALL[localconf.php][typo_db]" />
+</li>
+<!-- ###DRIVER_DEFAULT### end -->
+
+
+
+
+<!-- ###DRIVER_MSSQL### begin -->
+<li>
+	<label for="t3-install-form-username">###LABELUSERNAME###</label>
+	<input id="t3-install-form-username" class="t3-install-form-input-text" type="text" value="###USERNAME###" name="TYPO3_INSTALL[localconf.php][typo_db_username]" />
+</li>
+<li>
+	<label for="t3-install-form-password">###LABELPASSWORD###</label>
+	<input id="t3-install-form-password" class="t3-install-form-input-text" type="password" value="###PASSWORD###" name="TYPO3_INSTALL[localconf.php][typo_db_password]" />
+</li>
+<li>
+	<label for="t3-install-form-host">###LABELHOST###</label>
+	<input id="t3-install-form-host" class="t3-install-form-input-text" type="text" value="###HOST###" name="TYPO3_INSTALL[localconf.php][typo_db_host]" />
+</li>
+<li>
+	<label for="t3-install-form-database">###LABELDATABASE###</label>
+	<input id="t3-install-form-database" class="t3-install-form-input-text" type="text" value="###DATABASE###" name="TYPO3_INSTALL[localconf.php][typo_db]" />
+</li>
+<!-- ###DRIVER_MSSQL### end -->
+
+
+
+
+
+<!-- ###DRIVER_ODBC_MSSQL### begin -->
+<li>
+	<label for="t3-install-form-username">###LABELUSERNAME###</label>
+	<input id="t3-install-form-username" class="t3-install-form-input-text" type="text" value="###USERNAME###" name="TYPO3_INSTALL[localconf.php][typo_db_username]" />
+</li>
+<li>
+	<label for="t3-install-form-password">###LABELPASSWORD###</label>
+	<input id="t3-install-form-password" class="t3-install-form-input-text" type="password" value="###PASSWORD###" name="TYPO3_INSTALL[localconf.php][typo_db_password]" />
+</li>
+<li>
+	<label for="t3-install-form-host">###LABELHOST###</label>
+	<input id="t3-install-form-host" class="t3-install-form-input-text" type="text" value="###HOST###" name="TYPO3_INSTALL[localconf.php][typo_db_host]" />
+</li>
+<input type="hidden" value="###DATABASE###" name="TYPO3_INSTALL[localconf.php][typo_db]" />
+<!-- ###DRIVER_ODBC_MSSQL### end -->
+
+
+
+
+<!-- ###DRIVER_OCI8### begin -->
+<li>
+	<label for="t3-install-form-username">###LABELUSERNAME###</label>
+	<input id="t3-install-form-username" class="t3-install-form-input-text" type="text" value="###USERNAME###" name="TYPO3_INSTALL[localconf.php][typo_db_username]" />
+</li>
+<li>
+	<label for="t3-install-form-password">###LABELPASSWORD###</label>
+	<input id="t3-install-form-password" class="t3-install-form-input-text" type="password" value="###PASSWORD###" name="TYPO3_INSTALL[localconf.php][typo_db_password]" />
+</li>
+<li>
+	<label for="t3-install-form-host">###LABELHOST###</label>
+	<input id="t3-install-form-host" class="t3-install-form-input-text" type="text" value="###HOST###" name="TYPO3_INSTALL[localconf.php][typo_db_host]" />
+</li>
+<li>
+	<label for="t3-install-form-type">###LABELTYPE###</label>
+	<select id="t3-install-form-type" name="TYPO3_INSTALL[localconf.php][typo_db_type]">
+		<option value="sid">###LABELSID###</option>
+		<option value="servicename">###LABELSERVICENAME###</option>
+	</select>
+</li>
+<li>
+	<label for="t3-install-form-database">###LABELDATABASE###</label>
+	<input id="t3-install-form-database" class="t3-install-form-input-text" type="text" value="###DATABASE###" name="TYPO3_INSTALL[localconf.php][typo_db]" />
+</li>
+<!-- ###DRIVER_OCI8### end -->
+
+<!-- ###TEMPLATE### end -->
+</body>
+</html>
\ No newline at end of file
diff --git a/typo3/sysext/dbal/tests/db_mssql_testcase.php b/typo3/sysext/dbal/tests/db_mssql_testcase.php
index ec98b1c55569f8fc339c3134d3be875630172136..88eaa6c8b9caddb73a4354eac28006222e4a42d8 100644
--- a/typo3/sysext/dbal/tests/db_mssql_testcase.php
+++ b/typo3/sysext/dbal/tests/db_mssql_testcase.php
@@ -64,10 +64,12 @@ class db_mssql_testcase extends BaseTestCase {
 		$parserClassName = self::buildAccessibleProxy('ux_t3lib_sqlparser');
 		$GLOBALS['TYPO3_DB']->SQLparser = new $parserClassName;
 
+		$this->assertFalse($GLOBALS['TYPO3_DB']->isConnected());
+
 			// Initialize a fake MS SQL connection
 		FakeDbConnection::connect($GLOBALS['TYPO3_DB'], 'mssql');
 
-		$this->assertTrue($GLOBALS['TYPO3_DB']->handlerInstance['_DEFAULT']->isConnected());
+		$this->assertTrue($GLOBALS['TYPO3_DB']->isConnected());
 	}
 
 	/**
diff --git a/typo3/sysext/dbal/tests/db_oracle_testcase.php b/typo3/sysext/dbal/tests/db_oracle_testcase.php
index 77ea8a3f9d987c9e621765c5129024322abf6cee..0913a3828c9eb925918fa26b2dc7692349129e75 100644
--- a/typo3/sysext/dbal/tests/db_oracle_testcase.php
+++ b/typo3/sysext/dbal/tests/db_oracle_testcase.php
@@ -64,10 +64,12 @@ class db_oracle_testcase extends BaseTestCase {
 		$parserClassName = self::buildAccessibleProxy('ux_t3lib_sqlparser');
 		$GLOBALS['TYPO3_DB']->SQLparser = new $parserClassName;
 
+		$this->assertFalse($GLOBALS['TYPO3_DB']->isConnected());
+
 			// Initialize a fake Oracle connection
 		FakeDbConnection::connect($GLOBALS['TYPO3_DB'], 'oci8');
 
-		$this->assertTrue($GLOBALS['TYPO3_DB']->handlerInstance['_DEFAULT']->isConnected());
+		$this->assertTrue($GLOBALS['TYPO3_DB']->isConnected());
 	}
 
 	/**
diff --git a/typo3/sysext/dbal/tests/db_postgresql_testcase.php b/typo3/sysext/dbal/tests/db_postgresql_testcase.php
index 4e8dabadc032b9cc2f3edc63ff20bbcbe45148cc..103def428a27214359a2b84e252a866a932e0800 100644
--- a/typo3/sysext/dbal/tests/db_postgresql_testcase.php
+++ b/typo3/sysext/dbal/tests/db_postgresql_testcase.php
@@ -64,10 +64,12 @@ class db_postgresql_testcase extends BaseTestCase {
 		$parserClassName = self::buildAccessibleProxy('ux_t3lib_sqlparser');
 		$GLOBALS['TYPO3_DB']->SQLparser = new $parserClassName;
 
+		$this->assertFalse($GLOBALS['TYPO3_DB']->isConnected());
+
 			// Initialize a fake PostgreSQL connection (using 'postgres7' as 'postgres' is remapped to it in AdoDB)
 		FakeDbConnection::connect($GLOBALS['TYPO3_DB'], 'postgres7');
 
-		$this->assertTrue($GLOBALS['TYPO3_DB']->handlerInstance['_DEFAULT']->isConnected());
+		$this->assertTrue($GLOBALS['TYPO3_DB']->isConnected());
 	}
 
 	/**
diff --git a/typo3/sysext/dbal/tests/sqlparser_general_testcase.php b/typo3/sysext/dbal/tests/sqlparser_general_testcase.php
index 4e6abbda63cdd118f566a071bfb62ce1e4ac4c1e..17ac9f850b07af0d02bcb1b2aeaf136dff6c2dcc 100644
--- a/typo3/sysext/dbal/tests/sqlparser_general_testcase.php
+++ b/typo3/sysext/dbal/tests/sqlparser_general_testcase.php
@@ -420,6 +420,30 @@ class sqlparser_general_testcase extends BaseTestCase {
 		$this->assertEquals($expected, $actual);
 	}
 
+	/**
+	 * @test
+	 * @see http://bugs.typo3.org/view.php?id=14182
+	 */
+	public function canParseMultipleJoinConditions() {
+		$sql = 'SELECT * FROM T1 LEFT OUTER JOIN T2 ON T2.pid = T1.uid AND T2.size = 4 WHERE T1.cr_userid = 1';
+		$expected = 'SELECT * FROM T1 LEFT OUTER JOIN T2 ON T2.pid=T1.uid AND T2.size=4 WHERE T1.cr_userid = 1';
+		$actual = $this->cleanSql($this->fixture->debug_testSQL($sql));
+
+		$this->assertEquals($expected, $actual);
+	}
+
+	/**
+	 * @test
+	 * @see http://bugs.typo3.org/view.php?id=14182 
+	 */
+	public function canParseMultipleJoinConditionsWithLessThanOperator() {
+		$sql = 'SELECT * FROM T1 LEFT OUTER JOIN T2 ON T2.size < 4 OR T2.pid = T1.uid WHERE T1.cr_userid = 1';
+		$expected = 'SELECT * FROM T1 LEFT OUTER JOIN T2 ON T2.size<4 OR T2.pid=T1.uid WHERE T1.cr_userid = 1';
+		$actual = $this->cleanSql($this->fixture->debug_testSQL($sql));
+
+		$this->assertEquals($expected, $actual);
+	}
+
 	///////////////////////////////////////
 	// Tests concerning DB management
 	///////////////////////////////////////