diff --git a/modules/field/field.attach.inc b/modules/field/field.attach.inc
index 2419201..74ee614 100644
--- a/modules/field/field.attach.inc
+++ b/modules/field/field.attach.inc
@@ -1309,12 +1309,9 @@ function field_attach_rename_bundle($entity_type, $bundle_old, $bundle_new) {
   field_cache_clear();
 
   // Update bundle settings.
-  $settings = variable_get('field_bundle_settings', array());
-  if (isset($settings[$entity_type][$bundle_old])) {
-    $settings[$entity_type][$bundle_new] = $settings[$entity_type][$bundle_old];
-    unset($settings[$entity_type][$bundle_old]);
-    variable_set('field_bundle_settings', $settings);
-  }
+  $settings = variable_get('field_bundle_settings:' . $entity_type . ':' . $bundle_old, array());
+  variable_set('field_bundle_settings:' . $entity_type . ':' . $bundle_new, $settings);
+  variable_del('field_bundle_settings:' . $entity_type . ':' . $bundle_old);
 
   // Let other modules act on renaming the bundle.
   module_invoke_all('field_attach_rename_bundle', $entity_type, $bundle_old, $bundle_new);
@@ -1348,11 +1345,7 @@ function field_attach_delete_bundle($entity_type, $bundle) {
   field_cache_clear();
 
   // Clear bundle display settings.
-  $settings = variable_get('field_bundle_settings', array());
-  if (isset($settings[$entity_type][$bundle])) {
-    unset($settings[$entity_type][$bundle]);
-    variable_set('field_bundle_settings', $settings);
-  }
+  variable_del('field_bundle_settings:' . $entity_type . ':' . $bundle);
 
   // Let other modules act on deleting the bundle.
   module_invoke_all('field_attach_delete_bundle', $entity_type, $bundle, $instances);
diff --git a/modules/field/field.install b/modules/field/field.install
index d56eb90..0f1cee1 100644
--- a/modules/field/field.install
+++ b/modules/field/field.install
@@ -437,3 +437,18 @@ function field_update_7001() {
 /**
  * @} End of "addtogroup updates-6.x-to-7.x"
  */
+
+/**
+ * Split the all-inclusive field_bundle_settings variable per bundle.
+ */
+function field_update_7000() {
+  $settings = variable_get('field_bundle_settings', array());
+  if ($settings) {
+    foreach ($settings as $entity_type => $entity_type_settings) {
+      foreach ($entity_type_settings as $bundle => $bundle_settings) {
+        variable_set('field_bundle_settings:' . $entity_type . ':' . $bundle, $bundle_settings);
+      }
+    }
+    variable_del('field_bundle_settings');
+  }
+}
\ No newline at end of file
diff --git a/modules/field/field.module b/modules/field/field.module
index 1b52577..00f30fd 100644
--- a/modules/field/field.module
+++ b/modules/field/field.module
@@ -579,16 +579,12 @@ function _field_sort_items_value_helper($a, $b) {
  *   If no $settings are passed, the current settings are returned.
  */
 function field_bundle_settings($entity_type, $bundle, $settings = NULL) {
-  $stored_settings = variable_get('field_bundle_settings', array());
-
   if (isset($settings)) {
-    $stored_settings[$entity_type][$bundle] = $settings;
-
-    variable_set('field_bundle_settings', $stored_settings);
+    variable_set('field_bundle_settings:' . $entity_type . ':' . $bundle, $settings);
     field_info_cache_clear();
   }
   else {
-    $settings = isset($stored_settings[$entity_type][$bundle]) ? $stored_settings[$entity_type][$bundle] : array();
+    $settings = variable_get('field_bundle_settings:' . $entity_type . ':' . $bundle, array());
     $settings += array(
       'view_modes' => array(),
       'extra_fields' => array(),
