diff -urpN --strip-trailing-cr ../drupal-6.x-dev/files/README.txt ./files/README.txt
--- ../drupal-6.x-dev/files/README.txt	1970-01-01 01:00:00.000000000 +0100
+++ ./files/README.txt	2007-11-14 19:42:50.000000000 +0100
@@ -0,0 +1,29 @@
+// $Id$
+
+The files directory is the default file system path used to store
+all uploaded files, as well as some temporary files created by Drupal. To
+successfully install Drupal, the files directory must exist and be
+writable by the file server process.
+
+After installation, the settings for the file system path may be modified
+to store uploaded files in a different location. Ensure that this new
+location exists, is accessible, and is writable by the file server process.
+The file system path settings can be accessed by selecting these menu items
+from the Navigation menu:
+
+  administer > site configuration > file system
+
+You may wish to modify the file system path if:
+
+  * your site runs multiple Drupal installations from a single codebase
+    (modify the file system path of each installation to a different
+    directory so that uploads do not overlap between installations); or,
+
+  * your site runs a number of web server front-ends behind a load
+    balancer or reverse proxy (modify the file system path on each
+    server to point to a shared file repository).
+
+Changing the file system path after files have been uploaded may cause
+unexpected problems on an existing site. If you modify the file system path
+on an existing site, remember to copy all files from the original location
+to the new location.
diff -urpN --strip-trailing-cr ../drupal-6.x-dev/install.php ./install.php
--- ../drupal-6.x-dev/install.php	2007-11-11 23:43:44.000000000 +0100
+++ ./install.php	2007-11-14 19:41:22.000000000 +0100
@@ -91,12 +91,19 @@ function install_main() {
   // Tasks come after the database is set up
   if (!$task) {
     // Check the installation requirements for Drupal and this profile.
-    install_check_requirements($profile);
+    install_check_requirements($profile, $verify);
 
     // Verify existence of all required modules.
     $modules = drupal_verify_profile($profile, $install_locale);
-    if (!$modules) {
-      install_missing_modules_error($profile);
+
+    // If any error messages are set now, it means a requirement problem.
+    $messages = drupal_set_message();
+    if (!empty($messages['error'])) {
+      drupal_maintenance_theme();
+      install_task_list('requirements');
+      drupal_set_title(st('Requirements problem'));
+      print theme('install_page', '');
+      exit;
     }
 
     // Change the settings.php information if verification failed earlier.
@@ -112,7 +119,7 @@ function install_main() {
     $settings_dir = './'. conf_path();
     $settings_file = $settings_dir .'/settings.php';
     if (!drupal_verify_install_file($settings_file, FILE_EXIST|FILE_READABLE|FILE_NOT_WRITABLE) || !drupal_verify_install_file($settings_dir, FILE_NOT_WRITABLE, 'dir')) {
-      drupal_set_message(st('All necessary changes to %dir and %file have been made, so you should now remove write permissions to them. Failure to remove write permissions to them is a security risk.', array('%dir' => $settings_dir, '%file' => $settings_file)), 'error');
+      drupal_set_message(st('All necessary changes to %dir and %file have been made, so you should remove write permissions to them now in order to avoid security risks. If you are unsure how to do so, please consult the <a href="@handbook_url">on-line handbook</a>.', array('%dir' => $settings_dir, '%file' => $settings_file, '@handbook_url' => 'http://drupal.org/Troubleshooting-FAQ')), 'error');
     }
     else {
       drupal_set_message(st('All necessary changes to %dir and %file have been made. They have been set to read-only for security.', array('%dir' => $settings_dir, '%file' => $settings_file)));
@@ -182,32 +189,6 @@ function install_change_settings($profil
   drupal_maintenance_theme();
   install_task_list('database');
 
-  // The existing database settings are not working, so we need write access
-  // to settings.php to change them.
-  $writable = FALSE;
-  $file = $conf_path;
-  // Verify the directory exists.
-  if (drupal_verify_install_file($conf_path, FILE_EXIST, 'dir')) {
-    // Check to see if a settings.php already exists
-    if (drupal_verify_install_file($settings_file, FILE_EXIST)) {
-      // If it does, make sure it is writable
-      $writable = drupal_verify_install_file($settings_file, FILE_READABLE|FILE_WRITABLE);
-      $file = $settings_file;
-    }
-    else {
-      // If not, makes sure the directory is.
-      $writable = drupal_verify_install_file($conf_path, FILE_READABLE|FILE_WRITABLE, 'dir');
-    }
-  }
-
-  if (!$writable) {
-    drupal_set_message(st('The @drupal installer requires write permissions to %file during the installation process.', array('@drupal' => drupal_install_profile_name(), '%file' => $file)), 'error');
-
-    drupal_set_title(st('Drupal database setup'));
-    print theme('install_page', '');
-    exit;
-  }
-
   if ($db_url == 'mysql://username:password@localhost/databasename') {
     $db_user = $db_pass = $db_path = '';
   }
@@ -608,19 +589,6 @@ function install_already_done_error() {
 }
 
 /**
- * Show an error page when Drupal is missing required modules.
- */
-function install_missing_modules_error($profile) {
-  global $base_url;
-
-  drupal_maintenance_theme();
-  install_task_list('requirements');
-  drupal_set_title(st('Modules missing'));
-  print theme('install_page', '<p>'. st('One or more required modules are missing.') .'</p>');
-  exit;
-}
-
-/**
  * Tasks performed after the database is initialized. Called from install.php.
  */
 function install_tasks($profile, $task) {
@@ -764,26 +732,51 @@ function install_reserved_tasks() {
 }
 
 /**
- * Page to check installation requirements and report any errors.
+ * Check installation requirements and report any errors.
  */
-function install_check_requirements($profile) {
+function install_check_requirements($profile, $verify) {
   $requirements = drupal_check_profile($profile);
   $severity = drupal_requirements_severity($requirements);
 
   // If there are issues, report them.
   if ($severity == REQUIREMENT_ERROR) {
-    drupal_maintenance_theme();
-    install_task_list('requirements');
 
     foreach ($requirements as $requirement) {
       if (isset($requirement['severity']) && $requirement['severity'] == REQUIREMENT_ERROR) {
-        drupal_set_message($requirement['description'] .' ('. st('Currently using !item !version', array('!item' => $requirement['title'], '!version' => $requirement['value'])) .')', 'error');
+        $message = $requirement['description'];
+        if ($requirement['value']) {
+          $message .= ' ('. st('Currently using !item !version', array('!item' => $requirement['title'], '!version' => $requirement['value'])) .')';
+        }
+        drupal_set_message($message, 'error');
       }
     }
+  }
 
-    drupal_set_title(st('Incompatible environment'));
-    print theme('install_page', '');
-    exit;
+  // If the existing database settings are not working, we need also
+  // write access to settings.php to change them.
+  if (!$verify) {
+
+    $writable = FALSE;
+    $conf_path = './'. conf_path();
+    $settings_file = $conf_path .'/settings.php';
+    $file = $conf_path;
+    // Verify the directory exists.
+    if (drupal_verify_install_file($conf_path, FILE_EXIST, 'dir')) {
+      // Check to see if a settings.php already exists
+      if (drupal_verify_install_file($settings_file, FILE_EXIST)) {
+        // If it does, make sure it is writable
+        $writable = drupal_verify_install_file($settings_file, FILE_READABLE|FILE_WRITABLE);
+        $file = $settings_file;
+      }
+      else {
+        // If not, makes sure the directory is.
+        $writable = drupal_verify_install_file($conf_path, FILE_READABLE|FILE_WRITABLE, 'dir');
+      }
+    }
+
+    if (!$writable) {
+      drupal_set_message(st('The @drupal installer requires write permissions to %file during the installation process. If you are unsure how to grant file permissions, please consult the <a href="@handbook_url">on-line handbook</a>.', array('@drupal' => drupal_install_profile_name(), '%file' => $file, '@handbook_url' => 'http://drupal.org/Troubleshooting-FAQ')), 'error');
+    }
   }
 }
 
diff -urpN --strip-trailing-cr ../drupal-6.x-dev/INSTALL.txt ./INSTALL.txt
--- ../drupal-6.x-dev/INSTALL.txt	2007-10-12 12:41:47.000000000 +0200
+++ ./INSTALL.txt	2007-11-14 19:29:59.000000000 +0100
@@ -62,15 +62,22 @@ INSTALLATION
    http://drupal.org/project/Translations and download the package. Extract
    the contents to the same directory where you extracted Drupal into.
 
-2. GIVE PERMISSION TO DRUPAL TO BE ABLE TO CREATE THE CONFIGURATION FILE
+2. GRANT WRITE PERMISSIONS ON CONFIGURATION FILE AND FILES STORAGE DIRECTORY
 
    Drupal comes with a default.settings.php file in the sites/default
    directory. The installer will create a copy of this file filled with
    the details you provide through the install process, in the same
-   directory. For Drupal to be able to create the file, you need to
-   give the web server write privileges to the sites/default directory:
+   directory. Give the web server write privileges to the sites/default
+   directory with the command (from the installation directory):
 
-     chmod o+w default
+     chmod o+w sites/default
+
+   Drupal requires the files directory be present and writable during
+   the installation (the location of the files directory can be changed
+   after Drupal is installed). Give the web server write privileges to the
+   files directory with the command (from the installation directory):
+
+     chmod o+w files
 
 3. CREATE THE DRUPAL DATABASE
 
@@ -115,13 +122,13 @@ INSTALLATION
    running FastCGI can run into problems if the $base_url variable is left
    commented out (see http://bugs.php.net/bug.php?id=19656).
 
-   Consider creating a "files" subdirectory in your Drupal installation
-   directory. This subdirectory stores files such as custom logos, user avatars,
-   and other media associated with your new site. The sub-directory requires
-   "read and write" permission by the Drupal server process. You can change
-   the name of this subdirectory at "administer > site configuration > file
-   system".
-
+   Determine whether the default "files" directory is the right location for your
+   file system path. Drupal uses the location specified in the file system path
+   to store files attached to site content, theme-specific logos, user avatars, and
+   some temporary files. On some installations, it may be necessary to modify
+   the file system path, especially in large or multi-site configurations. See the
+   files/README.txt file for more information about setting the file system path.
+   
 6. CRON TASKS
 
    Many Drupal modules (such as the search functionality) have periodic tasks
@@ -226,6 +233,9 @@ accessible to other sites, the setup wou
 NOTE: for more information about multiple virtual hosts or the configuration
 settings, consult the Drupal handbook at drupal.org.
 
+For more information on configuring Drupal's file system path in a multi-site
+configuration, see files/README.txt.
+
 MORE INFORMATION
 ----------------
 
diff -urpN --strip-trailing-cr ../drupal-6.x-dev/modules/system/system.install ./modules/system/system.install
--- ../drupal-6.x-dev/modules/system/system.install	2007-11-11 09:48:22.000000000 +0100
+++ ./modules/system/system.install	2007-11-14 19:48:20.000000000 +0100
@@ -111,37 +111,39 @@ function system_requirements($phase) {
   }
 
   // Test files directory
-  if ($phase == 'runtime') {
-    $directory = file_directory_path();
-    $is_writable = is_writable($directory);
-    $is_directory = is_dir($directory);
-    if (!$is_writable || !$is_directory) {
-      if (!$is_directory) {
-        $error = $t('The directory %directory does not exist.', array('%directory' => $directory));
-      }
-      else {
-        $error = $t('The directory %directory is not writable.', array('%directory' => $directory));
-      }
-      $requirements['file system'] = array(
-        'value' => $t('Not writable'),
-        'severity' => REQUIREMENT_ERROR,
-        'description' => $error .' '. $t('You may need to set the correct directory at the <a href="@admin-file-system">file system settings page</a> or change the current directory\'s permissions so that it is writable.', array('@admin-file-system' => url('admin/settings/file-system'))),
-      );
+  $directory = file_directory_path();
+  $is_writable = is_writable($directory);
+  $is_directory = is_dir($directory);
+  if (!$is_writable || !$is_directory) {
+    if (!$is_directory) {
+      $error = $t('The directory %directory does not exist.', array('%directory' => $directory));
     }
     else {
-      if (variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC) == FILE_DOWNLOADS_PUBLIC) {
-        $requirements['file system'] = array(
-          'value' => $t('Writable (<em>public</em> download method)'),
-        );
-      }
-      else {
-        $requirements['file system'] = array(
-          'value' => $t('Writable (<em>private</em> download method)'),
-        );
-      }
+      $error = $t('The directory %directory is not writable.', array('%directory' => $directory));
+    }
+    $requirements['file system'] = array(
+      'value' => $t('Not writable'),
+      'severity' => REQUIREMENT_ERROR,
+    );
+    if ($phase == 'runtime') {
+      $requirements['file system']['description'] = $error .' '. $t('You may need to set the correct directory at the <a href="@admin-file-system">file system settings page</a> or change the current directory\'s permissions so that it is writable.', array('@admin-file-system' => url('admin/settings/file-system')));
+    }
+    else if ($phase == 'install') {
+      // For the installer UI, we need different wording. 'value' will
+      // be treated as version, so provide none there.
+      $requirements['file system']['description'] = $error .' '. $t('To proceed with the installation, please change the %directory directory permissions to allow the installer to write to it. If you are unsure how to do so, please consult the <a href="@handbook_url">on-line handbook</a>.', array('%directory' => $directory, '@handbook_url' => 'http://drupal.org/Troubleshooting-FAQ'));
+      $requirements['file system']['value'] = '';
+    }
+  }
+  else {
+    if (variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC) == FILE_DOWNLOADS_PUBLIC) {
+      $requirements['file system']['value'] = $t('Writable (<em>public</em> download method)');
+    }
+    else {
+      $requirements['file system']['value'] = $t('Writable (<em>private</em> download method)');
     }
-    $requirements['file system']['title'] = $t('File system');
   }
+  $requirements['file system']['title'] = $t('File system');
 
   // See if updates are available in update.php.
   if ($phase == 'runtime') {
