diff --git a/includes/common.inc b/includes/common.inc
--- ./includes/common.inc
+++ ./includes/common.inc
@@ -1796,8 +1796,8 @@
   $no_theme_preprocess = '';
 
   $preprocess_css = (variable_get('preprocess_css', FALSE) && (!defined('MAINTENANCE_MODE') || MAINTENANCE_MODE != 'update'));
-  $directory = file_directory_path();
-  $is_writable = is_dir($directory) && is_writable($directory) && (variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC) == FILE_DOWNLOADS_PUBLIC);
+  $directory = file_directory_path(TRUE);
+  $is_writable = is_dir($directory) && is_writable($directory);
 
   // A dummy query-string is added to filenames, to gain control over
   // browser-caching. The string changes on every update or full cache
@@ -1870,7 +1870,7 @@
   $data = '';
 
   // Create the css/ within the files folder.
-  $csspath = file_create_path('css');
+  $csspath = file_create_path('css', TRUE);
   file_check_directory($csspath, FILE_CREATE_DIRECTORY);
 
   if (!file_exists($csspath .'/'. $filename)) {
@@ -1896,7 +1896,7 @@
     $data = implode('', $matches[0]) . $data;
 
     // Create the CSS file.
-    file_save_data($data, $csspath .'/'. $filename, FILE_EXISTS_REPLACE);
+    file_save_data($data, $csspath .'/'. $filename, FILE_EXISTS_REPLACE, TRUE);
   }
   return $csspath .'/'. $filename;
 }
@@ -1997,7 +1997,7 @@
  * Delete all cached CSS files.
  */
 function drupal_clear_css_cache() {
-  file_scan_directory(file_create_path('css'), '.*', array('.', '..', 'CVS'), 'file_delete', TRUE);
+  file_scan_directory(file_create_path('css', TRUE), '.*', array('.', '..', 'CVS'), 'file_delete', TRUE);
 }
 
 /**
@@ -2148,8 +2148,8 @@
   $no_preprocess = array('core' => '', 'module' => '', 'theme' => '');
   $files = array();
   $preprocess_js = (variable_get('preprocess_js', FALSE) && (!defined('MAINTENANCE_MODE') || MAINTENANCE_MODE != 'update'));
-  $directory = file_directory_path();
-  $is_writable = is_dir($directory) && is_writable($directory) && (variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC) == FILE_DOWNLOADS_PUBLIC);
+  $directory = file_directory_path(TRUE);
+  $is_writable = is_dir($directory) && is_writable($directory);
 
   // A dummy query-string is added to filenames, to gain control over
   // browser-caching. The string changes on every update or full cache
@@ -2348,7 +2348,7 @@
   $contents = '';
 
   // Create the js/ within the files folder.
-  $jspath = file_create_path('js');
+  $jspath = file_create_path('js', TRUE);
   file_check_directory($jspath, FILE_CREATE_DIRECTORY);
 
   if (!file_exists($jspath .'/'. $filename)) {
@@ -2361,7 +2361,7 @@
     }
 
     // Create the JS file.
-    file_save_data($contents, $jspath .'/'. $filename, FILE_EXISTS_REPLACE);
+    file_save_data($contents, $jspath .'/'. $filename, FILE_EXISTS_REPLACE, TRUE);
   }
 
   return $jspath .'/'. $filename;
@@ -2371,7 +2371,7 @@
  * Delete all cached JS files.
  */
 function drupal_clear_js_cache() {
-  file_scan_directory(file_create_path('js'), '.*', array('.', '..', 'CVS'), 'file_delete', TRUE);
+  file_scan_directory(file_create_path('js', TRUE), '.*', array('.', '..', 'CVS'), 'file_delete', TRUE);
   variable_set('javascript_parsed', array());
 }
 
diff --git a/includes/file.inc b/includes/file.inc
--- ./includes/file.inc
+++ ./includes/file.inc
@@ -61,8 +61,8 @@
  *   appended if necessary, or FALSE if the path is invalid (i.e. outside the
  *   configured 'files' or temp directories).
  */
