diff --git a/ChangeLog b/ChangeLog
index 61671b240252da9e61eecfb93a1fe4e3f702e68f..9b53f54afde02b98c0f5f127bd6fbd0a922771e2 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
 2007-02-04  Michael Stucki  <michael@typo3.org>
 
 	* Extended db_mountpoint and file_mountpoint fields into to 255 bytes size
+	* Fixed bug #3069: Extension manager crashed because of some PHP bug with version_compare() (thanks to Rainer Haertlein who discovered the solution to this problem)
 
 2007-02-04  Oliver Hader  <oh@inpublica.de>
 
diff --git a/typo3/mod/tools/em/class.em_index.php b/typo3/mod/tools/em/class.em_index.php
index 51f89a9a7fbed2b11a3093dc3336d9db9b63c877..74da3fd27f671df320c5b3f9a92fa0d3adbba21a 100644
--- a/typo3/mod/tools/em/class.em_index.php
+++ b/typo3/mod/tools/em/class.em_index.php
@@ -930,7 +930,7 @@ EXTENSION KEYS:
 		$this->content.=$this->doc->spacer(20);
 		$this->content.=$this->doc->section('Upload extension file directly (.t3x):',$content,0,1);
 	}
-	
+
 	/**
 	 * Generates a link to the next page of extensions
 	 *
@@ -1530,17 +1530,17 @@ EXTENSION KEYS:
 				} else {
 					switch($mode) {
 						case EM_INSTALL_VERSION_STRICT:
-							if($currentVersion == $version) {
+							if ($currentVersion == $version)	{
 								return array(true, 'Extension already installed and loaded.');
 							}
 							break;
 						case EM_INSTALL_VERSION_MIN:
-							if(version_compare($currentVersion, $version, '>=')) {
+							if (version_compare($currentVersion, $version, '>='))	{
 								return array(true, 'Extension already installed and loaded.');
 							}
 							break;
 						case EM_INSTALL_VERSION_MAX:
-							if(version_compare($currentVersion, $version, '<=')) {
+							if (version_compare($currentVersion, $version, '<='))	{
 								return array(true, 'Extension already installed and loaded.');
 							}
 							break;
@@ -1553,17 +1553,17 @@ EXTENSION KEYS:
 				$newExtList = -1;
 				switch($mode) {
 					case EM_INSTALL_VERSION_STRICT:
-						if($currentVersion == $version) {
+						if ($currentVersion == $version)	{
 							$newExtList = $this->addExtToList($extKey, $inst_list);
 						}
 						break;
 					case EM_INSTALL_VERSION_MIN:
-						if(version_compare($currentVersion, $version, '>=')) {
+						if (version_compare($currentVersion, $version, '>='))	{
 							$newExtList = $this->addExtToList($extKey, $inst_list);
 						}
 						break;
 					case EM_INSTALL_VERSION_MAX:
-						if(version_compare($currentVersion, $version, '<=')) {
+						if (version_compare($currentVersion, $version, '<='))	{
 							$newExtList = $this->addExtToList($extKey, $inst_list);
 						}
 						break;
@@ -1596,15 +1596,18 @@ EXTENSION KEYS:
 					}
 					break;
 				case EM_INSTALL_VERSION_MIN:
-					if(version_compare($latestVersion, $version, '>=')) {
+					if (version_compare($latestVersion, $version, '>='))	{
 						$version = $latestVersion;
 					} else {
 						return array(false, 'Extension not available in matching version');
 					}
 					break;
 				case EM_INSTALL_VERSION_MAX:
-					while(($v = array_pop($versions)) && version_compare($v, $version, '>=')) {}
-					if($v !== null && version_compare($v, $version, '<=')) {
+					while (($v = array_pop($versions)) && version_compare($v, $version, '>='))	{
+						// Loop until a version is found
+					}
+
+					if ($v !== null && version_compare($v, $version, '<='))	{
 						$version = $v;
 					} else {
 						return array(false, 'Extension not available in matching version');
@@ -3034,14 +3037,14 @@ EXTENSION KEYS:
 				$emConf['constraints']['depends'] = $this->stringToDep($emConf['dependencies']);
 				if(strlen($emConf['PHP_version'])) {
 					$versionRange = $this->splitVersionRange($emConf['PHP_version']);
-					if(version_compare($versionRange[0],'3.0.0','<')) $versionRange[0] = '3.0.0';
-					if(version_compare($versionRange[1],'3.0.0','<')) $versionRange[1] = '';
+					if (version_compare($versionRange[0],'3.0.0','<')) $versionRange[0] = '3.0.0';
+					if (version_compare($versionRange[1],'3.0.0','<')) $versionRange[1] = '0.0.0';
 					$emConf['constraints']['depends']['php'] = implode('-',$versionRange);
 				}
 				if(strlen($emConf['TYPO3_version'])) {
 					$versionRange = $this->splitVersionRange($emConf['TYPO3_version']);
-					if(version_compare($versionRange[0],'3.5.0','<')) $versionRange[0] = '3.5.0';
-					if(version_compare($versionRange[1],'3.5.0','<')) $versionRange[1] = '';
+					if (version_compare($versionRange[0],'3.5.0','<')) $versionRange[0] = '3.5.0';
+					if (version_compare($versionRange[1],'3.5.0','<')) $versionRange[1] = '0.0.0';
 					$emConf['constraints']['depends']['typo3'] = implode('-',$versionRange);
 				}
 			}
@@ -3060,14 +3063,14 @@ EXTENSION KEYS:
 			// sanity check for version numbers, intentionally only checks php and typo3
 		if(isset($emConf['constraints']['depends']) && isset($emConf['constraints']['depends']['php'])) {
 			$versionRange = $this->splitVersionRange($emConf['constraints']['depends']['php']);
-			if(version_compare($versionRange[0],'3.0.0','<')) $versionRange[0] = '3.0.0';
-			if(version_compare($versionRange[1],'3.0.0','<')) $versionRange[1] = '';
+			if (version_compare($versionRange[0],'3.0.0','<')) $versionRange[0] = '3.0.0';
+			if (version_compare($versionRange[1],'3.0.0','<')) $versionRange[1] = '0.0.0';
 			$emConf['constraints']['depends']['php'] = implode('-',$versionRange);
 		}
 		if(isset($emConf['constraints']['depends']) && isset($emConf['constraints']['depends']['typo3'])) {
 			$versionRange = $this->splitVersionRange($emConf['constraints']['depends']['typo3']);
-			if(version_compare($versionRange[0],'3.5.0','<')) $versionRange[0] = '3.0.0';
-			if(version_compare($versionRange[1],'3.5.0','<')) $versionRange[1] = '';
+			if (version_compare($versionRange[0],'3.5.0','<')) $versionRange[0] = '3.5.0';
+			if (version_compare($versionRange[1],'3.5.0','<')) $versionRange[1] = '0.0.0';
 			$emConf['constraints']['depends']['typo3'] = implode('-',$versionRange);
 		}
 
@@ -3088,14 +3091,18 @@ EXTENSION KEYS:
 	 * @param	string		$ver A string with a version range.
 	 * @return	array
 	 */
