--- t3lib/class.t3lib_db_orig.php	2007-08-13 11:20:56.000000000 +0200
+++ t3lib/class.t3lib_db.php	2007-08-15 11:52:34.000000000 +0200
@@ -146,6 +146,8 @@
 		// Default link identifier:
 	var $link = FALSE;
 
+	var $slaveLink = FALSE;
+
 
 
 
@@ -223,11 +225,57 @@
 	 * @return	pointer		MySQL result pointer / DBAL object
 	 */
 	function exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy='',$orderBy='',$limit='')	{
-		$res = mysql_query($this->SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit), $this->link);
+
+		$res = mysql_query($this->SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit), $this->getMysqlLink());
+
+
 		if ($this->debugOutput)	$this->debug('exec_SELECTquery');
 		return $res;
 	}
 
+	function getMysqlLink()
+	{
+		$rand = rand(0, (count($GLOBALS["TYPO3_CONF_VARS"]['SYS']['slave_db_handler'])+1));
+		if ($rand > 0)
+		{
+			return $this->createMysqlLink( (--$rand) );
+		}
+		else
+		{
+			return $this->link;
+		}
+	}
+
+	function createMysqlLink($nr)
+	{
+		if (class_exists('t3lib_beUserAuth') || file_exists( $_SERVER["DOCUMENT_ROOT"] . "/" . $GLOBALS["TYPO3_CONF_VARS"]['SYS']['slave_db_handler'][$nr]['dead_file']))
+		{
+			return $this->link;
+		}
+
+		if (isset($this->slaveLink[$nr]))
+			return $this->slaveLink[$nr];
+
+		$this->slaveLink[$nr] = @mysql_connect( $GLOBALS["TYPO3_CONF_VARS"]['SYS']['slave_db_handler'][$nr]['typo3_db_host'], $GLOBALS["TYPO3_CONF_VARS"]['SYS']['slave_db_handler'][$nr]['typo3_db_username'], $GLOBALS["TYPO3_CONF_VARS"]['SYS']['slave_db_handler'][$nr]['typo3_db_password']);
+
+		if (!$this->slaveLink[$nr])
+		{
+			/* create dead lock file */
+			if (isset($GLOBALS["TYPO3_CONF_VARS"]['SYS']['slave_db_handler'][$nr]['dead_file']) && $GLOBALS["TYPO3_CONF_VARS"]['SYS']['slave_db_handler'][$nr]['dead_file'] != '')
+			{
+				$file = fopen($_SERVER["DOCUMENT_ROOT"] . "/" . $GLOBALS["TYPO3_CONF_VARS"]['SYS']['slave_db_handler'][$nr]['dead_file'], "w");
+				fputs($file, mysql_error());
+				fclose($file);
+			}
+
+			return $this->link;
+		}
+
+		mysql_select_db($GLOBALS["TYPO3_CONF_VARS"]['SYS']['slave_db_handler'][$nr]['typo3_db'] , $this->slaveLink[$nr]);
+
+		return $this->slaveLink[$nr];
+	}
+
 	/**
 	 * Creates and executes a SELECT query, selecting fields ($select) from two/three tables joined
 	 * Use $mm_table together with $local_table or $foreign_table to select over two tables. Or use all three tables to select the full MM-relation.
@@ -793,6 +841,7 @@
 	 */
 	function sql_fetch_assoc($res)	{
 		$this->debug_check_recordset($res);
+
 		return mysql_fetch_assoc($res);
 	}
 