-function file_create_path($dest = 0) {
-  $file_path = file_directory_path();
+function file_create_path($dest = 0, $public_misc = FALSE) {
+  $file_path = file_directory_path($public_misc);
   if (!$dest) {
     return $file_path;
   }
@@ -213,8 +213,8 @@
  *   - FILE_EXISTS_ERROR - Do nothing and return FALSE.
  * @return True for success, FALSE for failure.
  */
-function file_copy(&$source, $dest = 0, $replace = FILE_EXISTS_RENAME) {
-  $dest = file_create_path($dest);
+function file_copy(&$source, $dest = 0, $replace = FILE_EXISTS_RENAME, $public_misc = FALSE) {
+  $dest = file_create_path($dest, $public_misc);
 
   $directory = $dest;
   $basename = file_check_path($directory);
@@ -327,6 +327,6 @@
  *   - FILE_EXISTS_ERROR - Do nothing and return FALSE.
  * @return True for success, FALSE for failure.
  */
-function file_move(&$source, $dest = 0, $replace = FILE_EXISTS_RENAME) {
+function file_move(&$source, $dest = 0, $replace = FILE_EXISTS_RENAME, $public_misc = FALSE) {
   $path_original = is_object($source) ? $source->filepath : $source;
 
@@ -331,6 +331,6 @@
   $path_original = is_object($source) ? $source->filepath : $source;
 
-  if (file_copy($source, $dest, $replace)) {
+  if (file_copy($source, $dest, $replace, $public_misc)) {
     $path_current = is_object($source) ? $source->filepath : $source;
 
     if ($path_original == $path_current || file_delete($path_original)) {
@@ -750,7 +750,7 @@
  *
  * @return A string containing the resulting filename or 0 on error
  */
-function file_save_data($data, $dest, $replace = FILE_EXISTS_RENAME) {
+function file_save_data($data, $dest, $replace = FILE_EXISTS_RENAME, $public_misc = FALSE) {
   $temp = file_directory_temp();
   // On Windows, tempnam() requires an absolute path, so we use realpath().
   $file = tempnam(realpath($temp), 'file');
@@ -761,7 +761,7 @@
   fwrite($fp, $data);
   fclose($fp);
 
-  if (!file_move($file, $dest, $replace)) {
+  if (!file_move($file, $dest, $replace, $public_misc)) {
     return 0;
   }
 
@@ -960,7 +960,8 @@
  *
  * @return A string containing the path to Drupal's 'files' directory.
  */
-function file_directory_path() {
+function file_directory_path($public_misc = FALSE) {
+  if ($public_misc) return variable_get('file_directory_path:public_misc', 'misc/dynamic');
   return variable_get('file_directory_path', conf_path() .'/files');
 }
 
diff --git a/includes/locale.inc b/includes/locale.inc
--- ./includes/locale.inc
+++ ./includes/locale.inc
@@ -2182,7 +2182,7 @@
 
   // Construct the filepath where JS translation files are stored.
   // There is (on purpose) no front end to edit that variable.
-  $dir = file_create_path(variable_get('locale_js_directory', 'languages'));
+  $dir = file_create_path(variable_get('locale_js_directory', 'languages'), TRUE);
 
   // Delete old file, if we have no translations anymore, or a different file to be saved.
   if (!empty($language->javascript) && (!$data || $language->javascript != $data_hash)) {
@@ -2186,7 +2186,7 @@
 
   // Delete old file, if we have no translations anymore, or a different file to be saved.
   if (!empty($language->javascript) && (!$data || $language->javascript != $data_hash)) {
-    file_delete(file_create_path($dir .'/'. $language->language .'_'. $language->javascript .'.js'));
+    file_delete(file_create_path($dir .'/'. $language->language .'_'. $language->javascript .'.js', TRUE));
     $language->javascript = '';
     $status = 'deleted';
   }
@@ -2198,7 +2198,7 @@
 
     // Save the file.
     $dest = $dir .'/'. $language->language .'_'. $data_hash .'.js';
-    if (file_save_data($data, $dest)) {
+    if (file_save_data($data, $dest, FILE_EXISTS_REPLACE, TRUE)) {
       $language->javascript = $data_hash;
       $status = ($status == 'deleted') ? 'updated' : 'created';
     }
diff --git a/modules/color/color.module b/modules/color/color.module
--- ./modules/color/color.module
+++ ./modules/color/color.module
@@ -32,22 +32,16 @@
 function color_form_alter(&$form, $form_state, $form_id) {
   // Insert the color changer into the theme settings page.
   if ($form_id == 'system_theme_settings' && color_get_info(arg(4)) && function_exists('gd_info')) {
-    if (variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC) != FILE_DOWNLOADS_PUBLIC) {
-      // Disables the color changer when the private download method is used.
-      // TODO: This should be solved in a different way. See issue #181003.
-      drupal_set_message(t('The color picker only works if the <a href="@url">download method</a> is set to public.', array('@url' => url('admin/settings/file-system'))), 'warning');
-    }
-    else {
-      $form['color'] = array(
-        '#type' => 'fieldset',
-        '#title' => t('Color scheme'),
-        '#weight' => -1,
-        '#attributes' => array('id' => 'color_scheme_form'),
-        '#theme' => 'color_scheme_form',
-      );
-      $form['color'] += color_scheme_form($form_state, arg(4));
-      $form['#submit'][] = 'color_scheme_form_submit';
-    }
+    // same old code, but without taking care of download method
+    $form['color'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Color scheme'),
+      '#weight' => -1,
+      '#attributes' => array('id' => 'color_scheme_form'),
+      '#theme' => 'color_scheme_form',
+    );
+    $form['color'] += color_scheme_form($form_state, arg(4));
+    $form['#submit'][] = 'color_scheme_form_submit';
   }
 
   // Use the generated screenshot in the theme list.
@@ -294,7 +288,7 @@
 
   // Prepare target locations for generated files.
   $id = $theme .'-'. substr(md5(serialize($palette) . microtime()), 0, 8);
-  $paths['color'] = file_directory_path() .'/color';
+  $paths['color'] = file_directory_path(TRUE) .'/color';
   $paths['target'] = $paths['color'] .'/'. $id;
   foreach ($paths as $path) {
     file_check_directory($path, FILE_CREATE_DIRECTORY);
@@ -312,7 +306,7 @@
   foreach ($info['copy'] as $file) {
     $base = basename($file);
     $source = $paths['source'] . $file;
-    file_copy($source, $paths['target'] . $base);
+    file_copy($source, $paths['target'] . $base, FILE_EXISTS_REPLACE, TRUE);
     $paths['map'][$file] = $base;
     $paths['files'][] = $paths['target'] . $base;
   }
@@ -442,7 +436,7 @@
 function _color_save_stylesheet($file, $style, &$paths) {
 
   // Write new stylesheet.
-  file_save_data($style, $file, FILE_EXISTS_REPLACE);
+  file_save_data($style, $file, FILE_EXISTS_REPLACE, TRUE);
   $paths['files'][] = $file;
 
   // Set standard file permissions for webserver-generated files.
diff --git a/modules/locale/locale.module b/modules/locale/locale.module
--- ./modules/locale/locale.module
+++ ./modules/locale/locale.module
@@ -487,7 +487,7 @@
 function locale_update_js_files() {
   global $language;
 
-  $dir = file_create_path(variable_get('locale_js_directory', 'languages'));
+  $dir = file_create_path(variable_get('locale_js_directory', 'languages'), TRUE);
   $parsed = variable_get('javascript_parsed', array());
 
   // The first three parameters are NULL in order to get an array with all
diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc
--- ./modules/system/system.admin.inc
+++ ./modules/system/system.admin.inc
@@ -1312,6 +1312,6 @@
   $form['bandwidth_optimizations'] = array(
     '#type' => 'fieldset',
     '#title' => t('Bandwidth optimizations'),
-    '#description' => t('<p>Drupal can automatically optimize external resources like CSS and JavaScript, which can reduce both the size and number of requests made to your website. CSS files can be aggregated and compressed into a single file, while JavaScript files are aggregated (but not compressed). These optional optimizations may reduce server load, bandwidth requirements, and page loading times.</p><p>These options are disabled if you have not set up your files directory, or if your download method is set to private.</p>')
+    '#description' => t('<p>Drupal can automatically optimize external resources like CSS and JavaScript, which can reduce both the size and number of requests made to your website. CSS files can be aggregated and compressed into a single file, while JavaScript files are aggregated (but not compressed). These optional optimizations may reduce server load, bandwidth requirements, and page loading times.</p><p>These options are disabled if you have not set up your files directory, or if your download method is set to private and directory %public_misc does not exists or isn\'t writable.</p>', array('%public_misc' => variable_get('file_directory_path:public_misc', 'misc/dynamic')))
   );
 
@@ -1316,7 +1316,7 @@
   );
 
-  $directory = file_directory_path();
-  $is_writable = is_dir($directory) && is_writable($directory) && (variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC) == FILE_DOWNLOADS_PUBLIC);
+  $directory = file_directory_path(0, TRUE);
+  $is_writable = is_dir($directory) && is_writable($directory);
   $form['bandwidth_optimizations']['preprocess_css'] = array(
     '#type' => 'radios',
     '#title' => t('Optimize CSS files'),
