diff --git a/modules/field/modules/list/list.module b/modules/field/modules/list/list.module
index 634c134..be8dfe3 100644
--- a/modules/field/modules/list/list.module
+++ b/modules/field/modules/list/list.module
@@ -183,6 +183,15 @@ function list_allowed_values_setting_validate($element, &$form_state) {
         form_error($element, t('Allowed values list: each key must be a string at most 255 characters long.'));
         break;
       }
+      // PHP is kind of stupid about typecasting. We've passed other validation
+      // so now make sure we have actual integer keys and not strings if this is
+      // an integer list. To do this we have to remove the old keys and replace
+      // them with specific typecast keys.
+      if ($field_type == 'list_integer') {
+        unset($values[$key]);
+        $key = (int) $key;
+        $values[$key] = $value;
+      }
     }
 
     // Prevent removing values currently in use.