-	function splitVersionRange($ver) {
+	function splitVersionRange($ver)	{
 		$versionRange = array();
-		if(strstr($ver, '-')) $versionRange = explode('-', $ver, 2);
-		else {
+		if (strstr($ver, '-'))	{
+			$versionRange = explode('-', $ver, 2);
+		} else {
 			$versionRange[0] = $ver;
 			$versionRange[1] = '';
 		}
 
+		if (!$versionRange[0])	{ $versionRange[0] = '0.0.0'; }
+		if (!$versionRange[1])	{ $versionRange[1] = '0.0.0'; }
+
 		return $versionRange;
 	}
 
@@ -4076,32 +4083,34 @@ $EM_CONF[$_EXTKEY] = '.$this->arrayToCode($EM_CONF, 0).';
 				if(!$depV) continue;
 				$versionRange = $this->splitVersionRange($depV);
 				$phpv = strstr(PHP_VERSION,'-') ? substr(PHP_VERSION,0,strpos(PHP_VERSION,'-')) : PHP_VERSION; // Linux distributors like to add suffixes, like in 5.1.2-1. Those must be ignored!
-				if($versionRange[0] && version_compare($phpv,$versionRange[0],'<')) {
+				if ($versionRange[0] && version_compare($phpv,$versionRange[0],'<'))	{
 					$msg[] = '<br />The running PHP version ('.$phpv.') is lower than required ('.$versionRange[0].')';
 					$msg[] = '&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" value="1" name="depsolver[ignore]['.$depK.']" /> Ignore this version requirement';
 					$depError = true;
 					continue;
-				} elseif($versionRange[1] && version_compare($phpv,$versionRange[1],'>')) {
+				} elseif ($versionRange[1] && version_compare($phpv,$versionRange[1],'>'))	{
 					$msg[] = '<br />The running PHP version ('.$phpv.') is higher than allowed ('.$versionRange[1].')';
 					$msg[] = '&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" value="1" name="depsolver[ignore]['.$depK.']" /> Ignore this version requirement';
 					$depError = true;
 					continue;
 				}
-			} elseif($depK == 'typo3') {
-				if(!$depV) continue;
+
+			} elseif ($depK == 'typo3')	{
+				if (!$depV) continue;
+
 				$versionRange = $this->splitVersionRange($depV);
-				if($versionRange[0] && version_compare(TYPO3_version,$versionRange[0],'<')) {
+				if ($versionRange[0] && version_compare(TYPO3_version,$versionRange[0],'<'))	{
 					$msg[] = '<br />The running TYPO3 version ('.TYPO3_version.') is lower than required ('.$versionRange[0].')';
 					$msg[] = '&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" value="1" name="depsolver[ignore]['.$depK.']" /> Ignore this version requirement';
 					$depError = true;
 					continue;
-				} elseif($versionRange[1] && version_compare(TYPO3_version,$versionRange[1],'>')) {
+				} elseif ($versionRange[1] && version_compare(TYPO3_version,$versionRange[1],'>'))	{
 					$msg[] = '<br />The running TYPO3 version ('.TYPO3_version.') is higher than allowed ('.$versionRange[1].')';
 					$msg[] = '&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" value="1" name="depsolver[ignore]['.$depK.']" /> Ignore this version requirement';
 					$depError = true;
 					continue;
 				}
-			} elseif (strlen($depK) && !t3lib_extMgm::isLoaded($depK))	{ // strlen check for braindead empty dependencies coming from extensions...
+			} elseif (strlen($depK) && !t3lib_extMgm::isLoaded($depK))	{	// strlen check for braindead empty dependencies coming from extensions...
 				if(!isset($instExtInfo[$depK]))	{
 					$msg[] = '<br />Extension "'.$depK.'" was not available in the system. Please import it from the TYPO3 Extension Repository.';
 					$msg[] = '&nbsp;&nbsp;&nbsp;&nbsp;<img src="'.$GLOBALS['BACK_PATH'].'gfx/import.gif" width="12" height="12" title="Import this extension to \'local\' dir typo3conf/ext/ from online repository." alt="" />&nbsp;<a href="index.php?CMD[importExt]='.$depK.'&CMD[loc]=L&CMD[standAlone]=1" target="_blank">Import now (opens a new window)</a>';
@@ -4114,12 +4123,12 @@ $EM_CONF[$_EXTKEY] = '.$this->arrayToCode($EM_CONF, 0).';
 				$depError = true;
 			} else {
 				$versionRange = $this->splitVersionRange($depV);
-				if($versionRange[0] && version_compare($instExtInfo[$depK]['EM_CONF']['version'],$versionRange[0],'<')) {
+				if ($versionRange[0] && version_compare($instExtInfo[$depK]['EM_CONF']['version'],$versionRange[0],'<'))	{
 					$msg[] = '<br />The running version of extension "'.$depK.'" ('.$instExtInfo[$depK]['EM_CONF']['version'].') is lower than required ('.$versionRange[0].')';
 					$msg[] = '&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" value="1" name="depsolver[ignore]['.$depK.']" /> Ignore this version requirement';
 					$depError = true;
 					continue;
-				} elseif($versionRange[1] && version_compare($instExtInfo[$depK]['EM_CONF']['version'],$versionRange[1],'>')) {
+				} elseif ($versionRange[1] && version_compare($instExtInfo[$depK]['EM_CONF']['version'],$versionRange[1],'>'))	{
 					$msg[] = '<br />The running version of extension "'.$depK.'" ('.$instExtInfo[$depK]['EM_CONF']['version'].') is higher than allowed ('.$versionRange[1].')';
 					$msg[] = '&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" value="1" name="depsolver[ignore]['.$depK.']" /> Ignore this version requirement';
 					$depError = true;
@@ -4128,7 +4137,7 @@ $EM_CONF[$_EXTKEY] = '.$this->arrayToCode($EM_CONF, 0).';
 			}
 		}
 		if($depError) {
-			$content .= $this->doc->section('Dependency Error',implode('<br />',$msg),0,1,2);
+			$content.= $this->doc->section('Dependency Error',implode('<br />',$msg),0,1,2);
 		}
 
 			// Check conflicts with other extensions:
@@ -4148,7 +4157,7 @@ $EM_CONF[$_EXTKEY] = '.$this->arrayToCode($EM_CONF, 0).';
 			}
 		}
 		if($conflictError) {
-			$content .= $this->doc->section('Conflict Error',implode('<br />',$msg),0,1,2);
+			$content.= $this->doc->section('Conflict Error',implode('<br />',$msg),0,1,2);
 		}
 
 			// Check suggests on other extensions: