Index: tests/t3lib/cache/frontend/t3lib_cache_frontend_variablefrontendTest.php
===================================================================
--- tests/t3lib/cache/frontend/t3lib_cache_frontend_variablefrontendTest.php	(revision 9880)
+++ tests/t3lib/cache/frontend/t3lib_cache_frontend_variablefrontendTest.php	(working copy)
@@ -93,6 +93,23 @@
 	/**
 	 * @test
 	 * @author Robert Lemke <robert@typo3.org>
+	 */
+	public function setUsesIgBinarySerializeIfAvailable() {
+		if (!extension_loaded('igbinary')) {
+			$this->markTestSkipped('Cannot test igbinary support, because igbinary is not installed.');
+		}
+
+		$theString = 'Just some value';
+		$backend = $this->getMock('t3lib_cache_backend_AbstractBackend', array('get', 'set', 'has', 'remove', 'findIdentifiersByTag', 'findIdentifiersByTags', 'flush', 'flushByTag', 'flushByTags', 'collectGarbage'), array(), '', FALSE);
+		$backend->expects($this->once())->method('set')->with($this->equalTo('VariableCacheTest'), $this->equalTo(igbinary_serialize($theString)));
+
+		$cache = new t3lib_cache_frontend_VariableFrontend('VariableFrontend', $backend);
+		$cache->set('VariableCacheTest', $theString);
+	}
+
+	/**
+	 * @test
+	 * @author Robert Lemke <robert@typo3.org>
 	 * @author Ingo Renner <ingo@typo3.org>
 	 */
 	public function getFetchesStringValueFromBackend() {
@@ -133,6 +150,24 @@
 	/**
 	 * @test
 	 * @author Robert Lemke <robert@typo3.org>
+	 */
+	public function getUsesIgBinaryIfAvailable() {
+		if (!extension_loaded('igbinary')) {
+			$this->markTestSkipped('Cannot test igbinary support, because igbinary is not installed.');
+		}
+
+		$theArray = array('Just some value', 'and another one.');
+		$backend = $this->getMock('t3lib_cache_backend_AbstractBackend', array('get', 'set', 'has', 'remove', 'findIdentifiersByTag', 'findIdentifiersByTags', 'flush', 'flushByTag', 'flushByTags', 'collectGarbage'), array(), '', FALSE);
+		$backend->expects($this->once())->method('get')->will($this->returnValue(igbinary_serialize($theArray)));
+
+		$cache = new t3lib_cache_frontend_VariableFrontend('VariableFrontend', $backend);
+
+		$this->assertEquals($theArray, $cache->get('VariableCacheTest'), 'The returned value was not the expected unserialized array.');
+	}
+
+	/**
+	 * @test
+	 * @author Robert Lemke <robert@typo3.org>
 	 * @author Ingo Renner <ingo@typo3.org>
 	 */
 	public function hasReturnsResultFromBackend() {
@@ -190,6 +225,26 @@
 		$this->assertEquals($entries, $cache->getByTag($tag), 'Did not receive the expected entries');
 	}
 
+	/**
+	 * @test
+	 * @author Robert Lemke <robert@typo3.org>
+	 */
+	public function getByTagUsesIgBinaryIfAvailable() {
+		if (!extension_loaded('igbinary')) {
+			$this->markTestSkipped('Cannot test igbinary support, because igbinary is not installed.');
+		}
+
+		$tag = 'sometag';
+		$identifiers = array('one', 'two');
+		$entries = array('one value', 'two value');
+		$backend = $this->getMock('t3lib_cache_backend_AbstractBackend', array('get', 'set', 'has', 'remove', 'findIdentifiersByTag', 'findIdentifiersByTags', 'flush', 'flushByTag', 'flushByTags', 'collectGarbage'), array(), '', FALSE);
+
+		$backend->expects($this->once())->method('findIdentifiersByTag')->with($this->equalTo($tag))->will($this->returnValue($identifiers));
+		$backend->expects($this->exactly(2))->method('get')->will($this->onConsecutiveCalls(igbinary_serialize('one value'), igbinary_serialize('two value')));
+
+		$cache = new t3lib_cache_frontend_VariableFrontend('VariableFrontend', $backend);
+		$this->assertEquals($entries, $cache->getByTag($tag), 'Did not receive the expected entries');
+	}
 }
 
