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;
+}
+
+
