diff --git a/i18n_field/i18n_field.module b/i18n_field/i18n_field.module
index 63edf3b..4648a92 100644
--- a/i18n_field/i18n_field.module
+++ b/i18n_field/i18n_field.module
@@ -395,3 +395,124 @@ function i18n_field_type_info($type = NULL, $property = NULL) {
     return $info;
   }
 }
+
+
+/**
+* Implements hook_form_alter()
+*/
+function i18n_field_form_alter(&$form, $form_state, $form_id) {
+  $node_type = NULL;
+
+  //   Add a button to export fields po files per modules instead of one big file
+  if ($form_id === 'locale_translate_export_po_form' || $form_id === 'locale_translate_export_pot_form'){
+  
+    if ($form_id === 'locale_translate_export_po_form'){
+      $form['group']['#options']['field_per_module'] = t('Fields per content types');
+    }
+
+  $form['#submit'] = array('i18n_field_locale_translate_export_po_form_submit');
+    return $form;
+  }
+}
+
+function i18n_field_locale_translate_export_po_form_submit($form, &$form_state){
+  module_load_include('inc', 'locale.admin');
+
+  if ($form_state['values']['group'] === 'field_per_module'){
+    // If template is required, language code is not given.
+    $language = NULL;
+    if (isset($form_state['values']['langcode'])) {
+      $languages = language_list();
+      $language = $languages[$form_state['values']['langcode']];
+    }
+    $bundles = _i18n_field_locale_export_get_strings($language, 'field');
+
+    $zip = new ZipArchive();
+    $filename = file_directory_temp() . '/fields_per_contenttypes.zip';
+
+        $status = $zip->open($filename, ZipArchive::OVERWRITE);
+    if($status !== true) {
+      drupal_set_message("Cannot create file ".$filename. " (error: ".$status.")", "error");
+    }
+    else{
+      foreach($bundles as $bundle => $strings){
+        $output = i18n_field_locale_export_po($bundle, $language, _locale_export_po_generate($language, $bundles[$bundle]));
+        $zip->addFromString($bundle . '.po', $output);
+      }
+      $zip->close();
+      drupal_set_message("Fields per content type file has been successfully created in: ".$filename);
+    }
+  }
+  else{
+    locale_translate_export_po_form_submit($form, $form_state);
+  }
+}
+
+function i18n_field_locale_export_po($bundle, $language = NULL, $output = NULL) {
+  // Log the export event.
+  if (isset($language)) {
+    $filename = $bundle . '.po';
+    watchdog('locale', 'Exported %locale translation file: %filename.', array('%locale' => $language->name, '%filename' => $filename));
+  }
+
+  return $output;
+}
+
+/**
+* Copy of the function in locale.admin.inc but returns an array of string by module
+*
+* @return an associative array of strings per modules
+*
+*/
+function _i18n_field_locale_export_get_strings($language = NULL, $group = 'field') {
+  if (isset($language)) {
+    $result = db_query("SELECT s.lid, s.source, s.context, s.location, t.translation, t.plid, t.plural FROM {locales_source} s LEFT JOIN {locales_target} t ON s.lid = t.lid AND t.language = :language WHERE s.textgroup = :textgroup ORDER BY t.plid, t.plural", array(':language' => $language->language, ':textgroup' => $group));
+  }
+  else {
+    $result = db_query("SELECT s.lid, s.source, s.context, s.location, t.plid, t.plural FROM {locales_source} s LEFT JOIN {locales_target} t ON s.lid = t.lid WHERE s.textgroup = :textgroup ORDER BY t.plid, t.plural", array(':textgroup' => $group));
+  }
+
+  $bundle_by_fields = array();
+  $strings = array();
+  $pendings = array(); // associative array of field name by $string
+  foreach ($result as $child) {
+    $string[''] = array(
+      'comment'     => $child->location,
+      'source'      => $child->source,
+      'context'     => $child->context,
+      'translation' => isset($child->translation) ? $child->translation : '',
+    );
+    if ($child->plid) {
+      $string['child'] = TRUE;
+      $strings[$child->plid]['plural'] = $child->lid;
+    }
+     
+    if (!empty($child->context)){
+      // when translating values from lists, the second term starts with a '#'.
+      // We should put it aside and treat if afterward because we'll know where its field belongs
+      $bundle = explode(":", $child->context);
+      if ($bundle[1][0] == '#'){
+        $string['lid'] = $child->lid;
+        $pendings[$child->context] = $string;
+      }
+      else{
+        $strings[$bundle[1]][$child->lid] = $string[''];
+        $bundle_by_fields[$bundle[0]] = $bundle[1];
+      }
+    }
+    else{
+      // Context is empty when translating strings from features (we take the name of the module)
+      $bundle = explode(".", $child->location);
+      $strings[$bundle[0]][$child->lid] = $string;
+    }
+  }
+
+  // classify the pending items
+  foreach($pendings as $field => $pending){
+    $bundle = explode(":", $field);
+    $strings[$bundle_by_fields[$bundle[0]]][$pending['lid']] = $pending[''];
+  }
+  return $strings;
+}
+
+
