Index: t3lib/class.t3lib_div.php
===================================================================
--- t3lib/class.t3lib_div.php	(revision 7427)
+++ t3lib/class.t3lib_div.php	(working copy)
@@ -2961,20 +2961,55 @@
 	}
 
 	/**
-	 * Sets the file system mode and group ownership of file.
+	 * Sets the file system mode and group ownership of a file or a folder.
 	 *
-	 * @param string $file
-	 *               the path of an existing file, must not be escaped
-	 *
-	 * @return void
+	 * @param   string   Absolute filepath of file or folder, must not be escaped.
+	 * @param   boolean  If set, also fixes permissions of files and folders in the folder (if $path is a folder)
+	 * @return  mixed    TRUE on success, FALSE on error, always TRUE on Windows OS
 	 */
-	public static function fixPermissions($file)	{
-		if (@is_file($file) && TYPO3_OS!='WIN')	{
-			@chmod($file, octdec($GLOBALS['TYPO3_CONF_VARS']['BE']['fileCreateMask']));		// "@" is there because file is not necessarily OWNED by the user
-			if($GLOBALS['TYPO3_CONF_VARS']['BE']['createGroup'])	{	// skip this if createGroup is empty
-				@chgrp($file, $GLOBALS['TYPO3_CONF_VARS']['BE']['createGroup']);		// "@" is there because file is not necessarily OWNED by the user
+	public static function fixPermissions($path, $recursive = FALSE) {
+		if (TYPO3_OS != 'WIN') {
+			$result = FALSE;
+			if (self::isAllowedAbsPath($path)) {
+				if (@is_file($path)) {
+						// "@" is there because file is not necessarily OWNED by the user
+					$result = @chmod($path, octdec($GLOBALS['TYPO3_CONF_VARS']['BE']['fileCreateMask']));
+				} elseif (@is_dir($path)) {
+					$path = preg_replace('|/$|', '', $path);
+						// "@" is there because file is not necessarily OWNED by the user
+					$result = @chmod($path, octdec($GLOBALS['TYPO3_CONF_VARS']['BE']['folderCreateMask']));
+				}
+
+					// Set createGroup if not empty
+				if($GLOBALS['TYPO3_CONF_VARS']['BE']['createGroup']) {
+						// "@" is there because file is not necessarily OWNED by the user
+					$changeGroupResult = @chgrp($path, $GLOBALS['TYPO3_CONF_VARS']['BE']['createGroup']);
+					$result = $changeGroupResult ? $result : FALSE;
+				}
+
+					// Call recursive if recursive flag if set and $path is directory
+				if ($recursive && @is_dir($path)) {
+					$handle = opendir($path);
+					while (($file = readdir($handle)) !== FALSE) {
+						unset($recursionResult);
+						if ($file !== '.' && $file !== '..') {
+							if (@is_file($path . '/' . $file)) {
+								$recursionResult = t3lib_div::fixPermissions($path . '/' . $file);
+							} elseif (@is_dir($path . '/' . $file)) {
+								$recursionResult = t3lib_div::fixPermissions($path . '/' . $file, TRUE);
+							}
+							if (isset($recursionResult) && !$recursionResult) {
+								$result = FALSE;
+							}
+						}
+					}
+					closedir($handle);
+				}
 			}
+		} else {
+			$result = TRUE;
 		}
+		return $result;
 	}
 
 	/**
@@ -3022,24 +3057,20 @@
 	}
 
 	/**
-	 * Wrapper function for mkdir, setting folder permissions according to $GLOBALS['TYPO3_CONF_VARS']['BE']['folderCreateMask'] and group ownership according to $GLOBALS['TYPO3_CONF_VARS']['BE']['createGroup']
-	 * Usage: 6
+	 * Wrapper function for mkdir.
+	 * Sets folder permissions according to $GLOBALS['TYPO3_CONF_VARS']['BE']['folderCreateMask']
+	 * and group ownership according to $GLOBALS['TYPO3_CONF_VARS']['BE']['createGroup']
 	 *
 	 * @param	string		Absolute path to folder, see PHP mkdir() function. Removes trailing slash internally.
 	 * @return	boolean		TRUE if @mkdir went well!
 	 */
-	public static function mkdir($theNewFolder)	{
-		$theNewFolder = preg_replace('|/$|','',$theNewFolder);
-		if (@mkdir($theNewFolder, octdec($GLOBALS['TYPO3_CONF_VARS']['BE']['folderCreateMask']))){
-			chmod($theNewFolder, octdec($GLOBALS['TYPO3_CONF_VARS']['BE']['folderCreateMask'])); //added this line, because the mode at 'mkdir' has a strange behaviour sometimes
-
-			if($GLOBALS['TYPO3_CONF_VARS']['BE']['createGroup'])	{	// skip this if createGroup is empty
-				@chgrp($theNewFolder, $GLOBALS['TYPO3_CONF_VARS']['BE']['createGroup']);
-			}
-			return true;
-		} else {
-			return false;
+	public static function mkdir($newFolder) {
+		$newFolder = preg_replace('|/$|', '', $newFolder);
+		$result = @mkdir($newFolder, octdec($GLOBALS['TYPO3_CONF_VARS']['BE']['folderCreateMask']));
+		if ($success) {
+			self::fixPermissions($newFolder);
 		}
+		return $result;
 	}
 
 	/**
Index: typo3/mod/tools/em/class.em_index.php
===================================================================
--- typo3/mod/tools/em/class.em_index.php	(revision 7427)
+++ typo3/mod/tools/em/class.em_index.php	(working copy)
@@ -1498,6 +1498,10 @@
 							$GLOBALS['LANG']->getLL('translation_update_done') . '";
 					</script>
 				';
+
+					// Fix permissions on unzipped language xml files in the entire l10n folder and all subfolders
+				t3lib_div::fixPermissions(PATH_typo3conf . 'l10n', TRUE);
+
 				echo $contentParts[1] . $this->doc->endPage();
 				exit;
 			}