-?>
\ No newline at end of file
+?>
Index: tests/t3lib/cache/frontend/t3lib_cache_frontend_phpfrontendTest.php
===================================================================
--- tests/t3lib/cache/frontend/t3lib_cache_frontend_phpfrontendTest.php	(revision 9880)
+++ tests/t3lib/cache/frontend/t3lib_cache_frontend_phpfrontendTest.php	(working copy)
@@ -52,7 +52,7 @@
 	 */
 	public function setPassesPhpSourceCodeTagsAndLifetimeToBackend() {
 		$originalSourceCode = 'return "hello world!";';
-		$modifiedSourceCode = '<?php' . chr(10) . $originalSourceCode . chr(10) . '__halt_compiler();';
+		$modifiedSourceCode = '<?php' . chr(10) . $originalSourceCode . chr(10) . '#';
 
 		$mockBackend = $this->getMock('t3lib_cache_backend_PhpCapableBackend', array(), array(), '', FALSE);
 		$mockBackend->expects($this->once())->method('set')->with('Foo-Bar', $modifiedSourceCode, array('tags'), 1234);
Index: tests/t3lib/cache/backend/t3lib_cache_backend_pdobackendTest.php
===================================================================
--- tests/t3lib/cache/backend/t3lib_cache_backend_pdobackendTest.php	(revision 9880)
+++ tests/t3lib/cache/backend/t3lib_cache_backend_pdobackendTest.php	(working copy)
@@ -40,16 +40,6 @@
 	protected $backupGlobalVariables;
 
 	/**
-	 * @var string
-	 */
-	protected $fixtureFolder;
-
-	/**
-	 * @var string
-	 */
-	protected $fixtureDB;
-
-	/**
 	 * Sets up this testcase
 	 *
 	 * @author Christian Kuhn <lolli@schwarzbu.ch>
@@ -345,18 +335,11 @@
 	 * @author Karsten Dambekalns <karsten@typo3.org>
 	 */
 	protected function setUpBackend() {
-		$this->fixtureFolder = sys_get_temp_dir() . '/' . 'typo3pdobackendtest/';
-		t3lib_div::mkdir_deep(sys_get_temp_dir() . '/', 'typo3pdobackendtest/');
-		$this->fixtureDB = uniqid('Cache') . '.db';
-
-		$pdoHelper = t3lib_div::makeInstance('t3lib_PdoHelper', 'sqlite:' . $this->fixtureFolder . $this->fixtureDB, '', '');
-		$pdoHelper->importSql(PATH_t3lib . 'cache/backend/resources/ddl.sql');
-
 		$mockCache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
 		$mockCache->expects($this->any())->method('getIdentifier')->will($this->returnValue('TestCache'));
 
 		$backendOptions = array(
-			'dataSourceName' => 'sqlite:' . $this->fixtureFolder . $this->fixtureDB,
+			'dataSourceName' => 'sqlite::memory:',
 			'username' => '',
 			'password' => '',
 		);
@@ -373,13 +356,10 @@
 	 * @author Karsten Dambekalns <karsten@typo3.org>
 	 */
 	public function tearDown() {
-		if ($this->fixtureDB) {
-			t3lib_div::rmdir($this->fixtureFolder, TRUE);
-		}
 		foreach ($this->backupGlobalVariables as $key => $data) {
 			$GLOBALS[$key] = $data;
 		}
 	}
 }
 
-?>
\ No newline at end of file
+?>
Index: tests/t3lib/cache/backend/t3lib_cache_backend_apcbackendTest.php
===================================================================
--- tests/t3lib/cache/backend/t3lib_cache_backend_apcbackendTest.php	(revision 9880)
+++ tests/t3lib/cache/backend/t3lib_cache_backend_apcbackendTest.php	(working copy)
@@ -45,6 +45,10 @@
 		if (!extension_loaded('apc')) {
 			$this->markTestSkipped('APC extension was not available');
 		}
+
+		if (ini_get('apc.slam_defense') == 1) {
+			$this->markTestSkipped('This testcase can only be executed with apc.slam_defense = Off');
+		}
 	}
 
 	/**
@@ -56,7 +60,7 @@
 	public function setThrowsExceptionIfNoFrontEndHasBeenSet() {
 		$backend = new t3lib_cache_backend_ApcBackend();
 		$data = 'Some data';
-		$identifier = 'MyIdentifier';
+		$identifier = uniqid('MyIdentifier');
 		$backend->set($identifier, $data);
 	}
 
@@ -67,7 +71,7 @@
 	public function itIsPossibleToSetAndCheckExistenceInCache() {
 		$backend = $this->setUpBackend();
 		$data = 'Some data';
-		$identifier = 'MyIdentifier';
+		$identifier = uniqid('MyIdentifier');
 		$backend->set($identifier, $data);
 		$inCache = $backend->has($identifier);
 		$this->assertTrue($inCache, 'APC backend failed to set and check entry');
@@ -80,7 +84,7 @@
 	public function itIsPossibleToSetAndGetEntry() {
 		$backend = $this->setUpBackend();
 		$data = 'Some data';
-		$identifier = 'MyIdentifier';
+		$identifier = uniqid('MyIdentifier');
 		$backend->set($identifier, $data);
 		$fetchedData = $backend->get($identifier);
 		$this->assertEquals($data, $fetchedData, 'APC backend failed to set and retrieve data');
@@ -93,7 +97,7 @@
 	public function itIsPossibleToRemoveEntryFromCache() {
 		$backend = $this->setUpBackend();
 		$data = 'Some data';
-		$identifier = 'MyIdentifier';
+		$identifier = uniqid('MyIdentifier');
 		$backend->set($identifier, $data);
 		$backend->remove($identifier);
 		$inCache = $backend->has($identifier);
@@ -107,7 +111,7 @@
 	public function itIsPossibleToOverwriteAnEntryInTheCache() {
 		$backend = $this->setUpBackend();
 		$data = 'Some data';
-		$identifier = 'MyIdentifier';
+		$identifier = uniqid('MyIdentifier');
 		$backend->set($identifier, $data);
 		$otherData = 'some other data';
 		$backend->set($identifier, $otherData);
@@ -123,14 +127,14 @@
 		$backend = $this->setUpBackend();
 
 		$data = 'Some data';
-		$entryIdentifier = 'MyIdentifier';
-		$backend->set($entryIdentifier, $data, array('UnitTestTag%tag1', 'UnitTestTag%tag2'));
+		$identifier = uniqid('MyIdentifier');
+		$backend->set($identifier, $data, array('UnitTestTag%tag1', 'UnitTestTag%tag2'));
 
 		$retrieved = $backend->findIdentifiersByTag('UnitTestTag%tag1');
-		$this->assertEquals($entryIdentifier, $retrieved[0], 'Could not retrieve expected entry by tag.');
+		$this->assertEquals($identifier, $retrieved[0], 'Could not retrieve expected entry by tag.');
 
 		$retrieved = $backend->findIdentifiersByTag('UnitTestTag%tag2');
-		$this->assertEquals($entryIdentifier, $retrieved[0], 'Could not retrieve expected entry by tag.');
+		$this->assertEquals($identifier, $retrieved[0], 'Could not retrieve expected entry by tag.');
 	}
 
 	/**
@@ -141,9 +145,9 @@
 		$backend = $this->setUpBackend();
 
 		$data = 'Some data';
-		$entryIdentifier = 'MyIdentifier';
-		$backend->set($entryIdentifier, $data, array('UnitTestTag%tag1', 'UnitTestTag%tag2'));
-		$backend->set($entryIdentifier, $data, array('UnitTestTag%tag3'));
+		$identifier = uniqid('MyIdentifier');
+		$backend->set($identifier, $data, array('UnitTestTag%tag1', 'UnitTestTag%tag2'));
+		$backend->set($identifier, $data, array('UnitTestTag%tag3'));
 
 		$retrieved = $backend->findIdentifiersByTag('UnitTestTag%tag2');
 		$this->assertEquals(array(), $retrieved, 'Found entry which should no longer exist.');
@@ -155,7 +159,7 @@
 	 */
 	public function hasReturnsFalseIfTheEntryDoesntExist() {
 		$backend = $this->setUpBackend();
-		$identifier = 'NonExistingIdentifier';
+		$identifier = uniqid('NonExistingIdentifier');
 		$inCache = $backend->has($identifier);
 		$this->assertFalse($inCache,'"has" did not return false when checking on non existing identifier');
 	}
