diff --git a/ecrire/exec/export_all.php b/ecrire/exec/export_all.php
index 9a05e2bc3e966b223e1ce5a7510f1db5bc75b1e8..a6f43b19137c1dd57954a0e4cc2a44d8fe53aee5 100644
--- a/ecrire/exec/export_all.php
+++ b/ecrire/exec/export_all.php
@@ -142,8 +142,6 @@ function exec_export_all_dist()
 	echo "<div style='text-align: left'>\n";
 	$etape = 1;
 	foreach($tables_for_dump as $table){
-
-		$liens = $tables_for_link[$table];
 		if ($etape_actuelle <= $etape) {
 		  $r = spip_query("SELECT COUNT(*) FROM $table");
 		  $r = spip_fetch_array($r, SPIP_NUM);
@@ -151,14 +149,13 @@ function exec_export_all_dist()
 		  echo "\n<br /><strong>",$etape, '. ', $table,"</strong> ";
 		  if (!$r) echo _T('texte_vide');
 		  else {
-		    $cpt = export_objets($table, $liens, $etape, $sous_etape,$dir, $archive, $gz, $r);
-			$filetable = $dir . $archive . '_' . $etape;
-			ramasse_parties($dir . $archive . ".$etape", $filetable, $cpt);
+		    $liens = $tables_for_link[$table];
+		    export_objets($table, $liens, $etape, $sous_etape,$dir, $archive, $gz, $r);
 		  }
+		  if ($GLOBALS['flag_ob_flush']) ob_flush();
+		  flush();
 		  $etape++;
 		  $sous_etape = 0;
-		  $status_dump = "$gz::$archive::" . $etape . "::0";
-		  ecrire_meta("status_dump", $status_dump,'non');
 		}
 	}
 	echo "</div>\n";
diff --git a/ecrire/inc/export.php b/ecrire/inc/export.php
index c07a7e243cdbd8856926c4e348e0884b7f1c3803..a7ded7c4516d3fddcbecad2dd22c931382c40f63 100644
--- a/ecrire/inc/export.php
+++ b/ecrire/inc/export.php
@@ -61,8 +61,9 @@ define('_EXPORT_TRANCHES_LIMITE', 400);
 // La constante ci-dessus determine la taille des tranches,
 // chaque tranche etant copiee immediatement dans un fichier 
 // et son numero memorisee dans le serveur SQL.
-// En cas d'abandon sur Time-out, le travail pourra ainsi avancer
-// charge a l'appelant de coller tous les morceaux de 1 a N
+// En cas d'abandon sur Time-out, le travail pourra ainsi avancer.
+// Au final, on regroupe les tranches en un seul fichier
+// et on memorise dans le serveur qu'on va passer a la table suivante.
 
 // http://doc.spip.org/@export_objets
 function export_objets($table, $liens, $etape, $cpt, $dir, $archive, $gz, $total) {
@@ -73,9 +74,6 @@ function export_objets($table, $liens, $etape, $cpt, $dir, $archive, $gz, $total
 
 	while (1){ // on ne connait pas le nb de paquets d'avance
 
-		if ($GLOBALS['flag_ob_flush']) ob_flush();
-		flush();
-
 		$string = build_while($debut, $table);
 		// attention $string vide ne suffit pas a sortir
 		// car les admins restreints peuvent parcourir
@@ -95,9 +93,14 @@ function export_objets($table, $liens, $etape, $cpt, $dir, $archive, $gz, $total
 	// a la relecture on en profitera pour mettre le cache a jour
 		$status_dump = "$gz::$archive::$etape::$cpt";
 		ecrire_meta("status_dump", $status_dump,'non');
+
 	}
 	echo " $total."; 
-	return $cpt;
+	$filetable = $dir . $archive . '_' . $etape;
+	ramasse_parties($dir . $archive . ".$etape", $filetable, $cpt);
+	$status_dump = "$gz::$archive::" . ($etape+1) . "::0";
+	ecrire_meta("status_dump", $status_dump,'non');
+
 }
 
 // Construit la version xml  des champs d'une table
@@ -109,27 +112,16 @@ function build_while($debut, $table) {
 	static $table_fields=array();
 
 	$result = spip_query("SELECT * FROM $table LIMIT $debut," . _EXPORT_TRANCHES_LIMITE);
-	// Recuperer les noms des champs
-	// Ces infos sont donnees par le abstract_showtable
-	// les instructions natives mysql ne devraient pas apparaitre ici
-	if (!isset($table_fields[$table])){
-		$nfields = mysql_num_fields($result);
-		for ($i = 0; $i < $nfields; ++$i)
-		  $table_fields[$table][$i] = mysql_field_name($result, $i);
-	} else	$nfields = count($table_fields[$table]);
 
 	$string = '';
-
-	$all = $connect_toutes_rubriques
-	  ||(!in_array('id_rubrique',$table_fields[$table]));
-
 	while ($row = spip_fetch_array($result,SPIP_ASSOC)) {
 		if ((!isset($row['impt']) OR $row['impt']=='oui')
-		AND ($all OR autoriser('publierdans','rubrique',$row['id_rubrique']))) {
+		AND ($connect_toutes_rubriques
+		     OR !isset($row['id_rubrique'])
+		     OR autoriser('publierdans','rubrique',$row['id_rubrique']))) {
 			$attributs = "";
 			$string .= "<$table$attributs>\n";
-			for ($i = 0; $i < $nfields; ++$i) {
-				$k = $table_fields[$table][$i];
+			foreach ($row as $k => $v) {
 				$string .= "<$k>" . text_to_xml($row[$k]) . "</$k>\n";
 			}
 			$string .= "</$table>\n\n";