diff --git a/ecrire/action/iconifier.php b/ecrire/action/iconifier.php
index e2ee51dab6df69447352c6574526bf3192a2a3eb..282852d9130de36f726402d880442ccf967dfbe4 100644
--- a/ecrire/action/iconifier.php
+++ b/ecrire/action/iconifier.php
@@ -54,7 +54,7 @@ function action_spip_image_effacer_dist($arg) {
 function action_spip_image_ajouter_dist($arg,$sousaction2,$source) {
 	global $formats_logos;
 
-	include_spip('inc/getdocument');
+	include_spip('inc/documents');
 	if (!$sousaction2) {
 		if (!$_FILES) $_FILES = $GLOBALS['HTTP_POST_FILES'];
 		$source = (is_array($_FILES) ? array_pop($_FILES) : "");
diff --git a/ecrire/base/dump.php b/ecrire/base/dump.php
index 07d5e7441292a31b876e68d452cca8b3cabc6fa3..fac39ddae9de25d756fcdac6aa27bddf30470ded 100644
--- a/ecrire/base/dump.php
+++ b/ecrire/base/dump.php
@@ -10,6 +10,13 @@
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
+/**
+ *
+ * Fonctions de base pour la sauvegarde
+ * Boite a outil commune, sans prejuger de la methode de sauvegarde
+ *
+ */
+
 if (!defined('_ECRIRE_INC_VERSION')) return;
 
 define('_VERSION_ARCHIVE', '1.3');
@@ -34,6 +41,7 @@ function base_dump_meta_name($rub){
 	return $meta = "status_dump_$rub_"  . $GLOBALS['visiteur_session']['id_auteur'];
 }
 function base_dump_dir($meta){
+	include_spip('inc/documents');
 	// determine upload va aussi initialiser l'index "restreint"
 	$maindir = determine_upload();
 	if (!$GLOBALS['visiteur_session']['restreint'])
diff --git a/ecrire/inc/actions.php b/ecrire/inc/actions.php
index c15a9547ad02a5880fb2eb11952fed16f23aea6e..4b4c2aaf1abd09b8e94ac935d3b61017222d6674 100644
--- a/ecrire/inc/actions.php
+++ b/ecrire/inc/actions.php
@@ -216,22 +216,4 @@ function ajax_retour($corps,$xml = true)
 	echo $debut, $corps, $fin, $e;
 }
 
-// http://doc.spip.org/@determine_upload
-function determine_upload($type='') {
-
-	if (!autoriser('chargerftp')
-	OR $type == 'logos') # on ne le permet pas pour les logos
-		return false;
-
-	$repertoire = _DIR_TRANSFERT;
-	if (!@is_dir($repertoire)) {
-		$repertoire = str_replace(_DIR_TMP, '', $repertoire);
-		$repertoire = sous_repertoire(_DIR_TMP, $repertoire);
-	}
-
-	if (!$GLOBALS['visiteur_session']['restreint'])
-		return $repertoire;
-	else
-		return sous_repertoire($repertoire, $GLOBALS['visiteur_session']['login']);
-}
 ?>
diff --git a/ecrire/inc/documents.php b/ecrire/inc/documents.php
index f9da217935b030bce4905896bc8e0368b0d8924d..5ee56450ad09e8e6fd421da7b83fcc772296ad02 100644
--- a/ecrire/inc/documents.php
+++ b/ecrire/inc/documents.php
@@ -134,6 +134,32 @@ function copier_document($ext, $orig, $source) {
 	return deplacer_fichier_upload($source, $newFile);
 }
 
+/**
+ * Trouver le dossier utilise pour upload un fichier
+ *
+ * http://doc.spip.org/@determine_upload
+ *
+ * @param string $type
+ * @return bool|string
+ */
+function determine_upload($type='') {
+
+	if (!autoriser('chargerftp')
+	OR $type == 'logos') # on ne le permet pas pour les logos
+		return false;
+
+	$repertoire = _DIR_TRANSFERT;
+	if (!@is_dir($repertoire)) {
+		$repertoire = str_replace(_DIR_TMP, '', $repertoire);
+		$repertoire = sous_repertoire(_DIR_TMP, $repertoire);
+	}
+
+	if (!$GLOBALS['visiteur_session']['restreint'])
+		return $repertoire;
+	else
+		return sous_repertoire($repertoire, $GLOBALS['visiteur_session']['login']);
+}
+
 /**
  * Deplacer ou copier un fichier
  *
@@ -170,4 +196,53 @@ function deplacer_fichier_upload($source, $dest, $move=false) {
 }
 
 
+// Erreurs d'upload
+// renvoie false si pas d'erreur
+// et true si erreur = pas de fichier
+// pour les autres erreurs affiche le message d'erreur et meurt
+// http://doc.spip.org/@check_upload_error
+function check_upload_error($error, $msg='') {
+	global $spip_lang_right;
+
+	if (!$error) return false;
+
+	spip_log("Erreur upload $error -- cf. http://php.net/manual/fr/features.file-upload.errors.php");
+
+	switch ($error) {
+
+		case 4: /* UPLOAD_ERR_NO_FILE */
+			return true;
+
+		# on peut affiner les differents messages d'erreur
+		case 1: /* UPLOAD_ERR_INI_SIZE */
+			$msg = _T('upload_limit',
+			array('max' => ini_get('upload_max_filesize')));
+			break;
+		case 2: /* UPLOAD_ERR_FORM_SIZE */
+			$msg = _T('upload_limit',
+			array('max' => ini_get('upload_max_filesize')));
+			break;
+		case 3: /* UPLOAD_ERR_PARTIAL  */
+			$msg = _T('upload_limit',
+			array('max' => ini_get('upload_max_filesize')));
+			break;
+
+		default: /* autre */
+			if (!$msg)
+			$msg = _T('pass_erreur').' '. $error
+			. '<br />' . propre("[->http://php.net/manual/fr/features.file-upload.errors.php]");
+			break;
+	}
+
+	spip_log ("erreur upload $error");
+
+  	if(_request("iframe")=="iframe") {
+	  echo "<div class='upload_answer upload_error'>$msg</div>";
+	  exit;
+	}
+
+	echo minipres($msg,
+		      "<div style='text-align: $spip_lang_right'><a href='"  . rawurldecode($GLOBALS['redirect']) . "'><button type='button'>" . _T('ecrire:bouton_suivant') . "</button></a></div>");
+	exit;
+}
 ?>