@@ -166,7 +170,7 @@
 	 */
 	public function removeReturnsFalseIfTheEntryDoesntExist() {
 		$backend = $this->setUpBackend();
-		$identifier = 'NonExistingIdentifier';
+		$identifier = uniqid('NonExistingIdentifier');
 		$inCache = $backend->remove($identifier);
 		$this->assertFalse($inCache,'"remove" did not return false when checking on non existing identifier');
 	}
@@ -244,10 +248,11 @@
 		$backend = $this->setUpBackend();
 
 		$data = str_repeat('abcde', 1024 * 1024);
-		$backend->set('tooLargeData', $data);
+		$identifier = uniqid('tooLargeData');
+		$backend->set($identifier, $data);
 
-		$this->assertTrue($backend->has('tooLargeData'));
-		$this->assertEquals($backend->get('tooLargeData'), $data);
+		$this->assertTrue($backend->has($identifier));
+		$this->assertEquals($backend->get($identifier), $data);
 	}
 
 	/**
Index: tests/t3lib/cache/backend/t3lib_cache_backend_memcachedbackendTest.php
===================================================================
--- tests/t3lib/cache/backend/t3lib_cache_backend_memcachedbackendTest.php	(revision 9880)
+++ tests/t3lib/cache/backend/t3lib_cache_backend_memcachedbackendTest.php	(working copy)
@@ -66,7 +66,7 @@
 		$backend = new t3lib_cache_backend_MemcachedBackend($backendOptions);
 
 		$data = 'Some data';
-		$identifier = 'MyIdentifier';
+		$identifier = uniqid('MyIdentifier');
 		$backend->set($identifier, $data);
 	}
 
@@ -89,7 +89,7 @@
 	public function setThrowsExceptionIfConfiguredServersAreUnreachable() {
 		$backend = $this->setUpBackend(array('servers' => array('julle.did.this:1234')));
 		$data = 'Somedata';
-		$identifier = 'MyIdentifier';
+		$identifier = uniqid('MyIdentifier');
 		$backend->set($identifier, $data);
 	}
 
@@ -100,7 +100,7 @@
 	public function itIsPossibleToSetAndCheckExistenceInCache() {
 		$backend = $this->setUpBackend();
 		$data = 'Some data';
-		$identifier = 'MyIdentifier';
+		$identifier = uniqid('MyIdentifier');
 		$backend->set($identifier, $data);
 		$inCache = $backend->has($identifier);
 		$this->assertTrue($inCache, 'Memcache failed to set and check entry');
@@ -113,7 +113,7 @@
 	public function itIsPossibleToSetAndGetEntry() {
 		$backend = $this->setUpBackend();
 		$data = 'Some data';
-		$identifier = 'MyIdentifier';
+		$identifier = uniqid('MyIdentifier');
 		$backend->set($identifier, $data);
 		$fetchedData = $backend->get($identifier);
 		$this->assertEquals($data, $fetchedData, 'Memcache failed to set and retrieve data');
@@ -126,7 +126,7 @@
 	public function itIsPossibleToRemoveEntryFromCache() {
 		$backend = $this->setUpBackend();
 		$data = 'Some data';
-		$identifier = 'MyIdentifier';
+		$identifier = uniqid('MyIdentifier');
 		$backend->set($identifier, $data);
 		$backend->remove($identifier);
 		$inCache = $backend->has($identifier);
@@ -140,7 +140,7 @@
 	public function itIsPossibleToOverwriteAnEntryInTheCache() {
 		$backend = $this->setUpBackend();
 		$data = 'Some data';
-		$identifier = 'MyIdentifier';
+		$identifier = uniqid('MyIdentifier');
 		$backend->set($identifier, $data);
 		$otherData = 'some other data';
 		$backend->set($identifier, $otherData);
@@ -156,14 +156,14 @@
 		$backend = $this->setUpBackend();
 
 		$data = 'Some data';
-		$entryIdentifier = 'MyIdentifier';
-		$backend->set($entryIdentifier, $data, array('UnitTestTag%tag1', 'UnitTestTag%tag2'));
+		$identifier = uniqid('MyIdentifier');
+		$backend->set($identifier, $data, array('UnitTestTag%tag1', 'UnitTestTag%tag2'));
 
 		$retrieved = $backend->findIdentifiersByTag('UnitTestTag%tag1');
-		$this->assertEquals($entryIdentifier, $retrieved[0], 'Could not retrieve expected entry by tag.');
+		$this->assertEquals($identifier, $retrieved[0], 'Could not retrieve expected entry by tag.');
 
 		$retrieved = $backend->findIdentifiersByTag('UnitTestTag%tag2');
-		$this->assertEquals($entryIdentifier, $retrieved[0], 'Could not retrieve expected entry by tag.');
+		$this->assertEquals($identifier, $retrieved[0], 'Could not retrieve expected entry by tag.');
 	}
 
 	/**
@@ -174,11 +174,11 @@
 		$backend = $this->setUpBackend();
 
 		$data = 'Some data';
-		$entryIdentifier = 'MyIdentifier';
-		$backend->set($entryIdentifier, $data, array('UnitTestTag%tag1', 'UnitTestTag%tag2'));
-		$backend->set($entryIdentifier, $data, array('UnitTestTag%tag3'));
+		$identifier = uniqid('MyIdentifier');
+		$backend->set($identifier, $data, array('UnitTestTag%tag1', 'UnitTestTag%tag2'));
+		$backend->set($identifier, $data, array('UnitTestTag%tag3'));
 
-		$retrieved = $backend->findIdentifiersByTag('UnitTestTag%tag2');
+		$retrieved = $backend->findIdentifiersByTag('UnitTestTag%tagX');
 		$this->assertEquals(array(), $retrieved, 'Found entry which should no longer exist.');
 	}
 
@@ -188,7 +188,7 @@
 	 */
 	public function hasReturnsFalseIfTheEntryDoesntExist() {
 		$backend = $this->setUpBackend();
-		$identifier = 'NonExistingIdentifier';
+		$identifier = uniqid('NonExistingIdentifier');
 		$inCache = $backend->has($identifier);
 		$this->assertFalse($inCache,'"has" did not return false when checking on non existing identifier');
 	}
