diff --git a/classes/export/generate_csv.php b/classes/export/generate_csv.php
new file mode 100644
index 0000000..8435970
--- /dev/null
+++ b/classes/export/generate_csv.php
@@ -0,0 +1,55 @@
+<?php
+/*******************************************************************************
+ * Copyright (c) 2009 Intalio, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Antoine Toulme, Intalio Inc. bug 260493: Provide a CSV export and import script
+*******************************************************************************/
+
+error_reporting(E_ALL);
+ini_set('display_errors', '1');
+// This script exports all the translations for each language as a CSV file.
+
+ob_start();
+ini_set("memory_limit", "256M");
+define("BABEL_BASE_DIR", "../../");
+require(BABEL_BASE_DIR . "html/common_functions.php");
+require(BABEL_BASE_DIR . "classes/system/dbconnection.class.php");
+require(BABEL_BASE_DIR . "classes/system/feature.class.php");
+$dbc = new DBConnection();
+$dbh = $dbc->connect();
+
+$work_dir = "/tmp/babel-working/";
+
+$work_context_dir = $work_dir . $context . "_csv/";
+$tmp_dir = $work_context_dir . "tmp/";
+$output_dir = $work_context_dir . "output/";
+
+exec("rm -rf $tmp_dir");
+exec("mkdir -p $tmp_dir");
+exec("mkdir -p $output_dir");
+
+//iterate over all the release trains
+foreach(ReleaseTrain::all() as $train) {
+	// create a dedicated folder for each of them
+	exec("mkdir -p $work_context_dir/$train->id");
+	// create the output folder for temporary artifacts
+	$output_dir_for_train = "$output_dir/$train->id/";
+	exec("mkdir -p $output_dir_for_train");
+	// iterate over each language
+	foreach(Language::all() as $lang) {
+		// create a new feature object
+		$feature = new Feature($lang, $train, $tmp_dir, $output_dir_for_train);
+		// make it generate itself
+		$feature->generateAsCSV();
+		// now zip it directly
+		$featureZip = $feature->zipAsCSV("$work_context_dir/$train->id");
+		// output the creation of the feature notification
+		echo "Feature created here: $featureZip\n";
+	}
+	break;
+}
\ No newline at end of file
diff --git a/classes/export/import_from_csv.php b/classes/export/import_from_csv.php
new file mode 100644
index 0000000..032bbd8
--- /dev/null
+++ b/classes/export/import_from_csv.php
@@ -0,0 +1,109 @@
+<?php
+/*******************************************************************************
+ * Copyright (c) 2009 Intalio, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Antoine Toulme, Intalio Inc. bug 260493: Provide a CSV export and import script
+*******************************************************************************/
+
+if ($argc != 4) {
+	$help = <<<HELP
+Copyright (c) 2009 Intalio, Inc.
+Usage: import_from_csv.php language release_train csv_file
+
+  language: the code of the language to use. See the languages supported by Babel.
+
+  release_train: a release train name.
+
+  csv_file: the path to the csv_file. The path should either be relative to the php file or absolute.
+            The CSV file should be comma separated. It should have this structure: "translation_key", "translation_english_value", "translation_value"
+
+  Example:
+    import_from_csv.php fr_CA europa some_translations_fr.csv
+
+  Authors:
+    This script was written by the Babel project. Please see http://www.eclipse.org/babel for more information.
+
+
+HELP;
+    echo $help;
+	exit;
+}
+
+error_reporting(E_ALL); ini_set("display_errors", true);
+
+ob_start();
+ini_set("memory_limit", "256M");
+define("BABEL_BASE_DIR", "../../");
+require_once(BABEL_BASE_DIR . 'html/eclipse.org-common/system/app.class.php');
+require_once(BABEL_BASE_DIR . "html/common_functions.php");
+require_once(BABEL_BASE_DIR . "classes/system/dbconnection.class.php");
+require_once(BABEL_BASE_DIR . "classes/system/feature.class.php");
+require_once(BABEL_BASE_DIR . "classes/system/user.class.php");
+$App 	= new App();
+$dbc = new DBConnection();
+$dbh = $dbc->connect();
+
+//translations coming from a CSV file are considered to come from professional translators that tested their work in context, and/or in relation with the developers
+// change the variable below if you have doubts on the translation quality.
+$fuzzy = 0;
+
+//user that will be running the translations.
+$USER = getGenieUser()->userid;
+
+$language = $argv[1];
+$release_train_id = $argv[2];
+$csv_file = $argv[3];
+
+$sql = "select language_id from languages where iso_code = '" . addslashes($language) ."'";
+$lrow = mysql_fetch_assoc(mysql_query($sql));
+if (!$lrow) {
+	echo "This language code is not supported by Babel. Please see the Babel documentation for more information";
+	exit;
+}
+$language_id = $lrow['language_id'];
+
+
+$handle = fopen($csv_file, "r");
+while (($data = fgetcsv($handle)) !== FALSE) {
+	$sql = <<<SQL
+SELECT s.string_id FROM files AS f INNER JOIN strings AS s ON f.file_id = s.file_id INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version) WHERE f.is_active AND s.non_translatable <> 1 AND s.name = '$data[0]' AND BINARY s.value = '$data[1]' AND v.train_id = '$release_train_id'
+
+SQL;
+    $values = mysql_query($sql);
+    $value_row = mysql_fetch_assoc($values);
+    if (!$value_row) {
+	    echo "Could not find the matching record for $data[0] with a value of $data[1]";
+	    continue;
+    }
+    $string_id = $value_row['string_id'];
+    
+    $sql = "select possibly_incorrect from translations where string_id = $string_id and language_id = $language_id";
+    $tr_row = mysql_fetch_assoc(mysql_query($sql));
+    if ($tr_row) {
+	    if ($fuzzy == 1) {
+		    if ($tr_row['possibly_incorrect'] == 1) {
+			    // replacing a fuzzy translation by a new fuzzy translation. Well.
+		    } else {
+			    //replacing a non-fuzzy translation by a fuzzy translation: no, thank you
+			    echo "The entry " . $data[0] . " is already translated in a non-fuzzy way. Aborting";
+			    continue;
+		    }
+	    } else {
+		    // we are not fuzzy, for now let's assume it's ok to override non-fuzzy translations when yours aren't either.
+	    }
+	    $query = "UPDATE translations set is_active = 0 where string_id = " . $string_id . " and language_id = '" . $language_id . "'";
+	    mysql_query($query);
+    }
+    $query = "INSERT INTO translations(string_id, language_id, value, userid, created_on, possibly_incorrect) values('". addslashes($string_id) ."','".  addslashes($language_id) ."','" . addslashes($data[2]) . "', '". addslashes($USER) ."', NOW(), $fuzzy)";
+    mysql_query($query);
+    echo "Added translation \"$data[2]\" for entry '$data[0]'\n";
+}
+fclose($handle);
+echo "\n\nDone.\n";
+
+?>
\ No newline at end of file
diff --git a/classes/system/feature.class.php b/classes/system/feature.class.php
index c415680..7970a7e 100644
--- a/classes/system/feature.class.php
+++ b/classes/system/feature.class.php
@@ -10,7 +10,7 @@
  *    Antoine Toulme, Intalio Inc. bug 248845: Refactoring generate1.php into different files with a functional approach
 *******************************************************************************/
 
