diff --git a/addressfield.module b/addressfield.module
index 660c419..3cde43c 100644
--- a/addressfield.module
+++ b/addressfield.module
@@ -340,7 +340,7 @@ function addressfield_default_values($available_countries = NULL) {
     'thoroughfare' => '',
     'premise' => '',
     'sub_premise' => '',
-    'data' => '',
+    'data' => array(),
   );
 }
 
@@ -353,6 +353,22 @@ function addressfield_field_is_empty($item, $field) {
   return empty($item['country']);
 }
 
+function addressfield_field_presave($entity_type, $entity, $field, $instance, $langcode, &$items) {
+  foreach($items as &$item) {
+    if(isset($item['data'])) {
+      $item['data'] = serialize($item['data']);
+    }
+  }
+}
+
+function addressfield_field_load($entity_type, $entities, $field, $instances, $langcode, &$items, $age) {
+  foreach(array_keys($entities) as $entity_id) {
+    foreach($items[$entity_id] as &$item) {
+      $item['data'] = unserialize($item['data']);
+    }
+  }
+}
+
 /**
  * Implements hook_field_widget_info()
  */