@@ -199,7 +199,7 @@
 	 */
 	public function removeReturnsFalseIfTheEntryDoesntExist() {
 		$backend = $this->setUpBackend();
-		$identifier = 'NonExistingIdentifier';
+		$identifier = uniqid('NonExistingIdentifier');
 		$inCache = $backend->remove($identifier);
 		$this->assertFalse($inCache,'"remove" did not return false when checking on non existing identifier');
 	}
Index: tests/t3lib/cache/backend/t3lib_cache_backend_redisbackendTest.php
===================================================================
--- tests/t3lib/cache/backend/t3lib_cache_backend_redisbackendTest.php	(revision 9880)
+++ tests/t3lib/cache/backend/t3lib_cache_backend_redisbackendTest.php	(working copy)
@@ -65,7 +65,7 @@
 		}
 
 		try {
-			if (!fsockopen('127.0.0.1', 6379)) {
+			if (!@fsockopen('127.0.0.1', 6379)) {
 				$this->markTestSkipped('redis server not reachable');
 			}
 		} catch (Exception $e) {
Index: tests/t3lib/cache/last_synched_revision
===================================================================
--- tests/t3lib/cache/last_synched_revision	(revision 0)
+++ tests/t3lib/cache/last_synched_revision	(revision 0)
@@ -0,0 +1 @@
+8d61bb9e22fcab1bedcd7ba72f8d0de9f6efc521
Index: t3lib/cache/frontend/class.t3lib_cache_frontend_phpfrontend.php
===================================================================
--- t3lib/cache/frontend/class.t3lib_cache_frontend_phpfrontend.php	(revision 9880)
+++ t3lib/cache/frontend/class.t3lib_cache_frontend_phpfrontend.php	(working copy)
@@ -78,7 +78,7 @@
 				);
 			}
 		}