-require(BABEL_BASE_DIR . "classes/system/fragment.class.php"); 
+require_once(BABEL_BASE_DIR . "classes/system/fragment.class.php"); 
 
 class Feature {
 	public $language;
@@ -73,6 +73,10 @@
 				}
 			}
 		}
+		
+		if (!isSet($pct)) {
+			return 0;
+		}
 		return $pct;
 	}
 	
@@ -101,14 +105,18 @@
 	/*
 	 * Cleans the $output_dir/eclipse/features/ and $output_dir/eclipse/plugins folders.
 	 */
-	function cleanupOutput($output_dir = null) {
+	function cleanupOutput($output_dir = null, $create_eclipse_structure = true) {
 		if (!$output_dir) {
 			$output_dir = $this->output_dir;
 		}
-		$instructions = array("rm -Rf $output_dir/eclipse/features/", 
-				"rm -Rf $output_dir/eclipse/plugins/",
-				"mkdir -p $output_dir/eclipse/features/",
-				"mkdir -p $output_dir/eclipse/plugins/");
+		if ($create_eclipse_structure) {
+			$instructions = array("rm -Rf $output_dir/eclipse/features/", 
+					"rm -Rf $output_dir/eclipse/plugins/",
+					"mkdir -p $output_dir/eclipse/features/",
+					"mkdir -p $output_dir/eclipse/plugins/");
+		} else {
+			$instructions = array("rm -Rf $output_dir/*");
+		}
 		foreach ($instructions as $cmd) {
 			$retval = system($cmd, $return_code);
 			if ($return_code != 0) {
@@ -244,4 +252,56 @@
 		}
 		return "$destination/$filename";
 	}
+	
+	// Following functions help dealing with CSV files.
+	
+	/**
+	 * Zips the feature as a zip to a destination folder.
+	 */
+	function zipAsCSV($destination, $output_dir = null) {
+		if (!$output_dir) {
+			$output_dir = $this->output_dir;
+		}
+		$filename = $this->filename() . ".zip";
+		$instructions = array(
+						"zip -r -q $filename $output_dir/* -d $output_dir/$filename",
+						"mkdir -p $destination", 
+						"cd $output_dir ; mv $filename $destination");
+		
+		foreach ($instructions as $cmd) {
+			$retval = system($cmd, $return_code);
+			if ($return_code != 0) {
+				echo "### ERROR during the execution of: $cmd";
+				echo "\n$return_code $retval";
+			}
+		}
+		return "$destination/$filename";
+	}
+	
+	function generateAsCSV() {
+		$this->cleanupOutput(null, false);
+		$filename = $this->filename() . ".csv";
+		$language = $this->language->id;
+		$train = $this->train->id;
+		$sql = <<<SQL
+			SELECT s.name, s.value, s.string_id
+			FROM files AS f
+			INNER JOIN strings AS s ON f.file_id = s.file_id
+			INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version)
+			WHERE f.is_active
+			AND s.non_translatable <> 1
+			AND v.train_id = '$train'
+SQL;
+		$result = mysql_query($sql);
+		$f = fopen("$this->output_dir/" . $this->filename() . ".csv", "w");
+		while (($row = mysql_fetch_assoc($result)) != null) {
+		    $value_row = mysql_fetch_assoc(mysql_query("SELECT value from translations where string_id = " . $row['string_id'] . " and language_id = " . $language));
+			$value = '';
+			if ($value_row != null) {
+				$value = $value_row['value'];
+            }
+            fputcsv($f, array($row['name'], $row['value'], $value));
+		}
+		fclose($f);
+	}
 }
\ No newline at end of file
