diff --git a/includes/form.inc b/includes/form.inc
index 3047930072296ffb9c79795a349940de19c38a09..e1826226228ef437d599c60adf4ad2e78644ef7a 100644
--- a/includes/form.inc
+++ b/includes/form.inc
@@ -851,7 +851,7 @@ function form_error(&$element, $message = '') {
  *   $_POST data.
  */
 function form_builder($form_id, $form, &$form_state) {
-  static $complete_form, $cache, $enctype;
+  static $complete_form, $cache, $file;
 
   // Initialize as unprocessed.
   $form['#processed'] = FALSE;
@@ -864,7 +864,6 @@ function form_builder($form_id, $form, &$form_state) {
 
   if (isset($form['#type']) && $form['#type'] == 'form') {
     $cache = NULL;
-    $enctype = NULL;
     $complete_form = $form;
     if (!empty($form['#programmed'])) {
       $form_state['submitted'] = TRUE;
@@ -938,12 +937,6 @@ function form_builder($form_id, $form, &$form_state) {
     unset($form_state['buttons']);
   }
 
-  // If an element requires to set the forms content type enctype attribute, we
-  // need to store this info in a static $enctype flag to update the parent
-  // form element. E.g. For files, non-ASCII data, and binary data.
-  if (isset($form['#enctype'])) {
-    $enctype = $form['#enctype'];
-  }
   // If some callback set #cache, we need to flip a static flag so later it
   // can be found.
   if (!empty($form['#cache'])) {
@@ -955,15 +948,14 @@ function form_builder($form_id, $form, &$form_state) {
     $file = TRUE;
   }
   if (isset($form['#type']) && $form['#type'] == 'form') {
-    // Set the form encoding if required.
-    if (isset($enctype)) {
-      $form['#attributes']['enctype'] = $enctype;
-    }
-    
     // We are on the top form, we can copy back #cache if it's set.
     if (isset($cache)) {
       $form['#cache'] = TRUE;
     }
+    // If there is a file element, we set the form encoding.
+    if (isset($file)) {
+      $form['#attributes']['enctype'] = 'multipart/form-data';
+    }
   }
   return $form;
 }
diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc
index febfcde06c943498ec2f074a2a57d5f1222dede7..970c0488a96f04eec05731d98954fac102b5f420 100644
--- a/modules/system/system.admin.inc
+++ b/modules/system/system.admin.inc
@@ -517,6 +517,7 @@ function system_theme_settings(&$form_state, $key = '') {
       }
     }
   }
+  $form['#attributes'] = array('enctype' => 'multipart/form-data');
 
   $form = system_settings_form($form);
   // We don't want to call system_settings_form_submit(), so change #submit.
diff --git a/modules/system/system.module b/modules/system/system.module
index e2e243cff0e341b63bd465642cfd45046d94b3c2..151c26979ec8bf8468b386c0e8f893d73a78e7d8 100644
--- a/modules/system/system.module
+++ b/modules/system/system.module
@@ -341,7 +341,6 @@ function system_elements() {
   $type['file'] = array(
     '#input' => TRUE,
     '#size' => 60,
-    '#enctype' => 'multipart/form-data',
   );
 
 
diff --git a/modules/upload/upload.module b/modules/upload/upload.module
index 8dd3cb6d5a7f983da51dc8af96264a009a0e3ea5..8f223ad1a3ca93fbb0121583042ddc95bea060b6 100644
--- a/modules/upload/upload.module
+++ b/modules/upload/upload.module
@@ -258,6 +258,7 @@ function upload_form_alter(&$form, $form_state, $form_id) {
       }
       else {
         $form['attachments']['wrapper'] += _upload_form($node);
+        $form['#attributes']['enctype'] = 'multipart/form-data';
       }
     }
     $form['#submit'][] = 'upload_node_form_submit';
diff --git a/modules/user/user.pages.inc b/modules/user/user.pages.inc
index 9d01f3c5acd390d0ffb42e62eb827fe6c56ccae2..ada98b6fbc58e40660d71e1891a04bb39f1e1055 100644
--- a/modules/user/user.pages.inc
+++ b/modules/user/user.pages.inc
@@ -246,6 +246,7 @@ function user_profile_form($form_state, $account, $category = 'account') {
       '#submit' => array('user_edit_delete_submit'),
     );
   }
+  $form['#attributes']['enctype'] = 'multipart/form-data';
 
   return $form;
 }