-		$sourceCode = '<?php' . chr(10) . $sourceCode . chr(10) . '__halt_compiler();';
+		$sourceCode = '<?php' . chr(10) . $sourceCode . chr(10) . '#';
 		$this->backend->set($entryIdentifier, $sourceCode, $tags, $lifetime);
 	}
 
Index: t3lib/cache/frontend/class.t3lib_cache_frontend_variablefrontend.php
===================================================================
--- t3lib/cache/frontend/class.t3lib_cache_frontend_variablefrontend.php	(revision 9880)
+++ t3lib/cache/frontend/class.t3lib_cache_frontend_variablefrontend.php	(working copy)
@@ -36,6 +36,37 @@
 class t3lib_cache_frontend_VariableFrontend extends t3lib_cache_frontend_AbstractFrontend {
 
 	/**
+	 * If the extension "igbinary" is installed, use it for increased performance
+	 *
+	 * @var boolean
+	 */
+	protected $useIgBinary = FALSE;
+
+	/**
+	 * Constructs the cache
+	 *
+	 * @param string A identifier which describes this cache
+	 * @param t3lib_cache_backend_Backend Backend to be used for this cache
+	 * @author Robert Lemke <robert@typo3.org>
+	 * @throws InvalidArgumentException if the identifier doesn't match PATTERN_ENTRYIDENTIFIER
+	 * @internal
+	 */
+	public function __construct($identifier, t3lib_cache_backend_Backend $backend) {
+		parent::__construct($identifier, $backend);
+		$this->initializeObject();
+	}
+
+	/**
+	 * Initializes this cache frontend
+	 *
+	 * @return void
+	 * @author Robert Lemke <robert@typo3.org>
+	 */
+	protected function initializeObject() {
+		$this->useIgBinary = extension_loaded('igbinary');
+	}
+
+	/**
 	 * Saves the value of a PHP variable in the cache. Note that the variable
 	 * will be serialized if necessary.
 	 *
@@ -64,7 +95,11 @@
 			}
 		}
 
-		$this->backend->set($entryIdentifier, serialize($variable), $tags, $lifetime);
+		if ($this->useIgBinary === TRUE) {
+			$this->backend->set($entryIdentifier, igbinary_serialize($variable), $tags, $lifetime);
+		} else {
+			$this->backend->set($entryIdentifier, serialize($variable), $tags, $lifetime);
+		}
 	}
 
 	/**
@@ -83,7 +118,7 @@
 			);
 		}
 
-		return unserialize($this->backend->get($entryIdentifier));
+		return ($this->useIgBinary === TRUE) ? igbinary_unserialize($this->backend->get($entryIdentifier)) : unserialize($this->backend->get($entryIdentifier));
 	}
 
 	/**
@@ -105,7 +140,7 @@
 		$identifiers = $this->backend->findIdentifiersByTag($tag);
 
 		foreach ($identifiers as $identifier) {
-			$entries[] = unserialize($this->backend->get($identifier));
+			$entries[] = ($this->useIgBinary === TRUE) ? igbinary_unserialize($this->backend->get($identifier)) : unserialize($this->backend->get($identifier));
 		}
 
 		return $entries;
Index: t3lib/cache/backend/class.t3lib_cache_backend_memcachedbackend.php
===================================================================
--- t3lib/cache/backend/class.t3lib_cache_backend_memcachedbackend.php	(revision 9880)
+++ t3lib/cache/backend/class.t3lib_cache_backend_memcachedbackend.php	(working copy)
@@ -103,10 +103,10 @@
 	/**
 	 * Constructs this backend
 	 *
-	 * @param mixed $options Configuration options - depends on the actual backend
+	 * @param array $options Configuration options - depends on the actual backend
 	 * @author Robert Lemke <robert@typo3.org>
 	 */
-	public function __construct($options = array()) {
+	public function __construct(array $options = array()) {
 		if (!extension_loaded('memcache')) {
 			throw new t3lib_cache_Exception(
 				'The PHP extension "memcached" must be installed and loaded in ' .
Index: t3lib/cache/backend/class.t3lib_cache_backend_redisbackend.php
===================================================================
--- t3lib/cache/backend/class.t3lib_cache_backend_redisbackend.php	(revision 9880)
+++ t3lib/cache/backend/class.t3lib_cache_backend_redisbackend.php	(working copy)
@@ -144,7 +144,7 @@
 	/**
 	 * Construct this backend
 	 *
-	 * @param array Configuration options
+	 * @param array $options Configuration options
 	 * @throws t3lib_cache_Exception if php redis module is not loaded
 	 * @author Christopher Hlubek <hlubek@networkteam.com>
 	 * @author Christian Kuhn <lolli@schwarzbu.ch>
@@ -165,7 +165,6 @@
 	/**
 	 * Initializes the redis backend
 	 *
-	 * @param array Configuration options
 	 * @return void
 	 * @throws t3lib_cache_Exception if access to redis with password is denied or if database selection fails
 	 * @author Christian Kuhn <lolli@schwarzbu.ch>
@@ -205,7 +204,7 @@
 	/**
 	 * Setter for server hostname
 	 *
-	 * @param string Hostname
+	 * @param string $hostname Hostname
 	 * @return void
 	 * @author Christopher Hlubek <hlubek@networkteam.com>
 	 * @author Christian Kuhn <lolli@schwarzbu.ch>
@@ -218,7 +217,7 @@
 	/**
 	 * Setter for server port
 	 *
-	 * @param integer Port
+	 * @param integer $port Port
 	 * @return void
 	 * @author Christopher Hlubek <hlubek@networkteam.com>
 	 * @author Christian Kuhn <lolli@schwarzbu.ch>
@@ -231,7 +230,7 @@
 	/**
 	 * Setter for database number
 	 *
-	 * @param integer Database
+	 * @param integer $database Database
 	 * @return void
 	 * @throws InvalidArgumentException if database number is not valid
 	 * @author Christian Kuhn <lolli@schwarzbu.ch>
@@ -257,7 +256,7 @@
 	/**
 	 * Setter for authentication password
 	 *
-	 * @param string Password
+	 * @param string $password Password
 	 * @return void
 	 * @author Christian Kuhn <lolli@schwarzbu.ch>
 	 * @api
@@ -269,7 +268,7 @@
 	/**
 	 * Enable data compression
 	 *
-	 * @param boolean TRUE to enable compression
+	 * @param boolean $compression TRUE to enable compression
 	 * @return void
 	 * @throws InvalidArgumentException if compression parameter is not of type boolean
 	 * @author Christian Kuhn <lolli@schwarzbu.ch>
@@ -291,7 +290,7 @@
 	 * If compression is enabled and this is not set,
 	 * gzcompress default level will be used.
 	 *
-	 * @param integer -1 to 9: Compression level
+	 * @param integer $compressionLevel -1 to 9: Compression level
 	 * @return void
 	 * @throws InvalidArgumentException if compressionLevel parameter is not within allowed bounds
 	 * @author Christian Kuhn <lolli@schwarzbu.ch>
@@ -321,10 +320,10 @@
 	 * Scales O(1) with number of cache entries
 	 * Scales O(n) with number of tags
 	 *
-	 * @param string Identifier for this specific cache entry
-	 * @param string Data to be stored
-	 * @param array Tags to associate with this cache entry
-	 * @param integer Lifetime of this cache entry in seconds. If NULL is specified, default lifetime is used. "0" means unlimited lifetime.
+	 * @param string $entryIdentifier Identifier for this specific cache entry
+	 * @param string $data Data to be stored
+	 * @param array $tags Tags to associate with this cache entry
+	 * @param integer $lifetime Lifetime of this cache entry in seconds. If NULL is specified, default lifetime is used. "0" means unlimited lifetime.
 	 * @return void
 	 * @throws InvalidArgumentException if identifier is not valid
 	 * @throws t3lib_cache_Exception_InvalidData if data is not a string
@@ -401,7 +400,7 @@
 	 *
 	 * Scales O(1) with number of cache entries
 	 *
-	 * @param string An identifier which describes the cache entry to load
+	 * @param string $entryIdentifier An identifier which describes the cache entry to load
 	 * @return mixed The cache entry's content as a string or FALSE if the cache entry could not be loaded
 	 * @throws InvalidArgumentException if identifier is not a string
 	 * @author Christopher Hlubek <hlubek@networkteam.com>
@@ -433,7 +432,7 @@
 	 *
 	 * Scales O(1) with number of cache entries
 	 *
-	 * @param string Identifier specifying the cache entry
+	 * @param string $entryIdentifier Identifier specifying the cache entry
 	 * @return boolean TRUE if such an entry exists, FALSE if not
 	 * @throws InvalidArgumentException if identifier is not a string
 	 * @author Christopher Hlubek <hlubek@networkteam.com>
@@ -456,7 +455,7 @@
 	 * Scales O(1) with number of cache entries
 	 * Scales O(n) with number of tags
 	 *
-	 * @param string Specifies the cache entry to remove
+	 * @param string $entryIdentifier Specifies the cache entry to remove
 	 * @return boolean TRUE if (at least) an entry could be removed or FALSE if no entry was found
 	 * @throws InvalidArgumentException if identifier is not a string
 	 * @author Christopher Hlubek <hlubek@networkteam.com>
@@ -496,7 +495,7 @@
 	 * Scales O(1) with number of cache entries
 	 * Scales O(n) with number of tag entries
 	 *
-	 * @param string The tag to search for
+	 * @param string $tag The tag to search for
 	 * @return array An array of entries with all matching entries. An empty array if no entries matched
 	 * @throws InvalidArgumentException if tag is not a string
 	 * @author Christopher Hlubek <hlubek@networkteam.com>
@@ -525,7 +524,7 @@
 	 *
 	 * Scales O(n) with number of tags
 	 *
-	 * @param array Array of tags to search for
+	 * @param array $tags Array of tags to search for
 	 * @return array An array with identifiers of all matching entries. An empty array if no entries matched
 	 * @author Christopher Hlubek <hlubek@networkteam.com>
 	 * @author Christian Kuhn <lolli@schwarzbu.ch>
@@ -567,7 +566,7 @@
 	 * Scales O(1) with number of cache entries
 	 * Scales O(n^2) with number of tag entries
 	 *
-	 * @param string Tag the entries must have
+	 * @param string $tags Tag the entries must have
 	 * @return void
 	 * @throws InvalidArgumentException if identifier is not a string
 	 * @author Christopher Hlubek <hlubek@networkteam.com>
@@ -597,7 +596,7 @@
 	 * Scales O(1) with number of cache entries
 	 * Scales O(n^2) with number of tags
 	 *
-	 * @param array Tags the entries must have
+	 * @param array $tags Tags the entries must have
 	 * @return void
 	 * @author Christian Kuhn <lolli@schwarzbu.ch>
 	 * @api
@@ -655,8 +654,8 @@
 	 * Scales O(1) with number of cache entries
 	 * Scales O(n^2) with number of tags
 	 *
-	 * @param array List of identifiers to remove
-	 * @param array List of tags to be handled
+	 * @param array $identifiers List of identifiers to remove
+	 * @param array $tags List of tags to be handled
 	 * @return void
 	 * @author Christian Kuhn <lolli@schwarzbu.ch>
 	 * @author Christopher Hlubek <hlubek@networkteam.com>
Index: t3lib/cache/backend/class.t3lib_cache_backend_filebackend.php
===================================================================
--- t3lib/cache/backend/class.t3lib_cache_backend_filebackend.php	(revision 9880)
+++ t3lib/cache/backend/class.t3lib_cache_backend_filebackend.php	(working copy)
@@ -62,7 +62,7 @@
 	/**
 	 * Constructs this backend
 	 *
-	 * @param mixed Configuration options - depends on the actual backend
+	 * @param array $options Configuration options - depends on the actual backend
 	 */
 	public function __construct(array $options = array()) {
 		parent::__construct($options);
Index: t3lib/cache/backend/class.t3lib_cache_backend_pdobackend.php
===================================================================
--- t3lib/cache/backend/class.t3lib_cache_backend_pdobackend.php	(revision 9880)
+++ t3lib/cache/backend/class.t3lib_cache_backend_pdobackend.php	(working copy)
@@ -33,6 +33,7 @@
  * @version $Id$
  */
 class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend {
+
 	/**
 	 * @var string
 	 */
@@ -67,7 +68,7 @@
 	/**
 	 * Constructs this backend
 	 *
-	 * @param mixed $options Configuration options - depends on the actual backend
+	 * @param array $options Configuration options - depends on the actual backend
 	 * @author Christian Kuhn <lolli@schwarzbu.ch>
 	 */
 	public function __construct(array $options = array()) {
@@ -411,17 +412,18 @@
 			$this->pdoDriver = $splitdsn[0];
 
 			if ($this->pdoDriver === 'sqlite' && !file_exists($splitdsn[1])) {
+				$this->databaseHandle = t3lib_div::makeInstance('PDO', $this->dataSourceName, $this->username, $this->password);
 				$this->createCacheTables();
+			} else {
+				$this->databaseHandle = t3lib_div::makeInstance('PDO', $this->dataSourceName, $this->username, $this->password);
 			}
 
-			$this->databaseHandle = t3lib_div::makeInstance('PDO', $this->dataSourceName, $this->username, $this->password);
 			$this->databaseHandle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
 			if ($this->pdoDriver === 'mysql') {
 				$this->databaseHandle->exec('SET SESSION sql_mode=\'ANSI\';');
 			}
 		} catch (PDOException $e) {
-			#			$this->createCacheTables();
 		}
 	}
 
@@ -434,8 +436,7 @@
 	 */
 	protected function createCacheTables() {
 		try {
-			$pdoHelper = t3lib_div::makeInstance('t3lib_PdoHelper', $this->dataSourceName, $this->username, $this->password);
-			$pdoHelper->importSql(PATH_t3lib . 'cache/backend/resources/ddl.sql');
+			t3lib_PdoHelper::importSql($this->databaseHandle, $this->pdoDriver, PATH_t3lib . 'cache/backend/resources/ddl.sql');
 		} catch (PDOException $e) {
 			throw new RuntimeException(
 				'Could not create cache tables with DSN "' . $this->dataSourceName . '". PDO error: ' . $e->getMessage(),
Index: t3lib/cache/backend/class.t3lib_cache_backend_abstractbackend.php
===================================================================
--- t3lib/cache/backend/class.t3lib_cache_backend_abstractbackend.php	(revision 9880)
+++ t3lib/cache/backend/class.t3lib_cache_backend_abstractbackend.php	(working copy)
@@ -60,7 +60,7 @@
 	/**
 	 * Constructs this backend
 	 *
-	 * @param mixed Configuration options - depends on the actual backend
+	 * @param array $options Configuration options - depends on the actual backend
 	 * @author Robert Lemke <robert@typo3.org>
 	 */
 	public function __construct(array $options = array()) {
Index: t3lib/cache/backend/class.t3lib_cache_backend_apcbackend.php
===================================================================
--- t3lib/cache/backend/class.t3lib_cache_backend_apcbackend.php	(revision 9880)
+++ t3lib/cache/backend/class.t3lib_cache_backend_apcbackend.php	(working copy)
@@ -62,11 +62,11 @@
 	/**
 	 * Constructs this backend
 	 *
-	 * @param mixed $options Configuration options - unused here
+	 * @param array $options Configuration options - unused here
 	 * @author Robert Lemke <robert@typo3.org>
 	 * @author Karsten Dambekalns <karsten@typo3.org>
 	 */
-	public function __construct($options = array()) {
+	public function __construct(array $options = array()) {
 		if (!extension_loaded('apc')) {
 			throw new t3lib_cache_Exception(
 				'The PHP extension "apc" must be installed and loaded in order to use the APC backend.',
Index: t3lib/cache/backend/class.t3lib_cache_backend_dbbackend.php
===================================================================
--- t3lib/cache/backend/class.t3lib_cache_backend_dbbackend.php	(revision 9880)
+++ t3lib/cache/backend/class.t3lib_cache_backend_dbbackend.php	(working copy)
@@ -56,7 +56,7 @@
 	/**
 	 * Constructs this backend
 	 *
-	 * @param mixed Configuration options - depends on the actual backend
+	 * @param array $options Configuration options - depends on the actual backend
 	 */
 	public function __construct(array $options = array()) {
 		parent::__construct($options);
Index: t3lib/cache/last_synched_revision
===================================================================
--- t3lib/cache/last_synched_revision	(revision 9880)
+++ t3lib/cache/last_synched_revision	(working copy)
@@ -1 +1 @@
-4443
+d26e82f4de95e96f2e14b6531c8c24a2b05ccfe9
Index: t3lib/class.t3lib_pdohelper.php
===================================================================
--- t3lib/class.t3lib_pdohelper.php	(revision 9880)
+++ t3lib/class.t3lib_pdohelper.php	(working copy)
@@ -33,55 +33,27 @@
  * @package TYPO3
  * @subpackage t3lib
  * @version $Id$
- * @scope prototype
  */
 class t3lib_PdoHelper {
 
 	/**
-	 * @var PDO
-	 */
-	protected $databaseHandle;
-
-	/**
-	 * @var string
-	 */
-	protected $pdoDriver;
-
-	/**
-	 * Construct the helper instance and set up PDO connection.
-	 *
-	 * @param string $dataSourceName
-	 * @param string $user
-	 * @param string $password
-	 * @author Karsten Dambekalns <karsten@typo3.org>
-	 */
-	public function __construct($dataSourceName, $user, $password) {
-		$splitdsn = explode(':', $dataSourceName, 2);
-		$this->pdoDriver = $splitdsn[0];
-
-		$this->databaseHandle = t3lib_div::makeInstance('PDO', $dataSourceName, $user, $password);
-		$this->databaseHandle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-		if ($this->pdoDriver === 'mysql') {
-			$this->databaseHandle->exec('SET SESSION sql_mode=\'ANSI_QUOTES\';');
-		}
-	}
-
-	/**
 	 * Pumps the SQL into the database. Use for DDL only.
 	 *
 	 * Important: key definitions with length specifiers (needed for MySQL) must
 	 * be given as "field"(xyz) - no space between double quote and parenthesis -
 	 * so they can be removed automatically.
 	 *
+	 * @param PDO $databaseHandle
+	 * @param string $pdoDriver
 	 * @param string $pathAndFilename
 	 * @return void
 	 * @author Karsten Dambekalns <karsten@typo3.org>
 	 */
-	public function importSql($pathAndFilename) {
+	static public function importSql(PDO $databaseHandle, $pdoDriver, $pathAndFilename) {
 		$sql = file($pathAndFilename, FILE_IGNORE_NEW_LINES & FILE_SKIP_EMPTY_LINES);
 
 			// Remove MySQL style key length delimiters (yuck!) if we are not setting up a MySQL db
-		if ($this->pdoDriver !== 'mysql') {
+		if ($pdoDriver !== 'mysql') {
 			$sql = preg_replace('/"\([0-9]+\)/', '"', $sql);
 		}
 
@@ -89,7 +61,7 @@
 		foreach ($sql as $line) {
 			$statement .= ' ' . trim($line);
 			if (substr($statement, -1) === ';') {
-				$this->databaseHandle->query($statement);
+				$databaseHandle->exec($statement);
 				$statement = '';
 			}
 		}
